@acorex/platform 21.0.0-next.7 → 21.0.0-next.8

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.
Files changed (25) hide show
  1. package/auth/index.d.ts +228 -3
  2. package/fesm2022/acorex-platform-auth.mjs +162 -2
  3. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-common.mjs +1 -1
  5. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-layout-components.mjs +7 -7
  7. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-layout-entity.mjs +54 -23
  9. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-widgets.mjs +213 -80
  11. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  12. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs → acorex-platform-themes-default-entity-master-list-view.component-D3qZa5fM.mjs} +3 -3
  13. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-D3qZa5fM.mjs.map} +1 -1
  14. package/fesm2022/acorex-platform-themes-default.mjs +2 -2
  15. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-Dz0cylyQ.mjs} +8 -8
  16. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-Dz0cylyQ.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-themes-shared.mjs +1 -1
  18. package/fesm2022/acorex-platform-workflow.mjs +27 -21
  19. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  20. package/layout/components/index.d.ts +4 -3
  21. package/layout/entity/index.d.ts +7 -0
  22. package/layout/widgets/index.d.ts +12 -7
  23. package/package.json +5 -5
  24. package/workflow/index.d.ts +117 -469
  25. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-workflow.mjs","sources":["../tmp-esm2022/workflow/lib/errors.types.js","../tmp-esm2022/workflow/lib/workflow-event-dispatcher.service.js","../tmp-esm2022/workflow/lib/workflow-registery.service.js","../tmp-esm2022/workflow/lib/workflow.types.js","../tmp-esm2022/workflow/lib/actions/decide.action.js","../tmp-esm2022/workflow/lib/workflow.service.js","../tmp-esm2022/workflow/lib/actions/start-workflow.action.js","../tmp-esm2022/workflow/lib/engine/workflow-definition.config.js","../tmp-esm2022/workflow/lib/engine/workflow-instance.types.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.provider.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/frontend-task-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-local-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/index.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.service.js","../tmp-esm2022/workflow/lib/engine/index.js","../tmp-esm2022/workflow/lib/workflow.module.js","../tmp-esm2022/workflow/acorex-platform-workflow.js"],"sourcesContent":["export class AXPWorkflowError extends Error {\n constructor(message, inner = null) {\n super(message);\n this.inner = inner;\n this.name = 'AXPWorkflowError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2Vycm9ycy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN2QyxZQUFZLE9BQWUsRUFBUyxRQUFzQixJQUFJO1FBQzFELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURpQixVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGlubmVyOiBFcnJvciB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQV29ya2Zsb3dFcnJvcic7XG4gICAgfVxufSJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowEventService {\n constructor() {\n this.eventSubject = new Subject();\n }\n dispatch(event) {\n this.eventSubject.next(event);\n }\n get events$() {\n return this.eventSubject.asObservable();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93LWV2ZW50LWRpc3BhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTTNDLE1BQU0sT0FBTyx1QkFBdUI7SUFIcEM7UUFJVSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO0tBU3hEO0lBUEMsUUFBUSxDQUFDLEtBQXVCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQzsrR0FUVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFdmVudCB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dFdmVudFNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PEFYUFdvcmtmbG93RXZlbnQ+KCk7XG5cbiAgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBldmVudHMkKCk6IE9ic2VydmFibGU8QVhQV29ya2Zsb3dFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowRegistryService {\n constructor() {\n this.functionsMap = new Map();\n this.actionsMap = new Map();\n this.workflowsMap = new Map();\n }\n registerWorkflow(name, workflow) {\n this.workflowsMap.set(name, workflow);\n }\n getWorkflow(name) {\n return this.workflowsMap.get(name);\n }\n registerAction(name, action) {\n this.actionsMap.set(name, action);\n }\n getAction(name) {\n return this.actionsMap.get(name);\n }\n registerFunction(name, func) {\n this.functionsMap.set(name, func);\n }\n getFunction(name) {\n return this.functionsMap.get(name);\n }\n getFunctionNames() {\n return Array.from(this.functionsMap.keys());\n }\n getStep(workflowName, stepName) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n return steps[stepName];\n }\n return undefined;\n }\n updateStepInWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} does not exist in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addStepToWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (!steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} already exists in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addAfterStep(workflowId, stepId, newStepId, newStepAction, conditionExpression) {\n const step = this.getStep(workflowId, stepId);\n if (step != undefined) {\n this.addStepToWorkflow(workflowId, newStepId, {\n action: newStepAction,\n nextSteps: step.nextSteps,\n });\n this.updateStepInWorkflow(workflowId, stepId, {\n ...step,\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: conditionExpression }],\n nextStepId: newStepId,\n },\n ],\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlVLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDNUQsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBQ3hELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0E0RnZEO0lBMUZDLGdCQUFnQixDQUFDLElBQVksRUFBRSxRQUFxQjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBK0I7UUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsSUFBK0I7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBQUMsWUFBb0IsRUFBRSxRQUFnQjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQTJDLENBQUM7WUFDbkUsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxZQUFvQixFQUFFLFFBQWdCLEVBQUUsSUFBcUI7UUFDaEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUEyQyxDQUFDO1lBQ25FLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsK0JBQStCLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBb0IsRUFBRSxRQUFnQixFQUFFLElBQXFCO1FBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBMkMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsK0JBQStCLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUNWLFVBQWtCLEVBQ2xCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixhQUFxQixFQUNyQixtQkFBMkI7UUFFM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUU7Z0JBQzVDLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7Z0JBQzVDLEdBQUcsSUFBSTtnQkFDUCxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO3dCQUNqRSxVQUFVLEVBQUUsU0FBUztxQkFDdEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0E5RlUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiwgQVhQV29ya2Zsb3dTdGVwIH0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgZnVuY3Rpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4+KCk7XG4gIHByaXZhdGUgYWN0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPj4oKTtcbiAgcHJpdmF0ZSB3b3JrZmxvd3NNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3c+KCk7XG5cbiAgcmVnaXN0ZXJXb3JrZmxvdyhuYW1lOiBzdHJpbmcsIHdvcmtmbG93OiBBWFBXb3JrZmxvdyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dzTWFwLnNldChuYW1lLCB3b3JrZmxvdyk7XG4gIH1cblxuICBnZXRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dzTWFwLmdldChuYW1lKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQWN0aW9uKG5hbWU6IHN0cmluZywgYWN0aW9uOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uc01hcC5zZXQobmFtZSwgYWN0aW9uKTtcbiAgfVxuXG4gIGdldEFjdGlvbihuYW1lOiBzdHJpbmcpOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICByZWdpc3RlckZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZnVuYzogVHlwZTxBWFBXb3JrZmxvd0Z1bmN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuZnVuY3Rpb25zTWFwLnNldChuYW1lLCBmdW5jKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICBnZXRGdW5jdGlvbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZ1bmN0aW9uc01hcC5rZXlzKCkpO1xuICB9XG5cbiAgZ2V0U3RlcCh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93U3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIHJldHVybiBzdGVwc1tzdGVwTmFtZV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVTdGVwSW5Xb3JrZmxvdyh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZywgc3RlcDogQVhQV29ya2Zsb3dTdGVwKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIGlmIChzdGVwc1tzdGVwTmFtZV0pIHtcbiAgICAgICAgc3RlcHNbc3RlcE5hbWVdID0gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RlcCB3aXRoIG5hbWUgJHtzdGVwTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gd29ya2Zsb3cgJHt3b3JrZmxvd05hbWV9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IHdpdGggbmFtZSAke3dvcmtmbG93TmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RlcFRvV29ya2Zsb3cod29ya2Zsb3dOYW1lOiBzdHJpbmcsIHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXA6IEFYUFdvcmtmbG93U3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy53b3JrZmxvd3NNYXAuZ2V0KHdvcmtmbG93TmFtZSk7XG4gICAgaWYgKHdvcmtmbG93KSB7XG4gICAgICBjb25zdCBzdGVwcyA9IHdvcmtmbG93LnN0ZXBzIGFzIHsgW2tleTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gICAgICBpZiAoIXN0ZXBzW3N0ZXBOYW1lXSkge1xuICAgICAgICBzdGVwc1tzdGVwTmFtZV0gPSBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwIHdpdGggbmFtZSAke3N0ZXBOYW1lfSBhbHJlYWR5IGV4aXN0cyBpbiB3b3JrZmxvdyAke3dvcmtmbG93TmFtZX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgd2l0aCBuYW1lICR7d29ya2Zsb3dOYW1lfSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBZnRlclN0ZXAoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBBY3Rpb246IHN0cmluZyxcbiAgICBjb25kaXRpb25FeHByZXNzaW9uOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcCh3b3JrZmxvd0lkLCBzdGVwSWQpO1xuICAgIGlmIChzdGVwICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hZGRTdGVwVG9Xb3JrZmxvdyh3b3JrZmxvd0lkLCBuZXdTdGVwSWQsIHtcbiAgICAgICAgYWN0aW9uOiBuZXdTdGVwQWN0aW9uLFxuICAgICAgICBuZXh0U3RlcHM6IHN0ZXAubmV4dFN0ZXBzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU3RlcEluV29ya2Zsb3cod29ya2Zsb3dJZCwgc3RlcElkLCB7XG4gICAgICAgIC4uLnN0ZXAsXG4gICAgICAgIG5leHRTdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6ICdTSU5HTEUnLCBleHByZXNzaW9uOiBjb25kaXRpb25FeHByZXNzaW9uIH1dLFxuICAgICAgICAgICAgbmV4dFN0ZXBJZDogbmV3U3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { cloneDeep, get } from 'lodash-es';\nimport { setSmart } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowContext {\n constructor(initialData = {}) {\n this.variables = {};\n this.stepOutputs = new Map();\n this.variables = cloneDeep(initialData);\n }\n setVariable(key, value) {\n setSmart(this.variables, key, value);\n }\n setVariables(context = {}) {\n this.variables = { ...this.variables, ...context };\n }\n getVariable(key) {\n return !key ? this.variables : get(this.variables, key);\n }\n setOutput(key, output) {\n this.stepOutputs.set(key, output);\n }\n setOutputs(values) {\n this.stepOutputs = new Map([...this.stepOutputs, ...values]);\n }\n getOutput(key) {\n return this.stepOutputs.get(key);\n }\n}\nexport class AXPWorkflowAction {\n constructor() {\n this.eventService = inject(AXPWorkflowEventService);\n }\n dispatch(event) {\n this.eventService.dispatch(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction, decorators: [{\n type: Injectable\n }] });\nexport class AXPWorkflowFunction {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction, decorators: [{\n type: Injectable\n }] });\nexport function createWorkFlowEvent(type) {\n const eventCreator = (payload) => ({ type, payload });\n eventCreator.type = type;\n return eventCreator;\n}\nexport function ofType(...allowedTypes) {\n return filter((event) => allowedTypes.some((type) => event.type === type.type));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3cudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBUWpELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBWSxjQUFtQixFQUFFO1FBSXpCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUpoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0QsWUFBWSxDQUFDLFVBQWUsRUFBRTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBVSxHQUFtQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFXO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQVUsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXlCRCxNQUFNLE9BQWdCLGlCQUFpQjtJQUR2QztRQUVVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FPeEQ7SUFMVyxRQUFRLENBQUMsS0FBdUI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FMbUIsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRHRDLFVBQVU7O0FBWVgsTUFBTSxPQUFnQixtQkFBbUI7K0dBQW5CLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUR4QyxVQUFVOztBQVlYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxJQUFZO0lBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQTZCLEdBQUcsWUFBcUM7SUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHNldFNtYXJ0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvdyB7XG4gIHN0ZXBzOiB7IFtzdGVwTmFtZTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gIHN0YXJ0U3RlcElkOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93Q29udGV4dCB7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IGFueSA9IHt9KSB7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBjbG9uZURlZXAoaW5pdGlhbERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IGFueSA9IHt9O1xuICBwcml2YXRlIHN0ZXBPdXRwdXRzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHNldFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgc2V0U21hcnQodGhpcy52YXJpYWJsZXMsIGtleSwgdmFsdWUpO1xuICB9XG5cblxuICBzZXRWYXJpYWJsZXMoY29udGV4dDogYW55ID0ge30pIHtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IHsgLi4udGhpcy52YXJpYWJsZXMsIC4uLmNvbnRleHQgfTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlPFQgPSBhbnk+KGtleT86IHN0cmluZyB8IG51bGwpOiBUIHtcbiAgICByZXR1cm4gIWtleSA/IHRoaXMudmFyaWFibGVzIDogZ2V0KHRoaXMudmFyaWFibGVzLCBrZXkpO1xuICB9XG5cbiAgc2V0T3V0cHV0KGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RlcE91dHB1dHMuc2V0KGtleSwgb3V0cHV0KTtcbiAgfVxuXG4gIHNldE91dHB1dHModmFsdWVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zdGVwT3V0cHV0cyA9IG5ldyBNYXAoWy4uLnRoaXMuc3RlcE91dHB1dHMsIC4uLnZhbHVlc10pXG4gIH1cblxuICBnZXRPdXRwdXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwT3V0cHV0cy5nZXQoa2V5KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0FjdGlvbklucHV0ID0gYW55O1xuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NvbmRpdGlvblR5cGUgPSAnQU5EJyB8ICdPUicgfCAnU0lOR0xFJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NvbmRpdGlvbiB7XG4gIHR5cGU6IEFYUFdvcmtmbG93Q29uZGl0aW9uVHlwZTtcbiAgY29uZGl0aW9ucz86IEFYUFdvcmtmbG93Q29uZGl0aW9uW107IC8vIE5lc3RlZCBjb25kaXRpb25zXG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7IC8vIFVzZWQgaWYgdHlwZSBpcyAnU0lOR0xFJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93TmV4dFN0ZXAge1xuICBjb25kaXRpb25zOiBBWFBXb3JrZmxvd0NvbmRpdGlvbltdO1xuICBuZXh0U3RlcElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGVwIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGFjdGlvbjogQVhQV29ya2Zsb3dBY3Rpb24gfCBzdHJpbmc7XG4gIGlucHV0PzogQVhQV29ya2Zsb3dBY3Rpb25JbnB1dDtcbiAgbmV4dFN0ZXBzPzogQVhQV29ya2Zsb3dOZXh0U3RlcFtdO1xuICBjb25kaXRpb25zPzogQVhQV29ya2Zsb3dDb25kaXRpb25bXTtcbn1cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RXZlbnRTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaChldmVudCk7XG4gIH1cblxuICBhYnN0cmFjdCBleGVjdXRlKGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZXhlY3V0ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0V2ZW50PFQgPSBhbnk+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwYXlsb2FkPzogVDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrRmxvd0V2ZW50PFQ+KHR5cGU6IHN0cmluZykge1xuICBjb25zdCBldmVudENyZWF0b3IgPSAocGF5bG9hZDogVCkgPT4gKHsgdHlwZSwgcGF5bG9hZCB9KTtcbiAgZXZlbnRDcmVhdG9yLnR5cGUgPSB0eXBlO1xuICByZXR1cm4gZXZlbnRDcmVhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiguLi5hbGxvd2VkVHlwZXM6IEFycmF5PHsgdHlwZTogc3RyaW5nIH0+KSB7XG4gIHJldHVybiBmaWx0ZXIoKGV2ZW50OiBUKSA9PiBhbGxvd2VkVHlwZXMuc29tZSgodHlwZSkgPT4gZXZlbnQudHlwZSA9PT0gdHlwZS50eXBlKSk7XG59XG4iXX0=","import { Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowDecideAction extends AXPWorkflowAction {\n async execute(context) {\n // its a fake action\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNyQyxvQkFBb0I7SUFDeEIsQ0FBQzsrR0FIUSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzs0RkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dDb250ZXh0IH0gZnJvbSBcIi4uL3dvcmtmbG93LnR5cGVzXCI7XG5cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dEZWNpZGVBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gaXRzIGEgZmFrZSBhY3Rpb25cbiAgICB9XG59Il19","import { Injectable, Injector, inject } from '@angular/core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { AXPWorkflowError } from './errors.types';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXPWorkflowContext, } from './workflow.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./workflow-registery.service\";\nexport class AXPWorkflowService {\n get events$() {\n return this.eventService.events$;\n }\n constructor(registryService, injector) {\n this.registryService = registryService;\n this.injector = injector;\n this.eventService = inject(AXPWorkflowEventService);\n }\n exists(name) {\n return !!this.registryService.getWorkflow(name);\n }\n async execute(workflow, initialContext = null) {\n // Instantiate or retrieve the workflow\n const wk = typeof workflow === 'string' ? this.getWorkflowInstance(workflow) : workflow;\n let currentStepId = wk.startStepId;\n const context = initialContext instanceof AXPWorkflowContext\n ? initialContext\n : new AXPWorkflowContext(this.processData(initialContext) ?? {});\n // Initialize context with initial variables\n while (currentStepId) {\n const currentStep = wk.steps[currentStepId];\n if (!currentStep) {\n throw new AXPWorkflowError(`Step '${currentStepId}' not found in the workflow steps.`);\n }\n // Instantiate or retrieve the action\n const action = typeof currentStep.action === 'string' ? this.getActionInstance(currentStep.action) : currentStep.action;\n //\n if (currentStep.input) {\n let inputs = {};\n await this.processInputs(cloneDeep(currentStep.input), inputs, '', context);\n await new Promise((resolve) => setTimeout(async () => {\n Object.assign(action, inputs);\n resolve(0);\n }));\n }\n try {\n await new Promise((resolve) => setTimeout(async () => {\n await action.execute(context);\n resolve(0);\n }, 0));\n }\n catch (error) {\n console.error(error);\n throw new AXPWorkflowError('Workflow Error', error);\n }\n // Determine the next step based on the conditions\n const nextStepInfo = await this.determineNextStep(currentStep, context);\n if (nextStepInfo) {\n currentStepId = nextStepInfo.nextStepId;\n }\n else {\n break; // Exit the loop if no next step is determined\n }\n }\n return context;\n }\n processData(initialContext) {\n //TODO: update values with expressions and return new object\n return initialContext;\n }\n getActionInstance(actionName) {\n const actionType = this.registryService.getAction(actionName);\n if (!actionType) {\n throw new AXPWorkflowError(`Action type '${actionName}' not found in the registry.`);\n }\n return this.injector.get(actionType);\n }\n getWorkflowInstance(workflowName) {\n const workflowType = this.registryService.getWorkflow(workflowName);\n if (!workflowType) {\n throw new AXPWorkflowError(`Workflow type '${workflowName}' not found in the registry.`);\n }\n return workflowType;\n }\n async determineNextStep(currentStep, context) {\n if (!currentStep.nextSteps) {\n return null;\n }\n for (const nextStep of currentStep.nextSteps) {\n if (await this.evaluateCondition(nextStep.conditions, context)) {\n return nextStep;\n }\n }\n return null;\n }\n async evaluateCondition(conditions, context) {\n if (!conditions || conditions.length === 0) {\n return true; // If no conditions, the step proceeds\n }\n // Map each condition to a promise using evaluateSingleCondition\n const conditionPromises = conditions.map((condition) => this.evaluateSingleCondition(condition, context));\n // Wait for all promises to resolve\n const results = await Promise.all(conditionPromises);\n // Check if every condition is true\n return results.every((result) => result);\n }\n async evaluateSingleCondition(condition, context) {\n switch (condition.type) {\n case 'SINGLE':\n return (!condition.expression ? true : await this.evaluateExpression(condition.expression, context));\n case 'AND':\n // Evaluate all conditions with 'AND' logic\n const andConditions = condition.conditions ?? [];\n const andResults = await Promise.all(andConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return andResults.every((result) => result);\n case 'OR':\n // Evaluate all conditions with 'OR' logic\n const orConditions = condition.conditions ?? [];\n const orResults = await Promise.all(orConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return orResults.some((result) => result);\n default:\n throw new AXPWorkflowError(`Unsupported condition type: ${condition.type}`);\n }\n }\n //TODO: return any and recursively update object, update scopes\n async evaluateExpression(templateExpression, context) {\n try {\n let expression = '';\n if (typeof templateExpression === 'string' && templateExpression.trim().includes('{{')) {\n const expressionMatch = templateExpression.match(/\\{\\{\\s*(.*?)\\s*\\}\\}/);\n if (!expressionMatch) {\n throw Error(`No valid expression found in \"${templateExpression}\"`);\n }\n expression = expressionMatch[1];\n }\n else {\n expression = templateExpression;\n }\n // Create a scope that includes context and registered functions\n const scope = { context, ...this.createFunctionScope() };\n // Evaluating the expression within the created scope\n const sandbox = new Function('scope', `return (async function() { with (scope) { return ${expression}; } })();`);\n const result = await sandbox(scope);\n return result;\n }\n catch (error) {\n console.error('Error evaluating expression:', error);\n return false;\n }\n }\n async processInputs(obj, inputs, pathPrefix = '', context = {}) {\n if (!obj) {\n return;\n }\n for await (const i of Object.entries(obj)) {\n const key = i[0];\n const value = i[1];\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n if (typeof value === 'string' && value.trim().includes('{{')) {\n const expValue = await this.evaluateExpression(value, context);\n set(inputs, currentPath, expValue);\n }\n else if (typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))) {\n // Recursively handle nested objects\n this.processInputs(value, inputs, currentPath, context);\n }\n else {\n // Apply static values directly\n set(inputs, currentPath, value);\n }\n }\n }\n createFunctionScope() {\n const scope = {};\n this.registryService.getFunctionNames().forEach((name) => {\n scope[name] = this.getFunctionInstance(name).execute;\n });\n return { methods: { scope } };\n }\n getFunctionInstance(functionName) {\n const functionType = this.registryService.getFunction(functionName);\n if (!functionType) {\n throw new AXPWorkflowError(`Function type '${functionName}' not found in the registry.`);\n }\n return this.injector.get(functionType);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, deps: [{ token: i1.AXPWorkflowRegistryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.AXPWorkflowRegistryService }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi93b3JrZmxvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBSUwsa0JBQWtCLEdBS25CLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQW9CLGVBQTJDLEVBQVUsUUFBa0I7UUFBdkUsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU5uRixpQkFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBTXdDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQ1gsUUFBOEIsRUFDOUIsaUJBQWtELElBQUk7UUFFdEQsdUNBQXVDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwTlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RXJyb3IgfSBmcm9tICcuL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1yZWdpc3Rlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvdyxcbiAgQVhQV29ya2Zsb3dBY3Rpb24sXG4gIEFYUFdvcmtmbG93Q29uZGl0aW9uLFxuICBBWFBXb3JrZmxvd0NvbnRleHQsXG4gIEFYUFdvcmtmbG93RXZlbnQsXG4gIEFYUFdvcmtmbG93RnVuY3Rpb24sXG4gIEFYUFdvcmtmbG93TmV4dFN0ZXAsXG4gIEFYUFdvcmtmbG93U3RlcCxcbn0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1NlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd0V2ZW50U2VydmljZSk7XG5cbiAgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxBWFBXb3JrZmxvd0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLmV2ZW50cyQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lzdHJ5U2VydmljZTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBleGlzdHMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cobmFtZSk7XG4gIH1cblxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgd29ya2Zsb3c6IEFYUFdvcmtmbG93IHwgc3RyaW5nLFxuICAgIGluaXRpYWxDb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQgfCBhbnkgfCBudWxsID0gbnVsbFxuICApOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIC8vIEluc3RhbnRpYXRlIG9yIHJldHJpZXZlIHRoZSB3b3JrZmxvd1xuICAgIGNvbnN0IHdrID0gdHlwZW9mIHdvcmtmbG93ID09PSAnc3RyaW5nJyA/IHRoaXMuZ2V0V29ya2Zsb3dJbnN0YW5jZSh3b3JrZmxvdykgOiB3b3JrZmxvdztcblxuICAgIGxldCBjdXJyZW50U3RlcElkID0gd2suc3RhcnRTdGVwSWQ7XG4gICAgY29uc3QgY29udGV4dCA9XG4gICAgICBpbml0aWFsQ29udGV4dCBpbnN0YW5jZW9mIEFYUFdvcmtmbG93Q29udGV4dFxuICAgICAgICA/IGluaXRpYWxDb250ZXh0XG4gICAgICAgIDogbmV3IEFYUFdvcmtmbG93Q29udGV4dCh0aGlzLnByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0KSA/PyB7fSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBjb250ZXh0IHdpdGggaW5pdGlhbCB2YXJpYWJsZXNcblxuICAgIHdoaWxlIChjdXJyZW50U3RlcElkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHdrLnN0ZXBzW2N1cnJlbnRTdGVwSWRdO1xuICAgICAgaWYgKCFjdXJyZW50U3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgU3RlcCAnJHtjdXJyZW50U3RlcElkfScgbm90IGZvdW5kIGluIHRoZSB3b3JrZmxvdyBzdGVwcy5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zdGFudGlhdGUgb3IgcmV0cmlldmUgdGhlIGFjdGlvblxuICAgICAgY29uc3QgYWN0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRTdGVwLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB0aGlzLmdldEFjdGlvbkluc3RhbmNlKGN1cnJlbnRTdGVwLmFjdGlvbikgOiBjdXJyZW50U3RlcC5hY3Rpb247XG4gICAgICAvL1xuICAgICAgaWYgKGN1cnJlbnRTdGVwLmlucHV0KSB7XG4gICAgICAgIGxldCBpbnB1dHM6IGFueSA9IHt9O1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbnB1dHMoY2xvbmVEZWVwKGN1cnJlbnRTdGVwLmlucHV0KSwgaW5wdXRzLCAnJywgY29udGV4dCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIGlucHV0cyk7XG4gICAgICAgICAgICByZXNvbHZlKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5leGVjdXRlKGNvbnRleHQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgwKTtcbiAgICAgICAgICB9LCAwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBBWFBXb3JrZmxvd0Vycm9yKCdXb3JrZmxvdyBFcnJvcicsIGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIERldGVybWluZSB0aGUgbmV4dCBzdGVwIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zXG4gICAgICBjb25zdCBuZXh0U3RlcEluZm8gPSBhd2FpdCB0aGlzLmRldGVybWluZU5leHRTdGVwKGN1cnJlbnRTdGVwLCBjb250ZXh0KTtcbiAgICAgIGlmIChuZXh0U3RlcEluZm8pIHtcbiAgICAgICAgY3VycmVudFN0ZXBJZCA9IG5leHRTdGVwSW5mby5uZXh0U3RlcElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7IC8vIEV4aXQgdGhlIGxvb3AgaWYgbm8gbmV4dCBzdGVwIGlzIGRldGVybWluZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIC8vVE9ETzogdXBkYXRlIHZhbHVlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gbmV3IG9iamVjdFxuICAgIHJldHVybiBpbml0aWFsQ29udGV4dDtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEFjdGlvbkluc3RhbmNlKGFjdGlvbk5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgICBjb25zdCBhY3Rpb25UeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0QWN0aW9uKGFjdGlvbk5hbWUpO1xuICAgIGlmICghYWN0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYEFjdGlvbiB0eXBlICcke2FjdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoYWN0aW9uVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtmbG93SW5zdGFuY2Uod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB7XG4gICAgY29uc3Qgd29ya2Zsb3dUeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAoIXdvcmtmbG93VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFdvcmtmbG93IHR5cGUgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93VHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lTmV4dFN0ZXAoXG4gICAgY3VycmVudFN0ZXA6IEFYUFdvcmtmbG93U3RlcCxcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd05leHRTdGVwIHwgbnVsbD4ge1xuICAgIGlmICghY3VycmVudFN0ZXAubmV4dFN0ZXBzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuZXh0U3RlcCBvZiBjdXJyZW50U3RlcC5uZXh0U3RlcHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5leHRTdGVwLmNvbmRpdGlvbnMsIGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbnM6IEFYUFdvcmtmbG93Q29uZGl0aW9uW10sIGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY29uZGl0aW9ucyB8fCBjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElmIG5vIGNvbmRpdGlvbnMsIHRoZSBzdGVwIHByb2NlZWRzXG4gICAgfVxuXG4gICAgLy8gTWFwIGVhY2ggY29uZGl0aW9uIHRvIGEgcHJvbWlzZSB1c2luZyBldmFsdWF0ZVNpbmdsZUNvbmRpdGlvblxuICAgIGNvbnN0IGNvbmRpdGlvblByb21pc2VzID0gY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kaXRpb24sIGNvbnRleHQpKTtcblxuICAgIC8vIFdhaXQgZm9yIGFsbCBwcm9taXNlcyB0byByZXNvbHZlXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmRpdGlvblByb21pc2VzKTtcblxuICAgIC8vIENoZWNrIGlmIGV2ZXJ5IGNvbmRpdGlvbiBpcyB0cnVlXG4gICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVTaW5nbGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBBWFBXb3JrZmxvd0NvbmRpdGlvbixcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuICghY29uZGl0aW9uLmV4cHJlc3Npb24gPyB0cnVlIDogYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24oY29uZGl0aW9uLmV4cHJlc3Npb24sIGNvbnRleHQpKSBhcyBib29sZWFuO1xuICAgICAgY2FzZSAnQU5EJzpcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGNvbmRpdGlvbnMgd2l0aCAnQU5EJyBsb2dpY1xuICAgICAgICBjb25zdCBhbmRDb25kaXRpb25zID0gY29uZGl0aW9uLmNvbmRpdGlvbnMgPz8gW107XG4gICAgICAgIGNvbnN0IGFuZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChhbmRDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gYW5kUmVzdWx0cy5ldmVyeSgocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gICAgICBjYXNlICdPUic6XG4gICAgICAgIC8vIEV2YWx1YXRlIGFsbCBjb25kaXRpb25zIHdpdGggJ09SJyBsb2dpY1xuICAgICAgICBjb25zdCBvckNvbmRpdGlvbnMgPSBjb25kaXRpb24uY29uZGl0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3JSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwob3JDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gb3JSZXN1bHRzLnNvbWUoKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFVuc3VwcG9ydGVkIGNvbmRpdGlvbiB0eXBlOiAke2NvbmRpdGlvbi50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vVE9ETzogcmV0dXJuIGFueSBhbmQgcmVjdXJzaXZlbHkgdXBkYXRlIG9iamVjdCwgdXBkYXRlIHNjb3Blc1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlRXhwcmVzc2lvbih0ZW1wbGF0ZUV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0KTogUHJvbWlzZTxCb29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBleHByZXNzaW9uID0gJyc7XG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgJiYgdGVtcGxhdGVFeHByZXNzaW9uLnRyaW0oKS5pbmNsdWRlcygne3snKSkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uTWF0Y2ggPSB0ZW1wbGF0ZUV4cHJlc3Npb24ubWF0Y2goL1xce1xce1xccyooLio/KVxccypcXH1cXH0vKTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gdmFsaWQgZXhwcmVzc2lvbiBmb3VuZCBpbiBcIiR7dGVtcGxhdGVFeHByZXNzaW9ufVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25NYXRjaFsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB0ZW1wbGF0ZUV4cHJlc3Npb247XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBzY29wZSB0aGF0IGluY2x1ZGVzIGNvbnRleHQgYW5kIHJlZ2lzdGVyZWQgZnVuY3Rpb25zXG4gICAgICBjb25zdCBzY29wZSA9IHsgY29udGV4dCwgLi4udGhpcy5jcmVhdGVGdW5jdGlvblNjb3BlKCkgfTtcbiAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gd2l0aGluIHRoZSBjcmVhdGVkIHNjb3BlXG4gICAgICBjb25zdCBzYW5kYm94ID0gbmV3IEZ1bmN0aW9uKCdzY29wZScsIGByZXR1cm4gKGFzeW5jIGZ1bmN0aW9uKCkgeyB3aXRoIChzY29wZSkgeyByZXR1cm4gJHtleHByZXNzaW9ufTsgfSB9KSgpO2ApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveChzY29wZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBldmFsdWF0aW5nIGV4cHJlc3Npb246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0lucHV0cyhvYmo6IGFueSwgaW5wdXRzOiBhbnksIHBhdGhQcmVmaXg6IHN0cmluZyA9ICcnLCBjb250ZXh0OiBhbnkgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBpIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlbMV07XG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke2tleX1gIDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgIGNvbnN0IGV4cFZhbHVlID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24odmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBzZXQoaW5wdXRzLCBjdXJyZW50UGF0aCwgZXhwVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXRzKHZhbHVlLCBpbnB1dHMsIGN1cnJlbnRQYXRoLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGx5IHN0YXRpYyB2YWx1ZXMgZGlyZWN0bHlcbiAgICAgICAgc2V0KGlucHV0cywgY3VycmVudFBhdGgsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uU2NvcGUoKTogYW55IHtcbiAgICBjb25zdCBzY29wZTogYW55ID0ge307XG4gICAgdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0RnVuY3Rpb25OYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIHNjb3BlW25hbWVdID0gdGhpcy5nZXRGdW5jdGlvbkluc3RhbmNlKG5hbWUpLmV4ZWN1dGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbWV0aG9kczogeyBzY29wZSB9IH07XG4gIH1cblxuICBwcml2YXRlIGdldEZ1bmN0aW9uSW5zdGFuY2UoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB0aGlzLnJlZ2lzdHJ5U2VydmljZS5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUpO1xuICAgIGlmICghZnVuY3Rpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgRnVuY3Rpb24gdHlwZSAnJHtmdW5jdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoZnVuY3Rpb25UeXBlKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport { AXPWorkflowService } from \"../workflow.service\";\nimport * as i0 from \"@angular/core\";\nexport class AXPStartWorkflowAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.workflowService = inject(AXPWorkflowService);\n }\n async execute(context) {\n //console.log(\"start WK current context\", context);\n //console.log(\"start WK input context\", this.context);\n if (this.context)\n context.setVariables(this.context);\n //console.log(\"start WK merged context\", context);\n try {\n await this.workflowService.execute(this.workflow, context);\n }\n catch (e) {\n throw e;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow definition loaders.\n * Multiple loaders can be provided (multi: true).\n */\nexport const AXP_WORKFLOW_DEFINITION_LOADER = new InjectionToken('AXP_WORKFLOW_DEFINITION_LOADER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWRlZmluaXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF1Qi9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUM5RCxnQ0FBZ0MsQ0FDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuXG4vKipcbiAqIFdvcmtmbG93IGRlZmluaXRpb24gbG9hZGVyIGludGVyZmFjZS5cbiAqIEltcGxlbWVudCB0aGlzIHRvIHByb3ZpZGUgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbSB2YXJpb3VzIHNvdXJjZXMgKEpTT04gZmlsZXMsIGRhdGFiYXNlLCBldGMuKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXIge1xuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGtleSkuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIHdvcmtmbG93IG5hbWUgKHVuaXF1ZSBrZXkpXG4gICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGF2YWlsYWJsZSB3b3JrZmxvdyBuYW1lcy5cbiAgICogVXNlZCBmb3IgcHJlbG9hZGluZyBhbmQgZGlzY292ZXJ5LlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB3b3JrZmxvdyBuYW1lc1xuICAgKi9cbiAgZ2V0QWxsTmFtZXM/KCk6IFByb21pc2U8c3RyaW5nW10+O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbiBsb2FkZXJzLlxuICogTXVsdGlwbGUgbG9hZGVycyBjYW4gYmUgcHJvdmlkZWQgKG11bHRpOiB0cnVlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19ERUZJTklUSU9OX0xPQURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXI+KFxuICAnQVhQX1dPUktGTE9XX0RFRklOSVRJT05fTE9BREVSJyxcbik7XG5cbiJdfQ==","// ============================================\n// WORKFLOW INSTANCE v3.0.0 TYPES\n// Based on Elsa Workflow Instance schema: https://elsaworkflows.io/schemas/workflow-instance/v3.0.0/schema.json\n// Compatible with Elsa backend while using ACoreX naming conventions\n// ============================================\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctaW5zdGFuY2UudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxpQ0FBaUM7QUFDakMsZ0hBQWdIO0FBQ2hILHFFQUFxRTtBQUNyRSwrQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV09SS0ZMT1cgSU5TVEFOQ0UgdjMuMC4wIFRZUEVTXG4vLyBCYXNlZCBvbiBFbHNhIFdvcmtmbG93IEluc3RhbmNlIHNjaGVtYTogaHR0cHM6Ly9lbHNhd29ya2Zsb3dzLmlvL3NjaGVtYXMvd29ya2Zsb3ctaW5zdGFuY2UvdjMuMC4wL3NjaGVtYS5qc29uXG4vLyBDb21wYXRpYmxlIHdpdGggRWxzYSBiYWNrZW5kIHdoaWxlIHVzaW5nIEFDb3JlWCBuYW1pbmcgY29udmVudGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdHVzLlxuICovXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd1N0YXR1cyA9ICdSdW5uaW5nJyB8ICdGaW5pc2hlZCc7XG5cbi8qKlxuICogV29ya2Zsb3cgc3ViLXN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dTdWJTdGF0dXMgPSAnUGVuZGluZycgfCAnRXhlY3V0aW5nJyB8ICdTdXNwZW5kZWQnIHwgJ0ZpbmlzaGVkJyB8ICdDYW5jZWxsZWQnIHwgJ0ZhdWx0ZWQnO1xuXG4vKipcbiAqIEFjdGl2aXR5IHN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlTdGF0dXMgPSAnUnVubmluZycgfCAnQ29tcGxldGVkJyB8ICdDYW5jZWxlZCcgfCAnRmF1bHRlZCc7XG5cbi8qKlxuICogRXhjZXB0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEV4Y2VwdGlvblN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiB0eXBlIG5hbWUuXG4gICAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0cmFjZSAobnVsbGFibGUpLlxuICAgKi9cbiAgc3RhY2tUcmFjZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElubmVyIGV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgaW5uZXJFeGNlcHRpb24/OiBBWFBFeGNlcHRpb25TdGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQWN0aXZpdHkgaW5jaWRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlJbmNpZGVudCB7XG4gIC8qKlxuICAgKiBBY3Rpdml0eSBJRCB0aGF0IGNhdXNlZCB0aGUgaW5jaWRlbnQuXG4gICAqL1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IG5vZGUgSUQuXG4gICAqL1xuICBhY3Rpdml0eU5vZGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSB0eXBlLlxuICAgKi9cbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2lkZW50IG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZmF1bHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGYXVsdCBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGYXVsdGVkIGFjdGl2aXR5IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBmYXVsdGVkQWN0aXZpdHlJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogQm9va21hcmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQm9va21hcmsge1xuICAvKipcbiAgICogQm9va21hcmsgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBoYXNoLlxuICAgKi9cbiAgaGFzaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBwYXlsb2FkIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXlsb2FkPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogQWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIGFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGluc3RhbmNlIElELlxuICAgKi9cbiAgYWN0aXZpdHlJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG8gYnVybiBmbGFnLlxuICAgKi9cbiAgYXV0b0J1cm4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBtZXRob2QgbmFtZSAobnVsbGFibGUpLlxuICAgKi9cbiAgY2FsbGJhY2tNZXRob2ROYW1lPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBjYWxsYmFjayBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZSB7XG4gIC8qKlxuICAgKiBPd25lciBhY3Rpdml0eSBpbnN0YW5jZSBJRC5cbiAgICovXG4gIG93bmVySW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGlsZCBhY3Rpdml0eSBub2RlIElELlxuICAgKi9cbiAgY2hpbGROb2RlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGhvZE5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFZhcmlhYmxlIChmb3IgYWN0aXZpdHkgY29udGV4dCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlWYXJpYWJsZSB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmxlIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIGFycmF5IGZsYWcuXG4gICAqL1xuICBpc0FycmF5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmFyaWFibGUgdmFsdWUgKG51bGxhYmxlKS5cbiAgICovXG4gIHZhbHVlPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogU3RvcmFnZSBkcml2ZXIgdHlwZSBuYW1lIChudWxsYWJsZSkuXG4gICAqL1xuICBzdG9yYWdlRHJpdmVyVHlwZU5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBjb250ZXh0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5RXhlY3V0aW9uQ29udGV4dFN0YXRlIHtcbiAgLyoqXG4gICAqIENvbnRleHQgSUQgKGFjdGl2aXR5IGluc3RhbmNlIElEKS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBjb250ZXh0IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXJlbnRDb250ZXh0SWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZWQgYWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIHNjaGVkdWxlZEFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjdGl2aXR5IG5vZGUgSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIG93bmVyQWN0aXZpdHlOb2RlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXRlIChldmFsdWF0ZWQgcHJvcGVydGllcykgKG51bGxhYmxlKS5cbiAgICovXG4gIGFjdGl2aXR5U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcblxuICAvKipcbiAgICogRHluYW1pYyB2YXJpYWJsZXMuXG4gICAqL1xuICBkeW5hbWljVmFyaWFibGVzOiBBWFBBY3Rpdml0eVZhcmlhYmxlW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQQWN0aXZpdHlTdGF0dXM7XG5cbiAgLyoqXG4gICAqIElzIGV4ZWN1dGluZyBmbGFnLlxuICAgKi9cbiAgaXNFeGVjdXRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZhdWx0IGNvdW50LlxuICAgKi9cbiAgZmF1bHRDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICBzdGFydGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGxldGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSwgbnVsbGFibGUpLlxuICAgKi9cbiAgY29tcGxldGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUYWcgKG51bGxhYmxlKS5cbiAgICovXG4gIHRhZz86IGFueSB8IG51bGw7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdGUgKGludGVybmFsIGV4ZWN1dGlvbiBzdGF0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGF0ZSB7XG4gIC8qKlxuICAgKiBTdGF0ZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gSUQuXG4gICAqL1xuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uLlxuICAgKi9cbiAgZGVmaW5pdGlvblZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29ycmVsYXRpb24gSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0dXMuXG4gICAqL1xuICBzdGF0dXM6IEFYUFdvcmtmbG93U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdWItc3RhdHVzLlxuICAgKi9cbiAgc3ViU3RhdHVzOiBBWFBXb3JrZmxvd1N1YlN0YXR1cztcblxuICAvKipcbiAgICogQm9va21hcmtzLlxuICAgKi9cbiAgYm9va21hcmtzOiBBWFBCb29rbWFya1tdO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudHMuXG4gICAqL1xuICBpbmNpZGVudHM6IEFYUEFjdGl2aXR5SW5jaWRlbnRbXTtcblxuICAvKipcbiAgICogRmF1bHQgKG51bGxhYmxlKS5cbiAgICovXG4gIGZhdWx0PzogQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBjYWxsYmFja3MuXG4gICAqL1xuICBjb21wbGV0aW9uQ2FsbGJhY2tzOiBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSBleGVjdXRpb24gY29udGV4dHMuXG4gICAqL1xuICBhY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRzOiBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhLlxuICAgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhLlxuICAgKi9cbiAgb3V0cHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogRmluaXNoZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lLCBudWxsYWJsZSkuXG4gICAqL1xuICBmaW5pc2hlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBpbnN0YW5jZSAoc3RvcmVkIGluIGRhdGFiYXNlKS5cbiAqIFRoaXMgbWF0Y2hlcyB0aGUgRWxzYSBXb3JrZmxvdyBJbnN0YW5jZSBzY2hlbWEgZm9yIGJhY2tlbmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0luc3RhbmNlIHtcbiAgLyoqXG4gICAqIFNjaGVtYSByZWZlcmVuY2UuXG4gICAqL1xuICAkc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBkZWZpbml0aW9uIElELlxuICAgKi9cbiAgZGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gdmVyc2lvbiBJRC5cbiAgICovXG4gIGRlZmluaXRpb25WZXJzaW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogUGFyZW50IHdvcmtmbG93IGluc3RhbmNlIElEIChudWxsYWJsZSwgZm9yIGNoaWxkIHdvcmtmbG93cykuXG4gICAqL1xuICBwYXJlbnRXb3JrZmxvd0luc3RhbmNlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0ZSAoaW50ZXJuYWwgZXhlY3V0aW9uIHN0YXRlKS5cbiAgICovXG4gIHdvcmtmbG93U3RhdGU6IEFYUFdvcmtmbG93U3RhdGU7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQV29ya2Zsb3dTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN1Yi1zdGF0dXMuXG4gICAqL1xuICBzdWJTdGF0dXM6IEFYUFdvcmtmbG93U3ViU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBDb3JyZWxhdGlvbiBJRCAobnVsbGFibGUpLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudCBjb3VudC5cbiAgICovXG4gIGluY2lkZW50Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaW5pc2hlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUsIG51bGxhYmxlKS5cbiAgICovXG4gIGZpbmlzaGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const AXP_ACTIVITY_PROVIDER = new InjectionToken('AXP_ACTIVITY_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_ACTIVITY_CATEGORY_PROVIDER = new InjectionToken('AXP_ACTIVITY_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvYWN0aXZpdHkvYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUE2Qix1QkFBdUIsRUFBRTtJQUN6RyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUM7QUF1QkgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXFDLGdDQUFnQyxFQUFFO0lBQ25JLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0NBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICcuL2FjdGl2aXR5LnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlQcm92aWRlclRva2VuID1cbiAgICB8IEFYUEFjdGl2aXR5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQQWN0aXZpdHlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlQcm92aWRlclRva2VuW10+KCdBWFBfQUNUSVZJVFlfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBBY3Rpdml0eVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciBhY3Rpdml0aWVzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBhcnJheVxuICAgICAqL1xuICAgIGdldExpc3QoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb25bXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIFRoZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIG5hbWUgLSBBY3Rpdml0eSBuYW1lICh1bmlxdWUgaWRlbnRpZmllciBhbmQgY29tbWFuZCBrZXkpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER } from './activity-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Activity Definition Service\n *\n * Manages activity definitions (metadata) for UI and tooling.\n * Similar to AXPReportDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has activities (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPActivityDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_ACTIVITY_CATEGORY_PROVIDER, { optional: true }) || [];\n this.activityProviders = inject(AXP_ACTIVITY_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for activity definitions by categoryId - O(1) lookup */\n this.activitiesByCategory = new Map();\n /** Cache for individual activity definitions by name - O(1) lookup */\n this.activitiesByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingActivitiesRequests = new Map();\n this.pendingActivityRequests = new Map();\n }\n //#endregion\n //#region ---- Initialization ----\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Activity Definitions ----\n /**\n * Get activity definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches activity definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get activity definitions from\n * @returns Array of activity definitions\n */\n async getActivitiesByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.activitiesByCategory.has(categoryId)) {\n return this.activitiesByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no activities - cache empty array and skip API call\n const emptyArray = [];\n this.activitiesByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivitiesRequests.has(categoryId)) {\n return this.pendingActivitiesRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivitiesFromProviders(categoryId);\n this.pendingActivitiesRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single activity definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Activity name (unique identifier and command key)\n * @returns Activity definition or undefined if not found\n */\n async getActivityByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.activitiesByName.has(name)) {\n return this.activitiesByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivityRequests.has(name)) {\n return this.pendingActivityRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivityFromProviders(name);\n this.pendingActivityRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific activity definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByActivityName(activityName) {\n // ✅ Search in cached activity definitions\n for (const [categoryId, definitions] of this.activitiesByCategory.entries()) {\n if (definitions.some(def => def.name === activityName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the activity definition to find its category\n const definition = await this.getActivityByName(activityName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for an activity\n */\n async getCategoriesPathByActivityName(activityName) {\n const categoryId = await this.getCategoryIdByActivityName(activityName);\n if (!categoryId) {\n throw new Error(`Activity '${activityName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load activity definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with activity provider\n */\n async loadActivitiesFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.activitiesByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.activitiesByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingActivitiesRequests.delete(categoryId);\n }\n }\n /**\n * Load single activity definition from providers and cache result\n */\n async loadActivityFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.activitiesByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached activity definitions\n for (const definitions of this.activitiesByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.activitiesByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingActivityRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has activities (uses cached count)\n */\n categoryHasActivities(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear activities cache only\n */\n clearActivitiesCache() {\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9hY3Rpdml0eS9hY3Rpdml0eS1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUUxRSxzRUFBc0U7UUFDOUQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFFcEUscUVBQXFFO1FBQzdELHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsbUNBQW1DO1FBRTFGLHNEQUFzRDtRQUM5Qyw4QkFBeUIsR0FBRyxJQUFJ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QUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQWhkUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEFjdGl2aXR5Q2F0ZWdvcnksIEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4vYWN0aXZpdHkudHlwZXMnO1xuaW1wb3J0IHsgQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCBBWFBfQUNUSVZJVFlfUFJPVklERVIgfSBmcm9tICcuL2FjdGl2aXR5LWRlZmluaXRpb24ucHJvdmlkZXInO1xuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPcHRpbWl6ZWQgQWN0aXZpdHkgRGVmaW5pdGlvbiBTZXJ2aWNlXG4gKiBcbiAqIE1hbmFnZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhKSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBTaW1pbGFyIHRvIEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDMuIEFnZ3Jlc3NpdmUgY2FjaGluZyBwcmV2ZW50cyBkdXBsaWNhdGUgQVBJIGNhbGxzXG4gKiA0LiBTaW5nbGUgcGVuZGluZyByZXF1ZXN0IHBlciByZXNvdXJjZSBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnNcbiAqIDUuIExhenkgbG9hZGluZyAtIG9ubHkgbG9hZHMgZGF0YSB3aGVuIG5lZWRlZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVycyAmIENhY2hlcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIFN0b3JhZ2UgICAtLS0tXG5cbiAgICAvKiogQ2FjaGUgZm9yIGNhdGVnb3JpZXMgYnkgaWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcmllc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlDYXRlZ29yeT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlQYXJlbnRJZCA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBBWFBBY3Rpdml0eUNhdGVnb3J5W10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGFjdGl2aXR5IGRlZmluaXRpb25zIGJ5IGNhdGVnb3J5SWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgYWN0aXZpdGllc0J5Q2F0ZWdvcnkgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlEZWZpbml0aW9uW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgYWN0aXZpdHkgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBhY3Rpdml0aWVzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUEFjdGl2aXR5RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPj4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbml0aWFsaXphdGlvbiAgIC0tLS1cblxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBBY3Rpdml0eSBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgYWN0aXZpdHkgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IFJldHVybiBjYWNoZWQgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIGFjdGl2aXRpZXMgLSBjYWNoZSBlbXB0eSBhcnJheSBhbmQgc2tpcCBBUEkgY2FsbFxuICAgICAgICAgICAgY29uc3QgZW1wdHlBcnJheTogQVhQQWN0aXZpdHlEZWZpbml0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkQWN0aXZpdGllc0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEFjdGl2aXR5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBjb21tYW5kIGtleSlcbiAgICAgKiBAcmV0dXJucyBBY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY3Rpdml0eUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5hY3Rpdml0aWVzQnlOYW1lLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBhY3Rpdml0eSBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeUFjdGl2aXR5TmFtZShhY3Rpdml0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSBhY3Rpdml0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIGFjdGl2aXR5IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHlOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYW4gYWN0aXZpdHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlJZEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZSk7XG4gICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpdml0eSAnJHthY3Rpdml0eU5hbWV9JyBub3QgZm91bmQgaW4gYW55IGNhdGVnb3J5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlOiBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGNhdGVnb3JpZXMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFRyYWNrcyBwcm92aWRlciBvd25lcnNoaXAgdG8gYXZvaWQgdW5uZWNlc3NhcnkgQVBJIGNhbGxzXG4gICAgICogLSBGb3Igcm9vdCAocGFyZW50SWQgPSB1bmRlZmluZWQpOiBRdWVyeSBBTEwgcHJvdmlkZXJzXG4gICAgICogLSBGb3IgY2hpbGRyZW46IE9ubHkgcXVlcnkgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgcGFyZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQ2F0ZWdvcmllc0Zyb21Qcm92aWRlcnMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5jYXRlZ29yeVByb3ZpZGVycyk7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzOiBBWFBBY3Rpdml0eUNhdGVnb3J5W10gPSBbXTtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3ZpZGVyKHMpIHRvIHF1ZXJ5XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gcGFyZW50SWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KHBhcmVudElkKVxuICAgICAgICAgICAgICAgIDogbnVsbDsgLy8gUm9vdDogcXVlcnkgYWxsIHByb3ZpZGVyc1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0cyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRzKSAmJiBjYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goLi4uY2F0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDinIUgVHJhY2sgb3duZXJzaGlwOiBUaGlzIHByb3ZpZGVyIElOREVYIG93bnMgdGhlc2UgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdHMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5zZXQoY2F0LmlkLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLnNldChwYXJlbnRJZCwgY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcmllc0J5SWQuc2V0KGNhdC5pZCwgY2F0KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmRlbGV0ZShwYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHByb3ZpZGVyIGluZGV4IHRoYXQgb3ducyBhIHNwZWNpZmljIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgd2l0aCBwcm92aWRlciBpbmRleCwgb3IgbnVsbCBpZiBvd25lcnNoaXAgdW5rbm93biAocXVlcnkgYWxsKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcblxuICAgICAgICBpZiAob3duZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW293bmVySW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3duZXJzaGlwIHVua25vd24gLSB3aWxsIHF1ZXJ5IGFsbCBwcm92aWRlcnMgKGZhbGxiYWNrKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFjdGl2aXR5IGRlZmluaXRpb25zIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBPbmx5IHF1ZXJpZXMgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgY2F0ZWdvcnlcbiAgICAgKiBVc2VzIHByb3ZpZGVyIElOREVYIHRvIG1hdGNoIGNhdGVnb3J5IHByb3ZpZGVyIHdpdGggYWN0aXZpdHkgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0aWVzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmFjdGl2aXR5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBBY3Rpdml0eURlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICBkZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSBhY3Rpdml0eSBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuYWN0aXZpdHlQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcC52YWx1ZS5nZXRCeUlkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlOYW1lLnNldChuYW1lLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyZWFkdGgtZmlyc3Qgc2VhcmNoIHRocm91Z2ggY2F0ZWdvcnkgaGllcmFyY2h5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBzZWFyY2hRdWV1ZTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFt1bmRlZmluZWRdO1xuICAgICAgICBjb25zdCBzZWFyY2hlZCA9IG5ldyBTZXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgICAgIHdoaWxlIChzZWFyY2hRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNlYXJjaFF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgICAgICAgaWYgKHNlYXJjaGVkLmhhcyhwYXJlbnRJZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VhcmNoZWQuYWRkKHBhcmVudElkKTtcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcyhwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgT3B0aW1pemF0aW9uOiBPbmx5IHNlYXJjaCBjaGlsZHJlbiBpZiBjaGlsZHJlbkNvdW50ID4gMFxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwICYmICFzZWFyY2hlZC5oYXMoY2F0ZWdvcnkuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXVlLnB1c2goY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQ2hpbGRyZW4oY2F0ZWdvcnlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeSA/IGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQWN0aXZpdGllcyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhY3Rpdml0aWVzIGNhY2hlIG9ubHlcbiAgICAgKi9cbiAgICBjbGVhckFjdGl2aXRpZXNDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdGllc1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow engine.\n * Default implementation is AXPWorkflowLocalEngine.\n */\nexport const AXP_WORKFLOW_ENGINE = new InjectionToken('AXP_WORKFLOW_ENGINE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBc0QvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3Igd29ya2Zsb3cgZW5naW5lIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGEgbmV3IHdvcmtmbG93IGluc3RhbmNlIGluIGJhY2tlbmQgYW5kIHJldHVybnMgaW5zdGFuY2UgSUQuXG4gICAqIFxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIFN0YXJ0IHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzcG9uc2Ugd2l0aCBpbnN0YW5jZUlkIGFuZCBpbml0aWFsIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgc3RhcnQoXG4gICAgcmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3RcbiAgKTogUHJvbWlzZTxBWFBTdGFydFdvcmtmbG93UmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBSZXN1bWVzIHdvcmtmbG93IGluc3RhbmNlIGFmdGVyIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4sIGFmdGVyIHNob3ctZGlhbG9nKS5cbiAgICogXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUmVzdW1lIHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3BvbnNlIHdpdGggbmV4dCBzdGVwIGFuZCB1cGRhdGVkIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgcmVzdW1lKFxuICAgIHJlcXVlc3Q6IEFYUFJlc3VtZVdvcmtmbG93UmVxdWVzdFxuICApOiBQcm9taXNlPEFYUFJlc3VtZVdvcmtmbG93UmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIFJldHJpZXZlcyBjdXJyZW50IHN0YXRlIG9mIGEgd29ya2Zsb3cgaW5zdGFuY2UgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogQHBhcmFtIHJlcXVlc3QgLSBHZXQgc3RhdGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBDdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgZ2V0U3RhdGUoXG4gICAgcmVxdWVzdDogQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3RcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igd29ya2Zsb3cgZW5naW5lLlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLlxuICovXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX0VOR0lORSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0VuZ2luZT4oXG4gICdBWFBfV09SS0ZMT1dfRU5HSU5FJ1xuKTtcblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Service responsible for executing frontend workflow tasks.\n *\n * This service handles the execution of frontend or hybrid tasks using\n * the command infrastructure. It translates command results into\n * workflow-compatible output and outcome format.\n *\n * This service is replaceable per platform and contains all execution logic.\n */\nexport class FrontendTaskExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a frontend workflow task.\n *\n * Only executes tasks with executionMode 'frontend' or 'both'.\n * Backend tasks should not be passed to this executor.\n *\n * @param task - Task to execute\n * @returns Execution result with output and outcome\n *\n * @throws Error if task is not a frontend task\n */\n async execute(task) {\n // Validate execution mode\n if (task.executionMode !== 'frontend' && task.executionMode !== 'both') {\n throw new Error(`Task '${task.activityId}' is not a frontend task. ` +\n `Execution mode: ${task.executionMode}. Backend tasks are handled automatically.`);\n }\n try {\n // Check if command exists\n const commandExists = this.commandService.exists(task.activityType);\n if (!commandExists) {\n console.warn(`[FrontendTaskExecutor] ⚠️ Frontend activity '${task.activityType}' is not registered. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Prepare command input\n // Flatten properties if nested (workflow-studio format)\n let commandInput = task.input || task.config || {};\n if (commandInput['properties'] && typeof commandInput['properties'] === 'object') {\n // Flatten: {properties: {text: \"...\"}} -> {text: \"...\"}\n commandInput = { ...commandInput['properties'] };\n }\n // Execute activity via CommandBus\n // Activities registered as AXPCommand return {output, outcomes}\n const result = await this.commandService.execute(task.activityType, commandInput);\n if (!result) {\n return {\n output: null,\n outcome: 'Failed',\n };\n }\n if (!result.success) {\n return {\n output: {\n error: result.message?.text,\n },\n outcome: 'Failed',\n };\n }\n const commandResult = result.data;\n const outcomes = commandResult?.outcomes ?? {};\n // Determine outcome from command results\n // Default to 'Done' if no outcomes specified\n let outcome = 'Done';\n if (Object.keys(outcomes).length > 0) {\n outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';\n }\n return {\n output: commandResult?.output ?? null,\n outcome,\n };\n }\n catch (error) {\n console.error(`[FrontendTaskExecutor] ❌ Error executing frontend activity '${task.activityType}':`, error);\n return {\n output: { error: error.message || 'Unknown error' },\n outcome: 'Failed'\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtdGFzay1leGVjdXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL2Zyb250ZW5kLXRhc2stZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFvQjdELFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJRSwrQ0FBK0M7UUFFOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQW1HN0Q7SUFqR0MsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFxQjtRQUNqQywwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQ2IsU0FBUyxJQUFJLENBQUMsVUFBVSw0QkFBNEI7Z0JBQ3BELG1CQUFtQixJQUFJLENBQUMsYUFBYSw0Q0FBNEMsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwwQkFBMEI7WUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXBFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FDVixnREFBZ0QsSUFBSSxDQUFDLFlBQVksdUJBQXVCO29CQUN4RixxQkFBcUIsQ0FDdEIsQ0FBQztnQkFDRixPQUFPO29CQUNMLE1BQU0sRUFBRSxJQUFJO29CQUNaLE9BQU8sRUFBRSxNQUFNO2lCQUNoQixDQUFDO1lBQ0osQ0FBQztZQUVELHdCQUF3QjtZQUN4Qix3REFBd0Q7WUFDeEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakYsd0RBQXdEO2dCQUN4RCxZQUFZLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25ELENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsZ0VBQWdFO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBRzdDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU87b0JBQ0wsTUFBTSxFQUFFLElBQUk7b0JBQ1osT0FBTyxFQUFFLFFBQVE7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztvQkFDTCxNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSTtxQkFDNUI7b0JBQ0QsT0FBTyxFQUFFLFFBQVE7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUUvQyx5Q0FBeUM7WUFDekMsNkNBQTZDO1lBQzdDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO1lBQzNFLENBQUM7WUFFRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUk7Z0JBQ3JDLE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FDWCwrREFBK0QsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUNwRixLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxFQUFFO2dCQUNuRCxPQUFPLEVBQUUsUUFBUTthQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBbkdVLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93VGFzayB9IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgJiBJbnRlcmZhY2VzICAgLS0tLVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYSBmcm9udGVuZCB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250ZW5kVGFza0V4ZWN1dGlvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUYXNrIGV4ZWN1dGlvbiBvdXRwdXQuXG4gICAqL1xuICBvdXRwdXQ6IGFueTtcblxuICAvKipcbiAgICogVGFzayBleGVjdXRpb24gb3V0Y29tZSAoZS5nLiwgJ0RvbmUnLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdGYWlsZWQnKS5cbiAgICovXG4gIG91dGNvbWU6IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2VydmljZSByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIGZyb250ZW5kIHdvcmtmbG93IHRhc2tzLlxuICogXG4gKiBUaGlzIHNlcnZpY2UgaGFuZGxlcyB0aGUgZXhlY3V0aW9uIG9mIGZyb250ZW5kIG9yIGh5YnJpZCB0YXNrcyB1c2luZ1xuICogdGhlIGNvbW1hbmQgaW5mcmFzdHJ1Y3R1cmUuIEl0IHRyYW5zbGF0ZXMgY29tbWFuZCByZXN1bHRzIGludG9cbiAqIHdvcmtmbG93LWNvbXBhdGlibGUgb3V0cHV0IGFuZCBvdXRjb21lIGZvcm1hdC5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHJlcGxhY2VhYmxlIHBlciBwbGF0Zm9ybSBhbmQgY29udGFpbnMgYWxsIGV4ZWN1dGlvbiBsb2dpYy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRnJvbnRlbmRUYXNrRXhlY3V0b3Ige1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFNlcnZpY2UgPSBpbmplY3QoQVhQQ29tbWFuZFNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmcm9udGVuZCB3b3JrZmxvdyB0YXNrLlxuICAgKiBcbiAgICogT25seSBleGVjdXRlcyB0YXNrcyB3aXRoIGV4ZWN1dGlvbk1vZGUgJ2Zyb250ZW5kJyBvciAnYm90aCcuXG4gICAqIEJhY2tlbmQgdGFza3Mgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhpcyBleGVjdXRvci5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gVGFzayB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIEV4ZWN1dGlvbiByZXN1bHQgd2l0aCBvdXRwdXQgYW5kIG91dGNvbWVcbiAgICogXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGFzayBpcyBub3QgYSBmcm9udGVuZCB0YXNrXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHRhc2s6IEFYUFdvcmtmbG93VGFzayk6IFByb21pc2U8RnJvbnRlbmRUYXNrRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgLy8gVmFsaWRhdGUgZXhlY3V0aW9uIG1vZGVcbiAgICBpZiAodGFzay5leGVjdXRpb25Nb2RlICE9PSAnZnJvbnRlbmQnICYmIHRhc2suZXhlY3V0aW9uTW9kZSAhPT0gJ2JvdGgnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYXNrICcke3Rhc2suYWN0aXZpdHlJZH0nIGlzIG5vdCBhIGZyb250ZW5kIHRhc2suIGAgK1xuICAgICAgICBgRXhlY3V0aW9uIG1vZGU6ICR7dGFzay5leGVjdXRpb25Nb2RlfS4gQmFja2VuZCB0YXNrcyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIGNvbW1hbmQgZXhpc3RzXG4gICAgICBjb25zdCBjb21tYW5kRXhpc3RzID0gdGhpcy5jb21tYW5kU2VydmljZS5leGlzdHModGFzay5hY3Rpdml0eVR5cGUpO1xuXG4gICAgICBpZiAoIWNvbW1hbmRFeGlzdHMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbRnJvbnRlbmRUYXNrRXhlY3V0b3JdIOKaoO+4jyBGcm9udGVuZCBhY3Rpdml0eSAnJHt0YXNrLmFjdGl2aXR5VHlwZX0nIGlzIG5vdCByZWdpc3RlcmVkLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgZXhlY3V0aW9uLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICAgICAgb3V0Y29tZTogJ0RvbmUnXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgY29tbWFuZCBpbnB1dFxuICAgICAgLy8gRmxhdHRlbiBwcm9wZXJ0aWVzIGlmIG5lc3RlZCAod29ya2Zsb3ctc3R1ZGlvIGZvcm1hdClcbiAgICAgIGxldCBjb21tYW5kSW5wdXQgPSB0YXNrLmlucHV0IHx8IHRhc2suY29uZmlnIHx8IHt9O1xuICAgICAgaWYgKGNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddICYmIHR5cGVvZiBjb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRmxhdHRlbjoge3Byb3BlcnRpZXM6IHt0ZXh0OiBcIi4uLlwifX0gLT4ge3RleHQ6IFwiLi4uXCJ9XG4gICAgICAgIGNvbW1hbmRJbnB1dCA9IHsgLi4uY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gfTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhlY3V0ZSBhY3Rpdml0eSB2aWEgQ29tbWFuZEJ1c1xuICAgICAgLy8gQWN0aXZpdGllcyByZWdpc3RlcmVkIGFzIEFYUENvbW1hbmQgcmV0dXJuIHtvdXRwdXQsIG91dGNvbWVzfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21tYW5kU2VydmljZS5leGVjdXRlPFJlY29yZDxzdHJpbmcsIGFueT4sIHtcbiAgICAgICAgb3V0cHV0OiBhbnk7XG4gICAgICAgIG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgfT4odGFzay5hY3Rpdml0eVR5cGUsIGNvbW1hbmRJbnB1dCk7XG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2U/LnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lOiAnRmFpbGVkJyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbWFuZFJlc3VsdCA9IHJlc3VsdC5kYXRhO1xuICAgICAgY29uc3Qgb3V0Y29tZXMgPSBjb21tYW5kUmVzdWx0Py5vdXRjb21lcyA/PyB7fTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIG91dGNvbWUgZnJvbSBjb21tYW5kIHJlc3VsdHNcbiAgICAgIC8vIERlZmF1bHQgdG8gJ0RvbmUnIGlmIG5vIG91dGNvbWVzIHNwZWNpZmllZFxuICAgICAgbGV0IG91dGNvbWUgPSAnRG9uZSc7XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3V0Y29tZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3V0Y29tZSA9IG91dGNvbWVzWydEb25lJ10gPyAnRG9uZScgOiBPYmplY3Qua2V5cyhvdXRjb21lcylbMF0gfHwgJ0RvbmUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGNvbW1hbmRSZXN1bHQ/Lm91dHB1dCA/PyBudWxsLFxuICAgICAgICBvdXRjb21lLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgW0Zyb250ZW5kVGFza0V4ZWN1dG9yXSDinYwgRXJyb3IgZXhlY3V0aW5nIGZyb250ZW5kIGFjdGl2aXR5ICcke3Rhc2suYWN0aXZpdHlUeXBlfSc6YCxcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InIH0sXG4gICAgICAgIG91dGNvbWU6ICdGYWlsZWQnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport { FrontendTaskExecutor } from './frontend-task-executor.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Manager - Facade for workflow lifecycle orchestration.\n *\n * This service is the ONLY interface the frontend uses to interact with workflows.\n * It follows Clean Architecture principles and does NOT contain execution or business logic.\n *\n * Responsibilities:\n * - Orchestrate workflow lifecycle (start, execute, complete, resume)\n * - Delegate execution to FrontendTaskExecutor\n * - Cache workflow state in memory\n * - Expose a stable API for UI\n *\n * Rules:\n * - No HTTP calls (delegates to AXPWorkflowEngine)\n * - No CommandBus / Command execution (delegates to FrontendTaskExecutor)\n * - No workflow branching logic (backend decides)\n * - No business validation (backend validates)\n * - No backend assumptions (uses abstract runtime service)\n */\nexport class AXPWorkflowManager {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.workflowEngine = inject(AXP_WORKFLOW_ENGINE);\n this.frontendTaskExecutor = inject(FrontendTaskExecutor);\n //#endregion\n //#region ---- State Cache ----\n /**\n * Cache workflow states in memory for quick access.\n * Key: instanceId\n * Value: AXPWorkflowInstanceState\n */\n this.stateCache = new Map();\n /**\n * Cache TTL in milliseconds (5 minutes).\n */\n this.CACHE_TTL = 5 * 60 * 1000;\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Start a new workflow instance.\n *\n * Creates a new workflow instance in backend and returns instance ID.\n * Backend decides what to do: returns pendingTask or indicates completion.\n *\n * @param workflowId - Workflow ID to start\n * @param input - Initial input data (optional)\n * @returns Start result with instanceId, state, and nextTask\n *\n * @example\n * ```typescript\n * const result = await workflowManager.start('my-workflow', { userId: '123' });\n *\n * if (result.success && result.nextTask) {\n * // Execute task if frontend\n * if (result.nextTask.executionMode === 'frontend') {\n * const execResult = await workflowManager.execute(result.nextTask);\n * await workflowManager.complete(result.instanceId!, result.nextTask, execResult.outcome, execResult.output);\n * }\n * }\n * ```\n */\n async start(workflowId, input = {}) {\n try {\n const response = await this.workflowEngine.start({\n workflowId,\n input\n });\n // Cache state (normalize Date)\n const startNormalizedState = { ...response.state };\n if (startNormalizedState.lastUpdated && !(startNormalizedState.lastUpdated instanceof Date)) {\n startNormalizedState.lastUpdated = new Date(startNormalizedState.lastUpdated);\n }\n this.stateCache.set(response.instanceId, startNormalizedState);\n return {\n success: true,\n instanceId: response.instanceId,\n state: startNormalizedState,\n nextTask: response.pendingTask || null,\n output: startNormalizedState.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error starting workflow:', error);\n return {\n success: false,\n error: error.message || 'Failed to start workflow'\n };\n }\n }\n /**\n * Execute a frontend task.\n *\n * Delegates to FrontendTaskExecutor for actual execution.\n * Only executes tasks with executionMode 'frontend' or 'both'.\n *\n * @param task - Task to execute\n * @returns Execution result with output and outcome\n *\n * @throws Error if task is not a frontend task\n */\n async execute(task) {\n return this.frontendTaskExecutor.execute(task);\n }\n /**\n * Complete a task and get next task from backend.\n *\n * Sends task result to backend API.\n * Backend decides: next task, fail, or complete workflow.\n *\n * @param instanceId - Workflow instance ID\n * @param task - Completed task\n * @param outcome - Task outcome (e.g., 'Done', 'Confirmed', 'Cancelled')\n * @param output - Task output/result (optional)\n * @returns Complete result with next task (if any)\n */\n async complete(instanceId, task, outcome, output) {\n try {\n // Send result to backend - backend decides next step\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId: task.activityId,\n taskToken: task.taskToken,\n outcome,\n userInput: output\n });\n // Update cache\n let completeNormalizedState = response.state;\n if (response.state) {\n // Normalize lastUpdated to Date (for cache safety)\n completeNormalizedState = { ...response.state };\n if (completeNormalizedState.lastUpdated && !(completeNormalizedState.lastUpdated instanceof Date)) {\n completeNormalizedState.lastUpdated = new Date(completeNormalizedState.lastUpdated);\n }\n this.stateCache.set(instanceId, completeNormalizedState);\n }\n return {\n success: true,\n instanceId,\n state: completeNormalizedState,\n nextTask: response.nextTask || null,\n output: response.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error completing task:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to complete task'\n };\n }\n }\n /**\n * Resume a suspended workflow (e.g., after user interaction).\n *\n * Backend determines nextStep based on outcome and outcomeConnections.\n * Client only provides instanceId, stepId, outcome, and optional userInput.\n *\n * @param instanceId - Workflow instance ID\n * @param stepId - Step ID that was waiting for user input\n * @param outcome - User action outcome (e.g., 'Confirmed', 'Cancelled', 'Submitted')\n * @param userInput - Optional user input data\n * @param taskToken - Secure task token (required for secure resumption)\n * @returns Resume result with next task (if any)\n */\n async resume(instanceId, stepId, outcome, userInput, taskToken) {\n try {\n // Ensure taskToken is provided for secure resumption\n if (!taskToken) {\n throw new Error('Missing taskToken for resume operation');\n }\n // Backend handles everything: checks outcomeConnections and determines nextStep\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId,\n taskToken,\n outcome,\n userInput\n });\n // Update cache with state from backend\n if (response.state) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...response.state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n this.stateCache.set(instanceId, normalizedState);\n }\n // Normalize state Date for return\n const normalizedState = response.state ? { ...response.state } : undefined;\n if (normalizedState && normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n return {\n success: true,\n instanceId,\n state: normalizedState || response.state,\n nextTask: response.nextTask || null, // Backend determines this from outcomeConnections\n output: response.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error resuming workflow:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to resume workflow'\n };\n }\n }\n /**\n * Get workflow instance state.\n *\n * Retrieves state from cache (if valid) or from backend.\n *\n * @param instanceId - Workflow instance ID\n * @returns Workflow instance state or null if not found\n */\n async getState(instanceId) {\n // Check cache first\n const cached = this.stateCache.get(instanceId);\n if (cached) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedCached = { ...cached };\n if (normalizedCached.lastUpdated && !(normalizedCached.lastUpdated instanceof Date)) {\n normalizedCached.lastUpdated = new Date(normalizedCached.lastUpdated);\n }\n // Validate cache age\n const cacheAge = Date.now() - normalizedCached.lastUpdated.getTime();\n if (cacheAge < this.CACHE_TTL) {\n return normalizedCached;\n }\n }\n // Fetch from backend\n try {\n const state = await this.workflowEngine.getState({\n instanceId\n });\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n // Update cache\n this.stateCache.set(instanceId, normalizedState);\n return normalizedState;\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error getting workflow state:', error);\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLM0UsT0FBTyxFQUFFLG9CQUFvQixFQUErQixNQUFNLGtDQUFrQyxDQUFDOztBQTZHckcsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFckUsWUFBWTtRQUVaLG1DQUFtQztRQUVuQzs7OztXQUlHO1FBQ0ssZUFBVSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBRWpFOztXQUVHO1FBQ2MsY0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBeVA1QztJQXZQQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FDVCxVQUFrQixFQUNsQixRQUE2QixFQUFFO1FBRS9CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLFVBQVU7Z0JBQ1YsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixNQUFNLG9CQUFvQixHQUFHLEVB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LEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxtREFBbUQ7WUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsRixlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBRUQsZUFBZTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUVqRCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBMVFVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0VuZ2luZSwgQVhQX1dPUktGTE9XX0VOR0lORSB9IGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmltcG9ydCB7XG4gIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSxcbiAgQVhQV29ya2Zsb3dUYXNrLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHsgRnJvbnRlbmRUYXNrRXhlY3V0b3IsIEZyb250ZW5kVGFza0V4ZWN1dGlvblJlc3VsdCB9IGZyb20gJy4vZnJvbnRlbmQtdGFzay1leGVjdXRvci5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dTdGFydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIEZpcnN0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQgaW1tZWRpYXRlbHkpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNvbXBsZXRpbmcgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q29tcGxldGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzdW1pbmcgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Jlc3VtZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgd29ya2Zsb3cgc3RhdGUuXG4gICAqL1xuICBzdGF0ZT86IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcblxuICAvKipcbiAgICogTmV4dCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBNYW5hZ2VyIC0gRmFjYWRlIGZvciB3b3JrZmxvdyBsaWZlY3ljbGUgb3JjaGVzdHJhdGlvbi5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBPTkxZIGludGVyZmFjZSB0aGUgZnJvbnRlbmQgdXNlcyB0byBpbnRlcmFjdCB3aXRoIHdvcmtmbG93cy5cbiAqIEl0IGZvbGxvd3MgQ2xlYW4gQXJjaGl0ZWN0dXJlIHByaW5jaXBsZXMgYW5kIGRvZXMgTk9UIGNvbnRhaW4gZXhlY3V0aW9uIG9yIGJ1c2luZXNzIGxvZ2ljLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBPcmNoZXN0cmF0ZSB3b3JrZmxvdyBsaWZlY3ljbGUgKHN0YXJ0LCBleGVjdXRlLCBjb21wbGV0ZSwgcmVzdW1lKVxuICogLSBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gRnJvbnRlbmRUYXNrRXhlY3V0b3JcbiAqIC0gQ2FjaGUgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIEV4cG9zZSBhIHN0YWJsZSBBUEkgZm9yIFVJXG4gKiBcbiAqIFJ1bGVzOlxuICogLSBObyBIVFRQIGNhbGxzIChkZWxlZ2F0ZXMgdG8gQVhQV29ya2Zsb3dFbmdpbmUpXG4gKiAtIE5vIENvbW1hbmRCdXMgLyBDb21tYW5kIGV4ZWN1dGlvbiAoZGVsZWdhdGVzIHRvIEZyb250ZW5kVGFza0V4ZWN1dG9yKVxuICogLSBObyB3b3JrZmxvdyBicmFuY2hpbmcgbG9naWMgKGJhY2tlbmQgZGVjaWRlcylcbiAqIC0gTm8gYnVzaW5lc3MgdmFsaWRhdGlvbiAoYmFja2VuZCB2YWxpZGF0ZXMpXG4gKiAtIE5vIGJhY2tlbmQgYXNzdW1wdGlvbnMgKHVzZXMgYWJzdHJhY3QgcnVudGltZSBzZXJ2aWNlKVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd01hbmFnZXIge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dFbmdpbmUgPSBpbmplY3QoQVhQX1dPUktGTE9XX0VOR0lORSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZnJvbnRlbmRUYXNrRXhlY3V0b3IgPSBpbmplY3QoRnJvbnRlbmRUYXNrRXhlY3V0b3IpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU3RhdGUgQ2FjaGUgICAtLS0tXG5cbiAgLyoqXG4gICAqIENhY2hlIHdvcmtmbG93IHN0YXRlcyBpbiBtZW1vcnkgZm9yIHF1aWNrIGFjY2Vzcy5cbiAgICogS2V5OiBpbnN0YW5jZUlkXG4gICAqIFZhbHVlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIFRUTCBpbiBtaWxsaXNlY29uZHMgKDUgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IENBQ0hFX1RUTCA9IDUgKiA2MCAqIDEwMDA7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGEgbmV3IHdvcmtmbG93IGluc3RhbmNlIGluIGJhY2tlbmQgYW5kIHJldHVybnMgaW5zdGFuY2UgSUQuXG4gICAqIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGRvOiByZXR1cm5zIHBlbmRpbmdUYXNrIG9yIGluZGljYXRlcyBjb21wbGV0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIHdvcmtmbG93SWQgLSBXb3JrZmxvdyBJRCB0byBzdGFydFxuICAgKiBAcGFyYW0gaW5wdXQgLSBJbml0aWFsIGlucHV0IGRhdGEgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBTdGFydCByZXN1bHQgd2l0aCBpbnN0YW5jZUlkLCBzdGF0ZSwgYW5kIG5leHRUYXNrXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93TWFuYWdlci5zdGFydCgnbXktd29ya2Zsb3cnLCB7IHVzZXJJZDogJzEyMycgfSk7XG4gICAqIFxuICAgKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0Lm5leHRUYXNrKSB7XG4gICAqICAgLy8gRXhlY3V0ZSB0YXNrIGlmIGZyb250ZW5kXG4gICAqICAgaWYgKHJlc3VsdC5uZXh0VGFzay5leGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnKSB7XG4gICAqICAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLmV4ZWN1dGUocmVzdWx0Lm5leHRUYXNrKTtcbiAgICogICAgIGF3YWl0IHdvcmtmbG93TWFuYWdlci5jb21wbGV0ZShyZXN1bHQuaW5zdGFuY2VJZCEsIHJlc3VsdC5uZXh0VGFzaywgZXhlY1Jlc3VsdC5vdXRjb21lLCBleGVjUmVzdWx0Lm91dHB1dCk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc3RhcnQoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge31cbiAgKTogUHJvbWlzZTxXb3JrZmxvd1N0YXJ0UmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5zdGFydCh7XG4gICAgICAgIHdvcmtmbG93SWQsXG4gICAgICAgIGlucHV0XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2FjaGUgc3RhdGUgKG5vcm1hbGl6ZSBEYXRlKVxuICAgICAgY29uc3Qgc3RhcnROb3JtYWxpemVkU3RhdGUgPSB7IC4uLnJlc3BvbnNlLnN0YXRlIH07XG4gICAgICBpZiAoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChyZXNwb25zZS5pbnN0YW5jZUlkLCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQ6IHJlc3BvbnNlLmluc3RhbmNlSWQsXG4gICAgICAgIHN0YXRlOiBzdGFydE5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLnBlbmRpbmdUYXNrIHx8IG51bGwsXG4gICAgICAgIG91dHB1dDogc3RhcnROb3JtYWxpemVkU3RhdGUub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBzdGFydGluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmcm9udGVuZCB0YXNrLlxuICAgKiBcbiAgICogRGVsZWdhdGVzIHRvIEZyb250ZW5kVGFza0V4ZWN1dG9yIGZvciBhY3R1YWwgZXhlY3V0aW9uLlxuICAgKiBPbmx5IGV4ZWN1dGVzIHRhc2tzIHdpdGggZXhlY3V0aW9uTW9kZSAnZnJvbnRlbmQnIG9yICdib3RoJy5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gVGFzayB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIEV4ZWN1dGlvbiByZXN1bHQgd2l0aCBvdXRwdXQgYW5kIG91dGNvbWVcbiAgICogXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGFzayBpcyBub3QgYSBmcm9udGVuZCB0YXNrXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHRhc2s6IEFYUFdvcmtmbG93VGFzayk6IFByb21pc2U8RnJvbnRlbmRUYXNrRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbnRlbmRUYXNrRXhlY3V0b3IuZXhlY3V0ZSh0YXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIHRhc2sgYW5kIGdldCBuZXh0IHRhc2sgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogU2VuZHMgdGFzayByZXN1bHQgdG8gYmFja2VuZCBBUEkuXG4gICAqIEJhY2tlbmQgZGVjaWRlczogbmV4dCB0YXNrLCBmYWlsLCBvciBjb21wbGV0ZSB3b3JrZmxvdy5cbiAgICogXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHBhcmFtIHRhc2sgLSBDb21wbGV0ZWQgdGFza1xuICAgKiBAcGFyYW0gb3V0Y29tZSAtIFRhc2sgb3V0Y29tZSAoZS5nLiwgJ0RvbmUnLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcpXG4gICAqIEBwYXJhbSBvdXRwdXQgLSBUYXNrIG91dHB1dC9yZXN1bHQgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBDb21wbGV0ZSByZXN1bHQgd2l0aCBuZXh0IHRhc2sgKGlmIGFueSlcbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlKFxuICAgIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgICB0YXNrOiBBWFBXb3JrZmxvd1Rhc2ssXG4gICAgb3V0Y29tZTogc3RyaW5nLFxuICAgIG91dHB1dD86IGFueVxuICApOiBQcm9taXNlPFdvcmtmbG93Q29tcGxldGVSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU2VuZCByZXN1bHQgdG8gYmFja2VuZCAtIGJhY2tlbmQgZGVjaWRlcyBuZXh0IHN0ZXBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5yZXN1bWUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGVwSWQ6IHRhc2suYWN0aXZpdHlJZCxcbiAgICAgICAgdGFza1Rva2VuOiB0YXNrLnRhc2tUb2tlbixcbiAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgdXNlcklucHV0OiBvdXRwdXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIGxldCBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSA9IHJlc3BvbnNlLnN0YXRlO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgICBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgICAgaWYgKGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgY29tcGxldGVOb3JtYWxpemVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogY29tcGxldGVOb3JtYWxpemVkU3RhdGUsXG4gICAgICAgIG5leHRUYXNrOiByZXNwb25zZS5uZXh0VGFzayB8fCBudWxsLFxuICAgICAgICBvdXRwdXQ6IHJlc3BvbnNlLm91dHB1dFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3IgY29tcGxldGluZyB0YXNrOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNvbXBsZXRlIHRhc2snXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgKGUuZy4sIGFmdGVyIHVzZXIgaW50ZXJhY3Rpb24pLlxuICAgKiBcbiAgICogQmFja2VuZCBkZXRlcm1pbmVzIG5leHRTdGVwIGJhc2VkIG9uIG91dGNvbWUgYW5kIG91dGNvbWVDb25uZWN0aW9ucy5cbiAgICogQ2xpZW50IG9ubHkgcHJvdmlkZXMgaW5zdGFuY2VJZCwgc3RlcElkLCBvdXRjb21lLCBhbmQgb3B0aW9uYWwgdXNlcklucHV0LlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcGFyYW0gc3RlcElkIC0gU3RlcCBJRCB0aGF0IHdhcyB3YWl0aW5nIGZvciB1c2VyIGlucHV0XG4gICAqIEBwYXJhbSBvdXRjb21lIC0gVXNlciBhY3Rpb24gb3V0Y29tZSAoZS5nLiwgJ0NvbmZpcm1lZCcsICdDYW5jZWxsZWQnLCAnU3VibWl0dGVkJylcbiAgICogQHBhcmFtIHVzZXJJbnB1dCAtIE9wdGlvbmFsIHVzZXIgaW5wdXQgZGF0YVxuICAgKiBAcGFyYW0gdGFza1Rva2VuIC0gU2VjdXJlIHRhc2sgdG9rZW4gKHJlcXVpcmVkIGZvciBzZWN1cmUgcmVzdW1wdGlvbilcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3VsdCB3aXRoIG5leHQgdGFzayAoaWYgYW55KVxuICAgKi9cbiAgYXN5bmMgcmVzdW1lKFxuICAgIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBvdXRjb21lOiBzdHJpbmcsXG4gICAgdXNlcklucHV0PzogYW55LFxuICAgIHRhc2tUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPFdvcmtmbG93UmVzdW1lUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSB0YXNrVG9rZW4gaXMgcHJvdmlkZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uXG4gICAgICBpZiAoIXRhc2tUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdGFza1Rva2VuIGZvciByZXN1bWUgb3BlcmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2tlbmQgaGFuZGxlcyBldmVyeXRoaW5nOiBjaGVja3Mgb3V0Y29tZUNvbm5lY3Rpb25zIGFuZCBkZXRlcm1pbmVzIG5leHRTdGVwXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUucmVzdW1lKHtcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RlcElkLFxuICAgICAgICB0YXNrVG9rZW4sXG4gICAgICAgIG91dGNvbWUsXG4gICAgICAgIHVzZXJJbnB1dFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSB3aXRoIHN0YXRlIGZyb20gYmFja2VuZFxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSB7IC4uLnJlc3BvbnNlLnN0YXRlIH07XG4gICAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3JtYWxpemUgc3RhdGUgRGF0ZSBmb3IgcmV0dXJuXG4gICAgICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSByZXNwb25zZS5zdGF0ZSA/IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUgJiYgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RhdGU6IG5vcm1hbGl6ZWRTdGF0ZSB8fCByZXNwb25zZS5zdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLm5leHRUYXNrIHx8IG51bGwsIC8vIEJhY2tlbmQgZGV0ZXJtaW5lcyB0aGlzIGZyb20gb3V0Y29tZUNvbm5lY3Rpb25zXG4gICAgICAgIG91dHB1dDogcmVzcG9uc2Uub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciByZXN1bWluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZXN1bWUgd29ya2Zsb3cnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqIFxuICAgKiBSZXRyaWV2ZXMgc3RhdGUgZnJvbSBjYWNoZSAoaWYgdmFsaWQpIG9yIGZyb20gYmFja2VuZC5cbiAgICogXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHJldHVybnMgV29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIGdldFN0YXRlKGluc3RhbmNlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIHwgbnVsbD4ge1xuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdGF0ZUNhY2hlLmdldChpbnN0YW5jZUlkKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDYWNoZWQgPSB7IC4uLmNhY2hlZCB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBhZ2VcbiAgICAgIGNvbnN0IGNhY2hlQWdlID0gRGF0ZS5ub3coKSAtIG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQuZ2V0VGltZSgpO1xuICAgICAgaWYgKGNhY2hlQWdlIDwgdGhpcy5DQUNIRV9UVEwpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDYWNoZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggZnJvbSBiYWNrZW5kXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5nZXRTdGF0ZSh7XG4gICAgICAgIGluc3RhbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgbm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRTdGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3IgZ2V0dGluZyB3b3JrZmxvdyBzdGF0ZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, Optional, Inject } from '@angular/core';\nimport { AXP_WORKFLOW_DEFINITION_LOADER, } from '../workflow-definition.config';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Local engine implementation that manages workflow progression and state.\n *\n * This engine:\n * - Returns frontend/both activities as pendingTask (does NOT execute them)\n * - Skips backend activities (does not error, continues execution)\n * - Maintains workflow state in memory\n * - Does not require backend API calls\n *\n * Execution of frontend tasks is handled by AXPWorkflowManager via FrontendTaskExecutor.\n * This engine only manages workflow progression and state storage.\n *\n * This is the DEFAULT engine provider. Applications can override it with\n * an API-based engine implementation.\n */\nexport class AXPWorkflowLocalEngine {\n //#region ---- Services & Dependencies ----\n constructor(definitionLoaders = null) {\n this.definitionLoaders = definitionLoaders;\n //#endregion\n //#region ---- Instance Storage ----\n /**\n * In-memory storage for workflow instances.\n * Key: instanceId\n * Value: LocalWorkflowState\n */\n this.instances = new Map();\n /**\n * Task token storage for secure resume operations.\n * Key: taskToken\n * Value: { instanceId, activityId }\n */\n this.taskTokens = new Map();\n }\n //#endregion\n //#region ---- Public Methods (AXPWorkflowEngine) ----\n /**\n * Start a new workflow instance.\n *\n * Creates an in-memory workflow instance and progresses it.\n * Frontend/both activities are returned as pendingTask for external execution.\n * Backend activities are skipped.\n */\n async start(request) {\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n // Initialize workflow state\n const state = {\n instanceId,\n workflowId: request.workflowId,\n status: 'running',\n variables: {},\n input: request.input || {},\n output: undefined,\n lastUpdated: now,\n };\n // Create local state\n const localState = {\n instanceId,\n workflowId: request.workflowId,\n definition,\n state,\n completedActivities: new Set(),\n activityResults: new Map(),\n };\n // Store instance\n this.instances.set(instanceId, localState);\n // Execute workflow steps\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n return {\n instanceId,\n state: localState.state,\n pendingTask: pendingTask || null,\n };\n }\n /**\n * Resume a suspended workflow instance.\n *\n * Validates task token, applies externally executed result,\n * and continues progressing workflow steps.\n */\n async resume(request) {\n // Validate task token\n const tokenInfo = this.taskTokens.get(request.taskToken);\n if (!tokenInfo || tokenInfo.instanceId !== request.instanceId || tokenInfo.activityId !== request.stepId) {\n throw new Error('Invalid task token');\n }\n // Get instance\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Store activity result (from external execution)\n localState.activityResults.set(request.stepId, {\n output: request.userInput || {},\n outcome: request.outcome,\n });\n localState.completedActivities.add(request.stepId);\n // Merge output/userInput into state variables\n if (request.userInput) {\n localState.state.variables = {\n ...localState.state.variables,\n ...(request.userInput || {}),\n };\n }\n // Mark activity as completed and continue progression\n // Continue progressing workflow steps (skipping backend activities)\n const nextTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n // Determine final status\n if (!nextTask && localState.state.status === 'running') {\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n }\n return {\n output: request.userInput || {},\n outcomes: { [request.outcome]: true },\n state: localState.state,\n nextTask: nextTask || null,\n };\n }\n /**\n * Get current workflow instance state.\n */\n async getState(request) {\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Normalize lastUpdated to Date (for cache safety)\n const state = { ...localState.state };\n if (state.lastUpdated && !(state.lastUpdated instanceof Date)) {\n state.lastUpdated = new Date(state.lastUpdated);\n }\n return state;\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Get workflow definition from available loaders.\n */\n async getDefinition(workflowId) {\n // Try all loaders in order\n const loaders = this.definitionLoaders || [];\n for (const loader of loaders) {\n const definition = await loader.get(workflowId);\n if (definition) {\n return definition;\n }\n }\n return null;\n }\n /**\n * Progress workflow steps starting from the current position.\n *\n * For frontend/both activities: returns task immediately (suspends workflow).\n * For backend activities: skips and continues.\n *\n * Returns the next pending task (if frontend activity found) or null (if completed).\n */\n async executeWorkflowSteps(localState) {\n const flowchart = localState.definition.root;\n const activities = flowchart.activities || [];\n const connections = flowchart.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach(activity => {\n activityMap.set(activity.id, activity);\n });\n // Build connection graph\n const outgoingConnections = new Map();\n const incomingConnections = new Map();\n connections.forEach(conn => {\n const sourceId = conn.source.activity;\n const targetId = conn.target.activity;\n if (!outgoingConnections.has(sourceId)) {\n outgoingConnections.set(sourceId, []);\n }\n outgoingConnections.get(sourceId).push(conn);\n if (!incomingConnections.has(targetId)) {\n incomingConnections.set(targetId, []);\n }\n incomingConnections.get(targetId).push(conn);\n });\n // Find starting activity (no incoming connections, or first activity)\n let currentActivityId = localState.currentActivityId;\n if (!currentActivityId) {\n // Find root activity (no incoming connections)\n for (const activity of activities) {\n if (!incomingConnections.has(activity.id)) {\n currentActivityId = activity.id;\n break;\n }\n }\n // If no root found, use first activity\n if (!currentActivityId && activities.length > 0) {\n currentActivityId = activities[0].id;\n }\n }\n // Execute workflow steps\n while (currentActivityId) {\n const activity = activityMap.get(currentActivityId);\n if (!activity) {\n break;\n }\n // Skip if already completed\n if (localState.completedActivities.has(currentActivityId)) {\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Determine execution mode\n const executionMode = activity.executionMode || 'frontend';\n // Handle backend activities: skip\n if (executionMode === 'backend') {\n console.log(`[WorkflowLocalEngine] ⏭️ Skipping backend activity: ${activity.type} (${activity.id})`);\n localState.completedActivities.add(currentActivityId);\n localState.activityResults.set(currentActivityId, {\n output: null,\n outcome: 'Done',\n });\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Handle frontend/both activities: return as pendingTask (do NOT execute)\n if (executionMode === 'frontend' || executionMode === 'both') {\n // Create task for external execution\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.type,\n activityName: activity.name ? activity.name : undefined,\n executionMode: executionMode,\n input: activity['properties'] || {},\n config: activity.customProperties || {},\n };\n // Store task token for secure resume\n this.taskTokens.set(task.taskToken, {\n instanceId: localState.instanceId,\n activityId: activity.id,\n });\n // Update state to indicate suspension\n localState.currentActivityId = currentActivityId;\n localState.state.status = 'suspended';\n localState.state.currentStepId = currentActivityId;\n // Return task immediately - AXPWorkflowManager will execute it\n return task;\n }\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n }\n // Workflow completed\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n localState.currentActivityId = undefined;\n return null;\n }\n /**\n * Get next activity ID based on connections and outcomes.\n */\n getNextActivityId(currentActivityId, outgoingConnections, activityResults) {\n const connections = outgoingConnections.get(currentActivityId) || [];\n if (connections.length === 0) {\n return null; // No outgoing connections - workflow ends\n }\n // Get current activity result\n const result = activityResults.get(currentActivityId);\n const outcome = result?.outcome || 'Done';\n // Find connection matching outcome\n // Outcome matching is typically done via port name (e.g., \"Done\", \"Failed\")\n for (const conn of connections) {\n const sourcePort = conn.source.port || 'Done';\n if (sourcePort === outcome) {\n return conn.target.activity;\n }\n }\n // If no matching outcome, use first connection (default path)\n if (connections.length > 0) {\n return connections[0].target.activity;\n }\n return null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [{ token: AXP_WORKFLOW_DEFINITION_LOADER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [AXP_WORKFLOW_DEFINITION_LOADER]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQjdELE9BQU8sRUFFTCw4QkFBOEIsR0FDL0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFpQnpELFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsK0NBQStDO0lBRS9DLFlBRW1CLG9CQUEwRCxJQUFJO1FBQTlELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkM7UUFJakYsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7SUFsQm5GLENBQUM7SUFvQkQsWUFBWTtJQUVaLDBEQUEwRDtJQUUxRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQWdDO1FBQzFDLHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXZCLDJCQUEyQjtRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNo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QUFDLFFBQVEsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQWxXVSxzQkFBc0Isa0JBSVgsOEJBQThCO21IQUp6QyxzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVU7OzBCQUtOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFbmdpbmUgfSBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5pbXBvcnQge1xuICBBWFBTdGFydFdvcmtmbG93UmVxdWVzdCxcbiAgQVhQU3RhcnRXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBSZXN1bWVXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFJlc3VtZVdvcmtmbG93UmVzcG9uc2UsXG4gIEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0LFxuICBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gIEFYUFdvcmtmbG93VGFzayxcbn0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7XG4gIEFYUFdvcmtmbG93RGVmaW5pdGlvbixcbiAgQVhQRmxvd2NoYXJ0LFxuICBBWFBBY3Rpdml0eSBhcyBBWFBXb3JrZmxvd0FjdGl2aXR5LFxuICBBWFBDb25uZWN0aW9uLFxufSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7XG4gIEFYUFdvcmtmbG93RGVmaW5pdGlvbkxvYWRlcixcbiAgQVhQX1dPUktGTE9XX0RFRklOSVRJT05fTE9BREVSLFxufSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLmNvbmZpZyc7XG5pbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogSW50ZXJuYWwgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXRlLlxuICovXG5pbnRlcmZhY2UgTG9jYWxXb3JrZmxvd1N0YXRlIHtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIGRlZmluaXRpb246IEFYUFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgc3RhdGU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcbiAgY3VycmVudEFjdGl2aXR5SWQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEFjdGl2aXRpZXM6IFNldDxzdHJpbmc+O1xuICBhY3Rpdml0eVJlc3VsdHM6IE1hcDxzdHJpbmcsIHsgb3V0cHV0OiBhbnk7IG91dGNvbWU6IHN0cmluZyB9Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogTG9jYWwgZW5naW5lIGltcGxlbWVudGF0aW9uIHRoYXQgbWFuYWdlcyB3b3JrZmxvdyBwcm9ncmVzc2lvbiBhbmQgc3RhdGUuXG4gKiBcbiAqIFRoaXMgZW5naW5lOlxuICogLSBSZXR1cm5zIGZyb250ZW5kL2JvdGggYWN0aXZpdGllcyBhcyBwZW5kaW5nVGFzayAoZG9lcyBOT1QgZXhlY3V0ZSB0aGVtKVxuICogLSBTa2lwcyBiYWNrZW5kIGFjdGl2aXRpZXMgKGRvZXMgbm90IGVycm9yLCBjb250aW51ZXMgZXhlY3V0aW9uKVxuICogLSBNYWludGFpbnMgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIERvZXMgbm90IHJlcXVpcmUgYmFja2VuZCBBUEkgY2FsbHNcbiAqIFxuICogRXhlY3V0aW9uIG9mIGZyb250ZW5kIHRhc2tzIGlzIGhhbmRsZWQgYnkgQVhQV29ya2Zsb3dNYW5hZ2VyIHZpYSBGcm9udGVuZFRhc2tFeGVjdXRvci5cbiAqIFRoaXMgZW5naW5lIG9ubHkgbWFuYWdlcyB3b3JrZmxvdyBwcm9ncmVzc2lvbiBhbmQgc3RhdGUgc3RvcmFnZS5cbiAqIFxuICogVGhpcyBpcyB0aGUgREVGQVVMVCBlbmdpbmUgcHJvdmlkZXIuIEFwcGxpY2F0aW9ucyBjYW4gb3ZlcnJpZGUgaXQgd2l0aFxuICogYW4gQVBJLWJhc2VkIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93TG9jYWxFbmdpbmUgaW1wbGVtZW50cyBBWFBXb3JrZmxvd0VuZ2luZSB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBWFBfV09SS0ZMT1dfREVGSU5JVElPTl9MT0FERVIpIFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmaW5pdGlvbkxvYWRlcnM6IEFYUFdvcmtmbG93RGVmaW5pdGlvbkxvYWRlcltdIHwgbnVsbCA9IG51bGxcbiAgKSB7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEluc3RhbmNlIFN0b3JhZ2UgICAtLS0tXG5cbiAgLyoqXG4gICAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciB3b3JrZmxvdyBpbnN0YW5jZXMuXG4gICAqIEtleTogaW5zdGFuY2VJZFxuICAgKiBWYWx1ZTogTG9jYWxXb3JrZmxvd1N0YXRlXG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2NhbFdvcmtmbG93U3RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIFRhc2sgdG9rZW4gc3RvcmFnZSBmb3Igc2VjdXJlIHJlc3VtZSBvcGVyYXRpb25zLlxuICAgKiBLZXk6IHRhc2tUb2tlblxuICAgKiBWYWx1ZTogeyBpbnN0YW5jZUlkLCBhY3Rpdml0eUlkIH1cbiAgICovXG4gIHByaXZhdGUgdGFza1Rva2VucyA9IG5ldyBNYXA8c3RyaW5nLCB7IGluc3RhbmNlSWQ6IHN0cmluZzsgYWN0aXZpdHlJZDogc3RyaW5nIH0+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAoQVhQV29ya2Zsb3dFbmdpbmUpICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICogXG4gICAqIENyZWF0ZXMgYW4gaW4tbWVtb3J5IHdvcmtmbG93IGluc3RhbmNlIGFuZCBwcm9ncmVzc2VzIGl0LlxuICAgKiBGcm9udGVuZC9ib3RoIGFjdGl2aXRpZXMgYXJlIHJldHVybmVkIGFzIHBlbmRpbmdUYXNrIGZvciBleHRlcm5hbCBleGVjdXRpb24uXG4gICAqIEJhY2tlbmQgYWN0aXZpdGllcyBhcmUgc2tpcHBlZC5cbiAgICovXG4gIGFzeW5jIHN0YXJ0KHJlcXVlc3Q6IEFYUFN0YXJ0V29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBTdGFydFdvcmtmbG93UmVzcG9uc2U+IHtcbiAgICAvLyBHZW5lcmF0ZSBpbnN0YW5jZSBJRFxuICAgIGNvbnN0IGluc3RhbmNlSWQgPSBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0RGVmaW5pdGlvbihyZXF1ZXN0LndvcmtmbG93SWQpO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBkZWZpbml0aW9uIG5vdCBmb3VuZDogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB3b3JrZmxvdyBzdGF0ZVxuICAgIGNvbnN0IHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgd29ya2Zsb3dJZDogcmVxdWVzdC53b3JrZmxvd0lkLFxuICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICB2YXJpYWJsZXM6IHt9LFxuICAgICAgaW5wdXQ6IHJlcXVlc3QuaW5wdXQgfHwge30sXG4gICAgICBvdXRwdXQ6IHVuZGVmaW5lZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBub3csXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBsb2NhbCBzdGF0ZVxuICAgIGNvbnN0IGxvY2FsU3RhdGU6IExvY2FsV29ya2Zsb3dTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICB3b3JrZmxvd0lkOiByZXF1ZXN0LndvcmtmbG93SWQsXG4gICAgICBkZWZpbml0aW9uLFxuICAgICAgc3RhdGUsXG4gICAgICBjb21wbGV0ZWRBY3Rpdml0aWVzOiBuZXcgU2V0KCksXG4gICAgICBhY3Rpdml0eVJlc3VsdHM6IG5ldyBNYXAoKSxcbiAgICB9O1xuXG4gICAgLy8gU3RvcmUgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlcy5zZXQoaW5zdGFuY2VJZCwgbG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtmbG93IHN0ZXBzXG4gICAgY29uc3QgcGVuZGluZ1Rhc2sgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXb3JrZmxvd1N0ZXBzKGxvY2FsU3RhdGUpO1xuXG4gICAgLy8gVXBkYXRlIHN0YXRlXG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHN0YXRlOiBsb2NhbFN0YXRlLnN0YXRlLFxuICAgICAgcGVuZGluZ1Rhc2s6IHBlbmRpbmdUYXNrIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBWYWxpZGF0ZXMgdGFzayB0b2tlbiwgYXBwbGllcyBleHRlcm5hbGx5IGV4ZWN1dGVkIHJlc3VsdCxcbiAgICogYW5kIGNvbnRpbnVlcyBwcm9ncmVzc2luZyB3b3JrZmxvdyBzdGVwcy5cbiAgICovXG4gIGFzeW5jIHJlc3VtZShyZXF1ZXN0OiBBWFBSZXN1bWVXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFJlc3VtZVdvcmtmbG93UmVzcG9uc2U+IHtcbiAgICAvLyBWYWxpZGF0ZSB0YXNrIHRva2VuXG4gICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy50YXNrVG9rZW5zLmdldChyZXF1ZXN0LnRhc2tUb2tlbik7XG4gICAgaWYgKCF0b2tlbkluZm8gfHwgdG9rZW5JbmZvLmluc3RhbmNlSWQgIT09IHJlcXVlc3QuaW5zdGFuY2VJZCB8fCB0b2tlbkluZm8uYWN0aXZpdHlJZCAhPT0gcmVxdWVzdC5zdGVwSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YXNrIHRva2VuJyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGluc3RhbmNlXG4gICAgY29uc3QgbG9jYWxTdGF0ZSA9IHRoaXMuaW5zdGFuY2VzLmdldChyZXF1ZXN0Lmluc3RhbmNlSWQpO1xuICAgIGlmICghbG9jYWxTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBpbnN0YW5jZSBub3QgZm91bmQ6ICR7cmVxdWVzdC5pbnN0YW5jZUlkfWApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGFjdGl2aXR5IHJlc3VsdCAoZnJvbSBleHRlcm5hbCBleGVjdXRpb24pXG4gICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHMuc2V0KHJlcXVlc3Quc3RlcElkLCB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3QudXNlcklucHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZTogcmVxdWVzdC5vdXRjb21lLFxuICAgIH0pO1xuICAgIGxvY2FsU3RhdGUuY29tcGxldGVkQWN0aXZpdGllcy5hZGQocmVxdWVzdC5zdGVwSWQpO1xuXG4gICAgLy8gTWVyZ2Ugb3V0cHV0L3VzZXJJbnB1dCBpbnRvIHN0YXRlIHZhcmlhYmxlc1xuICAgIGlmIChyZXF1ZXN0LnVzZXJJbnB1dCkge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXMgPSB7XG4gICAgICAgIC4uLmxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAuLi4ocmVxdWVzdC51c2VySW5wdXQgfHwge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFjdGl2aXR5IGFzIGNvbXBsZXRlZCBhbmQgY29udGludWUgcHJvZ3Jlc3Npb25cbiAgICAvLyBDb250aW51ZSBwcm9ncmVzc2luZyB3b3JrZmxvdyBzdGVwcyAoc2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0aWVzKVxuICAgIGNvbnN0IG5leHRUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGZpbmFsIHN0YXR1c1xuICAgIGlmICghbmV4dFRhc2sgJiYgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogcmVxdWVzdC51c2VySW5wdXQgfHwge30sXG4gICAgICBvdXRjb21lczogeyBbcmVxdWVzdC5vdXRjb21lXTogdHJ1ZSB9LFxuICAgICAgc3RhdGU6IGxvY2FsU3RhdGUuc3RhdGUsXG4gICAgICBuZXh0VGFzazogbmV4dFRhc2sgfHwgbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUocmVxdWVzdDogQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4ge1xuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZS5zdGF0ZSB9O1xuICAgIGlmIChzdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgZGVmaW5pdGlvbiBmcm9tIGF2YWlsYWJsZSBsb2FkZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZWZpbml0aW9uKHdvcmtmbG93SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgbnVsbD4ge1xuICAgIC8vIFRyeSBhbGwgbG9hZGVycyBpbiBvcmRlclxuICAgIGNvbnN0IGxvYWRlcnMgPSB0aGlzLmRlZmluaXRpb25Mb2FkZXJzIHx8IFtdO1xuICAgIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCBsb2FkZXIuZ2V0KHdvcmtmbG93SWQpO1xuICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3Jlc3Mgd29ya2Zsb3cgc3RlcHMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICogXG4gICAqIEZvciBmcm9udGVuZC9ib3RoIGFjdGl2aXRpZXM6IHJldHVybnMgdGFzayBpbW1lZGlhdGVseSAoc3VzcGVuZHMgd29ya2Zsb3cpLlxuICAgKiBGb3IgYmFja2VuZCBhY3Rpdml0aWVzOiBza2lwcyBhbmQgY29udGludWVzLlxuICAgKiBcbiAgICogUmV0dXJucyB0aGUgbmV4dCBwZW5kaW5nIHRhc2sgKGlmIGZyb250ZW5kIGFjdGl2aXR5IGZvdW5kKSBvciBudWxsIChpZiBjb21wbGV0ZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlOiBMb2NhbFdvcmtmbG93U3RhdGUpOiBQcm9taXNlPEFYUFdvcmtmbG93VGFzayB8IG51bGw+IHtcbiAgICBjb25zdCBmbG93Y2hhcnQgPSBsb2NhbFN0YXRlLmRlZmluaXRpb24ucm9vdDtcbiAgICBjb25zdCBhY3Rpdml0aWVzID0gZmxvd2NoYXJ0LmFjdGl2aXRpZXMgfHwgW107XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBmbG93Y2hhcnQuY29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBhY3Rpdml0eSBtYXBcbiAgICBjb25zdCBhY3Rpdml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0FjdGl2aXR5PigpO1xuICAgIGFjdGl2aXRpZXMuZm9yRWFjaChhY3Rpdml0eSA9PiB7XG4gICAgICBhY3Rpdml0eU1hcC5zZXQoYWN0aXZpdHkuaWQsIGFjdGl2aXR5KTtcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGNvbm5lY3Rpb24gZ3JhcGhcbiAgICBjb25zdCBvdXRnb2luZ0Nvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIEFYUENvbm5lY3Rpb25bXT4oKTtcbiAgICBjb25zdCBpbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIEFYUENvbm5lY3Rpb25bXT4oKTtcblxuICAgIGNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VJZCA9IGNvbm4uc291cmNlLmFjdGl2aXR5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSBjb25uLnRhcmdldC5hY3Rpdml0eTtcblxuICAgICAgaWYgKCFvdXRnb2luZ0Nvbm5lY3Rpb25zLmhhcyhzb3VyY2VJZCkpIHtcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucy5zZXQoc291cmNlSWQsIFtdKTtcbiAgICAgIH1cbiAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMuZ2V0KHNvdXJjZUlkKSEucHVzaChjb25uKTtcblxuICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb25zLmhhcyh0YXJnZXRJZCkpIHtcbiAgICAgICAgaW5jb21pbmdDb25uZWN0aW9ucy5zZXQodGFyZ2V0SWQsIFtdKTtcbiAgICAgIH1cbiAgICAgIGluY29taW5nQ29ubmVjdGlvbnMuZ2V0KHRhcmdldElkKSEucHVzaChjb25uKTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmQgc3RhcnRpbmcgYWN0aXZpdHkgKG5vIGluY29taW5nIGNvbm5lY3Rpb25zLCBvciBmaXJzdCBhY3Rpdml0eSlcbiAgICBsZXQgY3VycmVudEFjdGl2aXR5SWQgPSBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkO1xuICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIC8vIEZpbmQgcm9vdCBhY3Rpdml0eSAobm8gaW5jb21pbmcgY29ubmVjdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IGFjdGl2aXR5IG9mIGFjdGl2aXRpZXMpIHtcbiAgICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb25zLmhhcyhhY3Rpdml0eS5pZCkpIHtcbiAgICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IGFjdGl2aXR5LmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBJZiBubyByb290IGZvdW5kLCB1c2UgZmlyc3QgYWN0aXZpdHlcbiAgICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQgJiYgYWN0aXZpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdGllc1swXS5pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtmbG93IHN0ZXBzXG4gICAgd2hpbGUgKGN1cnJlbnRBY3Rpdml0eUlkKSB7XG4gICAgICBjb25zdCBhY3Rpdml0eSA9IGFjdGl2aXR5TWFwLmdldChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgICBpZiAoIWFjdGl2aXR5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGlmIGFscmVhZHkgY29tcGxldGVkXG4gICAgICBpZiAobG9jYWxTdGF0ZS5jb21wbGV0ZWRBY3Rpdml0aWVzLmhhcyhjdXJyZW50QWN0aXZpdHlJZCkpIHtcbiAgICAgICAgLy8gTW92ZSB0byBuZXh0IGFjdGl2aXR5XG4gICAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyxcbiAgICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IG5leHRJZCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgZXhlY3V0aW9uIG1vZGVcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBhY3Rpdml0eS5leGVjdXRpb25Nb2RlIHx8ICdmcm9udGVuZCc7XG5cbiAgICAgIC8vIEhhbmRsZSBiYWNrZW5kIGFjdGl2aXRpZXM6IHNraXBcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnYmFja2VuZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDij63vuI8gU2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0eTogJHthY3Rpdml0eS50eXBlfSAoJHthY3Rpdml0eS5pZH0pYFxuICAgICAgICApO1xuICAgICAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHMuc2V0KGN1cnJlbnRBY3Rpdml0eUlkLCB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTW92ZSB0byBuZXh0IGFjdGl2aXR5XG4gICAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyxcbiAgICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IG5leHRJZCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm4gYXMgcGVuZGluZ1Rhc2sgKGRvIE5PVCBleGVjdXRlKVxuICAgICAgaWYgKGV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcgfHwgZXhlY3V0aW9uTW9kZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIENyZWF0ZSB0YXNrIGZvciBleHRlcm5hbCBleGVjdXRpb25cbiAgICAgICAgY29uc3QgdGFzazogQVhQV29ya2Zsb3dUYXNrID0ge1xuICAgICAgICAgIHRhc2tUb2tlbjogQVhQRGF0YUdlbmVyYXRvci51dWlkKCksXG4gICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgICAgYWN0aXZpdHlUeXBlOiBhY3Rpdml0eS50eXBlLFxuICAgICAgICAgIGFjdGl2aXR5TmFtZTogYWN0aXZpdHkubmFtZSA/IGFjdGl2aXR5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZXhlY3V0aW9uTW9kZTogZXhlY3V0aW9uTW9kZSBhcyAnZnJvbnRlbmQnIHwgJ2JhY2tlbmQnIHwgJ2JvdGgnLFxuICAgICAgICAgIGlucHV0OiAoYWN0aXZpdHkgYXMgYW55KVsncHJvcGVydGllcyddIHx8IHt9LFxuICAgICAgICAgIGNvbmZpZzogYWN0aXZpdHkuY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdG9yZSB0YXNrIHRva2VuIGZvciBzZWN1cmUgcmVzdW1lXG4gICAgICAgIHRoaXMudGFza1Rva2Vucy5zZXQodGFzay50YXNrVG9rZW4sIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBsb2NhbFN0YXRlLmluc3RhbmNlSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB0byBpbmRpY2F0ZSBzdXNwZW5zaW9uXG4gICAgICAgIGxvY2FsU3RhdGUuY3VycmVudEFjdGl2aXR5SWQgPSBjdXJyZW50QWN0aXZpdHlJZDtcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnc3VzcGVuZGVkJztcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5jdXJyZW50U3RlcElkID0gY3VycmVudEFjdGl2aXR5SWQ7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRhc2sgaW1tZWRpYXRlbHkgLSBBWFBXb3JrZmxvd01hbmFnZXIgd2lsbCBleGVjdXRlIGl0XG4gICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIG5leHQgYWN0aXZpdHlcbiAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLFxuICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgKTtcbiAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gbmV4dElkID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBXb3JrZmxvdyBjb21wbGV0ZWRcbiAgICBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZCA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXh0IGFjdGl2aXR5IElEIGJhc2VkIG9uIGNvbm5lY3Rpb25zIGFuZCBvdXRjb21lcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgY3VycmVudEFjdGl2aXR5SWQ6IHN0cmluZyxcbiAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zOiBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+LFxuICAgIGFjdGl2aXR5UmVzdWx0czogTWFwPHN0cmluZywgeyBvdXRwdXQ6IGFueTsgb3V0Y29tZTogc3RyaW5nIH0+XG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gb3V0Z29pbmdDb25uZWN0aW9ucy5nZXQoY3VycmVudEFjdGl2aXR5SWQpIHx8IFtdO1xuXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIE5vIG91dGdvaW5nIGNvbm5lY3Rpb25zIC0gd29ya2Zsb3cgZW5kc1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IGFjdGl2aXR5IHJlc3VsdFxuICAgIGNvbnN0IHJlc3VsdCA9IGFjdGl2aXR5UmVzdWx0cy5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgIGNvbnN0IG91dGNvbWUgPSByZXN1bHQ/Lm91dGNvbWUgfHwgJ0RvbmUnO1xuXG4gICAgLy8gRmluZCBjb25uZWN0aW9uIG1hdGNoaW5nIG91dGNvbWVcbiAgICAvLyBPdXRjb21lIG1hdGNoaW5nIGlzIHR5cGljYWxseSBkb25lIHZpYSBwb3J0IG5hbWUgKGUuZy4sIFwiRG9uZVwiLCBcIkZhaWxlZFwiKVxuICAgIGZvciAoY29uc3QgY29ubiBvZiBjb25uZWN0aW9ucykge1xuICAgICAgY29uc3Qgc291cmNlUG9ydCA9IGNvbm4uc291cmNlLnBvcnQgfHwgJ0RvbmUnO1xuICAgICAgaWYgKHNvdXJjZVBvcnQgPT09IG91dGNvbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbm4udGFyZ2V0LmFjdGl2aXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIG1hdGNoaW5nIG91dGNvbWUsIHVzZSBmaXJzdCBjb25uZWN0aW9uIChkZWZhdWx0IHBhdGgpXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uc1swXS50YXJnZXQuYWN0aXZpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './frontend-task-executor.service';\nexport * from './workflow-local-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IFJ1bnRpbWUgU2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zyb250ZW5kLXRhc2stZXhlY3V0b3Iuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWxvY2FsLWVuZ2luZSc7Il19","import { InjectionToken } from '@angular/core';\nexport const AXP_WORKFLOW_PROVIDER = new InjectionToken('AXP_WORKFLOW_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_WORKFLOW_CATEGORY_PROVIDER = new InjectionToken('AXP_WORKFLOW_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBNEUvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBc0JILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbj86IG51bWJlciAgICAgICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtcz86IG51bWJlciAgICAgICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbi8qKlxuICogV29ya2Zsb3cgRGVmaW5pdGlvbiAtIE1ldGFkYXRhIGZvciBVSSBhbmQgdG9vbGluZy5cbiAqIENvbnRhaW5zIGFsbCBtZXRhZGF0YSBuZWVkZWQgZm9yIGRpc3BsYXlpbmcgd29ya2Zsb3dzIGluIHRvb2xib3ggYW5kIGRlc2lnbmVyLlxuICogVGhlIGBuYW1lYCBwcm9wZXJ0eSBpcyB1c2VkIGFzIHRoZSB3b3JrZmxvdyBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFdvcmtmbG93IG5hbWUgLSB1c2VkIGFzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKiBUaGlzIGlzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIERpc3BsYXkgbmFtZSBmb3IgVUkuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB3b3JrZmxvdyBkb2VzLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogQ2F0ZWdvcnkgZm9yIGdyb3VwaW5nIGluIHRvb2xib3guXG4gICAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBJY29uIG5hbWUgb3IgY2xhc3MuXG4gICAqL1xuICBpY29uPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB3b3JrZmxvdyBpcyBicm93c2FibGUgaW4gdGhlIHRvb2xib3guXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIGlzQnJvd3NhYmxlPzogYm9vbGVhbjtcbiAgXG4gIC8qKlxuICAgKiBWZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIFxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHdvcmtmbG93IGlzIHB1Ymxpc2hlZC5cbiAgICovXG4gIGlzUHVibGlzaGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dQcm92aWRlclRva2VuID1cbiAgICB8IEFYUFdvcmtmbG93UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQV29ya2Zsb3dQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dQcm92aWRlclRva2VuW10+KCdBWFBfV09SS0ZMT1dfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd1Byb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciB3b3JrZmxvd3NcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHdvcmtmbG93IGRlZmluaXRpb24gbWV0YWRhdGEgYXJyYXlcbiAgICAgKi9cbiAgICBnZXRMaXN0KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGFbXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gbWV0YWRhdGEgYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIG1ldGFkYXRhIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGEgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyPjtcblxuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX0NBVEVHT1JZX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyIHtcbiAgICBnZXRMaXN0KHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+O1xuICAgIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeSB8IHVuZGVmaW5lZD47XG59XG5cbiJdfQ==","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER } from './workflow-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Workflow Definition Service\n *\n * Manages workflow definitions (metadata) for UI and tooling.\n * Similar to AXPActivityDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has workflows (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPWorkflowDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_WORKFLOW_CATEGORY_PROVIDER, { optional: true }) || [];\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for workflow definitions by categoryId - O(1) lookup */\n this.workflowsByCategory = new Map();\n /** Cache for individual workflow definitions by name - O(1) lookup */\n this.workflowsByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingWorkflowsRequests = new Map();\n this.pendingWorkflowRequests = new Map();\n }\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Workflow Definitions ----\n /**\n * Get workflow definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches workflow definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get workflow definitions from\n * @returns Array of workflow definition metadata\n */\n async getWorkflowsByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.workflowsByCategory.has(categoryId)) {\n return this.workflowsByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no workflows - cache empty array and skip API call\n const emptyArray = [];\n this.workflowsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowsRequests.has(categoryId)) {\n return this.pendingWorkflowsRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowsFromProviders(categoryId);\n this.pendingWorkflowsRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single workflow definition metadata by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Workflow name (unique identifier)\n * @returns Workflow definition metadata or undefined if not found\n */\n async getWorkflowByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.workflowsByName.has(name)) {\n return this.workflowsByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowRequests.has(name)) {\n return this.pendingWorkflowRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowFromProviders(name);\n this.pendingWorkflowRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific workflow definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByWorkflowName(workflowName) {\n // ✅ Search in cached workflow definitions\n for (const [categoryId, definitions] of this.workflowsByCategory.entries()) {\n if (definitions.some(def => def.name === workflowName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the workflow definition to find its category\n const definition = await this.getWorkflowByName(workflowName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for a workflow\n */\n async getCategoriesPathByWorkflowName(workflowName) {\n const categoryId = await this.getCategoryIdByWorkflowName(workflowName);\n if (!categoryId) {\n throw new Error(`Workflow '${workflowName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load workflow definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with workflow provider\n */\n async loadWorkflowsFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.workflowsByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.workflowsByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingWorkflowsRequests.delete(categoryId);\n }\n }\n /**\n * Load single workflow definition from providers and cache result\n */\n async loadWorkflowFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.workflowsByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached workflow definitions\n for (const definitions of this.workflowsByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.workflowsByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingWorkflowRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has workflows (uses cached count)\n */\n categoryHasWorkflows(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear workflows cache only\n */\n clearWorkflowsCache() {\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztRQUVqRixzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUMsQ0FBQztRQUUzRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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QkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQTNjUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93Q2F0ZWdvcnksIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGE+KCk7XG5cbiAgICAvKiogVHJhY2sgd2hpY2ggcHJvdmlkZXIgaW5kZXggb3ducyBlYWNoIGNhdGVnb3J5IChieSBjYXRlZ29yeSBJRCkgKi9cbiAgICBwcml2YXRlIGNhdGVnb3J5T3duZXJzaGlwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8gTWFwcyBjYXRlZ29yeUlkIOKGkiBwcm92aWRlciBpbmRleFxuXG4gICAgLyoqIFBlbmRpbmcgQVBJIHJlcXVlc3RzIHRvIHByZXZlbnQgZHVwbGljYXRlIGNhbGxzICovXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YSB8IHVuZGVmaW5lZD4+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIEFQSTogQ2F0ZWdvcmllcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIHdpdGggYWdncmVzc2l2ZSBjYWNoaW5nXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBSZXR1cm5zIGNhY2hlZCByZXN1bHQgaW1tZWRpYXRlbHkgaWYgYXZhaWxhYmxlLFxuICAgICAqIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgQVBJIGNhbGxzIGR1cmluZyBuYXZpZ2F0aW9uXG4gICAgICogXG4gICAgICogQHBhcmFtIHBhcmVudElkIC0gUGFyZW50IGNhdGVnb3J5IElEICh1bmRlZmluZWQgPSByb290IGNhdGVnb3JpZXMpXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgY2F0ZWdvcmllcyB3aXRoIGNvdW50IG1ldGFkYXRhIChjaGlsZHJlbkNvdW50LCBpdGVtc0NvdW50KVxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3JpZXMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBSZXR1cm4gY2FjaGVkIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5nZXQocGFyZW50SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBQcmV2ZW50IGR1cGxpY2F0ZSByZXF1ZXN0czogUmV0dXJuIHBlbmRpbmcgcHJvbWlzZVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQ3JlYXRlIHNpbmdsZSByZXF1ZXN0IGFuZCBjYWNoZSBpdFxuICAgICAgICBjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMubG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLnNldChwYXJlbnRJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGNhdGVnb3J5IGJ5IElEIHdpdGggTygxKSBsb29rdXBcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFVzZXMgTWFwIGZvciBpbnN0YW50IHJldHJpZXZhbCwgZmFsbHMgYmFjayB0b1xuICAgICAqIHNlYXJjaGluZyBjYWNoZSwgdGhlbiBwcm92aWRlcnMgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcnlCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHBhcmVudC1jaGlsZCBsaXN0c1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3JpZXMgb2YgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXRlZ29yeUlkLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgcm9vdCBjYXRlZ29yaWVzIGlmIG5vdCBsb2FkZWRcbiAgICAgICAgaWYgKCF0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLmhhcyh1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldENhdGVnb3JpZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXNCeUlkLmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBCcmVhZHRoLWZpcnN0IHNlYXJjaCB0aHJvdWdoIGhpZXJhcmNoeVxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZyb20gcm9vdCB0byBzcGVjaWZpZWQgY2F0ZWdvcnlcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IEJ1aWxkcyBwYXRoIHVzaW5nIGNhY2hlZCBjYXRlZ29yaWVzIG9ubHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5SWQoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgcGF0aDogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50Q2F0ZWdvcnlJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gY2F0ZWdvcnlJZDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudENhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY3VycmVudENhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2F0ZWdvcnkgJyR7Y3VycmVudENhdGVnb3J5SWR9JyBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgudW5zaGlmdChjYXRlZ29yeSk7XG4gICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnlJZCA9IGNhdGVnb3J5LnBhcmVudElkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IFdvcmtmbG93IERlZmluaXRpb25zICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb25zIGZvciBhIGNhdGVnb3J5IHdpdGggc21hcnQgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogQ2hlY2tzIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICogLSBJZiBpdGVtc0NvdW50ID0gMCwgcmV0dXJucyBlbXB0eSBhcnJheSAobm8gQVBJIGNhbGwpXG4gICAgICogLSBJZiBpdGVtc0NvdW50ID4gMCwgbG9hZHMgYW5kIGNhY2hlcyB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAqIC0gUmV0dXJucyBjYWNoZWQgcmVzdWx0IG9uIHN1YnNlcXVlbnQgY2FsbHNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tXG4gICAgICogQHJldHVybnMgQXJyYXkgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YVxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdID0gW107XG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmdldChjYXRlZ29yeUlkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgTG9hZCBmcm9tIHByb3ZpZGVyc1xuICAgICAgICBjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMubG9hZFdvcmtmbG93c0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLnNldChjYXRlZ29yeUlkLCByZXF1ZXN0UHJvbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RQcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzaW5nbGUgd29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YSBieSBuYW1lIHdpdGggTygxKSBsb29rdXBcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFVzZXMgTWFwIGZvciBpbnN0YW50IHJldHJpZXZhbFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgV29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy53b3JrZmxvd3NCeU5hbWUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53b3JrZmxvd3NCeU5hbWUuZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZ2V0KG5hbWUpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkV29ya2Zsb3dGcm9tUHJvdmlkZXJzKG5hbWUpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLnNldChuYW1lLCByZXF1ZXN0UHJvbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RQcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBJRCBjb250YWluaW5nIGEgc3BlY2lmaWMgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogU2VhcmNoZXMgY2FjaGUgZmlyc3QsIGxvYWRzIG9uLWRlbWFuZCBpZiBuZWVkZWRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yeUlkQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IFtjYXRlZ29yeUlkLCBkZWZpbml0aW9uc10gb2YgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIHdvcmtmbG93IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYSB3b3JrZmxvd1xuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3JpZXNQYXRoQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUlkQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKTtcbiAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93ICcke3dvcmtmbG93TmFtZX0nIG5vdCBmb3VuZCBpbiBhbnkgY2F0ZWdvcnlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDYXRlZ29yaWVzUGF0aEJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGU6IERhdGEgTG9hZGluZyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIExvYWQgY2F0ZWdvcmllcyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogVHJhY2tzIHByb3ZpZGVyIG93bmVyc2hpcCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBBUEkgY2FsbHNcbiAgICAgKiAtIEZvciByb290IChwYXJlbnRJZCA9IHVuZGVmaW5lZCk6IFF1ZXJ5IEFMTCBwcm92aWRlcnNcbiAgICAgKiAtIEZvciBjaGlsZHJlbjogT25seSBxdWVyeSB0aGUgcHJvdmlkZXIgdGhhdCBvd25zIHRoZSBwYXJlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmNhdGVnb3J5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXM6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvdmlkZXIocykgdG8gcXVlcnlcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgPSBwYXJlbnRJZFxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRQcm92aWRlckluZGV4Rm9yQ2F0ZWdvcnkocGFyZW50SWQpXG4gICAgICAgICAgICAgICAgOiBudWxsOyAvLyBSb290OiBxdWVyeSBhbGwgcHJvdmlkZXJzXG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb2x2ZWRQcm92aWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcmVzb2x2ZWRQcm92aWRlcnNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIHdlIGhhdmUgYSBzcGVjaWZpYyBwcm92aWRlciBpbmRleCBhbmQgdGhpcyBpc24ndCBpdFxuICAgICAgICAgICAgICAgIGlmIChwcm92aWRlckluZGljZXNUb1F1ZXJ5ICE9PSBudWxsICYmICFwcm92aWRlckluZGljZXNUb1F1ZXJ5LmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcC52YWx1ZSAmJiB0eXBlb2YgcC52YWx1ZS5nZXRMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXRzID0gYXdhaXQgcC52YWx1ZS5nZXRMaXN0KHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhdHMpICYmIGNhdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCguLi5jYXRzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKchSBUcmFjayBvd25lcnNoaXA6IFRoaXMgcHJvdmlkZXIgSU5ERVggb3ducyB0aGVzZSBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0cy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLnNldChjYXQuaWQsIGkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIENhY2hlIHJlc3VsdHMgZm9yIGZhc3Qgc3Vic2VxdWVudCBhY2Nlc3NcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuc2V0KHBhcmVudElkLCBjYXRlZ29yaWVzKTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0LmlkLCBjYXQpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuZGVsZXRlKHBhcmVudElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcHJvdmlkZXIgaW5kZXggdGhhdCBvd25zIGEgc3BlY2lmaWMgY2F0ZWdvcnlcbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBcnJheSB3aXRoIHByb3ZpZGVyIGluZGV4LCBvciBudWxsIGlmIG93bmVyc2hpcCB1bmtub3duIChxdWVyeSBhbGwpXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQcm92aWRlckluZGV4Rm9yQ2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgICAgICAgY29uc3Qgb3duZXJJbmRleCA9IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuZ2V0KGNhdGVnb3J5SWQpO1xuXG4gICAgICAgIGlmIChvd25lckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbb3duZXJJbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPd25lcnNoaXAgdW5rbm93biAtIHdpbGwgcXVlcnkgYWxsIHByb3ZpZGVycyAoZmFsbGJhY2spXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IE9ubHkgcXVlcmllcyB0aGUgcHJvdmlkZXIgdGhhdCBvd25zIHRoZSBjYXRlZ29yeVxuICAgICAqIFVzZXMgcHJvdmlkZXIgSU5ERVggdG8gbWF0Y2ggY2F0ZWdvcnkgcHJvdmlkZXIgd2l0aCB3b3JrZmxvdyBwcm92aWRlclxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93c0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIOKchSBTbWFydCByb3V0aW5nOiBHZXQgcHJvdmlkZXIgSU5ERVggdGhhdCBvd25zIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgPSBvd25lckluZGV4ICE9PSB1bmRlZmluZWQgPyBbb3duZXJJbmRleF0gOiBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmcyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMucHVzaCguLi5kZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIENhY2hlIHJlc3VsdHMgZm9yIGZhc3Qgc3Vic2VxdWVudCBhY2Nlc3NcbiAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5zZXQoY2F0ZWdvcnlJZCwgZGVmaW5pdGlvbnMpO1xuICAgICAgICAgICAgZGVmaW5pdGlvbnMuZm9yRWFjaChkZWYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmRlbGV0ZShjYXRlZ29yeUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93RnJvbVByb3ZpZGVycyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcblxuICAgICAgICAgICAgLy8gVHJ5IHByb3ZpZGVycyBmaXJzdFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHJlc29sdmVkUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldEJ5SWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHAudmFsdWUuZ2V0QnlJZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZGVmaW5pdGlvbnMuZmluZChkZWYgPT4gZGVmLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQobmFtZSwgZm91bmQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5kZWxldGUobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcmVhZHRoLWZpcnN0IHNlYXJjaCB0aHJvdWdoIGNhdGVnb3J5IGhpZXJhcmNoeVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUXVldWU6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPSBbdW5kZWZpbmVkXTtcbiAgICAgICAgY29uc3Qgc2VhcmNoZWQgPSBuZXcgU2V0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgICAgICB3aGlsZSAoc2VhcmNoUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzZWFyY2hRdWV1ZS5zaGlmdCgpITtcbiAgICAgICAgICAgIGlmIChzZWFyY2hlZC5oYXMocGFyZW50SWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlYXJjaGVkLmFkZChwYXJlbnRJZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENhdGVnb3JpZXMocGFyZW50SWQpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIE9wdGltaXphdGlvbjogT25seSBzZWFyY2ggY2hpbGRyZW4gaWYgY2hpbGRyZW5Db3VudCA+IDBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID4gMCAmJiAhc2VhcmNoZWQuaGFzKGNhdGVnb3J5LmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hRdWV1ZS5wdXNoKGNhdGVnb3J5LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBDYWNoZSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGNoaWxkcmVuICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc0NoaWxkcmVuKGNhdGVnb3J5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc0J5SWQuZ2V0KGNhdGVnb3J5SWQpO1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnkgPyBjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID4gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyB3b3JrZmxvd3MgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzV29ya2Zsb3dzKGNhdGVnb3J5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc0J5SWQuZ2V0KGNhdGVnb3J5SWQpO1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnkgPyAoY2F0ZWdvcnkuaXRlbXNDb3VudCA/PyAwKSA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgY2FjaGVzXG4gICAgICovXG4gICAgY2xlYXJBbGxDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgY2F0ZWdvcmllcyBjYWNoZSBvbmx5XG4gICAgICovXG4gICAgY2xlYXJDYXRlZ29yaWVzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHdvcmtmbG93cyBjYWNoZSBvbmx5XG4gICAgICovXG4gICAgY2xlYXJXb3JrZmxvd3NDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","// Workflow Definition Types (Storage/Database)\nexport * from './workflow-definition.config';\n// Workflow Instance Types (Storage/Database)\nexport * from './workflow-instance.types';\n// Activity System Types (Simplified)\nexport * from './activity/activity.types';\nexport * from './activity';\n// Simple Runtime (Coordinator only)\nexport * from './runtime';\n// Workflow Definition System (Category + Metadata)\nexport * from './workflow/workflow-definition.provider';\nexport * from './workflow/workflow-definition.service';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBd0I3Qyw2Q0FBNkM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQW1CMUMscUNBQXFDO0FBQ3JDLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyxZQUFZLENBQUM7QUFFM0Isb0NBQW9DO0FBQ3BDLGNBQWMsV0FBVyxDQUFDO0FBRTFCLG1EQUFtRDtBQUNuRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsd0NBQXdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrZmxvdyBEZWZpbml0aW9uIFR5cGVzIChTdG9yYWdlL0RhdGFiYXNlKVxuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLmNvbmZpZyc7XG4vLyBFeHBvcnQgd29ya2Zsb3cgZGVmaW5pdGlvbiB0eXBlcyAoZXhjbHVkaW5nIEFYUEFjdGl2aXR5IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggYWN0aXZpdHkudHlwZXMpXG5leHBvcnQgdHlwZSB7XG4gIEFYUFdvcmtmbG93RGVmaW5pdGlvbixcbiAgQVhQV29ya2Zsb3dEZWZpbml0aW9uSnNvbixcbiAgQVhQRmxvd2NoYXJ0LFxuICBBWFBBY3Rpdml0eSBhcyBBWFBXb3JrZmxvd0FjdGl2aXR5LFxuICBBWFBDb25uZWN0aW9uLFxuICBBWFBFbmRwb2ludCxcbiAgQVhQUG9zaXRpb24sXG4gIEFYUFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgQVhQV29ya2Zsb3dJbnB1dERlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93T3V0cHV0RGVmaW5pdGlvbixcbiAgQVhQRXhwcmVzc2lvbixcbiAgQVhQSW5wdXRWYWx1ZSxcbiAgQVhQT3V0cHV0VmFsdWUsXG4gIEFYUFZhcmlhYmxlTW9kZWwsXG4gIEFYUE1ldGFkYXRhLFxuICBBWFBDdXN0b21Qcm9wZXJ0aWVzLFxuICBBWFBXb3JrZmxvd09wdGlvbnMsXG4gIEFYUFN0b3JlZFdvcmtmbG93RGVmaW5pdGlvbixcbiAgQVhQVmVyc2lvbmVkRW50aXR5LFxufSBmcm9tICcuL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuXG4vLyBXb3JrZmxvdyBJbnN0YW5jZSBUeXBlcyAoU3RvcmFnZS9EYXRhYmFzZSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctaW5zdGFuY2UudHlwZXMnO1xuXG5cbi8vIFJlLWV4cG9ydCBXb3JrZmxvdyBJbnN0YW5jZSB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBBWFBXb3JrZmxvd0luc3RhbmNlLFxuICBBWFBXb3JrZmxvd1N0YXRlLFxuICBBWFBXb3JrZmxvd1N0YXR1cyxcbiAgQVhQV29ya2Zsb3dTdWJTdGF0dXMsXG4gIEFYUEFjdGl2aXR5U3RhdHVzLFxuICBBWFBFeGNlcHRpb25TdGF0ZSxcbiAgQVhQQWN0aXZpdHlJbmNpZGVudCxcbiAgQVhQV29ya2Zsb3dGYXVsdFN0YXRlLFxuICBBWFBCb29rbWFyayxcbiAgQVhQQ29tcGxldGlvbkNhbGxiYWNrU3RhdGUsXG4gIEFYUEFjdGl2aXR5VmFyaWFibGUsXG4gIEFYUEFjdGl2aXR5RXhlY3V0aW9uQ29udGV4dFN0YXRlLFxufSBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuLy8gQWN0aXZpdHkgU3lzdGVtIFR5cGVzIChTaW1wbGlmaWVkKVxuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS9hY3Rpdml0eS50eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHknO1xuXG4vLyBTaW1wbGUgUnVudGltZSAoQ29vcmRpbmF0b3Igb25seSlcbmV4cG9ydCAqIGZyb20gJy4vcnVudGltZSc7XG5cbi8vIFdvcmtmbG93IERlZmluaXRpb24gU3lzdGVtIChDYXRlZ29yeSArIE1ldGFkYXRhKVxuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlJzsiXX0=","import { Inject, NgModule, Optional } from '@angular/core';\nimport { AXPWorkflowDecideAction } from './actions/decide.action';\nimport { AXPStartWorkflowAction } from './actions/start-workflow.action';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXP_WORKFLOW_ENGINE, AXPWorkflowLocalEngine } from './engine';\nimport { AXPWorkflowManager } from './engine/runtime/workflow-manager.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowModule {\n static forRoot(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? { AXPStartWorkflowAction }),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n static forChild(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n // Built-in activities are already registered in forRoot via @NgModule providers\n // No need to register again in forChild\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? {}),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, deps: [{ token: 'AXPWorkflowModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPWorkflowModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBMEIvRSxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLFVBQVUsRUFBRSxDQUFDLFFBQW9DLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO3dCQUNsRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMzRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FB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TSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTRELFNBQWdCO1FBQzFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyRlUsaUJBQWlCLGtCQWlGSSwwQkFBMEI7Z0hBakYvQyxpQkFBaUI7Z0hBQWpCLGlCQUFpQixhQVRqQjtZQUNULHNCQUFzQjtZQUN0QjtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsc0JBQXNCO2FBQ3BDO1lBQ0Qsa0JBQWtCO1NBQ25COzs0RkFFVSxpQkFBaUI7a0JBYjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVCxzQkFBc0I7d0JBQ3RCOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxzQkFBc0I7eUJBQ3BDO3dCQUNELGtCQUFrQjtxQkFDbkI7aUJBQ0Y7OzBCQWtGYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQU3RhcnRXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vYWN0aW9ucy9zdGFydC13b3JrZmxvdy5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93LXJlZ2lzdGVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuaW1wb3J0IHsgQVhQX1dPUktGTE9XX0VOR0lORSwgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSB9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciB9IGZyb20gJy4vZW5naW5lL3J1bnRpbWUvd29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dNb2R1bGVDb25maWdzIHtcbiAgZnVuY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93RnVuY3Rpb24+O1xuICB9O1xuICBhY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPjtcbiAgfTtcbiAgd29ya2Zsb3dzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBBWFBXb3JrZmxvdztcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW10sXG4gIGV4cG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19FTkdJTkUsXG4gICAgICB1c2VFeGlzdGluZzogQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSxcbiAgICB9LFxuICAgIEFYUFdvcmtmbG93TWFuYWdlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbignc3RhcnQtd29ya2Zsb3cnLCBBWFBTdGFydFdvcmtmbG93QWN0aW9uKTtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdkZWNpZGUnLCBBWFBXb3JrZmxvd0RlY2lkZUFjdGlvbik7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8uZnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZ1bmN0aW9uKGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmFjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LndvcmtmbG93cykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy53b3JrZmxvd3MpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJXb3JrZmxvdyhrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGNvbmZpZz8uYWN0aW9ucyA/PyB7IEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gfSksXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5mdW5jdGlvbnMgPz8ge30pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIEJ1aWx0LWluIGFjdGl2aXRpZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiBmb3JSb290IHZpYSBATmdNb2R1bGUgcHJvdmlkZXJzXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYWdhaW4gaW4gZm9yQ2hpbGRcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6ICdBWFBXb3JrZmxvd01vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdzdGFydC13b3JrZmxvdycsIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24pO1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oJ2RlY2lkZScsIEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uKTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRnVuY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuYWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8ud29ya2Zsb3dzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLndvcmtmbG93cykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcldvcmtmbG93KGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5hY3Rpb25zID8/IHt9KSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjb25maWc/LmZ1bmN0aW9ucyA/PyB7fSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JykgaW5zdGFuY2VzOiBhbnlbXSkge1xuICAgIGluc3RhbmNlcz8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZigpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.AXPWorkflowRegistryService"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-workflow.mjs","sources":["../tmp-esm2022/workflow/lib/errors.types.js","../tmp-esm2022/workflow/lib/workflow-event-dispatcher.service.js","../tmp-esm2022/workflow/lib/workflow-registery.service.js","../tmp-esm2022/workflow/lib/workflow.types.js","../tmp-esm2022/workflow/lib/actions/decide.action.js","../tmp-esm2022/workflow/lib/workflow.service.js","../tmp-esm2022/workflow/lib/actions/start-workflow.action.js","../tmp-esm2022/workflow/lib/engine/workflow-definition.config.js","../tmp-esm2022/workflow/lib/engine/workflow-instance.types.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.provider.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/frontend-task-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-local-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/index.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.service.js","../tmp-esm2022/workflow/lib/engine/index.js","../tmp-esm2022/workflow/lib/workflow.module.js","../tmp-esm2022/workflow/acorex-platform-workflow.js"],"sourcesContent":["export class AXPWorkflowError extends Error {\n constructor(message, inner = null) {\n super(message);\n this.inner = inner;\n this.name = 'AXPWorkflowError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2Vycm9ycy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN2QyxZQUFZLE9BQWUsRUFBUyxRQUFzQixJQUFJO1FBQzFELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURpQixVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGlubmVyOiBFcnJvciB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQV29ya2Zsb3dFcnJvcic7XG4gICAgfVxufSJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowEventService {\n constructor() {\n this.eventSubject = new Subject();\n }\n dispatch(event) {\n this.eventSubject.next(event);\n }\n get events$() {\n return this.eventSubject.asObservable();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowEventService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93LWV2ZW50LWRpc3BhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTTNDLE1BQU0sT0FBTyx1QkFBdUI7SUFIcEM7UUFJVSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO0tBU3hEO0lBUEMsUUFBUSxDQUFDLEtBQXVCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQzsrR0FUVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFdmVudCB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dFdmVudFNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PEFYUFdvcmtmbG93RXZlbnQ+KCk7XG5cbiAgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBldmVudHMkKCk6IE9ic2VydmFibGU8QVhQV29ya2Zsb3dFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowRegistryService {\n constructor() {\n this.functionsMap = new Map();\n this.actionsMap = new Map();\n this.workflowsMap = new Map();\n }\n registerWorkflow(name, workflow) {\n this.workflowsMap.set(name, workflow);\n }\n getWorkflow(name) {\n return this.workflowsMap.get(name);\n }\n registerAction(name, action) {\n this.actionsMap.set(name, action);\n }\n getAction(name) {\n return this.actionsMap.get(name);\n }\n registerFunction(name, func) {\n this.functionsMap.set(name, func);\n }\n getFunction(name) {\n return this.functionsMap.get(name);\n }\n getFunctionNames() {\n return Array.from(this.functionsMap.keys());\n }\n getStep(workflowName, stepName) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n return steps[stepName];\n }\n return undefined;\n }\n updateStepInWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} does not exist in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addStepToWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (!steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} already exists in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addAfterStep(workflowId, stepId, newStepId, newStepAction, conditionExpression) {\n const step = this.getStep(workflowId, stepId);\n if (step != undefined) {\n this.addStepToWorkflow(workflowId, newStepId, {\n action: newStepAction,\n nextSteps: step.nextSteps,\n });\n this.updateStepInWorkflow(workflowId, stepId, {\n ...step,\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: conditionExpression }],\n nextStepId: newStepId,\n },\n ],\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlVLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDNUQsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBQ3hELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0E0RnZEO0lBMUZDLGdCQUFnQixDQUFDLElBQVksRUFBRSxRQUFxQjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBK0I7UUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsSUFBK0I7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FB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QUFDO0lBQ0gsQ0FBQzsrR0E5RlUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiwgQVhQV29ya2Zsb3dTdGVwIH0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgZnVuY3Rpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4+KCk7XG4gIHByaXZhdGUgYWN0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPj4oKTtcbiAgcHJpdmF0ZSB3b3JrZmxvd3NNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3c+KCk7XG5cbiAgcmVnaXN0ZXJXb3JrZmxvdyhuYW1lOiBzdHJpbmcsIHdvcmtmbG93OiBBWFBXb3JrZmxvdyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dzTWFwLnNldChuYW1lLCB3b3JrZmxvdyk7XG4gIH1cblxuICBnZXRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dzTWFwLmdldChuYW1lKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQWN0aW9uKG5hbWU6IHN0cmluZywgYWN0aW9uOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uc01hcC5zZXQobmFtZSwgYWN0aW9uKTtcbiAgfVxuXG4gIGdldEFjdGlvbihuYW1lOiBzdHJpbmcpOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICByZWdpc3RlckZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZnVuYzogVHlwZTxBWFBXb3JrZmxvd0Z1bmN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuZnVuY3Rpb25zTWFwLnNldChuYW1lLCBmdW5jKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICBnZXRGdW5jdGlvbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZ1bmN0aW9uc01hcC5rZXlzKCkpO1xuICB9XG5cbiAgZ2V0U3RlcCh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93U3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIHJldHVybiBzdGVwc1tzdGVwTmFtZV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVTdGVwSW5Xb3JrZmxvdyh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZywgc3RlcDogQVhQV29ya2Zsb3dTdGVwKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIGlmIChzdGVwc1tzdGVwTmFtZV0pIHtcbiAgICAgICAgc3RlcHNbc3RlcE5hbWVdID0gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RlcCB3aXRoIG5hbWUgJHtzdGVwTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gd29ya2Zsb3cgJHt3b3JrZmxvd05hbWV9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IHdpdGggbmFtZSAke3dvcmtmbG93TmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RlcFRvV29ya2Zsb3cod29ya2Zsb3dOYW1lOiBzdHJpbmcsIHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXA6IEFYUFdvcmtmbG93U3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy53b3JrZmxvd3NNYXAuZ2V0KHdvcmtmbG93TmFtZSk7XG4gICAgaWYgKHdvcmtmbG93KSB7XG4gICAgICBjb25zdCBzdGVwcyA9IHdvcmtmbG93LnN0ZXBzIGFzIHsgW2tleTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gICAgICBpZiAoIXN0ZXBzW3N0ZXBOYW1lXSkge1xuICAgICAgICBzdGVwc1tzdGVwTmFtZV0gPSBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwIHdpdGggbmFtZSAke3N0ZXBOYW1lfSBhbHJlYWR5IGV4aXN0cyBpbiB3b3JrZmxvdyAke3dvcmtmbG93TmFtZX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgd2l0aCBuYW1lICR7d29ya2Zsb3dOYW1lfSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBZnRlclN0ZXAoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBBY3Rpb246IHN0cmluZyxcbiAgICBjb25kaXRpb25FeHByZXNzaW9uOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcCh3b3JrZmxvd0lkLCBzdGVwSWQpO1xuICAgIGlmIChzdGVwICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hZGRTdGVwVG9Xb3JrZmxvdyh3b3JrZmxvd0lkLCBuZXdTdGVwSWQsIHtcbiAgICAgICAgYWN0aW9uOiBuZXdTdGVwQWN0aW9uLFxuICAgICAgICBuZXh0U3RlcHM6IHN0ZXAubmV4dFN0ZXBzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU3RlcEluV29ya2Zsb3cod29ya2Zsb3dJZCwgc3RlcElkLCB7XG4gICAgICAgIC4uLnN0ZXAsXG4gICAgICAgIG5leHRTdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6ICdTSU5HTEUnLCBleHByZXNzaW9uOiBjb25kaXRpb25FeHByZXNzaW9uIH1dLFxuICAgICAgICAgICAgbmV4dFN0ZXBJZDogbmV3U3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { cloneDeep, get } from 'lodash-es';\nimport { setSmart } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowContext {\n constructor(initialData = {}) {\n this.variables = {};\n this.stepOutputs = new Map();\n this.variables = cloneDeep(initialData);\n }\n setVariable(key, value) {\n setSmart(this.variables, key, value);\n }\n setVariables(context = {}) {\n this.variables = { ...this.variables, ...context };\n }\n getVariable(key) {\n return !key ? this.variables : get(this.variables, key);\n }\n setOutput(key, output) {\n this.stepOutputs.set(key, output);\n }\n setOutputs(values) {\n this.stepOutputs = new Map([...this.stepOutputs, ...values]);\n }\n getOutput(key) {\n return this.stepOutputs.get(key);\n }\n}\nexport class AXPWorkflowAction {\n constructor() {\n this.eventService = inject(AXPWorkflowEventService);\n }\n dispatch(event) {\n this.eventService.dispatch(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowAction, decorators: [{\n type: Injectable\n }] });\nexport class AXPWorkflowFunction {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowFunction, decorators: [{\n type: Injectable\n }] });\nexport function createWorkFlowEvent(type) {\n const eventCreator = (payload) => ({ type, payload });\n eventCreator.type = type;\n return eventCreator;\n}\nexport function ofType(...allowedTypes) {\n return filter((event) => allowedTypes.some((type) => event.type === type.type));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3cudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBUWpELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBWSxjQUFtQixFQUFFO1FBSXpCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUpoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0QsWUFBWSxDQUFDLFVBQWUsRUFBRTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBVSxHQUFtQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFXO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQVUsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXlCRCxNQUFNLE9BQWdCLGlCQUFpQjtJQUR2QztRQUVVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FPeEQ7SUFMVyxRQUFRLENBQUMsS0FBdUI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FMbUIsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRHRDLFVBQVU7O0FBWVgsTUFBTSxPQUFnQixtQkFBbUI7K0dBQW5CLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUR4QyxVQUFVOztBQVlYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxJQUFZO0lBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQTZCLEdBQUcsWUFBcUM7SUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHNldFNtYXJ0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvdyB7XG4gIHN0ZXBzOiB7IFtzdGVwTmFtZTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gIHN0YXJ0U3RlcElkOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93Q29udGV4dCB7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IGFueSA9IHt9KSB7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBjbG9uZURlZXAoaW5pdGlhbERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IGFueSA9IHt9O1xuICBwcml2YXRlIHN0ZXBPdXRwdXRzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHNldFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgc2V0U21hcnQodGhpcy52YXJpYWJsZXMsIGtleSwgdmFsdWUpO1xuICB9XG5cblxuICBzZXRWYXJpYWJsZXMoY29udGV4dDogYW55ID0ge30pIHtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IHsgLi4udGhpcy52YXJpYWJsZXMsIC4uLmNvbnRleHQgfTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlPFQgPSBhbnk+KGtleT86IHN0cmluZyB8IG51bGwpOiBUIHtcbiAgICByZXR1cm4gIWtleSA/IHRoaXMudmFyaWFibGVzIDogZ2V0KHRoaXMudmFyaWFibGVzLCBrZXkpO1xuICB9XG5cbiAgc2V0T3V0cHV0KGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RlcE91dHB1dHMuc2V0KGtleSwgb3V0cHV0KTtcbiAgfVxuXG4gIHNldE91dHB1dHModmFsdWVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zdGVwT3V0cHV0cyA9IG5ldyBNYXAoWy4uLnRoaXMuc3RlcE91dHB1dHMsIC4uLnZhbHVlc10pXG4gIH1cblxuICBnZXRPdXRwdXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwT3V0cHV0cy5nZXQoa2V5KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0FjdGlvbklucHV0ID0gYW55O1xuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NvbmRpdGlvblR5cGUgPSAnQU5EJyB8ICdPUicgfCAnU0lOR0xFJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NvbmRpdGlvbiB7XG4gIHR5cGU6IEFYUFdvcmtmbG93Q29uZGl0aW9uVHlwZTtcbiAgY29uZGl0aW9ucz86IEFYUFdvcmtmbG93Q29uZGl0aW9uW107IC8vIE5lc3RlZCBjb25kaXRpb25zXG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7IC8vIFVzZWQgaWYgdHlwZSBpcyAnU0lOR0xFJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93TmV4dFN0ZXAge1xuICBjb25kaXRpb25zOiBBWFBXb3JrZmxvd0NvbmRpdGlvbltdO1xuICBuZXh0U3RlcElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGVwIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGFjdGlvbjogQVhQV29ya2Zsb3dBY3Rpb24gfCBzdHJpbmc7XG4gIGlucHV0PzogQVhQV29ya2Zsb3dBY3Rpb25JbnB1dDtcbiAgbmV4dFN0ZXBzPzogQVhQV29ya2Zsb3dOZXh0U3RlcFtdO1xuICBjb25kaXRpb25zPzogQVhQV29ya2Zsb3dDb25kaXRpb25bXTtcbn1cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RXZlbnRTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaChldmVudCk7XG4gIH1cblxuICBhYnN0cmFjdCBleGVjdXRlKGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZXhlY3V0ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0V2ZW50PFQgPSBhbnk+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwYXlsb2FkPzogVDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrRmxvd0V2ZW50PFQ+KHR5cGU6IHN0cmluZykge1xuICBjb25zdCBldmVudENyZWF0b3IgPSAocGF5bG9hZDogVCkgPT4gKHsgdHlwZSwgcGF5bG9hZCB9KTtcbiAgZXZlbnRDcmVhdG9yLnR5cGUgPSB0eXBlO1xuICByZXR1cm4gZXZlbnRDcmVhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiguLi5hbGxvd2VkVHlwZXM6IEFycmF5PHsgdHlwZTogc3RyaW5nIH0+KSB7XG4gIHJldHVybiBmaWx0ZXIoKGV2ZW50OiBUKSA9PiBhbGxvd2VkVHlwZXMuc29tZSgodHlwZSkgPT4gZXZlbnQudHlwZSA9PT0gdHlwZS50eXBlKSk7XG59XG4iXX0=","import { Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowDecideAction extends AXPWorkflowAction {\n async execute(context) {\n // its a fake action\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDecideAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNyQyxvQkFBb0I7SUFDeEIsQ0FBQzsrR0FIUSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzs0RkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dDb250ZXh0IH0gZnJvbSBcIi4uL3dvcmtmbG93LnR5cGVzXCI7XG5cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dEZWNpZGVBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gaXRzIGEgZmFrZSBhY3Rpb25cbiAgICB9XG59Il19","import { Injectable, Injector, inject } from '@angular/core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { AXPWorkflowError } from './errors.types';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXPWorkflowContext, } from './workflow.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./workflow-registery.service\";\nexport class AXPWorkflowService {\n get events$() {\n return this.eventService.events$;\n }\n constructor(registryService, injector) {\n this.registryService = registryService;\n this.injector = injector;\n this.eventService = inject(AXPWorkflowEventService);\n }\n exists(name) {\n return !!this.registryService.getWorkflow(name);\n }\n async execute(workflow, initialContext = null) {\n // Instantiate or retrieve the workflow\n const wk = typeof workflow === 'string' ? this.getWorkflowInstance(workflow) : workflow;\n let currentStepId = wk.startStepId;\n const context = initialContext instanceof AXPWorkflowContext\n ? initialContext\n : new AXPWorkflowContext(this.processData(initialContext) ?? {});\n // Initialize context with initial variables\n while (currentStepId) {\n const currentStep = wk.steps[currentStepId];\n if (!currentStep) {\n throw new AXPWorkflowError(`Step '${currentStepId}' not found in the workflow steps.`);\n }\n // Instantiate or retrieve the action\n const action = typeof currentStep.action === 'string' ? this.getActionInstance(currentStep.action) : currentStep.action;\n //\n if (currentStep.input) {\n let inputs = {};\n await this.processInputs(cloneDeep(currentStep.input), inputs, '', context);\n await new Promise((resolve) => setTimeout(async () => {\n Object.assign(action, inputs);\n resolve(0);\n }));\n }\n try {\n await new Promise((resolve) => setTimeout(async () => {\n await action.execute(context);\n resolve(0);\n }, 0));\n }\n catch (error) {\n console.error(error);\n throw new AXPWorkflowError('Workflow Error', error);\n }\n // Determine the next step based on the conditions\n const nextStepInfo = await this.determineNextStep(currentStep, context);\n if (nextStepInfo) {\n currentStepId = nextStepInfo.nextStepId;\n }\n else {\n break; // Exit the loop if no next step is determined\n }\n }\n return context;\n }\n processData(initialContext) {\n //TODO: update values with expressions and return new object\n return initialContext;\n }\n getActionInstance(actionName) {\n const actionType = this.registryService.getAction(actionName);\n if (!actionType) {\n throw new AXPWorkflowError(`Action type '${actionName}' not found in the registry.`);\n }\n return this.injector.get(actionType);\n }\n getWorkflowInstance(workflowName) {\n const workflowType = this.registryService.getWorkflow(workflowName);\n if (!workflowType) {\n throw new AXPWorkflowError(`Workflow type '${workflowName}' not found in the registry.`);\n }\n return workflowType;\n }\n async determineNextStep(currentStep, context) {\n if (!currentStep.nextSteps) {\n return null;\n }\n for (const nextStep of currentStep.nextSteps) {\n if (await this.evaluateCondition(nextStep.conditions, context)) {\n return nextStep;\n }\n }\n return null;\n }\n async evaluateCondition(conditions, context) {\n if (!conditions || conditions.length === 0) {\n return true; // If no conditions, the step proceeds\n }\n // Map each condition to a promise using evaluateSingleCondition\n const conditionPromises = conditions.map((condition) => this.evaluateSingleCondition(condition, context));\n // Wait for all promises to resolve\n const results = await Promise.all(conditionPromises);\n // Check if every condition is true\n return results.every((result) => result);\n }\n async evaluateSingleCondition(condition, context) {\n switch (condition.type) {\n case 'SINGLE':\n return (!condition.expression ? true : await this.evaluateExpression(condition.expression, context));\n case 'AND':\n // Evaluate all conditions with 'AND' logic\n const andConditions = condition.conditions ?? [];\n const andResults = await Promise.all(andConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return andResults.every((result) => result);\n case 'OR':\n // Evaluate all conditions with 'OR' logic\n const orConditions = condition.conditions ?? [];\n const orResults = await Promise.all(orConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return orResults.some((result) => result);\n default:\n throw new AXPWorkflowError(`Unsupported condition type: ${condition.type}`);\n }\n }\n //TODO: return any and recursively update object, update scopes\n async evaluateExpression(templateExpression, context) {\n try {\n let expression = '';\n if (typeof templateExpression === 'string' && templateExpression.trim().includes('{{')) {\n const expressionMatch = templateExpression.match(/\\{\\{\\s*(.*?)\\s*\\}\\}/);\n if (!expressionMatch) {\n throw Error(`No valid expression found in \"${templateExpression}\"`);\n }\n expression = expressionMatch[1];\n }\n else {\n expression = templateExpression;\n }\n // Create a scope that includes context and registered functions\n const scope = { context, ...this.createFunctionScope() };\n // Evaluating the expression within the created scope\n const sandbox = new Function('scope', `return (async function() { with (scope) { return ${expression}; } })();`);\n const result = await sandbox(scope);\n return result;\n }\n catch (error) {\n console.error('Error evaluating expression:', error);\n return false;\n }\n }\n async processInputs(obj, inputs, pathPrefix = '', context = {}) {\n if (!obj) {\n return;\n }\n for await (const i of Object.entries(obj)) {\n const key = i[0];\n const value = i[1];\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n if (typeof value === 'string' && value.trim().includes('{{')) {\n const expValue = await this.evaluateExpression(value, context);\n set(inputs, currentPath, expValue);\n }\n else if (typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))) {\n // Recursively handle nested objects\n this.processInputs(value, inputs, currentPath, context);\n }\n else {\n // Apply static values directly\n set(inputs, currentPath, value);\n }\n }\n }\n createFunctionScope() {\n const scope = {};\n this.registryService.getFunctionNames().forEach((name) => {\n scope[name] = this.getFunctionInstance(name).execute;\n });\n return { methods: { scope } };\n }\n getFunctionInstance(functionName) {\n const functionType = this.registryService.getFunction(functionName);\n if (!functionType) {\n throw new AXPWorkflowError(`Function type '${functionName}' not found in the registry.`);\n }\n return this.injector.get(functionType);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, deps: [{ token: i1.AXPWorkflowRegistryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.AXPWorkflowRegistryService }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi93b3JrZmxvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBSUwsa0JBQWtCLEdBS25CLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQW9CLGVBQTJDLEVBQVUsUUFBa0I7UUFBdkUsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU5uRixpQkFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBTXdDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQ1gsUUFBOEIsRUFDOUIsaUJBQWtELElBQUk7UUFFdEQsdUNBQXVDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwTlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RXJyb3IgfSBmcm9tICcuL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1yZWdpc3Rlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvdyxcbiAgQVhQV29ya2Zsb3dBY3Rpb24sXG4gIEFYUFdvcmtmbG93Q29uZGl0aW9uLFxuICBBWFBXb3JrZmxvd0NvbnRleHQsXG4gIEFYUFdvcmtmbG93RXZlbnQsXG4gIEFYUFdvcmtmbG93RnVuY3Rpb24sXG4gIEFYUFdvcmtmbG93TmV4dFN0ZXAsXG4gIEFYUFdvcmtmbG93U3RlcCxcbn0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1NlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd0V2ZW50U2VydmljZSk7XG5cbiAgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxBWFBXb3JrZmxvd0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLmV2ZW50cyQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lzdHJ5U2VydmljZTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBleGlzdHMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cobmFtZSk7XG4gIH1cblxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgd29ya2Zsb3c6IEFYUFdvcmtmbG93IHwgc3RyaW5nLFxuICAgIGluaXRpYWxDb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQgfCBhbnkgfCBudWxsID0gbnVsbFxuICApOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIC8vIEluc3RhbnRpYXRlIG9yIHJldHJpZXZlIHRoZSB3b3JrZmxvd1xuICAgIGNvbnN0IHdrID0gdHlwZW9mIHdvcmtmbG93ID09PSAnc3RyaW5nJyA/IHRoaXMuZ2V0V29ya2Zsb3dJbnN0YW5jZSh3b3JrZmxvdykgOiB3b3JrZmxvdztcblxuICAgIGxldCBjdXJyZW50U3RlcElkID0gd2suc3RhcnRTdGVwSWQ7XG4gICAgY29uc3QgY29udGV4dCA9XG4gICAgICBpbml0aWFsQ29udGV4dCBpbnN0YW5jZW9mIEFYUFdvcmtmbG93Q29udGV4dFxuICAgICAgICA/IGluaXRpYWxDb250ZXh0XG4gICAgICAgIDogbmV3IEFYUFdvcmtmbG93Q29udGV4dCh0aGlzLnByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0KSA/PyB7fSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBjb250ZXh0IHdpdGggaW5pdGlhbCB2YXJpYWJsZXNcblxuICAgIHdoaWxlIChjdXJyZW50U3RlcElkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHdrLnN0ZXBzW2N1cnJlbnRTdGVwSWRdO1xuICAgICAgaWYgKCFjdXJyZW50U3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgU3RlcCAnJHtjdXJyZW50U3RlcElkfScgbm90IGZvdW5kIGluIHRoZSB3b3JrZmxvdyBzdGVwcy5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zdGFudGlhdGUgb3IgcmV0cmlldmUgdGhlIGFjdGlvblxuICAgICAgY29uc3QgYWN0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRTdGVwLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB0aGlzLmdldEFjdGlvbkluc3RhbmNlKGN1cnJlbnRTdGVwLmFjdGlvbikgOiBjdXJyZW50U3RlcC5hY3Rpb247XG4gICAgICAvL1xuICAgICAgaWYgKGN1cnJlbnRTdGVwLmlucHV0KSB7XG4gICAgICAgIGxldCBpbnB1dHM6IGFueSA9IHt9O1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbnB1dHMoY2xvbmVEZWVwKGN1cnJlbnRTdGVwLmlucHV0KSwgaW5wdXRzLCAnJywgY29udGV4dCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIGlucHV0cyk7XG4gICAgICAgICAgICByZXNvbHZlKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5leGVjdXRlKGNvbnRleHQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgwKTtcbiAgICAgICAgICB9LCAwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBBWFBXb3JrZmxvd0Vycm9yKCdXb3JrZmxvdyBFcnJvcicsIGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIERldGVybWluZSB0aGUgbmV4dCBzdGVwIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zXG4gICAgICBjb25zdCBuZXh0U3RlcEluZm8gPSBhd2FpdCB0aGlzLmRldGVybWluZU5leHRTdGVwKGN1cnJlbnRTdGVwLCBjb250ZXh0KTtcbiAgICAgIGlmIChuZXh0U3RlcEluZm8pIHtcbiAgICAgICAgY3VycmVudFN0ZXBJZCA9IG5leHRTdGVwSW5mby5uZXh0U3RlcElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7IC8vIEV4aXQgdGhlIGxvb3AgaWYgbm8gbmV4dCBzdGVwIGlzIGRldGVybWluZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIC8vVE9ETzogdXBkYXRlIHZhbHVlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gbmV3IG9iamVjdFxuICAgIHJldHVybiBpbml0aWFsQ29udGV4dDtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEFjdGlvbkluc3RhbmNlKGFjdGlvbk5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgICBjb25zdCBhY3Rpb25UeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0QWN0aW9uKGFjdGlvbk5hbWUpO1xuICAgIGlmICghYWN0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYEFjdGlvbiB0eXBlICcke2FjdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoYWN0aW9uVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtmbG93SW5zdGFuY2Uod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB7XG4gICAgY29uc3Qgd29ya2Zsb3dUeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAoIXdvcmtmbG93VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFdvcmtmbG93IHR5cGUgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93VHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lTmV4dFN0ZXAoXG4gICAgY3VycmVudFN0ZXA6IEFYUFdvcmtmbG93U3RlcCxcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd05leHRTdGVwIHwgbnVsbD4ge1xuICAgIGlmICghY3VycmVudFN0ZXAubmV4dFN0ZXBzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuZXh0U3RlcCBvZiBjdXJyZW50U3RlcC5uZXh0U3RlcHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5leHRTdGVwLmNvbmRpdGlvbnMsIGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbnM6IEFYUFdvcmtmbG93Q29uZGl0aW9uW10sIGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY29uZGl0aW9ucyB8fCBjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElmIG5vIGNvbmRpdGlvbnMsIHRoZSBzdGVwIHByb2NlZWRzXG4gICAgfVxuXG4gICAgLy8gTWFwIGVhY2ggY29uZGl0aW9uIHRvIGEgcHJvbWlzZSB1c2luZyBldmFsdWF0ZVNpbmdsZUNvbmRpdGlvblxuICAgIGNvbnN0IGNvbmRpdGlvblByb21pc2VzID0gY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kaXRpb24sIGNvbnRleHQpKTtcblxuICAgIC8vIFdhaXQgZm9yIGFsbCBwcm9taXNlcyB0byByZXNvbHZlXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmRpdGlvblByb21pc2VzKTtcblxuICAgIC8vIENoZWNrIGlmIGV2ZXJ5IGNvbmRpdGlvbiBpcyB0cnVlXG4gICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVTaW5nbGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBBWFBXb3JrZmxvd0NvbmRpdGlvbixcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuICghY29uZGl0aW9uLmV4cHJlc3Npb24gPyB0cnVlIDogYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24oY29uZGl0aW9uLmV4cHJlc3Npb24sIGNvbnRleHQpKSBhcyBib29sZWFuO1xuICAgICAgY2FzZSAnQU5EJzpcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGNvbmRpdGlvbnMgd2l0aCAnQU5EJyBsb2dpY1xuICAgICAgICBjb25zdCBhbmRDb25kaXRpb25zID0gY29uZGl0aW9uLmNvbmRpdGlvbnMgPz8gW107XG4gICAgICAgIGNvbnN0IGFuZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChhbmRDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gYW5kUmVzdWx0cy5ldmVyeSgocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gICAgICBjYXNlICdPUic6XG4gICAgICAgIC8vIEV2YWx1YXRlIGFsbCBjb25kaXRpb25zIHdpdGggJ09SJyBsb2dpY1xuICAgICAgICBjb25zdCBvckNvbmRpdGlvbnMgPSBjb25kaXRpb24uY29uZGl0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3JSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwob3JDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gb3JSZXN1bHRzLnNvbWUoKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFVuc3VwcG9ydGVkIGNvbmRpdGlvbiB0eXBlOiAke2NvbmRpdGlvbi50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vVE9ETzogcmV0dXJuIGFueSBhbmQgcmVjdXJzaXZlbHkgdXBkYXRlIG9iamVjdCwgdXBkYXRlIHNjb3Blc1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlRXhwcmVzc2lvbih0ZW1wbGF0ZUV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0KTogUHJvbWlzZTxCb29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBleHByZXNzaW9uID0gJyc7XG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgJiYgdGVtcGxhdGVFeHByZXNzaW9uLnRyaW0oKS5pbmNsdWRlcygne3snKSkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uTWF0Y2ggPSB0ZW1wbGF0ZUV4cHJlc3Npb24ubWF0Y2goL1xce1xce1xccyooLio/KVxccypcXH1cXH0vKTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gdmFsaWQgZXhwcmVzc2lvbiBmb3VuZCBpbiBcIiR7dGVtcGxhdGVFeHByZXNzaW9ufVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25NYXRjaFsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB0ZW1wbGF0ZUV4cHJlc3Npb247XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBzY29wZSB0aGF0IGluY2x1ZGVzIGNvbnRleHQgYW5kIHJlZ2lzdGVyZWQgZnVuY3Rpb25zXG4gICAgICBjb25zdCBzY29wZSA9IHsgY29udGV4dCwgLi4udGhpcy5jcmVhdGVGdW5jdGlvblNjb3BlKCkgfTtcbiAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gd2l0aGluIHRoZSBjcmVhdGVkIHNjb3BlXG4gICAgICBjb25zdCBzYW5kYm94ID0gbmV3IEZ1bmN0aW9uKCdzY29wZScsIGByZXR1cm4gKGFzeW5jIGZ1bmN0aW9uKCkgeyB3aXRoIChzY29wZSkgeyByZXR1cm4gJHtleHByZXNzaW9ufTsgfSB9KSgpO2ApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveChzY29wZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBldmFsdWF0aW5nIGV4cHJlc3Npb246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0lucHV0cyhvYmo6IGFueSwgaW5wdXRzOiBhbnksIHBhdGhQcmVmaXg6IHN0cmluZyA9ICcnLCBjb250ZXh0OiBhbnkgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBpIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlbMV07XG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke2tleX1gIDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgIGNvbnN0IGV4cFZhbHVlID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24odmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBzZXQoaW5wdXRzLCBjdXJyZW50UGF0aCwgZXhwVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXRzKHZhbHVlLCBpbnB1dHMsIGN1cnJlbnRQYXRoLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGx5IHN0YXRpYyB2YWx1ZXMgZGlyZWN0bHlcbiAgICAgICAgc2V0KGlucHV0cywgY3VycmVudFBhdGgsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uU2NvcGUoKTogYW55IHtcbiAgICBjb25zdCBzY29wZTogYW55ID0ge307XG4gICAgdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0RnVuY3Rpb25OYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIHNjb3BlW25hbWVdID0gdGhpcy5nZXRGdW5jdGlvbkluc3RhbmNlKG5hbWUpLmV4ZWN1dGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbWV0aG9kczogeyBzY29wZSB9IH07XG4gIH1cblxuICBwcml2YXRlIGdldEZ1bmN0aW9uSW5zdGFuY2UoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB0aGlzLnJlZ2lzdHJ5U2VydmljZS5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUpO1xuICAgIGlmICghZnVuY3Rpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgRnVuY3Rpb24gdHlwZSAnJHtmdW5jdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoZnVuY3Rpb25UeXBlKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport { AXPWorkflowService } from \"../workflow.service\";\nimport * as i0 from \"@angular/core\";\nexport class AXPStartWorkflowAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.workflowService = inject(AXPWorkflowService);\n }\n async execute(context) {\n //console.log(\"start WK current context\", context);\n //console.log(\"start WK input context\", this.context);\n if (this.context)\n context.setVariables(this.context);\n //console.log(\"start WK merged context\", context);\n try {\n await this.workflowService.execute(this.workflow, context);\n }\n catch (e) {\n throw e;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow definition loaders.\n * Multiple loaders can be provided (multi: true).\n */\nexport const AXP_WORKFLOW_DEFINITION_LOADER = new InjectionToken('AXP_WORKFLOW_DEFINITION_LOADER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWRlZmluaXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF1Qi9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUM5RCxnQ0FBZ0MsQ0FDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuXG4vKipcbiAqIFdvcmtmbG93IGRlZmluaXRpb24gbG9hZGVyIGludGVyZmFjZS5cbiAqIEltcGxlbWVudCB0aGlzIHRvIHByb3ZpZGUgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbSB2YXJpb3VzIHNvdXJjZXMgKEpTT04gZmlsZXMsIGRhdGFiYXNlLCBldGMuKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXIge1xuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGtleSkuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIHdvcmtmbG93IG5hbWUgKHVuaXF1ZSBrZXkpXG4gICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGF2YWlsYWJsZSB3b3JrZmxvdyBuYW1lcy5cbiAgICogVXNlZCBmb3IgcHJlbG9hZGluZyBhbmQgZGlzY292ZXJ5LlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB3b3JrZmxvdyBuYW1lc1xuICAgKi9cbiAgZ2V0QWxsTmFtZXM/KCk6IFByb21pc2U8c3RyaW5nW10+O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbiBsb2FkZXJzLlxuICogTXVsdGlwbGUgbG9hZGVycyBjYW4gYmUgcHJvdmlkZWQgKG11bHRpOiB0cnVlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19ERUZJTklUSU9OX0xPQURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXI+KFxuICAnQVhQX1dPUktGTE9XX0RFRklOSVRJT05fTE9BREVSJyxcbik7XG5cbiJdfQ==","// ============================================\n// WORKFLOW INSTANCE v3.0.0 TYPES\n// Based on Elsa Workflow Instance schema: https://elsaworkflows.io/schemas/workflow-instance/v3.0.0/schema.json\n// Compatible with Elsa backend while using ACoreX naming conventions\n// ============================================\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctaW5zdGFuY2UudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxpQ0FBaUM7QUFDakMsZ0hBQWdIO0FBQ2hILHFFQUFxRTtBQUNyRSwrQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV09SS0ZMT1cgSU5TVEFOQ0UgdjMuMC4wIFRZUEVTXG4vLyBCYXNlZCBvbiBFbHNhIFdvcmtmbG93IEluc3RhbmNlIHNjaGVtYTogaHR0cHM6Ly9lbHNhd29ya2Zsb3dzLmlvL3NjaGVtYXMvd29ya2Zsb3ctaW5zdGFuY2UvdjMuMC4wL3NjaGVtYS5qc29uXG4vLyBDb21wYXRpYmxlIHdpdGggRWxzYSBiYWNrZW5kIHdoaWxlIHVzaW5nIEFDb3JlWCBuYW1pbmcgY29udmVudGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdHVzLlxuICovXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd1N0YXR1cyA9ICdSdW5uaW5nJyB8ICdGaW5pc2hlZCc7XG5cbi8qKlxuICogV29ya2Zsb3cgc3ViLXN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dTdWJTdGF0dXMgPSAnUGVuZGluZycgfCAnRXhlY3V0aW5nJyB8ICdTdXNwZW5kZWQnIHwgJ0ZpbmlzaGVkJyB8ICdDYW5jZWxsZWQnIHwgJ0ZhdWx0ZWQnO1xuXG4vKipcbiAqIEFjdGl2aXR5IHN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlTdGF0dXMgPSAnUnVubmluZycgfCAnQ29tcGxldGVkJyB8ICdDYW5jZWxlZCcgfCAnRmF1bHRlZCc7XG5cbi8qKlxuICogRXhjZXB0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEV4Y2VwdGlvblN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiB0eXBlIG5hbWUuXG4gICAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0cmFjZSAobnVsbGFibGUpLlxuICAgKi9cbiAgc3RhY2tUcmFjZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElubmVyIGV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgaW5uZXJFeGNlcHRpb24/OiBBWFBFeGNlcHRpb25TdGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQWN0aXZpdHkgaW5jaWRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlJbmNpZGVudCB7XG4gIC8qKlxuICAgKiBBY3Rpdml0eSBJRCB0aGF0IGNhdXNlZCB0aGUgaW5jaWRlbnQuXG4gICAqL1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IG5vZGUgSUQuXG4gICAqL1xuICBhY3Rpdml0eU5vZGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSB0eXBlLlxuICAgKi9cbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2lkZW50IG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZmF1bHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGYXVsdCBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGYXVsdGVkIGFjdGl2aXR5IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBmYXVsdGVkQWN0aXZpdHlJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogQm9va21hcmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQm9va21hcmsge1xuICAvKipcbiAgICogQm9va21hcmsgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBoYXNoLlxuICAgKi9cbiAgaGFzaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBwYXlsb2FkIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXlsb2FkPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogQWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIGFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGluc3RhbmNlIElELlxuICAgKi9cbiAgYWN0aXZpdHlJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG8gYnVybiBmbGFnLlxuICAgKi9cbiAgYXV0b0J1cm4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBtZXRob2QgbmFtZSAobnVsbGFibGUpLlxuICAgKi9cbiAgY2FsbGJhY2tNZXRob2ROYW1lPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBjYWxsYmFjayBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZSB7XG4gIC8qKlxuICAgKiBPd25lciBhY3Rpdml0eSBpbnN0YW5jZSBJRC5cbiAgICovXG4gIG93bmVySW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGlsZCBhY3Rpdml0eSBub2RlIElELlxuICAgKi9cbiAgY2hpbGROb2RlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGhvZE5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFZhcmlhYmxlIChmb3IgYWN0aXZpdHkgY29udGV4dCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlWYXJpYWJsZSB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmxlIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIGFycmF5IGZsYWcuXG4gICAqL1xuICBpc0FycmF5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmFyaWFibGUgdmFsdWUgKG51bGxhYmxlKS5cbiAgICovXG4gIHZhbHVlPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogU3RvcmFnZSBkcml2ZXIgdHlwZSBuYW1lIChudWxsYWJsZSkuXG4gICAqL1xuICBzdG9yYWdlRHJpdmVyVHlwZU5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBjb250ZXh0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5RXhlY3V0aW9uQ29udGV4dFN0YXRlIHtcbiAgLyoqXG4gICAqIENvbnRleHQgSUQgKGFjdGl2aXR5IGluc3RhbmNlIElEKS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBjb250ZXh0IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXJlbnRDb250ZXh0SWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZWQgYWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIHNjaGVkdWxlZEFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjdGl2aXR5IG5vZGUgSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIG93bmVyQWN0aXZpdHlOb2RlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXRlIChldmFsdWF0ZWQgcHJvcGVydGllcykgKG51bGxhYmxlKS5cbiAgICovXG4gIGFjdGl2aXR5U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcblxuICAvKipcbiAgICogRHluYW1pYyB2YXJpYWJsZXMuXG4gICAqL1xuICBkeW5hbWljVmFyaWFibGVzOiBBWFBBY3Rpdml0eVZhcmlhYmxlW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQQWN0aXZpdHlTdGF0dXM7XG5cbiAgLyoqXG4gICAqIElzIGV4ZWN1dGluZyBmbGFnLlxuICAgKi9cbiAgaXNFeGVjdXRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZhdWx0IGNvdW50LlxuICAgKi9cbiAgZmF1bHRDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICBzdGFydGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGxldGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSwgbnVsbGFibGUpLlxuICAgKi9cbiAgY29tcGxldGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUYWcgKG51bGxhYmxlKS5cbiAgICovXG4gIHRhZz86IGFueSB8IG51bGw7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdGUgKGludGVybmFsIGV4ZWN1dGlvbiBzdGF0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGF0ZSB7XG4gIC8qKlxuICAgKiBTdGF0ZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gSUQuXG4gICAqL1xuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uLlxuICAgKi9cbiAgZGVmaW5pdGlvblZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29ycmVsYXRpb24gSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0dXMuXG4gICAqL1xuICBzdGF0dXM6IEFYUFdvcmtmbG93U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdWItc3RhdHVzLlxuICAgKi9cbiAgc3ViU3RhdHVzOiBBWFBXb3JrZmxvd1N1YlN0YXR1cztcblxuICAvKipcbiAgICogQm9va21hcmtzLlxuICAgKi9cbiAgYm9va21hcmtzOiBBWFBCb29rbWFya1tdO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudHMuXG4gICAqL1xuICBpbmNpZGVudHM6IEFYUEFjdGl2aXR5SW5jaWRlbnRbXTtcblxuICAvKipcbiAgICogRmF1bHQgKG51bGxhYmxlKS5cbiAgICovXG4gIGZhdWx0PzogQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBjYWxsYmFja3MuXG4gICAqL1xuICBjb21wbGV0aW9uQ2FsbGJhY2tzOiBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSBleGVjdXRpb24gY29udGV4dHMuXG4gICAqL1xuICBhY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRzOiBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhLlxuICAgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhLlxuICAgKi9cbiAgb3V0cHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogRmluaXNoZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lLCBudWxsYWJsZSkuXG4gICAqL1xuICBmaW5pc2hlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBpbnN0YW5jZSAoc3RvcmVkIGluIGRhdGFiYXNlKS5cbiAqIFRoaXMgbWF0Y2hlcyB0aGUgRWxzYSBXb3JrZmxvdyBJbnN0YW5jZSBzY2hlbWEgZm9yIGJhY2tlbmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0luc3RhbmNlIHtcbiAgLyoqXG4gICAqIFNjaGVtYSByZWZlcmVuY2UuXG4gICAqL1xuICAkc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBkZWZpbml0aW9uIElELlxuICAgKi9cbiAgZGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gdmVyc2lvbiBJRC5cbiAgICovXG4gIGRlZmluaXRpb25WZXJzaW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogUGFyZW50IHdvcmtmbG93IGluc3RhbmNlIElEIChudWxsYWJsZSwgZm9yIGNoaWxkIHdvcmtmbG93cykuXG4gICAqL1xuICBwYXJlbnRXb3JrZmxvd0luc3RhbmNlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0ZSAoaW50ZXJuYWwgZXhlY3V0aW9uIHN0YXRlKS5cbiAgICovXG4gIHdvcmtmbG93U3RhdGU6IEFYUFdvcmtmbG93U3RhdGU7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQV29ya2Zsb3dTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN1Yi1zdGF0dXMuXG4gICAqL1xuICBzdWJTdGF0dXM6IEFYUFdvcmtmbG93U3ViU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBDb3JyZWxhdGlvbiBJRCAobnVsbGFibGUpLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudCBjb3VudC5cbiAgICovXG4gIGluY2lkZW50Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaW5pc2hlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUsIG51bGxhYmxlKS5cbiAgICovXG4gIGZpbmlzaGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const AXP_ACTIVITY_PROVIDER = new InjectionToken('AXP_ACTIVITY_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_ACTIVITY_CATEGORY_PROVIDER = new InjectionToken('AXP_ACTIVITY_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvYWN0aXZpdHkvYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUE2Qix1QkFBdUIsRUFBRTtJQUN6RyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUM7QUF1QkgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXFDLGdDQUFnQyxFQUFFO0lBQ25JLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0NBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICcuL2FjdGl2aXR5LnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlQcm92aWRlclRva2VuID1cbiAgICB8IEFYUEFjdGl2aXR5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQQWN0aXZpdHlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlQcm92aWRlclRva2VuW10+KCdBWFBfQUNUSVZJVFlfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBBY3Rpdml0eVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciBhY3Rpdml0aWVzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBhcnJheVxuICAgICAqL1xuICAgIGdldExpc3QoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb25bXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIFRoZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIG5hbWUgLSBBY3Rpdml0eSBuYW1lICh1bmlxdWUgaWRlbnRpZmllciBhbmQgY29tbWFuZCBrZXkpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER } from './activity-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Activity Definition Service\n *\n * Manages activity definitions (metadata) for UI and tooling.\n * Similar to AXPReportDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has activities (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPActivityDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_ACTIVITY_CATEGORY_PROVIDER, { optional: true }) || [];\n this.activityProviders = inject(AXP_ACTIVITY_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for activity definitions by categoryId - O(1) lookup */\n this.activitiesByCategory = new Map();\n /** Cache for individual activity definitions by name - O(1) lookup */\n this.activitiesByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingActivitiesRequests = new Map();\n this.pendingActivityRequests = new Map();\n }\n //#endregion\n //#region ---- Initialization ----\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Activity Definitions ----\n /**\n * Get activity definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches activity definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get activity definitions from\n * @returns Array of activity definitions\n */\n async getActivitiesByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.activitiesByCategory.has(categoryId)) {\n return this.activitiesByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no activities - cache empty array and skip API call\n const emptyArray = [];\n this.activitiesByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivitiesRequests.has(categoryId)) {\n return this.pendingActivitiesRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivitiesFromProviders(categoryId);\n this.pendingActivitiesRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single activity definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Activity name (unique identifier and command key)\n * @returns Activity definition or undefined if not found\n */\n async getActivityByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.activitiesByName.has(name)) {\n return this.activitiesByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivityRequests.has(name)) {\n return this.pendingActivityRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivityFromProviders(name);\n this.pendingActivityRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific activity definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByActivityName(activityName) {\n // ✅ Search in cached activity definitions\n for (const [categoryId, definitions] of this.activitiesByCategory.entries()) {\n if (definitions.some(def => def.name === activityName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the activity definition to find its category\n const definition = await this.getActivityByName(activityName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for an activity\n */\n async getCategoriesPathByActivityName(activityName) {\n const categoryId = await this.getCategoryIdByActivityName(activityName);\n if (!categoryId) {\n throw new Error(`Activity '${activityName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load activity definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with activity provider\n */\n async loadActivitiesFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.activitiesByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.activitiesByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingActivitiesRequests.delete(categoryId);\n }\n }\n /**\n * Load single activity definition from providers and cache result\n */\n async loadActivityFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.activitiesByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached activity definitions\n for (const definitions of this.activitiesByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.activitiesByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingActivityRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has activities (uses cached count)\n */\n categoryHasActivities(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear activities cache only\n */\n clearActivitiesCache() {\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPActivityDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9hY3Rpdml0eS9hY3Rpdml0eS1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUUxRSxzRUFBc0U7UUFDOUQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFFcEUscUVBQXFFO1FBQzdELHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsbUNBQW1DO1FBRTFGLHNEQUFzRDtRQUM5Qyw4QkFBeUIsR0FBRyxJQUFJ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QUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQWhkUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEFjdGl2aXR5Q2F0ZWdvcnksIEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4vYWN0aXZpdHkudHlwZXMnO1xuaW1wb3J0IHsgQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCBBWFBfQUNUSVZJVFlfUFJPVklERVIgfSBmcm9tICcuL2FjdGl2aXR5LWRlZmluaXRpb24ucHJvdmlkZXInO1xuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPcHRpbWl6ZWQgQWN0aXZpdHkgRGVmaW5pdGlvbiBTZXJ2aWNlXG4gKiBcbiAqIE1hbmFnZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhKSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBTaW1pbGFyIHRvIEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDMuIEFnZ3Jlc3NpdmUgY2FjaGluZyBwcmV2ZW50cyBkdXBsaWNhdGUgQVBJIGNhbGxzXG4gKiA0LiBTaW5nbGUgcGVuZGluZyByZXF1ZXN0IHBlciByZXNvdXJjZSBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnNcbiAqIDUuIExhenkgbG9hZGluZyAtIG9ubHkgbG9hZHMgZGF0YSB3aGVuIG5lZWRlZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVycyAmIENhY2hlcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIFN0b3JhZ2UgICAtLS0tXG5cbiAgICAvKiogQ2FjaGUgZm9yIGNhdGVnb3JpZXMgYnkgaWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcmllc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlDYXRlZ29yeT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlQYXJlbnRJZCA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBBWFBBY3Rpdml0eUNhdGVnb3J5W10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGFjdGl2aXR5IGRlZmluaXRpb25zIGJ5IGNhdGVnb3J5SWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgYWN0aXZpdGllc0J5Q2F0ZWdvcnkgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlEZWZpbml0aW9uW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgYWN0aXZpdHkgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBhY3Rpdml0aWVzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUEFjdGl2aXR5RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPj4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbml0aWFsaXphdGlvbiAgIC0tLS1cblxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBBY3Rpdml0eSBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgYWN0aXZpdHkgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IFJldHVybiBjYWNoZWQgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIGFjdGl2aXRpZXMgLSBjYWNoZSBlbXB0eSBhcnJheSBhbmQgc2tpcCBBUEkgY2FsbFxuICAgICAgICAgICAgY29uc3QgZW1wdHlBcnJheTogQVhQQWN0aXZpdHlEZWZpbml0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkQWN0aXZpdGllc0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEFjdGl2aXR5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBjb21tYW5kIGtleSlcbiAgICAgKiBAcmV0dXJucyBBY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY3Rpdml0eUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5hY3Rpdml0aWVzQnlOYW1lLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBhY3Rpdml0eSBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeUFjdGl2aXR5TmFtZShhY3Rpdml0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSBhY3Rpdml0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIGFjdGl2aXR5IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHlOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYW4gYWN0aXZpdHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlJZEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZSk7XG4gICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpdml0eSAnJHthY3Rpdml0eU5hbWV9JyBub3QgZm91bmQgaW4gYW55IGNhdGVnb3J5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlOiBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGNhdGVnb3JpZXMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFRyYWNrcyBwcm92aWRlciBvd25lcnNoaXAgdG8gYXZvaWQgdW5uZWNlc3NhcnkgQVBJIGNhbGxzXG4gICAgICogLSBGb3Igcm9vdCAocGFyZW50SWQgPSB1bmRlZmluZWQpOiBRdWVyeSBBTEwgcHJvdmlkZXJzXG4gICAgICogLSBGb3IgY2hpbGRyZW46IE9ubHkgcXVlcnkgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgcGFyZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQ2F0ZWdvcmllc0Zyb21Qcm92aWRlcnMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5jYXRlZ29yeVByb3ZpZGVycyk7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzOiBBWFBBY3Rpdml0eUNhdGVnb3J5W10gPSBbXTtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3ZpZGVyKHMpIHRvIHF1ZXJ5XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gcGFyZW50SWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KHBhcmVudElkKVxuICAgICAgICAgICAgICAgIDogbnVsbDsgLy8gUm9vdDogcXVlcnkgYWxsIHByb3ZpZGVyc1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0cyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRzKSAmJiBjYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goLi4uY2F0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDinIUgVHJhY2sgb3duZXJzaGlwOiBUaGlzIHByb3ZpZGVyIElOREVYIG93bnMgdGhlc2UgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdHMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5zZXQoY2F0LmlkLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLnNldChwYXJlbnRJZCwgY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcmllc0J5SWQuc2V0KGNhdC5pZCwgY2F0KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmRlbGV0ZShwYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHByb3ZpZGVyIGluZGV4IHRoYXQgb3ducyBhIHNwZWNpZmljIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgd2l0aCBwcm92aWRlciBpbmRleCwgb3IgbnVsbCBpZiBvd25lcnNoaXAgdW5rbm93biAocXVlcnkgYWxsKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcblxuICAgICAgICBpZiAob3duZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW293bmVySW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3duZXJzaGlwIHVua25vd24gLSB3aWxsIHF1ZXJ5IGFsbCBwcm92aWRlcnMgKGZhbGxiYWNrKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFjdGl2aXR5IGRlZmluaXRpb25zIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBPbmx5IHF1ZXJpZXMgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgY2F0ZWdvcnlcbiAgICAgKiBVc2VzIHByb3ZpZGVyIElOREVYIHRvIG1hdGNoIGNhdGVnb3J5IHByb3ZpZGVyIHdpdGggYWN0aXZpdHkgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0aWVzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmFjdGl2aXR5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBBY3Rpdml0eURlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICBkZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSBhY3Rpdml0eSBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuYWN0aXZpdHlQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcC52YWx1ZS5nZXRCeUlkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlOYW1lLnNldChuYW1lLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyZWFkdGgtZmlyc3Qgc2VhcmNoIHRocm91Z2ggY2F0ZWdvcnkgaGllcmFyY2h5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBzZWFyY2hRdWV1ZTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFt1bmRlZmluZWRdO1xuICAgICAgICBjb25zdCBzZWFyY2hlZCA9IG5ldyBTZXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgICAgIHdoaWxlIChzZWFyY2hRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNlYXJjaFF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgICAgICAgaWYgKHNlYXJjaGVkLmhhcyhwYXJlbnRJZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VhcmNoZWQuYWRkKHBhcmVudElkKTtcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcyhwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgT3B0aW1pemF0aW9uOiBPbmx5IHNlYXJjaCBjaGlsZHJlbiBpZiBjaGlsZHJlbkNvdW50ID4gMFxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwICYmICFzZWFyY2hlZC5oYXMoY2F0ZWdvcnkuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXVlLnB1c2goY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQ2hpbGRyZW4oY2F0ZWdvcnlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeSA/IGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQWN0aXZpdGllcyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhY3Rpdml0aWVzIGNhY2hlIG9ubHlcbiAgICAgKi9cbiAgICBjbGVhckFjdGl2aXRpZXNDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdGllc1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow engine.\n * Default implementation is AXPWorkflowLocalEngine.\n */\nexport const AXP_WORKFLOW_ENGINE = new InjectionToken('AXP_WORKFLOW_ENGINE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBc0QvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3Igd29ya2Zsb3cgZW5naW5lIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGEgbmV3IHdvcmtmbG93IGluc3RhbmNlIGluIGJhY2tlbmQgYW5kIHJldHVybnMgaW5zdGFuY2UgSUQuXG4gICAqIFxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIFN0YXJ0IHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzcG9uc2Ugd2l0aCBpbnN0YW5jZUlkIGFuZCBpbml0aWFsIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgc3RhcnQoXG4gICAgcmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3RcbiAgKTogUHJvbWlzZTxBWFBTdGFydFdvcmtmbG93UmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBSZXN1bWVzIHdvcmtmbG93IGluc3RhbmNlIGFmdGVyIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4sIGFmdGVyIHNob3ctZGlhbG9nKS5cbiAgICogXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUmVzdW1lIHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3BvbnNlIHdpdGggbmV4dCBzdGVwIGFuZCB1cGRhdGVkIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgcmVzdW1lKFxuICAgIHJlcXVlc3Q6IEFYUFJlc3VtZVdvcmtmbG93UmVxdWVzdFxuICApOiBQcm9taXNlPEFYUFJlc3VtZVdvcmtmbG93UmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIFJldHJpZXZlcyBjdXJyZW50IHN0YXRlIG9mIGEgd29ya2Zsb3cgaW5zdGFuY2UgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogQHBhcmFtIHJlcXVlc3QgLSBHZXQgc3RhdGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBDdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlXG4gICAqIFxuICAgKi9cbiAgZ2V0U3RhdGUoXG4gICAgcmVxdWVzdDogQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3RcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igd29ya2Zsb3cgZW5naW5lLlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLlxuICovXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX0VOR0lORSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0VuZ2luZT4oXG4gICdBWFBfV09SS0ZMT1dfRU5HSU5FJ1xuKTtcblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Service responsible for executing frontend workflow tasks.\n *\n * This service handles the execution of frontend or hybrid tasks using\n * the command infrastructure. It translates command results into\n * workflow-compatible output and outcome format.\n *\n * This service is replaceable per platform and contains all execution logic.\n */\nexport class FrontendTaskExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a frontend workflow task.\n *\n * Only executes tasks with executionMode 'frontend' or 'both'.\n * Backend tasks should not be passed to this executor.\n *\n * @param task - Task to execute\n * @returns Execution result with output and outcome\n *\n * @throws Error if task is not a frontend task\n */\n async execute(task) {\n // Validate execution mode\n if (task.executionMode !== 'frontend' && task.executionMode !== 'both') {\n throw new Error(`Task '${task.activityId}' is not a frontend task. ` +\n `Execution mode: ${task.executionMode}. Backend tasks are handled automatically.`);\n }\n try {\n // Check if command exists\n const commandExists = this.commandService.exists(task.activityType);\n if (!commandExists) {\n console.warn(`[FrontendTaskExecutor] ⚠️ Frontend activity '${task.activityType}' is not registered. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Prepare command input\n // Flatten properties if nested (workflow-studio format)\n let commandInput = task.input || task.config || {};\n if (commandInput['properties'] && typeof commandInput['properties'] === 'object') {\n // Flatten: {properties: {text: \"...\"}} -> {text: \"...\"}\n commandInput = { ...commandInput['properties'] };\n }\n // Execute activity via CommandBus\n // Activities registered as AXPCommand return {output, outcomes}\n const result = await this.commandService.execute(task.activityType, commandInput);\n if (!result) {\n return {\n output: null,\n outcome: 'Failed',\n };\n }\n if (!result.success) {\n return {\n output: {\n error: result.message?.text,\n },\n outcome: 'Failed',\n };\n }\n const commandResult = result.data;\n const outcomes = commandResult?.outcomes ?? {};\n // Determine outcome from command results\n // Default to 'Done' if no outcomes specified\n let outcome = 'Done';\n if (Object.keys(outcomes).length > 0) {\n outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';\n }\n return {\n output: commandResult?.output ?? null,\n outcome,\n };\n }\n catch (error) {\n console.error(`[FrontendTaskExecutor] ❌ Error executing frontend activity '${task.activityType}':`, error);\n return {\n output: { error: error.message || 'Unknown error' },\n outcome: 'Failed'\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: FrontendTaskExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtdGFzay1leGVjdXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL2Zyb250ZW5kLXRhc2stZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFvQjdELFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJRSwrQ0FBK0M7UUFFOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQW1HN0Q7SUFqR0MsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFxQjtRQUNqQywwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQ2IsU0FBUyxJQUFJLENBQUMsVUFBVSw0QkFBNEI7Z0JBQ3BELG1CQUFtQixJQUFJLENBQUMsYUFBYSw0Q0FBNEMsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwwQkFBMEI7WUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXBFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FDVixnREFBZ0QsSUFBSSxDQUFDLFlBQVksdUJBQXVCO29CQUN4RixxQkFBcUIsQ0FDdEIsQ0FBQztnQkFDRixPQUFPO29CQUNMLE1BQU0sRUFBRSxJQUFJO29CQUNaLE9BQU8sRUFBRSxNQUFNO2lCQUNoQixDQUFDO1lBQ0osQ0FBQztZQUVELHdCQUF3QjtZQUN4Qix3REFBd0Q7WUFDeEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakYsd0RBQXdEO2dCQUN4RCxZQUFZLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25ELENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsZ0VBQWdFO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBRzdDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU87b0JBQ0wsTUFBTSxFQUFFLElBQUk7b0JBQ1osT0FBTyxFQUFFLFFBQVE7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztvQkFDTCxNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSTtxQkFDNUI7b0JBQ0QsT0FBTyxFQUFFLFFBQVE7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUUvQyx5Q0FBeUM7WUFDekMsNkNBQTZDO1lBQzdDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO1lBQzNFLENBQUM7WUFFRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUk7Z0JBQ3JDLE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FDWCwrREFBK0QsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUNwRixLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxFQUFFO2dCQUNuRCxPQUFPLEVBQUUsUUFBUTthQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBbkdVLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93VGFzayB9IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgJiBJbnRlcmZhY2VzICAgLS0tLVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYSBmcm9udGVuZCB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250ZW5kVGFza0V4ZWN1dGlvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUYXNrIGV4ZWN1dGlvbiBvdXRwdXQuXG4gICAqL1xuICBvdXRwdXQ6IGFueTtcblxuICAvKipcbiAgICogVGFzayBleGVjdXRpb24gb3V0Y29tZSAoZS5nLiwgJ0RvbmUnLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdGYWlsZWQnKS5cbiAgICovXG4gIG91dGNvbWU6IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2VydmljZSByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIGZyb250ZW5kIHdvcmtmbG93IHRhc2tzLlxuICogXG4gKiBUaGlzIHNlcnZpY2UgaGFuZGxlcyB0aGUgZXhlY3V0aW9uIG9mIGZyb250ZW5kIG9yIGh5YnJpZCB0YXNrcyB1c2luZ1xuICogdGhlIGNvbW1hbmQgaW5mcmFzdHJ1Y3R1cmUuIEl0IHRyYW5zbGF0ZXMgY29tbWFuZCByZXN1bHRzIGludG9cbiAqIHdvcmtmbG93LWNvbXBhdGlibGUgb3V0cHV0IGFuZCBvdXRjb21lIGZvcm1hdC5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHJlcGxhY2VhYmxlIHBlciBwbGF0Zm9ybSBhbmQgY29udGFpbnMgYWxsIGV4ZWN1dGlvbiBsb2dpYy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRnJvbnRlbmRUYXNrRXhlY3V0b3Ige1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFNlcnZpY2UgPSBpbmplY3QoQVhQQ29tbWFuZFNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmcm9udGVuZCB3b3JrZmxvdyB0YXNrLlxuICAgKiBcbiAgICogT25seSBleGVjdXRlcyB0YXNrcyB3aXRoIGV4ZWN1dGlvbk1vZGUgJ2Zyb250ZW5kJyBvciAnYm90aCcuXG4gICAqIEJhY2tlbmQgdGFza3Mgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhpcyBleGVjdXRvci5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gVGFzayB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIEV4ZWN1dGlvbiByZXN1bHQgd2l0aCBvdXRwdXQgYW5kIG91dGNvbWVcbiAgICogXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGFzayBpcyBub3QgYSBmcm9udGVuZCB0YXNrXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHRhc2s6IEFYUFdvcmtmbG93VGFzayk6IFByb21pc2U8RnJvbnRlbmRUYXNrRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgLy8gVmFsaWRhdGUgZXhlY3V0aW9uIG1vZGVcbiAgICBpZiAodGFzay5leGVjdXRpb25Nb2RlICE9PSAnZnJvbnRlbmQnICYmIHRhc2suZXhlY3V0aW9uTW9kZSAhPT0gJ2JvdGgnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYXNrICcke3Rhc2suYWN0aXZpdHlJZH0nIGlzIG5vdCBhIGZyb250ZW5kIHRhc2suIGAgK1xuICAgICAgICBgRXhlY3V0aW9uIG1vZGU6ICR7dGFzay5leGVjdXRpb25Nb2RlfS4gQmFja2VuZCB0YXNrcyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIGNvbW1hbmQgZXhpc3RzXG4gICAgICBjb25zdCBjb21tYW5kRXhpc3RzID0gdGhpcy5jb21tYW5kU2VydmljZS5leGlzdHModGFzay5hY3Rpdml0eVR5cGUpO1xuXG4gICAgICBpZiAoIWNvbW1hbmRFeGlzdHMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbRnJvbnRlbmRUYXNrRXhlY3V0b3JdIOKaoO+4jyBGcm9udGVuZCBhY3Rpdml0eSAnJHt0YXNrLmFjdGl2aXR5VHlwZX0nIGlzIG5vdCByZWdpc3RlcmVkLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgZXhlY3V0aW9uLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICAgICAgb3V0Y29tZTogJ0RvbmUnXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgY29tbWFuZCBpbnB1dFxuICAgICAgLy8gRmxhdHRlbiBwcm9wZXJ0aWVzIGlmIG5lc3RlZCAod29ya2Zsb3ctc3R1ZGlvIGZvcm1hdClcbiAgICAgIGxldCBjb21tYW5kSW5wdXQgPSB0YXNrLmlucHV0IHx8IHRhc2suY29uZmlnIHx8IHt9O1xuICAgICAgaWYgKGNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddICYmIHR5cGVvZiBjb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRmxhdHRlbjoge3Byb3BlcnRpZXM6IHt0ZXh0OiBcIi4uLlwifX0gLT4ge3RleHQ6IFwiLi4uXCJ9XG4gICAgICAgIGNvbW1hbmRJbnB1dCA9IHsgLi4uY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gfTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhlY3V0ZSBhY3Rpdml0eSB2aWEgQ29tbWFuZEJ1c1xuICAgICAgLy8gQWN0aXZpdGllcyByZWdpc3RlcmVkIGFzIEFYUENvbW1hbmQgcmV0dXJuIHtvdXRwdXQsIG91dGNvbWVzfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21tYW5kU2VydmljZS5leGVjdXRlPFJlY29yZDxzdHJpbmcsIGFueT4sIHtcbiAgICAgICAgb3V0cHV0OiBhbnk7XG4gICAgICAgIG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgfT4odGFzay5hY3Rpdml0eVR5cGUsIGNvbW1hbmRJbnB1dCk7XG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2U/LnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lOiAnRmFpbGVkJyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbWFuZFJlc3VsdCA9IHJlc3VsdC5kYXRhO1xuICAgICAgY29uc3Qgb3V0Y29tZXMgPSBjb21tYW5kUmVzdWx0Py5vdXRjb21lcyA/PyB7fTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIG91dGNvbWUgZnJvbSBjb21tYW5kIHJlc3VsdHNcbiAgICAgIC8vIERlZmF1bHQgdG8gJ0RvbmUnIGlmIG5vIG91dGNvbWVzIHNwZWNpZmllZFxuICAgICAgbGV0IG91dGNvbWUgPSAnRG9uZSc7XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3V0Y29tZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3V0Y29tZSA9IG91dGNvbWVzWydEb25lJ10gPyAnRG9uZScgOiBPYmplY3Qua2V5cyhvdXRjb21lcylbMF0gfHwgJ0RvbmUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGNvbW1hbmRSZXN1bHQ/Lm91dHB1dCA/PyBudWxsLFxuICAgICAgICBvdXRjb21lLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgW0Zyb250ZW5kVGFza0V4ZWN1dG9yXSDinYwgRXJyb3IgZXhlY3V0aW5nIGZyb250ZW5kIGFjdGl2aXR5ICcke3Rhc2suYWN0aXZpdHlUeXBlfSc6YCxcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InIH0sXG4gICAgICAgIG91dGNvbWU6ICdGYWlsZWQnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport { FrontendTaskExecutor } from './frontend-task-executor.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Manager - Facade for workflow lifecycle orchestration.\n *\n * This service is the ONLY interface the frontend uses to interact with workflows.\n * It follows Clean Architecture principles and does NOT contain execution or business logic.\n *\n * Responsibilities:\n * - Orchestrate workflow lifecycle (start, execute, complete, resume)\n * - Delegate execution to FrontendTaskExecutor\n * - Cache workflow state in memory\n * - Expose a stable API for UI\n *\n * Rules:\n * - No HTTP calls (delegates to AXPWorkflowEngine)\n * - No CommandBus / Command execution (delegates to FrontendTaskExecutor)\n * - No workflow branching logic (backend decides)\n * - No business validation (backend validates)\n * - No backend assumptions (uses abstract runtime service)\n */\nexport class AXPWorkflowManager {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.workflowEngine = inject(AXP_WORKFLOW_ENGINE);\n this.frontendTaskExecutor = inject(FrontendTaskExecutor);\n //#endregion\n //#region ---- State Cache ----\n /**\n * Cache workflow states in memory for quick access.\n * Key: instanceId\n * Value: AXPWorkflowInstanceState\n */\n this.stateCache = new Map();\n /**\n * Cache TTL in milliseconds (5 minutes).\n */\n this.CACHE_TTL = 5 * 60 * 1000;\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Start a new workflow instance.\n *\n * Creates a new workflow instance in backend and returns instance ID.\n * Backend decides what to do: returns pendingTask or indicates completion.\n *\n * @param workflowId - Workflow ID to start\n * @param input - Initial input data (optional)\n * @returns Start result with instanceId, state, and nextTask\n *\n * @example\n * ```typescript\n * const result = await workflowManager.start('my-workflow', { userId: '123' });\n *\n * if (result.success && result.nextTask) {\n * // Execute task if frontend\n * if (result.nextTask.executionMode === 'frontend') {\n * const execResult = await workflowManager.execute(result.nextTask);\n * await workflowManager.complete(result.instanceId!, result.nextTask, execResult.outcome, execResult.output);\n * }\n * }\n * ```\n */\n async start(workflowId, input = {}) {\n try {\n const response = await this.workflowEngine.start({\n workflowId,\n input\n });\n // Cache state (normalize Date)\n const startNormalizedState = { ...response.state };\n if (startNormalizedState.lastUpdated && !(startNormalizedState.lastUpdated instanceof Date)) {\n startNormalizedState.lastUpdated = new Date(startNormalizedState.lastUpdated);\n }\n this.stateCache.set(response.instanceId, startNormalizedState);\n return {\n success: true,\n instanceId: response.instanceId,\n state: startNormalizedState,\n nextTask: response.pendingTask || null,\n output: startNormalizedState.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error starting workflow:', error);\n return {\n success: false,\n error: error.message || 'Failed to start workflow'\n };\n }\n }\n /**\n * Execute a frontend task.\n *\n * Delegates to FrontendTaskExecutor for actual execution.\n * Only executes tasks with executionMode 'frontend' or 'both'.\n *\n * @param task - Task to execute\n * @returns Execution result with output and outcome\n *\n * @throws Error if task is not a frontend task\n */\n async execute(task) {\n return this.frontendTaskExecutor.execute(task);\n }\n /**\n * Complete a task and get next task from backend.\n *\n * Sends task result to backend API.\n * Backend decides: next task, fail, or complete workflow.\n *\n * @param instanceId - Workflow instance ID\n * @param task - Completed task\n * @param outcome - Task outcome (e.g., 'Done', 'Confirmed', 'Cancelled')\n * @param output - Task output/result (optional)\n * @returns Complete result with next task (if any)\n */\n async complete(instanceId, task, outcome, output) {\n try {\n // Send result to backend - backend decides next step\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId: task.activityId,\n taskToken: task.taskToken,\n outcome,\n userInput: output\n });\n // Update cache\n let completeNormalizedState = response.state;\n if (response.state) {\n // Normalize lastUpdated to Date (for cache safety)\n completeNormalizedState = { ...response.state };\n if (completeNormalizedState.lastUpdated && !(completeNormalizedState.lastUpdated instanceof Date)) {\n completeNormalizedState.lastUpdated = new Date(completeNormalizedState.lastUpdated);\n }\n this.stateCache.set(instanceId, completeNormalizedState);\n }\n return {\n success: true,\n instanceId,\n state: completeNormalizedState,\n nextTask: response.nextTask || null,\n output: response.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error completing task:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to complete task'\n };\n }\n }\n /**\n * Resume a suspended workflow (e.g., after user interaction).\n *\n * Backend determines nextStep based on outcome and outcomeConnections.\n * Client only provides instanceId, stepId, outcome, and optional userInput.\n *\n * @param instanceId - Workflow instance ID\n * @param stepId - Step ID that was waiting for user input\n * @param outcome - User action outcome (e.g., 'Confirmed', 'Cancelled', 'Submitted')\n * @param userInput - Optional user input data\n * @param taskToken - Secure task token (required for secure resumption)\n * @returns Resume result with next task (if any)\n */\n async resume(instanceId, stepId, outcome, userInput, taskToken) {\n try {\n // Ensure taskToken is provided for secure resumption\n if (!taskToken) {\n throw new Error('Missing taskToken for resume operation');\n }\n // Backend handles everything: checks outcomeConnections and determines nextStep\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId,\n taskToken,\n outcome,\n userInput\n });\n // Update cache with state from backend\n if (response.state) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...response.state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n this.stateCache.set(instanceId, normalizedState);\n }\n // Normalize state Date for return\n const normalizedState = response.state ? { ...response.state } : undefined;\n if (normalizedState && normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n return {\n success: true,\n instanceId,\n state: normalizedState || response.state,\n nextTask: response.nextTask || null, // Backend determines this from outcomeConnections\n output: response.output\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error resuming workflow:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to resume workflow'\n };\n }\n }\n /**\n * Get workflow instance state.\n *\n * Retrieves state from cache (if valid) or from backend.\n *\n * @param instanceId - Workflow instance ID\n * @returns Workflow instance state or null if not found\n */\n async getState(instanceId) {\n // Check cache first\n const cached = this.stateCache.get(instanceId);\n if (cached) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedCached = { ...cached };\n if (normalizedCached.lastUpdated && !(normalizedCached.lastUpdated instanceof Date)) {\n normalizedCached.lastUpdated = new Date(normalizedCached.lastUpdated);\n }\n // Validate cache age\n const cacheAge = Date.now() - normalizedCached.lastUpdated.getTime();\n if (cacheAge < this.CACHE_TTL) {\n return normalizedCached;\n }\n }\n // Fetch from backend\n try {\n const state = await this.workflowEngine.getState({\n instanceId\n });\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n // Update cache\n this.stateCache.set(instanceId, normalizedState);\n return normalizedState;\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error getting workflow state:', error);\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLM0UsT0FBTyxFQUFFLG9CQUFvQixFQUErQixNQUFNLGtDQUFrQyxDQUFDOztBQTZHckcsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFckUsWUFBWTtRQUVaLG1DQUFtQztRQUVuQzs7OztXQUlHO1FBQ0ssZUFBVSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBRWpFOztXQUVHO1FBQ2MsY0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBeVA1QztJQXZQQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FDVCxVQUFrQixFQUNsQixRQUE2QixFQUFFO1FBRS9CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLFVBQVU7Z0JBQ1YsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixNQUFNLG9CQUFvQixHQUFHLEVB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LEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxtREFBbUQ7WUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsRixlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBRUQsZUFBZTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUVqRCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBMVFVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0VuZ2luZSwgQVhQX1dPUktGTE9XX0VOR0lORSB9IGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmltcG9ydCB7XG4gIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSxcbiAgQVhQV29ya2Zsb3dUYXNrLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHsgRnJvbnRlbmRUYXNrRXhlY3V0b3IsIEZyb250ZW5kVGFza0V4ZWN1dGlvblJlc3VsdCB9IGZyb20gJy4vZnJvbnRlbmQtdGFzay1leGVjdXRvci5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dTdGFydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIEZpcnN0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQgaW1tZWRpYXRlbHkpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNvbXBsZXRpbmcgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q29tcGxldGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzdW1pbmcgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Jlc3VtZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgd29ya2Zsb3cgc3RhdGUuXG4gICAqL1xuICBzdGF0ZT86IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcblxuICAvKipcbiAgICogTmV4dCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBNYW5hZ2VyIC0gRmFjYWRlIGZvciB3b3JrZmxvdyBsaWZlY3ljbGUgb3JjaGVzdHJhdGlvbi5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBPTkxZIGludGVyZmFjZSB0aGUgZnJvbnRlbmQgdXNlcyB0byBpbnRlcmFjdCB3aXRoIHdvcmtmbG93cy5cbiAqIEl0IGZvbGxvd3MgQ2xlYW4gQXJjaGl0ZWN0dXJlIHByaW5jaXBsZXMgYW5kIGRvZXMgTk9UIGNvbnRhaW4gZXhlY3V0aW9uIG9yIGJ1c2luZXNzIGxvZ2ljLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBPcmNoZXN0cmF0ZSB3b3JrZmxvdyBsaWZlY3ljbGUgKHN0YXJ0LCBleGVjdXRlLCBjb21wbGV0ZSwgcmVzdW1lKVxuICogLSBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gRnJvbnRlbmRUYXNrRXhlY3V0b3JcbiAqIC0gQ2FjaGUgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIEV4cG9zZSBhIHN0YWJsZSBBUEkgZm9yIFVJXG4gKiBcbiAqIFJ1bGVzOlxuICogLSBObyBIVFRQIGNhbGxzIChkZWxlZ2F0ZXMgdG8gQVhQV29ya2Zsb3dFbmdpbmUpXG4gKiAtIE5vIENvbW1hbmRCdXMgLyBDb21tYW5kIGV4ZWN1dGlvbiAoZGVsZWdhdGVzIHRvIEZyb250ZW5kVGFza0V4ZWN1dG9yKVxuICogLSBObyB3b3JrZmxvdyBicmFuY2hpbmcgbG9naWMgKGJhY2tlbmQgZGVjaWRlcylcbiAqIC0gTm8gYnVzaW5lc3MgdmFsaWRhdGlvbiAoYmFja2VuZCB2YWxpZGF0ZXMpXG4gKiAtIE5vIGJhY2tlbmQgYXNzdW1wdGlvbnMgKHVzZXMgYWJzdHJhY3QgcnVudGltZSBzZXJ2aWNlKVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd01hbmFnZXIge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dFbmdpbmUgPSBpbmplY3QoQVhQX1dPUktGTE9XX0VOR0lORSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZnJvbnRlbmRUYXNrRXhlY3V0b3IgPSBpbmplY3QoRnJvbnRlbmRUYXNrRXhlY3V0b3IpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU3RhdGUgQ2FjaGUgICAtLS0tXG5cbiAgLyoqXG4gICAqIENhY2hlIHdvcmtmbG93IHN0YXRlcyBpbiBtZW1vcnkgZm9yIHF1aWNrIGFjY2Vzcy5cbiAgICogS2V5OiBpbnN0YW5jZUlkXG4gICAqIFZhbHVlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIFRUTCBpbiBtaWxsaXNlY29uZHMgKDUgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IENBQ0hFX1RUTCA9IDUgKiA2MCAqIDEwMDA7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGEgbmV3IHdvcmtmbG93IGluc3RhbmNlIGluIGJhY2tlbmQgYW5kIHJldHVybnMgaW5zdGFuY2UgSUQuXG4gICAqIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGRvOiByZXR1cm5zIHBlbmRpbmdUYXNrIG9yIGluZGljYXRlcyBjb21wbGV0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIHdvcmtmbG93SWQgLSBXb3JrZmxvdyBJRCB0byBzdGFydFxuICAgKiBAcGFyYW0gaW5wdXQgLSBJbml0aWFsIGlucHV0IGRhdGEgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBTdGFydCByZXN1bHQgd2l0aCBpbnN0YW5jZUlkLCBzdGF0ZSwgYW5kIG5leHRUYXNrXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93TWFuYWdlci5zdGFydCgnbXktd29ya2Zsb3cnLCB7IHVzZXJJZDogJzEyMycgfSk7XG4gICAqIFxuICAgKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0Lm5leHRUYXNrKSB7XG4gICAqICAgLy8gRXhlY3V0ZSB0YXNrIGlmIGZyb250ZW5kXG4gICAqICAgaWYgKHJlc3VsdC5uZXh0VGFzay5leGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnKSB7XG4gICAqICAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLmV4ZWN1dGUocmVzdWx0Lm5leHRUYXNrKTtcbiAgICogICAgIGF3YWl0IHdvcmtmbG93TWFuYWdlci5jb21wbGV0ZShyZXN1bHQuaW5zdGFuY2VJZCEsIHJlc3VsdC5uZXh0VGFzaywgZXhlY1Jlc3VsdC5vdXRjb21lLCBleGVjUmVzdWx0Lm91dHB1dCk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc3RhcnQoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge31cbiAgKTogUHJvbWlzZTxXb3JrZmxvd1N0YXJ0UmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5zdGFydCh7XG4gICAgICAgIHdvcmtmbG93SWQsXG4gICAgICAgIGlucHV0XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2FjaGUgc3RhdGUgKG5vcm1hbGl6ZSBEYXRlKVxuICAgICAgY29uc3Qgc3RhcnROb3JtYWxpemVkU3RhdGUgPSB7IC4uLnJlc3BvbnNlLnN0YXRlIH07XG4gICAgICBpZiAoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChyZXNwb25zZS5pbnN0YW5jZUlkLCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQ6IHJlc3BvbnNlLmluc3RhbmNlSWQsXG4gICAgICAgIHN0YXRlOiBzdGFydE5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLnBlbmRpbmdUYXNrIHx8IG51bGwsXG4gICAgICAgIG91dHB1dDogc3RhcnROb3JtYWxpemVkU3RhdGUub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBzdGFydGluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmcm9udGVuZCB0YXNrLlxuICAgKiBcbiAgICogRGVsZWdhdGVzIHRvIEZyb250ZW5kVGFza0V4ZWN1dG9yIGZvciBhY3R1YWwgZXhlY3V0aW9uLlxuICAgKiBPbmx5IGV4ZWN1dGVzIHRhc2tzIHdpdGggZXhlY3V0aW9uTW9kZSAnZnJvbnRlbmQnIG9yICdib3RoJy5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gVGFzayB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIEV4ZWN1dGlvbiByZXN1bHQgd2l0aCBvdXRwdXQgYW5kIG91dGNvbWVcbiAgICogXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGFzayBpcyBub3QgYSBmcm9udGVuZCB0YXNrXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHRhc2s6IEFYUFdvcmtmbG93VGFzayk6IFByb21pc2U8RnJvbnRlbmRUYXNrRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbnRlbmRUYXNrRXhlY3V0b3IuZXhlY3V0ZSh0YXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIHRhc2sgYW5kIGdldCBuZXh0IHRhc2sgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogU2VuZHMgdGFzayByZXN1bHQgdG8gYmFja2VuZCBBUEkuXG4gICAqIEJhY2tlbmQgZGVjaWRlczogbmV4dCB0YXNrLCBmYWlsLCBvciBjb21wbGV0ZSB3b3JrZmxvdy5cbiAgICogXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHBhcmFtIHRhc2sgLSBDb21wbGV0ZWQgdGFza1xuICAgKiBAcGFyYW0gb3V0Y29tZSAtIFRhc2sgb3V0Y29tZSAoZS5nLiwgJ0RvbmUnLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcpXG4gICAqIEBwYXJhbSBvdXRwdXQgLSBUYXNrIG91dHB1dC9yZXN1bHQgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBDb21wbGV0ZSByZXN1bHQgd2l0aCBuZXh0IHRhc2sgKGlmIGFueSlcbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlKFxuICAgIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgICB0YXNrOiBBWFBXb3JrZmxvd1Rhc2ssXG4gICAgb3V0Y29tZTogc3RyaW5nLFxuICAgIG91dHB1dD86IGFueVxuICApOiBQcm9taXNlPFdvcmtmbG93Q29tcGxldGVSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU2VuZCByZXN1bHQgdG8gYmFja2VuZCAtIGJhY2tlbmQgZGVjaWRlcyBuZXh0IHN0ZXBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5yZXN1bWUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGVwSWQ6IHRhc2suYWN0aXZpdHlJZCxcbiAgICAgICAgdGFza1Rva2VuOiB0YXNrLnRhc2tUb2tlbixcbiAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgdXNlcklucHV0OiBvdXRwdXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIGxldCBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSA9IHJlc3BvbnNlLnN0YXRlO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgICBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgICAgaWYgKGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgY29tcGxldGVOb3JtYWxpemVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogY29tcGxldGVOb3JtYWxpemVkU3RhdGUsXG4gICAgICAgIG5leHRUYXNrOiByZXNwb25zZS5uZXh0VGFzayB8fCBudWxsLFxuICAgICAgICBvdXRwdXQ6IHJlc3BvbnNlLm91dHB1dFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3IgY29tcGxldGluZyB0YXNrOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNvbXBsZXRlIHRhc2snXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgKGUuZy4sIGFmdGVyIHVzZXIgaW50ZXJhY3Rpb24pLlxuICAgKiBcbiAgICogQmFja2VuZCBkZXRlcm1pbmVzIG5leHRTdGVwIGJhc2VkIG9uIG91dGNvbWUgYW5kIG91dGNvbWVDb25uZWN0aW9ucy5cbiAgICogQ2xpZW50IG9ubHkgcHJvdmlkZXMgaW5zdGFuY2VJZCwgc3RlcElkLCBvdXRjb21lLCBhbmQgb3B0aW9uYWwgdXNlcklucHV0LlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcGFyYW0gc3RlcElkIC0gU3RlcCBJRCB0aGF0IHdhcyB3YWl0aW5nIGZvciB1c2VyIGlucHV0XG4gICAqIEBwYXJhbSBvdXRjb21lIC0gVXNlciBhY3Rpb24gb3V0Y29tZSAoZS5nLiwgJ0NvbmZpcm1lZCcsICdDYW5jZWxsZWQnLCAnU3VibWl0dGVkJylcbiAgICogQHBhcmFtIHVzZXJJbnB1dCAtIE9wdGlvbmFsIHVzZXIgaW5wdXQgZGF0YVxuICAgKiBAcGFyYW0gdGFza1Rva2VuIC0gU2VjdXJlIHRhc2sgdG9rZW4gKHJlcXVpcmVkIGZvciBzZWN1cmUgcmVzdW1wdGlvbilcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3VsdCB3aXRoIG5leHQgdGFzayAoaWYgYW55KVxuICAgKi9cbiAgYXN5bmMgcmVzdW1lKFxuICAgIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBvdXRjb21lOiBzdHJpbmcsXG4gICAgdXNlcklucHV0PzogYW55LFxuICAgIHRhc2tUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPFdvcmtmbG93UmVzdW1lUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSB0YXNrVG9rZW4gaXMgcHJvdmlkZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uXG4gICAgICBpZiAoIXRhc2tUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdGFza1Rva2VuIGZvciByZXN1bWUgb3BlcmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2tlbmQgaGFuZGxlcyBldmVyeXRoaW5nOiBjaGVja3Mgb3V0Y29tZUNvbm5lY3Rpb25zIGFuZCBkZXRlcm1pbmVzIG5leHRTdGVwXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUucmVzdW1lKHtcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RlcElkLFxuICAgICAgICB0YXNrVG9rZW4sXG4gICAgICAgIG91dGNvbWUsXG4gICAgICAgIHVzZXJJbnB1dFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSB3aXRoIHN0YXRlIGZyb20gYmFja2VuZFxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSB7IC4uLnJlc3BvbnNlLnN0YXRlIH07XG4gICAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3JtYWxpemUgc3RhdGUgRGF0ZSBmb3IgcmV0dXJuXG4gICAgICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSByZXNwb25zZS5zdGF0ZSA/IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUgJiYgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RhdGU6IG5vcm1hbGl6ZWRTdGF0ZSB8fCByZXNwb25zZS5zdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLm5leHRUYXNrIHx8IG51bGwsIC8vIEJhY2tlbmQgZGV0ZXJtaW5lcyB0aGlzIGZyb20gb3V0Y29tZUNvbm5lY3Rpb25zXG4gICAgICAgIG91dHB1dDogcmVzcG9uc2Uub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciByZXN1bWluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZXN1bWUgd29ya2Zsb3cnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqIFxuICAgKiBSZXRyaWV2ZXMgc3RhdGUgZnJvbSBjYWNoZSAoaWYgdmFsaWQpIG9yIGZyb20gYmFja2VuZC5cbiAgICogXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHJldHVybnMgV29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIGdldFN0YXRlKGluc3RhbmNlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIHwgbnVsbD4ge1xuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdGF0ZUNhY2hlLmdldChpbnN0YW5jZUlkKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDYWNoZWQgPSB7IC4uLmNhY2hlZCB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBhZ2VcbiAgICAgIGNvbnN0IGNhY2hlQWdlID0gRGF0ZS5ub3coKSAtIG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQuZ2V0VGltZSgpO1xuICAgICAgaWYgKGNhY2hlQWdlIDwgdGhpcy5DQUNIRV9UVEwpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDYWNoZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggZnJvbSBiYWNrZW5kXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5nZXRTdGF0ZSh7XG4gICAgICAgIGluc3RhbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgbm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRTdGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3IgZ2V0dGluZyB3b3JrZmxvdyBzdGF0ZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, Optional, Inject } from '@angular/core';\nimport { AXP_WORKFLOW_DEFINITION_LOADER, } from '../workflow-definition.config';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Local engine implementation that manages workflow progression and state.\n *\n * This engine:\n * - Returns frontend/both activities as pendingTask (does NOT execute them)\n * - Skips backend activities (does not error, continues execution)\n * - Maintains workflow state in memory\n * - Does not require backend API calls\n *\n * Execution of frontend tasks is handled by AXPWorkflowManager via FrontendTaskExecutor.\n * This engine only manages workflow progression and state storage.\n *\n * This is the DEFAULT engine provider. Applications can override it with\n * an API-based engine implementation.\n */\nexport class AXPWorkflowLocalEngine {\n //#region ---- Services & Dependencies ----\n constructor(definitionLoaders = null) {\n this.definitionLoaders = definitionLoaders;\n //#endregion\n //#region ---- Instance Storage ----\n /**\n * In-memory storage for workflow instances.\n * Key: instanceId\n * Value: LocalWorkflowState\n */\n this.instances = new Map();\n /**\n * Task token storage for secure resume operations.\n * Key: taskToken\n * Value: { instanceId, activityId }\n */\n this.taskTokens = new Map();\n }\n //#endregion\n //#region ---- Public Methods (AXPWorkflowEngine) ----\n /**\n * Start a new workflow instance.\n *\n * Creates an in-memory workflow instance and progresses it.\n * Frontend/both activities are returned as pendingTask for external execution.\n * Backend activities are skipped.\n */\n async start(request) {\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n // Initialize workflow state\n const state = {\n instanceId,\n workflowId: request.workflowId,\n status: 'running',\n variables: {},\n input: request.input || {},\n output: undefined,\n lastUpdated: now,\n };\n // Create local state\n const localState = {\n instanceId,\n workflowId: request.workflowId,\n definition,\n state,\n completedActivities: new Set(),\n activityResults: new Map(),\n };\n // Store instance\n this.instances.set(instanceId, localState);\n // Execute workflow steps\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n return {\n instanceId,\n state: localState.state,\n pendingTask: pendingTask || null,\n };\n }\n /**\n * Resume a suspended workflow instance.\n *\n * Validates task token, applies externally executed result,\n * and continues progressing workflow steps.\n */\n async resume(request) {\n // Validate task token\n const tokenInfo = this.taskTokens.get(request.taskToken);\n if (!tokenInfo || tokenInfo.instanceId !== request.instanceId || tokenInfo.activityId !== request.stepId) {\n throw new Error('Invalid task token');\n }\n // Get instance\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Store activity result (from external execution)\n localState.activityResults.set(request.stepId, {\n output: request.userInput || {},\n outcome: request.outcome,\n });\n localState.completedActivities.add(request.stepId);\n // Merge output/userInput into state variables\n if (request.userInput) {\n localState.state.variables = {\n ...localState.state.variables,\n ...(request.userInput || {}),\n };\n }\n // Mark activity as completed and continue progression\n // Continue progressing workflow steps (skipping backend activities)\n const nextTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n // Determine final status\n if (!nextTask && localState.state.status === 'running') {\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n }\n return {\n output: request.userInput || {},\n outcomes: { [request.outcome]: true },\n state: localState.state,\n nextTask: nextTask || null,\n };\n }\n /**\n * Get current workflow instance state.\n */\n async getState(request) {\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Normalize lastUpdated to Date (for cache safety)\n const state = { ...localState.state };\n if (state.lastUpdated && !(state.lastUpdated instanceof Date)) {\n state.lastUpdated = new Date(state.lastUpdated);\n }\n return state;\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Get workflow definition from available loaders.\n */\n async getDefinition(workflowId) {\n // Try all loaders in order\n const loaders = this.definitionLoaders || [];\n for (const loader of loaders) {\n const definition = await loader.get(workflowId);\n if (definition) {\n return definition;\n }\n }\n return null;\n }\n /**\n * Progress workflow steps starting from the current position.\n *\n * For frontend/both activities: returns task immediately (suspends workflow).\n * For backend activities: skips and continues.\n *\n * Returns the next pending task (if frontend activity found) or null (if completed).\n */\n async executeWorkflowSteps(localState) {\n const graph = localState.definition.graph;\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach(activity => {\n activityMap.set(activity.id, activity);\n });\n // Build connection graph\n const outgoingConnections = new Map();\n const incomingConnections = new Map();\n connections.forEach(conn => {\n const sourceId = conn.source.activtyName;\n const targetId = conn.target.activtyName;\n if (!outgoingConnections.has(sourceId)) {\n outgoingConnections.set(sourceId, []);\n }\n outgoingConnections.get(sourceId).push(conn);\n if (!incomingConnections.has(targetId)) {\n incomingConnections.set(targetId, []);\n }\n incomingConnections.get(targetId).push(conn);\n });\n // Find starting activity (use startActivityId or no incoming connections, or first activity)\n let currentActivityId = localState.currentActivityId;\n if (!currentActivityId) {\n // Use startActivityId if available\n if (graph.startActivityId) {\n currentActivityId = graph.startActivityId;\n }\n else {\n // Find root activity (no incoming connections)\n for (const activity of activities) {\n if (!incomingConnections.has(activity.id)) {\n currentActivityId = activity.id;\n break;\n }\n }\n // If no root found, use first activity\n if (!currentActivityId && activities.length > 0) {\n currentActivityId = activities[0].id;\n }\n }\n }\n // Execute workflow steps\n while (currentActivityId) {\n const activity = activityMap.get(currentActivityId);\n if (!activity) {\n break;\n }\n // Skip if already completed\n if (localState.completedActivities.has(currentActivityId)) {\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Determine execution mode\n const executionMode = activity.executionMode || 'frontend';\n // Handle backend activities: skip\n if (executionMode === 'backend') {\n console.log(`[WorkflowLocalEngine] ⏭️ Skipping backend activity: ${activity.name} (${activity.id})`);\n localState.completedActivities.add(currentActivityId);\n localState.activityResults.set(currentActivityId, {\n output: null,\n outcome: 'Done',\n });\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Handle frontend/both activities: return as pendingTask (do NOT execute)\n if (executionMode === 'frontend' || executionMode === 'both') {\n // Create task for external execution\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.name,\n activityName: activity.title || undefined,\n executionMode: executionMode,\n input: activity.inputs || {},\n config: activity.customProperties || {},\n };\n // Store task token for secure resume\n this.taskTokens.set(task.taskToken, {\n instanceId: localState.instanceId,\n activityId: activity.id,\n });\n // Update state to indicate suspension\n localState.currentActivityId = currentActivityId;\n localState.state.status = 'suspended';\n localState.state.currentStepId = currentActivityId;\n // Return task immediately - AXPWorkflowManager will execute it\n return task;\n }\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n }\n // Workflow completed\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n localState.currentActivityId = undefined;\n return null;\n }\n /**\n * Get next activity ID based on connections and outcomes.\n */\n getNextActivityId(currentActivityId, outgoingConnections, activityResults) {\n const connections = outgoingConnections.get(currentActivityId) || [];\n if (connections.length === 0) {\n return null; // No outgoing connections - workflow ends\n }\n // Get current activity result\n const result = activityResults.get(currentActivityId);\n const outcome = result?.outcome || 'Done';\n // Find connection matching outcome\n // Outcome matching is typically done via port name (e.g., \"Done\", \"Failed\")\n for (const conn of connections) {\n const sourcePort = conn.source.port || 'Done';\n if (sourcePort === outcome) {\n return conn.target.activtyName;\n }\n }\n // If no matching outcome, use first connection (default path)\n if (connections.length > 0) {\n return connections[0].target.activtyName;\n }\n return null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [{ token: AXP_WORKFLOW_DEFINITION_LOADER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [AXP_WORKFLOW_DEFINITION_LOADER]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQjdELE9BQU8sRUFFTCw4QkFBOEIsR0FDL0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFpQnpELFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsK0NBQStDO0lBRS9DLFlBRW1CLG9CQUEwRCxJQUFJO1FBQTlELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkM7UUFJakYsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7SUFsQm5GLENBQUM7SUFvQkQsWUFBWTtJQUVaLDBEQUEwRDtJQUUxRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQWdDO1FBQzFDLHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXZCLDJCQUEyQjtRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNo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SSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0F2V1Usc0JBQXNCLGtCQUlYLDhCQUE4QjttSEFKekMsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVOzswQkFLTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RW5naW5lIH0gZnJvbSAnLi93b3JrZmxvdy1lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICBBWFBXb3JrZmxvd1Rhc2ssXG59IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbn0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXIsXG4gIEFYUF9XT1JLRkxPV19ERUZJTklUSU9OX0xPQURFUixcbn0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi5jb25maWcnO1xuaW1wb3J0IHsgQVhQRGF0YUdlbmVyYXRvciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgJiBJbnRlcmZhY2VzICAgLS0tLVxuXG4vKipcbiAqIEludGVybmFsIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuaW50ZXJmYWNlIExvY2FsV29ya2Zsb3dTdGF0ZSB7XG4gIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICBkZWZpbml0aW9uOiBBWFBXb3JrZmxvd0RlZmluaXRpb247XG4gIHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG4gIGN1cnJlbnRBY3Rpdml0eUlkPzogc3RyaW5nO1xuICBjb21wbGV0ZWRBY3Rpdml0aWVzOiBTZXQ8c3RyaW5nPjtcbiAgYWN0aXZpdHlSZXN1bHRzOiBNYXA8c3RyaW5nLCB7IG91dHB1dDogYW55OyBvdXRjb21lOiBzdHJpbmcgfT47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIExvY2FsIGVuZ2luZSBpbXBsZW1lbnRhdGlvbiB0aGF0IG1hbmFnZXMgd29ya2Zsb3cgcHJvZ3Jlc3Npb24gYW5kIHN0YXRlLlxuICogXG4gKiBUaGlzIGVuZ2luZTpcbiAqIC0gUmV0dXJucyBmcm9udGVuZC9ib3RoIGFjdGl2aXRpZXMgYXMgcGVuZGluZ1Rhc2sgKGRvZXMgTk9UIGV4ZWN1dGUgdGhlbSlcbiAqIC0gU2tpcHMgYmFja2VuZCBhY3Rpdml0aWVzIChkb2VzIG5vdCBlcnJvciwgY29udGludWVzIGV4ZWN1dGlvbilcbiAqIC0gTWFpbnRhaW5zIHdvcmtmbG93IHN0YXRlIGluIG1lbW9yeVxuICogLSBEb2VzIG5vdCByZXF1aXJlIGJhY2tlbmQgQVBJIGNhbGxzXG4gKiBcbiAqIEV4ZWN1dGlvbiBvZiBmcm9udGVuZCB0YXNrcyBpcyBoYW5kbGVkIGJ5IEFYUFdvcmtmbG93TWFuYWdlciB2aWEgRnJvbnRlbmRUYXNrRXhlY3V0b3IuXG4gKiBUaGlzIGVuZ2luZSBvbmx5IG1hbmFnZXMgd29ya2Zsb3cgcHJvZ3Jlc3Npb24gYW5kIHN0YXRlIHN0b3JhZ2UuXG4gKiBcbiAqIFRoaXMgaXMgdGhlIERFRkFVTFQgZW5naW5lIHByb3ZpZGVyLiBBcHBsaWNhdGlvbnMgY2FuIG92ZXJyaWRlIGl0IHdpdGhcbiAqIGFuIEFQSS1iYXNlZCBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0xvY2FsRW5naW5lIGltcGxlbWVudHMgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVhQX1dPUktGTE9XX0RFRklOSVRJT05fTE9BREVSKSBcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmluaXRpb25Mb2FkZXJzOiBBWFBXb3JrZmxvd0RlZmluaXRpb25Mb2FkZXJbXSB8IG51bGwgPSBudWxsXG4gICkge1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBJbnN0YW5jZSBTdG9yYWdlICAgLS0tLVxuXG4gIC8qKlxuICAgKiBJbi1tZW1vcnkgc3RvcmFnZSBmb3Igd29ya2Zsb3cgaW5zdGFuY2VzLlxuICAgKiBLZXk6IGluc3RhbmNlSWRcbiAgICogVmFsdWU6IExvY2FsV29ya2Zsb3dTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YW5jZXMgPSBuZXcgTWFwPHN0cmluZywgTG9jYWxXb3JrZmxvd1N0YXRlPigpO1xuXG4gIC8qKlxuICAgKiBUYXNrIHRva2VuIHN0b3JhZ2UgZm9yIHNlY3VyZSByZXN1bWUgb3BlcmF0aW9ucy5cbiAgICogS2V5OiB0YXNrVG9rZW5cbiAgICogVmFsdWU6IHsgaW5zdGFuY2VJZCwgYWN0aXZpdHlJZCB9XG4gICAqL1xuICBwcml2YXRlIHRhc2tUb2tlbnMgPSBuZXcgTWFwPHN0cmluZywgeyBpbnN0YW5jZUlkOiBzdHJpbmc7IGFjdGl2aXR5SWQ6IHN0cmluZyB9PigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgKEFYUFdvcmtmbG93RW5naW5lKSAgIC0tLS1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGFuIGluLW1lbW9yeSB3b3JrZmxvdyBpbnN0YW5jZSBhbmQgcHJvZ3Jlc3NlcyBpdC5cbiAgICogRnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzIGFyZSByZXR1cm5lZCBhcyBwZW5kaW5nVGFzayBmb3IgZXh0ZXJuYWwgZXhlY3V0aW9uLlxuICAgKiBCYWNrZW5kIGFjdGl2aXRpZXMgYXJlIHNraXBwZWQuXG4gICAqL1xuICBhc3luYyBzdGFydChyZXF1ZXN0OiBBWFBTdGFydFdvcmtmbG93UmVxdWVzdCk6IFByb21pc2U8QVhQU3RhcnRXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgLy8gR2VuZXJhdGUgaW5zdGFuY2UgSURcbiAgICBjb25zdCBpbnN0YW5jZUlkID0gQVhQRGF0YUdlbmVyYXRvci51dWlkKCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIExvYWQgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldERlZmluaXRpb24ocmVxdWVzdC53b3JrZmxvd0lkKTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgZGVmaW5pdGlvbiBub3QgZm91bmQ6ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgd29ya2Zsb3cgc3RhdGVcbiAgICBjb25zdCBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlID0ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHdvcmtmbG93SWQ6IHJlcXVlc3Qud29ya2Zsb3dJZCxcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgIGlucHV0OiByZXF1ZXN0LmlucHV0IHx8IHt9LFxuICAgICAgb3V0cHV0OiB1bmRlZmluZWQsXG4gICAgICBsYXN0VXBkYXRlZDogbm93LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgbG9jYWwgc3RhdGVcbiAgICBjb25zdCBsb2NhbFN0YXRlOiBMb2NhbFdvcmtmbG93U3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgd29ya2Zsb3dJZDogcmVxdWVzdC53b3JrZmxvd0lkLFxuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIHN0YXRlLFxuICAgICAgY29tcGxldGVkQWN0aXZpdGllczogbmV3IFNldCgpLFxuICAgICAgYWN0aXZpdHlSZXN1bHRzOiBuZXcgTWFwKCksXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGluc3RhbmNlXG4gICAgdGhpcy5pbnN0YW5jZXMuc2V0KGluc3RhbmNlSWQsIGxvY2FsU3RhdGUpO1xuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIGNvbnN0IHBlbmRpbmdUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBzdGF0ZTogbG9jYWxTdGF0ZS5zdGF0ZSxcbiAgICAgIHBlbmRpbmdUYXNrOiBwZW5kaW5nVGFzayB8fCBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogVmFsaWRhdGVzIHRhc2sgdG9rZW4sIGFwcGxpZXMgZXh0ZXJuYWxseSBleGVjdXRlZCByZXN1bHQsXG4gICAqIGFuZCBjb250aW51ZXMgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMuXG4gICAqL1xuICBhc3luYyByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgLy8gVmFsaWRhdGUgdGFzayB0b2tlblxuICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMudGFza1Rva2Vucy5nZXQocmVxdWVzdC50YXNrVG9rZW4pO1xuICAgIGlmICghdG9rZW5JbmZvIHx8IHRva2VuSW5mby5pbnN0YW5jZUlkICE9PSByZXF1ZXN0Lmluc3RhbmNlSWQgfHwgdG9rZW5JbmZvLmFjdGl2aXR5SWQgIT09IHJlcXVlc3Quc3RlcElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFzayB0b2tlbicpO1xuICAgIH1cblxuICAgIC8vIEdldCBpbnN0YW5jZVxuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBhY3Rpdml0eSByZXN1bHQgKGZyb20gZXh0ZXJuYWwgZXhlY3V0aW9uKVxuICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChyZXF1ZXN0LnN0ZXBJZCwge1xuICAgICAgb3V0cHV0OiByZXF1ZXN0LnVzZXJJbnB1dCB8fCB7fSxcbiAgICAgIG91dGNvbWU6IHJlcXVlc3Qub3V0Y29tZSxcbiAgICB9KTtcbiAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKHJlcXVlc3Quc3RlcElkKTtcblxuICAgIC8vIE1lcmdlIG91dHB1dC91c2VySW5wdXQgaW50byBzdGF0ZSB2YXJpYWJsZXNcbiAgICBpZiAocmVxdWVzdC51c2VySW5wdXQpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzID0ge1xuICAgICAgICAuLi5sb2NhbFN0YXRlLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgLi4uKHJlcXVlc3QudXNlcklucHV0IHx8IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhY3Rpdml0eSBhcyBjb21wbGV0ZWQgYW5kIGNvbnRpbnVlIHByb2dyZXNzaW9uXG4gICAgLy8gQ29udGludWUgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMgKHNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdGllcylcbiAgICBjb25zdCBuZXh0VGFzayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhdGVcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcblxuICAgIC8vIERldGVybWluZSBmaW5hbCBzdGF0dXNcbiAgICBpZiAoIW5leHRUYXNrICYmIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICBsb2NhbFN0YXRlLnN0YXRlLm91dHB1dCA9IGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3QudXNlcklucHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZXM6IHsgW3JlcXVlc3Qub3V0Y29tZV06IHRydWUgfSxcbiAgICAgIHN0YXRlOiBsb2NhbFN0YXRlLnN0YXRlLFxuICAgICAgbmV4dFRhc2s6IG5leHRUYXNrIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIGdldFN0YXRlKHJlcXVlc3Q6IEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0KTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+IHtcbiAgICBjb25zdCBsb2NhbFN0YXRlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHJlcXVlc3QuaW5zdGFuY2VJZCk7XG4gICAgaWYgKCFsb2NhbFN0YXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IGluc3RhbmNlIG5vdCBmb3VuZDogJHtyZXF1ZXN0Lmluc3RhbmNlSWR9YCk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLmxvY2FsU3RhdGUuc3RhdGUgfTtcbiAgICBpZiAoc3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICBzdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKHN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gZnJvbSBhdmFpbGFibGUgbG9hZGVycy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGVmaW5pdGlvbih3b3JrZmxvd0lkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbiB8IG51bGw+IHtcbiAgICAvLyBUcnkgYWxsIGxvYWRlcnMgaW4gb3JkZXJcbiAgICBjb25zdCBsb2FkZXJzID0gdGhpcy5kZWZpbml0aW9uTG9hZGVycyB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgbG9hZGVyLmdldCh3b3JrZmxvd0lkKTtcbiAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyZXNzIHdvcmtmbG93IHN0ZXBzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqIFxuICAgKiBGb3IgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm5zIHRhc2sgaW1tZWRpYXRlbHkgKHN1c3BlbmRzIHdvcmtmbG93KS5cbiAgICogRm9yIGJhY2tlbmQgYWN0aXZpdGllczogc2tpcHMgYW5kIGNvbnRpbnVlcy5cbiAgICogXG4gICAqIFJldHVybnMgdGhlIG5leHQgcGVuZGluZyB0YXNrIChpZiBmcm9udGVuZCBhY3Rpdml0eSBmb3VuZCkgb3IgbnVsbCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZTogTG9jYWxXb3JrZmxvd1N0YXRlKTogUHJvbWlzZTxBWFBXb3JrZmxvd1Rhc2sgfCBudWxsPiB7XG4gICAgY29uc3QgZ3JhcGggPSBsb2NhbFN0YXRlLmRlZmluaXRpb24uZ3JhcGg7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IGdyYXBoLmFjdGl2aXRpZXMgfHwgW107XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBncmFwaC5jb25uZWN0aW9ucyB8fCBbXTtcblxuICAgIC8vIEJ1aWxkIGFjdGl2aXR5IG1hcFxuICAgIGNvbnN0IGFjdGl2aXR5TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZT4oKTtcbiAgICBhY3Rpdml0aWVzLmZvckVhY2goYWN0aXZpdHkgPT4ge1xuICAgICAgYWN0aXZpdHlNYXAuc2V0KGFjdGl2aXR5LmlkLCBhY3Rpdml0eSk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCBjb25uZWN0aW9uIGdyYXBoXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG4gICAgY29uc3QgaW5jb21pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG5cbiAgICBjb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xuICAgICAgY29uc3Qgc291cmNlSWQgPSBjb25uLnNvdXJjZS5hY3RpdnR5TmFtZTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gY29ubi50YXJnZXQuYWN0aXZ0eU5hbWU7XG5cbiAgICAgIGlmICghb3V0Z29pbmdDb25uZWN0aW9ucy5oYXMoc291cmNlSWQpKSB7XG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMuc2V0KHNvdXJjZUlkLCBbXSk7XG4gICAgICB9XG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLmdldChzb3VyY2VJZCkhLnB1c2goY29ubik7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9ucy5oYXModGFyZ2V0SWQpKSB7XG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbnMuc2V0KHRhcmdldElkLCBbXSk7XG4gICAgICB9XG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb25zLmdldCh0YXJnZXRJZCkhLnB1c2goY29ubik7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5kIHN0YXJ0aW5nIGFjdGl2aXR5ICh1c2Ugc3RhcnRBY3Rpdml0eUlkIG9yIG5vIGluY29taW5nIGNvbm5lY3Rpb25zLCBvciBmaXJzdCBhY3Rpdml0eSlcbiAgICBsZXQgY3VycmVudEFjdGl2aXR5SWQgPSBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkO1xuICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIC8vIFVzZSBzdGFydEFjdGl2aXR5SWQgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoZ3JhcGguc3RhcnRBY3Rpdml0eUlkKSB7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gZ3JhcGguc3RhcnRBY3Rpdml0eUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCByb290IGFjdGl2aXR5IChubyBpbmNvbWluZyBjb25uZWN0aW9ucylcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiBhY3Rpdml0aWVzKSB7XG4gICAgICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb25zLmhhcyhhY3Rpdml0eS5pZCkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm8gcm9vdCBmb3VuZCwgdXNlIGZpcnN0IGFjdGl2aXR5XG4gICAgICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQgJiYgYWN0aXZpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBhY3Rpdml0aWVzWzBdLmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIHdoaWxlIChjdXJyZW50QWN0aXZpdHlJZCkge1xuICAgICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eU1hcC5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgICAgaWYgKCFhY3Rpdml0eSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiBhbHJlYWR5IGNvbXBsZXRlZFxuICAgICAgaWYgKGxvY2FsU3RhdGUuY29tcGxldGVkQWN0aXZpdGllcy5oYXMoY3VycmVudEFjdGl2aXR5SWQpKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIGV4ZWN1dGlvbiBtb2RlXG4gICAgICBjb25zdCBleGVjdXRpb25Nb2RlID0gYWN0aXZpdHkuZXhlY3V0aW9uTW9kZSB8fCAnZnJvbnRlbmQnO1xuXG4gICAgICAvLyBIYW5kbGUgYmFja2VuZCBhY3Rpdml0aWVzOiBza2lwXG4gICAgICBpZiAoZXhlY3V0aW9uTW9kZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4o+t77iPIFNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdHk6ICR7YWN0aXZpdHkubmFtZX0gKCR7YWN0aXZpdHkuaWR9KWBcbiAgICAgICAgKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5jb21wbGV0ZWRBY3Rpdml0aWVzLmFkZChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChjdXJyZW50QWN0aXZpdHlJZCwge1xuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBvdXRjb21lOiAnRG9uZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZyb250ZW5kL2JvdGggYWN0aXZpdGllczogcmV0dXJuIGFzIHBlbmRpbmdUYXNrIChkbyBOT1QgZXhlY3V0ZSlcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnIHx8IGV4ZWN1dGlvbk1vZGUgPT09ICdib3RoJykge1xuICAgICAgICAvLyBDcmVhdGUgdGFzayBmb3IgZXh0ZXJuYWwgZXhlY3V0aW9uXG4gICAgICAgIGNvbnN0IHRhc2s6IEFYUFdvcmtmbG93VGFzayA9IHtcbiAgICAgICAgICB0YXNrVG9rZW46IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICAgIGFjdGl2aXR5VHlwZTogYWN0aXZpdHkubmFtZSxcbiAgICAgICAgICBhY3Rpdml0eU5hbWU6IGFjdGl2aXR5LnRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleGVjdXRpb25Nb2RlOiBleGVjdXRpb25Nb2RlIGFzICdmcm9udGVuZCcgfCAnYmFja2VuZCcgfCAnYm90aCcsXG4gICAgICAgICAgaW5wdXQ6IGFjdGl2aXR5LmlucHV0cyB8fCB7fSxcbiAgICAgICAgICBjb25maWc6IGFjdGl2aXR5LmN1c3RvbVByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3RvcmUgdGFzayB0b2tlbiBmb3Igc2VjdXJlIHJlc3VtZVxuICAgICAgICB0aGlzLnRhc2tUb2tlbnMuc2V0KHRhc2sudGFza1Rva2VuLCB7XG4gICAgICAgICAgaW5zdGFuY2VJZDogbG9jYWxTdGF0ZS5pbnN0YW5jZUlkLFxuICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBVcGRhdGUgc3RhdGUgdG8gaW5kaWNhdGUgc3VzcGVuc2lvblxuICAgICAgICBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkID0gY3VycmVudEFjdGl2aXR5SWQ7XG4gICAgICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ3N1c3BlbmRlZCc7XG4gICAgICAgIGxvY2FsU3RhdGUuc3RhdGUuY3VycmVudFN0ZXBJZCA9IGN1cnJlbnRBY3Rpdml0eUlkO1xuXG4gICAgICAgIC8vIFJldHVybiB0YXNrIGltbWVkaWF0ZWx5IC0gQVhQV29ya2Zsb3dNYW5hZ2VyIHdpbGwgZXhlY3V0ZSBpdFxuICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgIH1cblxuICAgICAgLy8gTW92ZSB0byBuZXh0IGFjdGl2aXR5XG4gICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCxcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyxcbiAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICk7XG4gICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IG5leHRJZCA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gV29ya2Zsb3cgY29tcGxldGVkXG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICBsb2NhbFN0YXRlLnN0YXRlLm91dHB1dCA9IGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzO1xuICAgIGxvY2FsU3RhdGUuY3VycmVudEFjdGl2aXR5SWQgPSB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbmV4dCBhY3Rpdml0eSBJRCBiYXNlZCBvbiBjb25uZWN0aW9ucyBhbmQgb3V0Y29tZXMuXG4gICAqL1xuICBwcml2YXRlIGdldE5leHRBY3Rpdml0eUlkKFxuICAgIGN1cnJlbnRBY3Rpdml0eUlkOiBzdHJpbmcsXG4gICAgb3V0Z29pbmdDb25uZWN0aW9uczogTWFwPHN0cmluZywgQVhQQ29ubmVjdGlvbltdPixcbiAgICBhY3Rpdml0eVJlc3VsdHM6IE1hcDxzdHJpbmcsIHsgb3V0cHV0OiBhbnk7IG91dGNvbWU6IHN0cmluZyB9PlxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb25uZWN0aW9ucyA9IG91dGdvaW5nQ29ubmVjdGlvbnMuZ2V0KGN1cnJlbnRBY3Rpdml0eUlkKSB8fCBbXTtcblxuICAgIGlmIChjb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBObyBvdXRnb2luZyBjb25uZWN0aW9ucyAtIHdvcmtmbG93IGVuZHNcbiAgICB9XG5cbiAgICAvLyBHZXQgY3VycmVudCBhY3Rpdml0eSByZXN1bHRcbiAgICBjb25zdCByZXN1bHQgPSBhY3Rpdml0eVJlc3VsdHMuZ2V0KGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICBjb25zdCBvdXRjb21lID0gcmVzdWx0Py5vdXRjb21lIHx8ICdEb25lJztcblxuICAgIC8vIEZpbmQgY29ubmVjdGlvbiBtYXRjaGluZyBvdXRjb21lXG4gICAgLy8gT3V0Y29tZSBtYXRjaGluZyBpcyB0eXBpY2FsbHkgZG9uZSB2aWEgcG9ydCBuYW1lIChlLmcuLCBcIkRvbmVcIiwgXCJGYWlsZWRcIilcbiAgICBmb3IgKGNvbnN0IGNvbm4gb2YgY29ubmVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBvcnQgPSBjb25uLnNvdXJjZS5wb3J0IHx8ICdEb25lJztcbiAgICAgIGlmIChzb3VyY2VQb3J0ID09PSBvdXRjb21lKSB7XG4gICAgICAgIHJldHVybiBjb25uLnRhcmdldC5hY3RpdnR5TmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBtYXRjaGluZyBvdXRjb21lLCB1c2UgZmlyc3QgY29ubmVjdGlvbiAoZGVmYXVsdCBwYXRoKVxuICAgIGlmIChjb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY29ubmVjdGlvbnNbMF0udGFyZ2V0LmFjdGl2dHlOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './frontend-task-executor.service';\nexport * from './workflow-local-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IFJ1bnRpbWUgU2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zyb250ZW5kLXRhc2stZXhlY3V0b3Iuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWxvY2FsLWVuZ2luZSc7Il19","import { InjectionToken } from '@angular/core';\nexport const AXP_WORKFLOW_PROVIDER = new InjectionToken('AXP_WORKFLOW_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_WORKFLOW_CATEGORY_PROVIDER = new InjectionToken('AXP_WORKFLOW_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBNEUvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBc0JILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbj86IG51bWJlciAgICAgICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtcz86IG51bWJlciAgICAgICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbi8qKlxuICogV29ya2Zsb3cgRGVmaW5pdGlvbiAtIE1ldGFkYXRhIGZvciBVSSBhbmQgdG9vbGluZy5cbiAqIENvbnRhaW5zIGFsbCBtZXRhZGF0YSBuZWVkZWQgZm9yIGRpc3BsYXlpbmcgd29ya2Zsb3dzIGluIHRvb2xib3ggYW5kIGRlc2lnbmVyLlxuICogVGhlIGBuYW1lYCBwcm9wZXJ0eSBpcyB1c2VkIGFzIHRoZSB3b3JrZmxvdyBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFdvcmtmbG93IG5hbWUgLSB1c2VkIGFzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKiBUaGlzIGlzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIERpc3BsYXkgbmFtZSBmb3IgVUkuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB3b3JrZmxvdyBkb2VzLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogQ2F0ZWdvcnkgZm9yIGdyb3VwaW5nIGluIHRvb2xib3guXG4gICAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBJY29uIG5hbWUgb3IgY2xhc3MuXG4gICAqL1xuICBpY29uPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB3b3JrZmxvdyBpcyBicm93c2FibGUgaW4gdGhlIHRvb2xib3guXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIGlzQnJvd3NhYmxlPzogYm9vbGVhbjtcbiAgXG4gIC8qKlxuICAgKiBWZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIFxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHdvcmtmbG93IGlzIHB1Ymxpc2hlZC5cbiAgICovXG4gIGlzUHVibGlzaGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dQcm92aWRlclRva2VuID1cbiAgICB8IEFYUFdvcmtmbG93UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQV29ya2Zsb3dQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dQcm92aWRlclRva2VuW10+KCdBWFBfV09SS0ZMT1dfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd1Byb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciB3b3JrZmxvd3NcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHdvcmtmbG93IGRlZmluaXRpb24gbWV0YWRhdGEgYXJyYXlcbiAgICAgKi9cbiAgICBnZXRMaXN0KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGFbXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gbWV0YWRhdGEgYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIG1ldGFkYXRhIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGEgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyPjtcblxuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX0NBVEVHT1JZX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyIHtcbiAgICBnZXRMaXN0KHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+O1xuICAgIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeSB8IHVuZGVmaW5lZD47XG59XG5cbiJdfQ==","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER } from './workflow-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Workflow Definition Service\n *\n * Manages workflow definitions (metadata) for UI and tooling.\n * Similar to AXPActivityDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has workflows (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPWorkflowDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_WORKFLOW_CATEGORY_PROVIDER, { optional: true }) || [];\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for workflow definitions by categoryId - O(1) lookup */\n this.workflowsByCategory = new Map();\n /** Cache for individual workflow definitions by name - O(1) lookup */\n this.workflowsByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingWorkflowsRequests = new Map();\n this.pendingWorkflowRequests = new Map();\n }\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Workflow Definitions ----\n /**\n * Get workflow definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches workflow definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get workflow definitions from\n * @returns Array of workflow definition metadata\n */\n async getWorkflowsByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.workflowsByCategory.has(categoryId)) {\n return this.workflowsByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no workflows - cache empty array and skip API call\n const emptyArray = [];\n this.workflowsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowsRequests.has(categoryId)) {\n return this.pendingWorkflowsRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowsFromProviders(categoryId);\n this.pendingWorkflowsRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single workflow definition metadata by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Workflow name (unique identifier)\n * @returns Workflow definition metadata or undefined if not found\n */\n async getWorkflowByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.workflowsByName.has(name)) {\n return this.workflowsByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowRequests.has(name)) {\n return this.pendingWorkflowRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowFromProviders(name);\n this.pendingWorkflowRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific workflow definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByWorkflowName(workflowName) {\n // ✅ Search in cached workflow definitions\n for (const [categoryId, definitions] of this.workflowsByCategory.entries()) {\n if (definitions.some(def => def.name === workflowName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the workflow definition to find its category\n const definition = await this.getWorkflowByName(workflowName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for a workflow\n */\n async getCategoriesPathByWorkflowName(workflowName) {\n const categoryId = await this.getCategoryIdByWorkflowName(workflowName);\n if (!categoryId) {\n throw new Error(`Workflow '${workflowName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load workflow definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with workflow provider\n */\n async loadWorkflowsFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.workflowsByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.workflowsByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingWorkflowsRequests.delete(categoryId);\n }\n }\n /**\n * Load single workflow definition from providers and cache result\n */\n async loadWorkflowFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.workflowsByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached workflow definitions\n for (const definitions of this.workflowsByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.workflowsByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingWorkflowRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has workflows (uses cached count)\n */\n categoryHasWorkflows(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear workflows cache only\n */\n clearWorkflowsCache() {\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztRQUVqRixzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUMsQ0FBQztRQUUzRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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QkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQTNjUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93Q2F0ZWdvcnksIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3dEZWZpbml0aW9uTWV0YWRhdGE+KCk7XG5cbiAgICAvKiogVHJhY2sgd2hpY2ggcHJvdmlkZXIgaW5kZXggb3ducyBlYWNoIGNhdGVnb3J5IChieSBjYXRlZ29yeSBJRCkgKi9cbiAgICBwcml2YXRlIGNhdGVnb3J5T3duZXJzaGlwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8gTWFwcyBjYXRlZ29yeUlkIOKGkiBwcm92aWRlciBpbmRleFxuXG4gICAgLyoqIFBlbmRpbmcgQVBJIHJlcXVlc3RzIHRvIHByZXZlbnQgZHVwbGljYXRlIGNhbGxzICovXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YSB8IHVuZGVmaW5lZD4+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIEFQSTogQ2F0ZWdvcmllcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIHdpdGggYWdncmVzc2l2ZSBjYWNoaW5nXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBSZXR1cm5zIGNhY2hlZCByZXN1bHQgaW1tZWRpYXRlbHkgaWYgYXZhaWxhYmxlLFxuICAgICAqIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgQVBJIGNhbGxzIGR1cmluZyBuYXZpZ2F0aW9uXG4gICAgICogXG4gICAgICogQHBhcmFtIHBhcmVudElkIC0gUGFyZW50IGNhdGVnb3J5IElEICh1bmRlZmluZWQgPSByb290IGNhdGVnb3JpZXMpXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgY2F0ZWdvcmllcyB3aXRoIGNvdW50IG1ldGFkYXRhIChjaGlsZHJlbkNvdW50LCBpdGVtc0NvdW50KVxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3JpZXMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBSZXR1cm4gY2FjaGVkIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5nZXQocGFyZW50SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBQcmV2ZW50IGR1cGxpY2F0ZSByZXF1ZXN0czogUmV0dXJuIHBlbmRpbmcgcHJvbWlzZVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQ3JlYXRlIHNpbmdsZSByZXF1ZXN0IGFuZCBjYWNoZSBpdFxuICAgICAgICBjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMubG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLnNldChwYXJlbnRJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGNhdGVnb3J5IGJ5IElEIHdpdGggTygxKSBsb29rdXBcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFVzZXMgTWFwIGZvciBpbnN0YW50IHJldHJpZXZhbCwgZmFsbHMgYmFjayB0b1xuICAgICAqIHNlYXJjaGluZyBjYWNoZSwgdGhlbiBwcm92aWRlcnMgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcnlCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHBhcmVudC1jaGlsZCBsaXN0c1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3JpZXMgb2YgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXRlZ29yeUlkLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgcm9vdCBjYXRlZ29yaWVzIGlmIG5vdCBsb2FkZWRcbiAgICAgICAgaWYgKCF0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLmhhcyh1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldENhdGVnb3JpZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXNCeUlkLmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBCcmVhZHRoLWZpcnN0IHNlYXJjaCB0aHJvdWdoIGhpZXJhcmNoeVxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZyb20gcm9vdCB0byBzcGVjaWZpZWQgY2F0ZWdvcnlcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IEJ1aWxkcyBwYXRoIHVzaW5nIGNhY2hlZCBjYXRlZ29yaWVzIG9ubHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5SWQoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgcGF0aDogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50Q2F0ZWdvcnlJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gY2F0ZWdvcnlJZDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudENhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY3VycmVudENhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2F0ZWdvcnkgJyR7Y3VycmVudENhdGVnb3J5SWR9JyBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgudW5zaGlmdChjYXRlZ29yeSk7XG4gICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnlJZCA9IGNhdGVnb3J5LnBhcmVudElkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IFdvcmtmbG93IERlZmluaXRpb25zICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb25zIGZvciBhIGNhdGVnb3J5IHdpdGggc21hcnQgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogQ2hlY2tzIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICogLSBJZiBpdGVtc0NvdW50ID0gMCwgcmV0dXJucyBlbXB0eSBhcnJheSAobm8gQVBJIGNhbGwpXG4gICAgICogLSBJZiBpdGVtc0NvdW50ID4gMCwgbG9hZHMgYW5kIGNhY2hlcyB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAqIC0gUmV0dXJucyBjYWNoZWQgcmVzdWx0IG9uIHN1YnNlcXVlbnQgY2FsbHNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tXG4gICAgICogQHJldHVybnMgQXJyYXkgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YVxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdID0gW107XG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmdldChjYXRlZ29yeUlkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgTG9hZCBmcm9tIHByb3ZpZGVyc1xuICAgICAgICBjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMubG9hZFdvcmtmbG93c0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLnNldChjYXRlZ29yeUlkLCByZXF1ZXN0UHJvbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RQcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzaW5nbGUgd29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YSBieSBuYW1lIHdpdGggTygxKSBsb29rdXBcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFVzZXMgTWFwIGZvciBpbnN0YW50IHJldHJpZXZhbFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgV29ya2Zsb3cgZGVmaW5pdGlvbiBtZXRhZGF0YSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy53b3JrZmxvd3NCeU5hbWUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53b3JrZmxvd3NCeU5hbWUuZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZ2V0KG5hbWUpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkV29ya2Zsb3dGcm9tUHJvdmlkZXJzKG5hbWUpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLnNldChuYW1lLCByZXF1ZXN0UHJvbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RQcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBJRCBjb250YWluaW5nIGEgc3BlY2lmaWMgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogU2VhcmNoZXMgY2FjaGUgZmlyc3QsIGxvYWRzIG9uLWRlbWFuZCBpZiBuZWVkZWRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yeUlkQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IFtjYXRlZ29yeUlkLCBkZWZpbml0aW9uc10gb2YgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIHdvcmtmbG93IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYSB3b3JrZmxvd1xuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3JpZXNQYXRoQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUlkQnlXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKTtcbiAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93ICcke3dvcmtmbG93TmFtZX0nIG5vdCBmb3VuZCBpbiBhbnkgY2F0ZWdvcnlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDYXRlZ29yaWVzUGF0aEJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGU6IERhdGEgTG9hZGluZyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIExvYWQgY2F0ZWdvcmllcyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogVHJhY2tzIHByb3ZpZGVyIG93bmVyc2hpcCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBBUEkgY2FsbHNcbiAgICAgKiAtIEZvciByb290IChwYXJlbnRJZCA9IHVuZGVmaW5lZCk6IFF1ZXJ5IEFMTCBwcm92aWRlcnNcbiAgICAgKiAtIEZvciBjaGlsZHJlbjogT25seSBxdWVyeSB0aGUgcHJvdmlkZXIgdGhhdCBvd25zIHRoZSBwYXJlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmNhdGVnb3J5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXM6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvdmlkZXIocykgdG8gcXVlcnlcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgPSBwYXJlbnRJZFxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRQcm92aWRlckluZGV4Rm9yQ2F0ZWdvcnkocGFyZW50SWQpXG4gICAgICAgICAgICAgICAgOiBudWxsOyAvLyBSb290OiBxdWVyeSBhbGwgcHJvdmlkZXJzXG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb2x2ZWRQcm92aWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcmVzb2x2ZWRQcm92aWRlcnNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIHdlIGhhdmUgYSBzcGVjaWZpYyBwcm92aWRlciBpbmRleCBhbmQgdGhpcyBpc24ndCBpdFxuICAgICAgICAgICAgICAgIGlmIChwcm92aWRlckluZGljZXNUb1F1ZXJ5ICE9PSBudWxsICYmICFwcm92aWRlckluZGljZXNUb1F1ZXJ5LmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcC52YWx1ZSAmJiB0eXBlb2YgcC52YWx1ZS5nZXRMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXRzID0gYXdhaXQgcC52YWx1ZS5nZXRMaXN0KHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhdHMpICYmIGNhdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCguLi5jYXRzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKchSBUcmFjayBvd25lcnNoaXA6IFRoaXMgcHJvdmlkZXIgSU5ERVggb3ducyB0aGVzZSBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0cy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLnNldChjYXQuaWQsIGkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIENhY2hlIHJlc3VsdHMgZm9yIGZhc3Qgc3Vic2VxdWVudCBhY2Nlc3NcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuc2V0KHBhcmVudElkLCBjYXRlZ29yaWVzKTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0LmlkLCBjYXQpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuZGVsZXRlKHBhcmVudElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcHJvdmlkZXIgaW5kZXggdGhhdCBvd25zIGEgc3BlY2lmaWMgY2F0ZWdvcnlcbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBcnJheSB3aXRoIHByb3ZpZGVyIGluZGV4LCBvciBudWxsIGlmIG93bmVyc2hpcCB1bmtub3duIChxdWVyeSBhbGwpXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQcm92aWRlckluZGV4Rm9yQ2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgICAgICAgY29uc3Qgb3duZXJJbmRleCA9IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuZ2V0KGNhdGVnb3J5SWQpO1xuXG4gICAgICAgIGlmIChvd25lckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbb3duZXJJbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPd25lcnNoaXAgdW5rbm93biAtIHdpbGwgcXVlcnkgYWxsIHByb3ZpZGVycyAoZmFsbGJhY2spXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IE9ubHkgcXVlcmllcyB0aGUgcHJvdmlkZXIgdGhhdCBvd25zIHRoZSBjYXRlZ29yeVxuICAgICAqIFVzZXMgcHJvdmlkZXIgSU5ERVggdG8gbWF0Y2ggY2F0ZWdvcnkgcHJvdmlkZXIgd2l0aCB3b3JrZmxvdyBwcm92aWRlclxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93c0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25NZXRhZGF0YVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIOKchSBTbWFydCByb3V0aW5nOiBHZXQgcHJvdmlkZXIgSU5ERVggdGhhdCBvd25zIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgPSBvd25lckluZGV4ICE9PSB1bmRlZmluZWQgPyBbb3duZXJJbmRleF0gOiBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmcyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChjYXRlZ29yeUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMucHVzaCguLi5kZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIENhY2hlIHJlc3VsdHMgZm9yIGZhc3Qgc3Vic2VxdWVudCBhY2Nlc3NcbiAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5zZXQoY2F0ZWdvcnlJZCwgZGVmaW5pdGlvbnMpO1xuICAgICAgICAgICAgZGVmaW5pdGlvbnMuZm9yRWFjaChkZWYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmRlbGV0ZShjYXRlZ29yeUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93RnJvbVByb3ZpZGVycyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbk1ldGFkYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcblxuICAgICAgICAgICAgLy8gVHJ5IHByb3ZpZGVycyBmaXJzdFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHJlc29sdmVkUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldEJ5SWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHAudmFsdWUuZ2V0QnlJZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZGVmaW5pdGlvbnMuZmluZChkZWYgPT4gZGVmLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5zZXQobmFtZSwgZm91bmQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5kZWxldGUobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcmVhZHRoLWZpcnN0IHNlYXJjaCB0aHJvdWdoIGNhdGVnb3J5IGhpZXJhcmNoeVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUXVldWU6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPSBbdW5kZWZpbmVkXTtcbiAgICAgICAgY29uc3Qgc2VhcmNoZWQgPSBuZXcgU2V0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgICAgICB3aGlsZSAoc2VhcmNoUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzZWFyY2hRdWV1ZS5zaGlmdCgpITtcbiAgICAgICAgICAgIGlmIChzZWFyY2hlZC5oYXMocGFyZW50SWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlYXJjaGVkLmFkZChwYXJlbnRJZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENhdGVnb3JpZXMocGFyZW50SWQpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g4pyFIE9wdGltaXphdGlvbjogT25seSBzZWFyY2ggY2hpbGRyZW4gaWYgY2hpbGRyZW5Db3VudCA+IDBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID4gMCAmJiAhc2VhcmNoZWQuaGFzKGNhdGVnb3J5LmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hRdWV1ZS5wdXNoKGNhdGVnb3J5LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBDYWNoZSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGNoaWxkcmVuICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc0NoaWxkcmVuKGNhdGVnb3J5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc0J5SWQuZ2V0KGNhdGVnb3J5SWQpO1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnkgPyBjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID4gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyB3b3JrZmxvd3MgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzV29ya2Zsb3dzKGNhdGVnb3J5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc0J5SWQuZ2V0KGNhdGVnb3J5SWQpO1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnkgPyAoY2F0ZWdvcnkuaXRlbXNDb3VudCA/PyAwKSA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgY2FjaGVzXG4gICAgICovXG4gICAgY2xlYXJBbGxDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgY2F0ZWdvcmllcyBjYWNoZSBvbmx5XG4gICAgICovXG4gICAgY2xlYXJDYXRlZ29yaWVzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHdvcmtmbG93cyBjYWNoZSBvbmx5XG4gICAgICovXG4gICAgY2xlYXJXb3JrZmxvd3NDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","// Workflow Definition Types (Storage/Database)\nexport * from './workflow-definition.config';\n// Workflow Instance Types (Storage/Database)\nexport * from './workflow-instance.types';\n// Activity System Types (Simplified)\nexport * from './activity/activity.types';\nexport * from './activity';\n// Simple Runtime (Coordinator only)\nexport * from './runtime';\n// Workflow Definition System (Category + Metadata)\nexport * from './workflow/workflow-definition.provider';\nexport * from './workflow/workflow-definition.service';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBYzdDLDZDQUE2QztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBbUIxQyxxQ0FBcUM7QUFDckMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLFlBQVksQ0FBQztBQUUzQixvQ0FBb0M7QUFDcEMsY0FBYyxXQUFXLENBQUM7QUFFMUIsbURBQW1EO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IERlZmluaXRpb24gVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWRlZmluaXRpb24uY29uZmlnJztcbi8vIEV4cG9ydCB3b3JrZmxvdyBkZWZpbml0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEFYUFdvcmtmbG93RGVmaW5pdGlvbixcbiAgQVhQV29ya2Zsb3dHcmFwaCxcbiAgQVhQV29ya2Zsb3dBY3Rpdml0eUluc3RhbmNlLFxuICBBWFBDb25uZWN0aW9uLFxuICBBWFBWYXJpYWJsZURlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93SW5wdXREZXNjcmlwdG9yLFxuICBBWFBXb3JrZmxvd091dHB1dERlc2NyaXB0b3IsXG4gIEFYUFdvcmtmbG93RXh0ZW5zaW9ucyxcbiAgQVhQRWxzYVdvcmtmbG93RXh0ZW5zaW9ucyxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8gV29ya2Zsb3cgSW5zdGFuY2UgVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuXG4vLyBSZS1leHBvcnQgV29ya2Zsb3cgSW5zdGFuY2UgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZSxcbiAgQVhQV29ya2Zsb3dTdGF0ZSxcbiAgQVhQV29ya2Zsb3dTdGF0dXMsXG4gIEFYUFdvcmtmbG93U3ViU3RhdHVzLFxuICBBWFBBY3Rpdml0eVN0YXR1cyxcbiAgQVhQRXhjZXB0aW9uU3RhdGUsXG4gIEFYUEFjdGl2aXR5SW5jaWRlbnQsXG4gIEFYUFdvcmtmbG93RmF1bHRTdGF0ZSxcbiAgQVhQQm9va21hcmssXG4gIEFYUENvbXBsZXRpb25DYWxsYmFja1N0YXRlLFxuICBBWFBBY3Rpdml0eVZhcmlhYmxlLFxuICBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG5cbi8vIEFjdGl2aXR5IFN5c3RlbSBUeXBlcyAoU2ltcGxpZmllZClcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHkvYWN0aXZpdHkudHlwZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2aXR5JztcblxuLy8gU2ltcGxlIFJ1bnRpbWUgKENvb3JkaW5hdG9yIG9ubHkpXG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUnO1xuXG4vLyBXb3JrZmxvdyBEZWZpbml0aW9uIFN5c3RlbSAoQ2F0ZWdvcnkgKyBNZXRhZGF0YSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24uc2VydmljZSc7Il19","import { Inject, NgModule, Optional } from '@angular/core';\nimport { AXPWorkflowDecideAction } from './actions/decide.action';\nimport { AXPStartWorkflowAction } from './actions/start-workflow.action';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXP_WORKFLOW_ENGINE, AXPWorkflowLocalEngine } from './engine';\nimport { AXPWorkflowManager } from './engine/runtime/workflow-manager.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowModule {\n static forRoot(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? { AXPStartWorkflowAction }),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n static forChild(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n // Built-in activities are already registered in forRoot via @NgModule providers\n // No need to register again in forChild\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? {}),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, deps: [{ token: 'AXPWorkflowModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPWorkflowModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPWorkflowModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBMEIvRSxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLFVBQVUsRUFBRSxDQUFDLFFBQW9DLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO3dCQUNsRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMzRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQ0FDM0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDdkMsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELEVBQUU7d0JBQ0YsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7NEJBQ3BCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dDQUN6RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDckMsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELEVBQUU7d0JBQ0YsSUFBSSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7NEJBQ3RCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dDQUMzRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUN2QyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFJLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDbEMsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0QsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMvRCxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7YUFDMUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBaUM7UUFDL0MsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNULGdGQUFnRjtnQkFDaEYsd0NBQXdDO2dCQUN4QztvQkFDRSxPQUFPLEVBQUUsMEJBQTBCO29CQUNuQyxVQUFVLEVBQUUsQ0FBQyxRQUFvQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pELFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQzt3QkFDbEUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQzt3QkFDM0QsRUFBRTt3QkFDRixJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQzs0QkFDdEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0NBQzNELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ3ZDLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzRCQUNwQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQ0FDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ3JDLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQ0FDM0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDdkMsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBQ0QsSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ2xDLEtBQUssRUFBRSxJQUFJO2lCQUNaO2dCQUNELEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTRELFNBQWdCO1FBQzFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyRlUsaUJBQWlCLGtCQWlGSSwwQkFBMEI7Z0hBakYvQyxpQkFBaUI7Z0hBQWpCLGlCQUFpQixhQVRqQjtZQUNULHNCQUFzQjtZQUN0QjtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsc0JBQXNCO2FBQ3BDO1lBQ0Qsa0JBQWtCO1NBQ25COzs0RkFFVSxpQkFBaUI7a0JBYjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVCxzQkFBc0I7d0JBQ3RCOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxzQkFBc0I7eUJBQ3BDO3dCQUNELGtCQUFrQjtxQkFDbkI7aUJBQ0Y7OzBCQWtGYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQU3RhcnRXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vYWN0aW9ucy9zdGFydC13b3JrZmxvdy5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93LXJlZ2lzdGVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuaW1wb3J0IHsgQVhQX1dPUktGTE9XX0VOR0lORSwgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSB9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciB9IGZyb20gJy4vZW5naW5lL3J1bnRpbWUvd29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dNb2R1bGVDb25maWdzIHtcbiAgZnVuY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93RnVuY3Rpb24+O1xuICB9O1xuICBhY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPjtcbiAgfTtcbiAgd29ya2Zsb3dzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBBWFBXb3JrZmxvdztcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW10sXG4gIGV4cG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19FTkdJTkUsXG4gICAgICB1c2VFeGlzdGluZzogQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSxcbiAgICB9LFxuICAgIEFYUFdvcmtmbG93TWFuYWdlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbignc3RhcnQtd29ya2Zsb3cnLCBBWFBTdGFydFdvcmtmbG93QWN0aW9uKTtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdkZWNpZGUnLCBBWFBXb3JrZmxvd0RlY2lkZUFjdGlvbik7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8uZnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZ1bmN0aW9uKGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmFjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LndvcmtmbG93cykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy53b3JrZmxvd3MpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJXb3JrZmxvdyhrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGNvbmZpZz8uYWN0aW9ucyA/PyB7IEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gfSksXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5mdW5jdGlvbnMgPz8ge30pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIEJ1aWx0LWluIGFjdGl2aXRpZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiBmb3JSb290IHZpYSBATmdNb2R1bGUgcHJvdmlkZXJzXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYWdhaW4gaW4gZm9yQ2hpbGRcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6ICdBWFBXb3JrZmxvd01vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdzdGFydC13b3JrZmxvdycsIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24pO1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oJ2RlY2lkZScsIEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uKTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRnVuY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuYWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8ud29ya2Zsb3dzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLndvcmtmbG93cykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcldvcmtmbG93KGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5hY3Rpb25zID8/IHt9KSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjb25maWc/LmZ1bmN0aW9ucyA/PyB7fSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JykgaW5zdGFuY2VzOiBhbnlbXSkge1xuICAgIGluc3RhbmNlcz8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZigpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.AXPWorkflowRegistryService"],"mappings":";;;;;;;AAAO,MAAM,gBAAgB,SAAS,KAAK,CAAC;AAC5C,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE;AACvC,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,IAAI,GAAG,kBAAkB;AACtC,IAAI;AACJ;;ACHO,MAAM,uBAAuB,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAE;AACzC,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,IAAI;AACJ,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAC/C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAClK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AAClI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACnBN,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE;AACrC,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE;AACrC,IAAI;AACJ,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACrC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC7C,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;AACjC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACzC,IAAI;AACJ,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAI;AACJ,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;AACjC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACzC,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACnD,IAAI;AACJ,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE;AACpC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;AACxC,YAAY,OAAO,KAAK,CAAC,QAAQ,CAAC;AAClC,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,oBAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;AACvD,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;AACxC,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AACjC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;AACtC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACzG,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACjF,QAAQ;AACR,IAAI;AACJ,IAAI,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;AACpD,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;AACxC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;AACtC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACzG,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACjF,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE;AACpF,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;AACrD,QAAQ,IAAI,IAAI,IAAI,SAAS,EAAE;AAC/B,YAAY,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE;AAC1D,gBAAgB,MAAM,EAAE,aAAa;AACrC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzC,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE;AAC1D,gBAAgB,GAAG,IAAI;AACvB,gBAAgB,SAAS,EAAE;AAC3B,oBAAoB;AACpB,wBAAwB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AACzF,wBAAwB,UAAU,EAAE,SAAS;AAC7C,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,CAAC;AACd,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC9L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACrK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACrI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACvFN,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,CAAC,WAAW,GAAG,EAAE,EAAE;AAClC,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE;AACpC,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C,IAAI;AACJ,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;AAC5B,QAAQ,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;AAC5C,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,GAAG,EAAE,EAAE;AAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE;AAC1D,IAAI;AACJ,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AAC/D,IAAI;AACJ,IAAI,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE;AAC3B,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACzC,IAAI;AACJ,IAAI,UAAU,CAAC,MAAM,EAAE;AACvB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC;AACpE,IAAI;AACJ,IAAI,SAAS,CAAC,GAAG,EAAE;AACnB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,IAAI;AACJ;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC3D,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzC,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACxI;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;AACN,MAAM,mBAAmB,CAAC;AACjC,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACvL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAC1I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;AACN,SAAS,mBAAmB,CAAC,IAAI,EAAE;AAC1C,IAAI,MAAM,YAAY,GAAG,CAAC,OAAO,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzD,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI;AAC5B,IAAI,OAAO,YAAY;AACvB;AACO,SAAS,MAAM,CAAC,GAAG,YAAY,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF;;ACvDO,MAAM,uBAAuB,SAAS,iBAAiB,CAAC;AAC/D,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B;AACA,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC7L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAClK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AAClI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACPN,MAAM,kBAAkB,CAAC;AAChC,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO;AACxC,IAAI;AACJ,IAAI,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe;AAC9C,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,CAAC,IAAI,EAAE;AACjB,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;AACvD,IAAI;AACJ,IAAI,MAAM,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE;AACnD;AACA,QAAQ,MAAM,EAAE,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,QAAQ;AAC/F,QAAQ,IAAI,aAAa,GAAG,EAAE,CAAC,WAAW;AAC1C,QAAQ,MAAM,OAAO,GAAG,cAAc,YAAY;AAClD,cAAc;AACd,cAAc,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC5E;AACA,QAAQ,OAAO,aAAa,EAAE;AAC9B,YAAY,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;AACvD,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,gBAAgB,MAAM,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC;AACtG,YAAY;AACZ;AACA,YAAY,MAAM,MAAM,GAAG,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM;AACnI;AACA,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;AACnC,gBAAgB,IAAI,MAAM,GAAG,EAAE;AAC/B,gBAAgB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC;AAC3F,gBAAgB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,YAAY;AACtE,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AACjD,oBAAoB,OAAO,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,CAAC,CAAC;AACnB,YAAY;AACZ,YAAY,IAAI;AAChB,gBAAgB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,YAAY;AACtE,oBAAoB,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AACjD,oBAAoB,OAAO,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpC,gBAAgB,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnE,YAAY;AACZ;AACA,YAAY,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC;AACnF,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,aAAa,GAAG,YAAY,CAAC,UAAU;AACvD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ,IAAI,WAAW,CAAC,cAAc,EAAE;AAChC;AACA,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ,IAAI,iBAAiB,CAAC,UAAU,EAAE;AAClC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC;AACrE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,gBAAgB,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAChG,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5C,IAAI;AACJ,IAAI,mBAAmB,CAAC,YAAY,EAAE;AACtC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC;AAC3E,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,MAAM,IAAI,gBAAgB,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACpG,QAAQ;AACR,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ,IAAI,MAAM,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE;AAClD,QAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AACpC,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE;AACtD,YAAY,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;AAC5E,gBAAgB,OAAO,QAAQ;AAC/B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE;AACjD,QAAQ,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACpD,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ;AACR;AACA,QAAQ,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjH;AACA,QAAQ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC5D;AACA,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;AAChD,IAAI;AACJ,IAAI,MAAM,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE;AACtD,QAAQ,QAAQ,SAAS,CAAC,IAAI;AAC9B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;AACnH,YAAY,KAAK,KAAK;AACtB;AACA,gBAAgB,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE;AAChE,gBAAgB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9H,gBAAgB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;AAC3D,YAAY,KAAK,IAAI;AACrB;AACA,gBAAgB,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE;AAC/D,gBAAgB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5H,gBAAgB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;AACzD,YAAY;AACZ,gBAAgB,MAAM,IAAI,gBAAgB,CAAC,CAAC,4BAA4B,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F;AACA,IAAI;AACJ;AACA,IAAI,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAC1D,QAAQ,IAAI;AACZ,YAAY,IAAI,UAAU,GAAG,EAAE;AAC/B,YAAY,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACpG,gBAAgB,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACvF,gBAAgB,IAAI,CAAC,eAAe,EAAE;AACtC,oBAAoB,MAAM,KAAK,CAAC,CAAC,8BAA8B,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACvF,gBAAgB;AAChB,gBAAgB,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC;AAC/C,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,UAAU,GAAG,kBAAkB;AAC/C,YAAY;AACZ;AACA,YAAY,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACpE;AACA,YAAY,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,iDAAiD,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AAC5H,YAAY,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;AAC/C,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AAChE,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE;AACpE,QAAQ,IAAI,CAAC,GAAG,EAAE;AAClB,YAAY;AACZ,QAAQ;AACR,QAAQ,WAAW,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACnD,YAAY,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAY,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAY,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;AACzE,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1E,gBAAgB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9E,gBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;AAClD,YAAY;AACZ,iBAAiB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAC9C,gBAAgB,KAAK,KAAK,IAAI;AAC9B,iBAAiB,KAAK,CAAC,WAAW,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AACxE;AACA,gBAAgB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;AACvE,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;AAC/C,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,KAAK,GAAG,EAAE;AACxB,QAAQ,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAClE,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO;AAChE,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE;AACrC,IAAI;AACJ,IAAI,mBAAmB,CAAC,YAAY,EAAE;AACtC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC;AAC3E,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,MAAM,IAAI,gBAAgB,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACpG,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAEA,0BAA6B,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACtP,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAEA,0BAA6B,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;;AC/L9F,MAAM,sBAAsB,SAAS,iBAAiB,CAAC;AAC9D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACzD,IAAI;AACJ,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,OAAO;AACxB,YAAY,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9C;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;AACtE,QAAQ;AACR,QAAQ,OAAO,CAAC,EAAE;AAClB,YAAY,MAAM,CAAC;AACnB,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACjK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC7Bb;AACA;AACA;AACA;AACY,MAAC,8BAA8B,GAAG,IAAI,cAAc,CAAC,gCAAgC;;ACLjG;AACA;AACA;AACA;AACA;;ACHY,MAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,uBAAuB,EAAE;AACjF,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,CAAC;AACW,MAAC,8BAA8B,GAAG,IAAI,cAAc,CAAC,gCAAgC,EAAE;AACnG,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,CAAC;;ACND;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,4BAA4B,CAAC;AAC1C,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACjG,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACxF;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3C;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE;AAClD,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE;AAClD,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE;AAChD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,CAAC,QAAQ,EAAE;AAClC;AACA,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACrD,YAAY,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1D,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1D,YAAY,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/D,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AACzE,QAAQ,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC;AACpE,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,UAAU,EAAE;AACtC;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAQ;AACR;AACA,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE;AACrE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC;AACvE,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAC1D,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACvD,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAgB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1D,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;AACzD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,qBAAqB,CAAC,UAAU,EAAE;AAC5C,QAAQ,MAAM,IAAI,GAAG,EAAE;AACvB,QAAQ,IAAI,iBAAiB,GAAG,UAAU;AAC1C,QAAQ,OAAO,iBAAiB,EAAE;AAClC,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;AAC1E,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAC5E,YAAY;AACZ,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClC,YAAY,iBAAiB,GAAG,QAAQ,CAAC,QAAQ;AACjD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,yBAAyB,CAAC,UAAU,EAAE;AAChD;AACA,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACvD,YAAY,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAQ;AACR;AACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AAC/D,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,EAAE;AACxF;AACA,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;AACjE,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC5D,YAAY,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjE,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;AAC3E,QAAQ,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC;AACtE,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE;AAClC;AACA,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7C,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClD,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpD,YAAY,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;AACzD,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AACnE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AAC9D,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,YAAY,EAAE;AACpD;AACA,QAAQ,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE;AACrF,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE;AACpE,gBAAgB,OAAO,UAAU;AACjC,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AACrE,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE;AAC/C;AACA,YAAY,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;AACzD,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrH,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,OAAO,KAAK,CAAC,EAAE;AAC/B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,+BAA+B,CAAC,YAAY,EAAE;AACxD,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;AAC/E,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;AACnF,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,QAAQ,EAAE;AAChD,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC;AACA,YAAY,MAAM,sBAAsB,GAAG;AAC3C,kBAAkB,IAAI,CAAC,2BAA2B,CAAC,QAAQ;AAC3D,kBAAkB,IAAI,CAAC;AACvB,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,gBAAgB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC9C;AACA,gBAAgB,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC5F,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpE,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,4BAA4B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpD;AACA,4BAA4B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACtF,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/D,YAAY,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC3E,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,UAAU,EAAE;AAC5C,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjE,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE;AACtC,YAAY,OAAO,CAAC,UAAU,CAAC;AAC/B,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,UAAU,EAAE;AAClD,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF,YAAY,MAAM,WAAW,GAAG,EAAE;AAClC;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AACrE,YAAY,MAAM,sBAAsB,GAAG,UAAU,KAAK,SAAS,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;AACzF,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,gBAAgB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC9C;AACA,gBAAgB,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC5F,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AACtE,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjD,4BAA4B,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACrD,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC;AAClE,YAAY,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;AACvC,gBAAgB,IAAI,GAAG,CAAC,IAAI,EAAE;AAC9B,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AAC5D,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,YAAY,OAAO,WAAW;AAC9B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,yBAAyB,CAAC,IAAI,EAAE;AAC1C,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF;AACA,YAAY,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE;AAC/C,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClE,wBAAwB,IAAI,MAAM,EAAE;AACpC,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACnE,4BAA4B,OAAO,MAAM;AACzC,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE;AAC1E,gBAAgB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AACxE,gBAAgB,IAAI,KAAK,EAAE;AAC3B,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1D,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,SAAS;AAC5B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC;AACrD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,yBAAyB,CAAC,UAAU,EAAE;AAChD,QAAQ,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC;AACvC,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAClC,QAAQ,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAY,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE;AAChD,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtC,gBAAgB;AAChB,YAAY,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,YAAY,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC;AACvE,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ;AACA,YAAY,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AAC/C,gBAAgB,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC9E,oBAAoB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC,aAAa,GAAG,CAAC,GAAG,KAAK;AAC5D,IAAI;AACJ;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAQ,OAAO,QAAQ,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;AAC5C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAChM,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACvK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC;AACvI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACtab;AACA;AACA;AACA;AACY,MAAC,mBAAmB,GAAG,IAAI,cAAc,CAAC,qBAAqB;;ACF3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;AACxB;AACA,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AAChF,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC;AAChF,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;AAClG,QAAQ;AACR,QAAQ,IAAI;AACZ;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/E,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,6CAA6C,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;AACrH,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAC1C,gBAAgB,OAAO;AACvB,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,OAAO,EAAE;AAC7B,iBAAiB;AACjB,YAAY;AACZ;AACA;AACA,YAAY,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;AAC9D,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,OAAO,YAAY,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;AAC9F;AACA,gBAAgB,YAAY,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC,EAAE;AAChE,YAAY;AACZ;AACA;AACA,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7F,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAgB,OAAO;AACvB,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,OAAO,EAAE,QAAQ;AACrC,iBAAiB;AACjB,YAAY;AACZ,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACjC,gBAAgB,OAAO;AACvB,oBAAoB,MAAM,EAAE;AAC5B,wBAAwB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI;AACnD,qBAAqB;AACrB,oBAAoB,OAAO,EAAE,QAAQ;AACrC,iBAAiB;AACjB,YAAY;AACZ,YAAY,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI;AAC7C,YAAY,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,EAAE;AAC1D;AACA;AACA,YAAY,IAAI,OAAO,GAAG,MAAM;AAChC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,gBAAgB,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;AACxF,YAAY;AACZ,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,IAAI;AACrD,gBAAgB,OAAO;AACvB,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,4DAA4D,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACtH,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE;AACnE,gBAAgB,OAAO,EAAE;AACzB,aAAa;AACb,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC/H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACjGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACzD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AACnC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,GAAG,EAAE,EAAE;AACxC,QAAQ,IAAI;AACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC7D,gBAAgB,UAAU;AAC1B,gBAAgB;AAChB,aAAa,CAAC;AACd;AACA,YAAY,MAAM,oBAAoB,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;AAC9D,YAAY,IAAI,oBAAoB,CAAC,WAAW,IAAI,EAAE,oBAAoB,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AACzG,gBAAgB,oBAAoB,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AAC7F,YAAY;AACZ,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;AAC1E,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/C,gBAAgB,KAAK,EAAE,oBAAoB;AAC3C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;AACtD,gBAAgB,MAAM,EAAE,oBAAoB,CAAC;AAC7C,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC;AACnF,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,KAAK;AAC9B,gBAAgB,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI;AACxC,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;AACtD,QAAQ,IAAI;AACZ;AACA,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC9D,gBAAgB,UAAU;AAC1B,gBAAgB,MAAM,EAAE,IAAI,CAAC,UAAU;AACvC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzC,gBAAgB,OAAO;AACvB,gBAAgB,SAAS,EAAE;AAC3B,aAAa,CAAC;AACd;AACA,YAAY,IAAI,uBAAuB,GAAG,QAAQ,CAAC,KAAK;AACxD,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE;AAChC;AACA,gBAAgB,uBAAuB,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;AAC/D,gBAAgB,IAAI,uBAAuB,CAAC,WAAW,IAAI,EAAE,uBAAuB,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AACnH,oBAAoB,uBAAuB,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC;AACvG,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,uBAAuB,CAAC;AACxE,YAAY;AACZ,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,UAAU;AAC1B,gBAAgB,KAAK,EAAE,uBAAuB;AAC9C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;AACnD,gBAAgB,MAAM,EAAE,QAAQ,CAAC;AACjC,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;AACjF,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,KAAK;AAC9B,gBAAgB,UAAU;AAC1B,gBAAgB,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI;AACxC,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;AACpE,QAAQ,IAAI;AACZ;AACA,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAgB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AACzE,YAAY;AACZ;AACA,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC9D,gBAAgB,UAAU;AAC1B,gBAAgB,MAAM;AACtB,gBAAgB,SAAS;AACzB,gBAAgB,OAAO;AACvB,gBAAgB;AAChB,aAAa,CAAC;AACd;AACA,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE;AAChC;AACA,gBAAgB,MAAM,eAAe,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;AAC7D,gBAAgB,IAAI,eAAe,CAAC,WAAW,IAAI,EAAE,eAAe,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AACnG,oBAAoB,eAAe,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AACvF,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC;AAChE,YAAY;AACZ;AACA,YAAY,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,SAAS;AACtF,YAAY,IAAI,eAAe,IAAI,eAAe,CAAC,WAAW,IAAI,EAAE,eAAe,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AAClH,gBAAgB,eAAe,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AACnF,YAAY;AACZ,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,UAAU;AAC1B,gBAAgB,KAAK,EAAE,eAAe,IAAI,QAAQ,CAAC,KAAK;AACxD,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;AACnD,gBAAgB,MAAM,EAAE,QAAQ,CAAC;AACjC,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC;AACnF,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,KAAK;AAC9B,gBAAgB,UAAU;AAC1B,gBAAgB,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI;AACxC,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,CAAC,UAAU,EAAE;AAC/B;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAQ,IAAI,MAAM,EAAE;AACpB;AACA,YAAY,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,EAAE;AAClD,YAAY,IAAI,gBAAgB,CAAC,WAAW,IAAI,EAAE,gBAAgB,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AACjG,gBAAgB,gBAAgB,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACrF,YAAY;AACZ;AACA,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE;AAChF,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3C,gBAAgB,OAAO,gBAAgB;AACvC,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC7D,gBAAgB;AAChB,aAAa,CAAC;AACd;AACA,YAAY,MAAM,eAAe,GAAG,EAAE,GAAG,KAAK,EAAE;AAChD,YAAY,IAAI,eAAe,CAAC,WAAW,IAAI,EAAE,eAAe,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AAC/F,gBAAgB,eAAe,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AACnF,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC;AAC5D,YAAY,OAAO,eAAe;AAClC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,KAAK,CAAC;AACxF,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACtL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACtQb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC;AACA,IAAI,WAAW,CAAC,iBAAiB,GAAG,IAAI,EAAE;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,EAAE;AAClD,QAAQ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AAC9B;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;AACvE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACnF,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG;AACtB,YAAY,UAAU;AACtB,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU;AAC1C,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;AACtC,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,WAAW,EAAE,GAAG;AAC5B,SAAS;AACT;AACA,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,UAAU;AACtB,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU;AAC1C,YAAY,UAAU;AACtB,YAAY,KAAK;AACjB,YAAY,mBAAmB,EAAE,IAAI,GAAG,EAAE;AAC1C,YAAY,eAAe,EAAE,IAAI,GAAG,EAAE;AACtC,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;AAClD;AACA,QAAQ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACvE;AACA,QAAQ,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE;AACjD,QAAQ,OAAO;AACf,YAAY,UAAU;AACtB,YAAY,KAAK,EAAE,UAAU,CAAC,KAAK;AACnC,YAAY,WAAW,EAAE,WAAW,IAAI,IAAI;AAC5C,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE;AAC1B;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AAChE,QAAQ,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,EAAE;AAClH,YAAY,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACjD,QAAQ;AACR;AACA,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;AACjE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR;AACA,QAAQ,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE;AACvD,YAAY,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;AAC3C,YAAY,OAAO,EAAE,OAAO,CAAC,OAAO;AACpC,SAAS,CAAC;AACV,QAAQ,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1D;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE;AAC/B,YAAY,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG;AACzC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS;AAC7C,gBAAgB,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;AAC5C,aAAa;AACb,QAAQ;AACR;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACpE;AACA,QAAQ,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAChE,YAAY,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;AACjD,YAAY,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS;AAChE,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;AAC3C,YAAY,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,EAAE;AACjD,YAAY,KAAK,EAAE,UAAU,CAAC,KAAK;AACnC,YAAY,QAAQ,EAAE,QAAQ,IAAI,IAAI;AACtC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,QAAQ,CAAC,OAAO,EAAE;AAC5B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;AACjE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE;AAC7C,QAAQ,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,KAAK,CAAC,WAAW,YAAY,IAAI,CAAC,EAAE;AACvE,YAAY,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3D,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,CAAC,UAAU,EAAE;AACpC;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE;AACpD,QAAQ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AACtC,YAAY,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3D,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,OAAO,UAAU;AACjC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,oBAAoB,CAAC,UAAU,EAAE;AAC3C,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK;AACjD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE;AACjD,QAAQ,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;AACnD;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AACrC,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAI;AACvC,YAAY,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;AAClD,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC7C,QAAQ,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC7C,QAAQ,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI;AACpC,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACpD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACpD,YAAY,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpD,gBAAgB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrD,YAAY;AACZ,YAAY,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,YAAY,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpD,gBAAgB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrD,YAAY;AACZ,YAAY,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,iBAAiB,GAAG,UAAU,CAAC,iBAAiB;AAC5D,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC;AACA,YAAY,IAAI,KAAK,CAAC,eAAe,EAAE;AACvC,gBAAgB,iBAAiB,GAAG,KAAK,CAAC,eAAe;AACzD,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AACnD,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC/D,wBAAwB,iBAAiB,GAAG,QAAQ,CAAC,EAAE;AACvD,wBAAwB;AACxB,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,oBAAoB,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;AACxD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,OAAO,iBAAiB,EAAE;AAClC,YAAY,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC/D,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACvE;AACA,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,CAAC,eAAe,CAAC;AACzH,gBAAgB,iBAAiB,GAAG,MAAM,IAAI,SAAS;AACvD,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,IAAI,UAAU;AACtE;AACA,YAAY,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7C,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,oDAAoD,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpH,gBAAgB,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACrE,gBAAgB,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAClE,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,OAAO,EAAE,MAAM;AACnC,iBAAiB,CAAC;AAClB;AACA,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,CAAC,eAAe,CAAC;AACzH,gBAAgB,iBAAiB,GAAG,MAAM,IAAI,SAAS;AACvD,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,aAAa,KAAK,UAAU,IAAI,aAAa,KAAK,MAAM,EAAE;AAC1E;AACA,gBAAgB,MAAM,IAAI,GAAG;AAC7B,oBAAoB,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAAE;AACtD,oBAAoB,UAAU,EAAE,QAAQ,CAAC,EAAE;AAC3C,oBAAoB,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC/C,oBAAoB,YAAY,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;AAC7D,oBAAoB,aAAa,EAAE,aAAa;AAChD,oBAAoB,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;AAChD,oBAAoB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE;AAC3D,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AACpD,oBAAoB,UAAU,EAAE,UAAU,CAAC,UAAU;AACrD,oBAAoB,UAAU,EAAE,QAAQ,CAAC,EAAE;AAC3C,iBAAiB,CAAC;AAClB;AACA,gBAAgB,UAAU,CAAC,iBAAiB,GAAG,iBAAiB;AAChE,gBAAgB,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;AACrD,gBAAgB,UAAU,CAAC,KAAK,CAAC,aAAa,GAAG,iBAAiB;AAClE;AACA,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ;AACA,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,CAAC,eAAe,CAAC;AACrH,YAAY,iBAAiB,GAAG,MAAM,IAAI,SAAS;AACnD,QAAQ;AACR;AACA,QAAQ,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;AAC7C,QAAQ,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS;AAC5D,QAAQ,UAAU,CAAC,iBAAiB,GAAG,SAAS;AAChD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE;AAC/E,QAAQ,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAC5E,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ;AACR;AACA,QAAQ,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC7D,QAAQ,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,MAAM;AACjD;AACA;AACA,QAAQ,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AACxC,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM;AACzD,YAAY,IAAI,UAAU,KAAK,OAAO,EAAE;AACxC,gBAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW;AAC9C,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,YAAY,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AACpD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACnP,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC7I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,EAAE;AACnB,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,8BAA8B;AACzD,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;;AC5TxB;;ACCY,MAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,uBAAuB,EAAE;AACjF,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,CAAC;AACW,MAAC,8BAA8B,GAAG,IAAI,cAAc,CAAC,gCAAgC,EAAE;AACnG,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,CAAC;;ACND;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,4BAA4B,CAAC;AAC1C,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACjG,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACxF;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC5C;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACxC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3C;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE;AAClD,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE;AACjD,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE;AAChD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,CAAC,QAAQ,EAAE;AAClC;AACA,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACrD,YAAY,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1D,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1D,YAAY,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/D,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AACzE,QAAQ,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC;AACpE,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,UAAU,EAAE;AACtC;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,QAAQ;AACR;AACA,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE;AACrE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC;AACvE,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAC1D,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACvD,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAgB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1D,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;AACzD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,qBAAqB,CAAC,UAAU,EAAE;AAC5C,QAAQ,MAAM,IAAI,GAAG,EAAE;AACvB,QAAQ,IAAI,iBAAiB,GAAG,UAAU;AAC1C,QAAQ,OAAO,iBAAiB,EAAE;AAClC,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;AAC1E,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAC5E,YAAY;AACZ,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClC,YAAY,iBAAiB,GAAG,QAAQ,CAAC,QAAQ;AACjD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,wBAAwB,CAAC,UAAU,EAAE;AAC/C;AACA,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACtD,YAAY,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3D,QAAQ;AACR;AACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AAC/D,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,EAAE;AACxF;AACA,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;AAChE,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC3D,YAAY,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC;AAChE,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAC1E,QAAQ,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC;AACrE,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE;AAClC;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5C,YAAY,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACjD,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpD,YAAY,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;AACzD,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AACnE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AAC9D,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,YAAY,EAAE;AACpD;AACA,QAAQ,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE;AACpF,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE;AACpE,gBAAgB,OAAO,UAAU;AACjC,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AACrE,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE;AAC/C;AACA,YAAY,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;AACzD,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrH,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,OAAO,KAAK,CAAC,EAAE;AAC/B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,+BAA+B,CAAC,YAAY,EAAE;AACxD,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;AAC/E,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;AACnF,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,QAAQ,EAAE;AAChD,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC;AACA,YAAY,MAAM,sBAAsB,GAAG;AAC3C,kBAAkB,IAAI,CAAC,2BAA2B,CAAC,QAAQ;AAC3D,kBAAkB,IAAI,CAAC;AACvB,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,gBAAgB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC9C;AACA,gBAAgB,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC5F,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpE,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,4BAA4B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpD;AACA,4BAA4B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACtF,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/D,YAAY,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC3E,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,UAAU,EAAE;AAC5C,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjE,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE;AACtC,YAAY,OAAO,CAAC,UAAU,CAAC;AAC/B,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,0BAA0B,CAAC,UAAU,EAAE;AACjD,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF,YAAY,MAAM,WAAW,GAAG,EAAE;AAClC;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AACrE,YAAY,MAAM,sBAAsB,GAAG,UAAU,KAAK,SAAS,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;AACzF,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,gBAAgB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC9C;AACA,gBAAgB,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC5F,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AACtE,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjD,4BAA4B,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACrD,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC;AACjE,YAAY,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;AACvC,gBAAgB,IAAI,GAAG,CAAC,IAAI,EAAE;AAC9B,oBAAoB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AAC3D,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,YAAY,OAAO,WAAW;AAC9B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,yBAAyB,CAAC,IAAI,EAAE;AAC1C,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtF;AACA,YAAY,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE;AAC/C,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAClG,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClE,wBAAwB,IAAI,MAAM,EAAE;AACpC,4BAA4B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AAClE,4BAA4B,OAAO,MAAM;AACzC,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE;AACzE,gBAAgB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AACxE,gBAAgB,IAAI,KAAK,EAAE;AAC3B,oBAAoB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACzD,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,SAAS;AAC5B,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC;AACrD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,yBAAyB,CAAC,UAAU,EAAE;AAChD,QAAQ,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC;AACvC,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAClC,QAAQ,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAY,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE;AAChD,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtC,gBAAgB;AAChB,YAAY,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,YAAY,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC;AACvE,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ;AACA,YAAY,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AAC/C,gBAAgB,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC9E,oBAAoB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC,aAAa,GAAG,CAAC,GAAG,KAAK;AAC5D,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,UAAU,EAAE;AACrC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAQ,OAAO,QAAQ,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AACxC,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACpC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;AAC7C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC9C,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AACxC,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACpC,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;AAC7C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;AAC5C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAChM,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACvK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC;AACvI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACrab;;ACOO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE;AAC3B,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,iBAAiB;AACvC,YAAY,SAAS,EAAE;AACvB,gBAAgB;AAChB,oBAAoB,OAAO,EAAE,0BAA0B;AACvD,oBAAoB,UAAU,EAAE,CAAC,QAAQ,KAAK,MAAM;AACpD,wBAAwB,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;AACzF,wBAAwB,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC;AAClF;AACA,wBAAwB,IAAI,MAAM,EAAE,SAAS,EAAE;AAC/C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACxF,gCAAgC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACpE,4BAA4B;AAC5B,wBAAwB;AACxB;AACA,wBAAwB,IAAI,MAAM,EAAE,OAAO,EAAE;AAC7C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACtF,gCAAgC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;AAClE,4BAA4B;AAC5B,wBAAwB;AACxB;AACA,wBAAwB,IAAI,MAAM,EAAE,SAAS,EAAE;AAC/C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACxF,gCAAgC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACpE,4BAA4B;AAC5B,wBAAwB;AACxB,oBAAoB,CAAC;AACrB,oBAAoB,IAAI,EAAE,CAAC,0BAA0B,CAAC;AACtD,oBAAoB,KAAK,EAAE,IAAI;AAC/B,iBAAiB;AACjB,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,sBAAsB,EAAE,CAAC;AAC/E,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;AACzD,aAAa;AACb,SAAS;AACT,IAAI;AACJ,IAAI,OAAO,QAAQ,CAAC,MAAM,EAAE;AAC5B,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,iBAAiB;AACvC,YAAY,SAAS,EAAE;AACvB;AACA;AACA,gBAAgB;AAChB,oBAAoB,OAAO,EAAE,0BAA0B;AACvD,oBAAoB,UAAU,EAAE,CAAC,QAAQ,KAAK,MAAM;AACpD,wBAAwB,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;AACzF,wBAAwB,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC;AAClF;AACA,wBAAwB,IAAI,MAAM,EAAE,SAAS,EAAE;AAC/C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACxF,gCAAgC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACpE,4BAA4B;AAC5B,wBAAwB;AACxB;AACA,wBAAwB,IAAI,MAAM,EAAE,OAAO,EAAE;AAC7C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACtF,gCAAgC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;AAClE,4BAA4B;AAC5B,wBAAwB;AACxB;AACA,wBAAwB,IAAI,MAAM,EAAE,SAAS,EAAE;AAC/C,4BAA4B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACxF,gCAAgC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACpE,4BAA4B;AAC5B,wBAAwB;AACxB,oBAAoB,CAAC;AACrB,oBAAoB,IAAI,EAAE,CAAC,0BAA0B,CAAC;AACtD,oBAAoB,KAAK,EAAE,IAAI;AAC/B,iBAAiB;AACjB,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;AACvD,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;AACzD,aAAa;AACb,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AAClC,YAAY,CAAC,EAAE;AACf,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxO,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACrI,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE;AAC9I,YAAY,sBAAsB;AAClC,YAAY;AACZ,gBAAgB,OAAO,EAAE,mBAAmB;AAC5C,gBAAgB,WAAW,EAAE,sBAAsB;AACnD,aAAa;AACb,YAAY,kBAAkB;AAC9B,SAAS,EAAE,CAAC,CAAC;AACb;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,YAAY,EAAE,EAAE;AACpC,oBAAoB,SAAS,EAAE;AAC/B,wBAAwB,sBAAsB;AAC9C,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,mBAAmB;AACxD,4BAA4B,WAAW,EAAE,sBAAsB;AAC/D,yBAAyB;AACzB,wBAAwB,kBAAkB;AAC1C,qBAAqB;AACrB,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,EAAE;AACnB,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,0BAA0B;AACrD,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;;ACzHxB;AACA;AACA;;;;"}