@acorex/platform 21.0.0-next.10 → 21.0.0-next.11

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 (24) hide show
  1. package/core/index.d.ts +109 -3
  2. package/fesm2022/acorex-platform-core.mjs +3 -0
  3. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-layout-builder.mjs +0 -2
  5. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-layout-components.mjs +6 -6
  7. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-layout-entity.mjs +619 -466
  9. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-views.mjs +2 -2
  11. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-widget-core.mjs +3 -4
  13. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-widgets.mjs +50 -55
  15. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  16. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-CIV6YDDZ.mjs → acorex-platform-themes-default-entity-master-list-view.component-CD4Q_UIG.mjs} +3 -3
  17. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CD4Q_UIG.mjs.map +1 -0
  18. package/fesm2022/acorex-platform-themes-default.mjs +2 -2
  19. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  20. package/layout/entity/index.d.ts +47 -16
  21. package/layout/widgets/index.d.ts +4 -6
  22. package/package.json +9 -9
  23. package/workflow/index.d.ts +4 -4
  24. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CIV6YDDZ.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-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/workflow-expression-scope.service.js","../tmp-esm2022/workflow/lib/engine/runtime/activity-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.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.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.15\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", 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.15\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi93b3JrZmxvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBSUwsa0JBQWtCLEdBS25CLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQW9CLGVBQTJDLEVBQVUsUUFBa0I7UUFBdkUsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU5uRixpQkFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBTXdDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQ1gsUUFBOEIsRUFDOUIsaUJBQWtELElBQUk7UUFFdEQsdUNBQXVDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFeEYsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FDWCxjQUFjLFlBQVksa0JBQWtCO1lBQzFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsNENBQTRDO1FBRTVDLE9BQU8sYUFBYSxFQUFFLENBQUM7WUFDckIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLGFBQWEsb0NBQW9DLENBQUMsQ0FBQztZQUN6RixDQUFDO1lBRUQscUNBQXFDO1lBQ3JDLE1BQU0sTUFBTSxHQUNWLE9BQU8sV0FBVyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDM0csRUFBRTtZQUNGLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0QixJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM1QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQzVCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDcEIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNOLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsS0FBYyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELGtEQUFrRDtZQUNsRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyw4Q0FBOEM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sV0FBVyxDQUFDLGNBQW1CO1FBQ3JDLDREQUE0RDtRQUM1RCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBSU8saUJBQWlCLENBQUMsVUFBa0I7UUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsVUFBVSw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLFdBQTRCLEVBQzVCLE9BQTJCO1FBRTNCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0MsSUFBSSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQy9ELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQWtDLEVBQUUsT0FBMkI7UUFDN0YsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDLENBQUMsc0NBQXNDO1FBQ3JELENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFMUcsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJELG1DQUFtQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQ25DLFNBQStCLEVBQy9CLE9BQTJCO1FBRTNCLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssUUFBUTtnQkFDWCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQVksQ0FBQztZQUNsSCxLQUFLLEtBQUs7Z0JBQ1IsMkNBQTJDO2dCQUMzQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTlDLEtBQUssSUFBSTtnQkFDUCwwQ0FBMEM7Z0JBQzFDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdHLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUM7Z0JBQ0UsTUFBTSxJQUFJLGdCQUFnQixDQUFDLCtCQUErQixTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUN2RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsa0JBQTBCLEVBQUUsT0FBMkI7UUFDdEYsSUFBSSxDQUFDO1lBQ0gsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZGLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sS0FBSyxDQUFDLGlDQUFpQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7Z0JBQ3RFLENBQUM7Z0JBQ0QsVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxHQUFHLGtCQUFrQixDQUFDO1lBQ2xDLENBQUM7WUFDRCxnRUFBZ0U7WUFDaEUsTUFBTSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQ3pELHFEQUFxRDtZQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsb0RBQW9ELFVBQVUsV0FBVyxDQUFDLENBQUM7WUFDakgsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQVEsRUFBRSxNQUFXLEVBQUUsYUFBcUIsRUFBRSxFQUFFLFVBQWUsRUFBRTtRQUMzRixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztpQkFBTSxJQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQ3pCLEtBQUssS0FBSyxJQUFJO2dCQUNkLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN0RCxDQUFDO2dCQUNELG9DQUFvQztnQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwTlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RXJyb3IgfSBmcm9tICcuL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1yZWdpc3Rlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvdyxcbiAgQVhQV29ya2Zsb3dBY3Rpb24sXG4gIEFYUFdvcmtmbG93Q29uZGl0aW9uLFxuICBBWFBXb3JrZmxvd0NvbnRleHQsXG4gIEFYUFdvcmtmbG93RXZlbnQsXG4gIEFYUFdvcmtmbG93RnVuY3Rpb24sXG4gIEFYUFdvcmtmbG93TmV4dFN0ZXAsXG4gIEFYUFdvcmtmbG93U3RlcCxcbn0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1NlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd0V2ZW50U2VydmljZSk7XG5cbiAgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxBWFBXb3JrZmxvd0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLmV2ZW50cyQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lzdHJ5U2VydmljZTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBleGlzdHMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cobmFtZSk7XG4gIH1cblxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgd29ya2Zsb3c6IEFYUFdvcmtmbG93IHwgc3RyaW5nLFxuICAgIGluaXRpYWxDb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQgfCBhbnkgfCBudWxsID0gbnVsbFxuICApOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIC8vIEluc3RhbnRpYXRlIG9yIHJldHJpZXZlIHRoZSB3b3JrZmxvd1xuICAgIGNvbnN0IHdrID0gdHlwZW9mIHdvcmtmbG93ID09PSAnc3RyaW5nJyA/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.15\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","// ============================================\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.15\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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 } from '@angular/core';\nimport { get } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Expression Scope Service\n *\n * Shared service for building expression evaluation scope from workflow data.\n * Used by both Local Engine and Mock Runtime to manage workflow data (inputs, variables, outputs).\n *\n * Responsibilities:\n * - Build expression evaluation scope from workflow state\n * - Provide context.eval() function for accessing workflow data\n * - Manage workflow data structure (inputs, variables, outputs)\n *\n * This service does NOT:\n * - Execute activities\n * - Evaluate expressions (delegates to AXPExpressionEvaluatorService)\n * - Manage workflow state (handled by runtime)\n *\n * @example\n * ```typescript\n * const scopeService = inject(WorkflowExpressionScopeService);\n *\n * // Build scope from workflow state\n * const scope = scopeService.buildScope({\n * inputs: state.input || {},\n * variables: state.variables || {},\n * outputs: activityOutputs\n * });\n *\n * // Or build from state directly\n * const scope = scopeService.buildScopeFromState(state, activityOutputs);\n * ```\n */\nexport class WorkflowExpressionScopeService {\n //#region ---- Public Methods ----\n /**\n * Build expression evaluation scope for workflow activities.\n *\n * Provides workflow-specific data (inputs, variables, outputs) and context.eval() function.\n * Other data (session, current user, etc.) are provided by expression evaluator scope providers.\n *\n * Scope includes:\n * - inputs: Workflow input values (accessible as inputs.propertyName)\n * - variables: Workflow state variables (accessible as variables.propertyName or vars.propertyName)\n * - outputs: Previous activity outputs (accessible as outputs.activityId)\n * - context.eval(path): Function to access nested properties from workflow data\n *\n * Expressions can use:\n * - {{inputs.userName}} - Direct access to workflow input\n * - {{variables.someVar}} or {{vars.someVar}} - Direct access to workflow variable\n * - {{outputs.activityId.property}} - Direct access to previous activity output\n * - {{context.eval(\"inputs.userName\")}} - Access via context.eval (supports nested paths)\n * - {{context.eval(\"variables.someVar\")}} - Access variables via context.eval\n * - {{context.eval(\"outputs.activityId.property\")}} - Access outputs via context.eval\n * - {{session.currentUser().name}} - Access current user via expression evaluator scope providers\n *\n * The context.eval() function provides a unified way to access all workflow data,\n * similar to how entity-detail-list uses context.eval() to access parent data.\n *\n * @param context - Workflow expression context containing inputs, variables, and outputs\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScope(context) {\n // Build merged workflow data object for context.eval()\n // This allows expressions like: context.eval(\"inputs.userName\") or context.eval(\"variables.count\")\n const workflowData = {\n inputs: context.inputs || {},\n variables: context.variables || {},\n vars: context.variables || {}, // Alias for convenience\n outputs: context.outputs || {},\n };\n // Build scope object with workflow-specific data and context.eval()\n // Note: AXPExpressionEvaluatorScope type expects { [namespace]: { [name]: Function } }\n // but evaluate() method actually accepts flat objects with values too\n // We'll use 'any' to allow both values and functions\n const scope = {\n // Direct access to workflow data\n inputs: workflowData.inputs,\n variables: workflowData.variables,\n vars: workflowData.vars,\n outputs: workflowData.outputs,\n // Context object with eval function (similar to entity-detail-list pattern)\n context: {\n eval: (path) => {\n // Use lodash get to access nested properties\n // Supports paths like: \"inputs.userName\", \"variables.count\", \"outputs.activityId.property\"\n return get(workflowData, path);\n },\n },\n };\n return scope;\n }\n /**\n * Build expression evaluation scope from workflow instance state.\n *\n * Convenience method that extracts data from AXPWorkflowInstanceState.\n *\n * @param state - Workflow instance state\n * @param activityOutputs - Map of activity outputs (activityId -> output)\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScopeFromState(state, activityOutputs) {\n // Convert activity outputs to record format\n const outputs = {};\n if (activityOutputs) {\n if (activityOutputs instanceof Map) {\n activityOutputs.forEach((output, activityId) => {\n outputs[activityId] = output;\n });\n }\n else {\n Object.assign(outputs, activityOutputs);\n }\n }\n return this.buildScope({\n inputs: state.input || {},\n variables: state.variables || {},\n outputs: outputs,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWV4cHJlc3Npb24tc2NvcGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBb0JoQyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILFVBQVUsQ0FBQyxPQUFrQztRQUMzQyx1REFBdUQ7UUFDdkQsbUdBQW1HO1FBQ25HLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsd0JBQXdCO1lBQ3ZELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLG9FQUFvRTtRQUNwRSx1RkFBdUY7UUFDdkYsc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCxNQUFNLEtBQUssR0FBUTtZQUNqQixpQ0FBaUM7WUFDakMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBRTdCLDRFQUE0RTtZQUM1RSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7b0JBQ3JCLDZDQUE2QztvQkFDN0MsMkZBQTJGO29CQUMzRixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7YUFDRjtTQUNGLENBQUM7UUFFRixPQUFPLEtBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLENBQ2pCLEtBQStCLEVBQy9CLGVBQXdEO1FBRXhELDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxlQUFlLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNoQyxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQTlGVSw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQUY3QixNQUFNOzs0RkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICYgSW50ZXJmYWNlcyAgIC0tLS1cblxuLyoqXG4gKiBXb3JrZmxvdyBleHByZXNzaW9uIGV2YWx1YXRpb24gY29udGV4dC5cbiAqIENvbnRhaW5zIHdvcmtmbG93IHN0YXRlIGRhdGEgbmVlZGVkIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCB7XG4gIC8qKiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKi9cbiAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBcbiAgLyoqIFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAqL1xuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIFxuICAvKiogUHJldmlvdXMgYWN0aXZpdHkgb3V0cHV0cyAoYWN0aXZpdHlJZCAtPiBvdXRwdXQpICovXG4gIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIFdvcmtmbG93IEV4cHJlc3Npb24gU2NvcGUgU2VydmljZVxuICogXG4gKiBTaGFyZWQgc2VydmljZSBmb3IgYnVpbGRpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgZGF0YS5cbiAqIFVzZWQgYnkgYm90aCBMb2NhbCBFbmdpbmUgYW5kIE1vY2sgUnVudGltZSB0byBtYW5hZ2Ugd29ya2Zsb3cgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBzdGF0ZVxuICogLSBQcm92aWRlIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uIGZvciBhY2Nlc3Npbmcgd29ya2Zsb3cgZGF0YVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgZGF0YSBzdHJ1Y3R1cmUgKGlucHV0cywgdmFyaWFibGVzLCBvdXRwdXRzKVxuICogXG4gKiBUaGlzIHNlcnZpY2UgZG9lcyBOT1Q6XG4gKiAtIEV4ZWN1dGUgYWN0aXZpdGllc1xuICogLSBFdmFsdWF0ZSBleHByZXNzaW9ucyAoZGVsZWdhdGVzIHRvIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlKVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgc3RhdGUgKGhhbmRsZWQgYnkgcnVudGltZSlcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjb3BlU2VydmljZSA9IGluamVjdChXb3JrZmxvd0V4cHJlc3Npb25TY29wZVNlcnZpY2UpO1xuICogXG4gKiAvLyBCdWlsZCBzY29wZSBmcm9tIHdvcmtmbG93IHN0YXRlXG4gKiBjb25zdCBzY29wZSA9IHNjb3BlU2VydmljZS5idWlsZFNjb3BlKHtcbiAqICAgaW5wdXRzOiBzdGF0ZS5pbnB1dCB8fCB7fSxcbiAqICAgdmFyaWFibGVzOiBzdGF0ZS52YXJpYWJsZXMgfHwge30sXG4gKiAgIG91dHB1dHM6IGFjdGl2aXR5T3V0cHV0c1xuICogfSk7XG4gKiBcbiAqIC8vIE9yIGJ1aWxkIGZyb20gc3RhdGUgZGlyZWN0bHlcbiAqIGNvbnN0IHNjb3BlID0gc2NvcGVTZXJ2aWNlLmJ1aWxkU2NvcGVGcm9tU3RhdGUoc3RhdGUsIGFjdGl2aXR5T3V0cHV0cyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQnVpbGQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZvciB3b3JrZmxvdyBhY3Rpdml0aWVzLlxuICAgKiBcbiAgICogUHJvdmlkZXMgd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpIGFuZCBjb250ZXh0LmV2YWwoKSBmdW5jdGlvbi5cbiAgICogT3RoZXIgZGF0YSAoc2Vzc2lvbiwgY3VycmVudCB1c2VyLCBldGMuKSBhcmUgcHJvdmlkZWQgYnkgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzLlxuICAgKiBcbiAgICogU2NvcGUgaW5jbHVkZXM6XG4gICAqIC0gaW5wdXRzOiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKGFjY2Vzc2libGUgYXMgaW5wdXRzLnByb3BlcnR5TmFtZSlcbiAgICogLSB2YXJpYWJsZXM6IFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAoYWNjZXNzaWJsZSBhcyB2YXJpYWJsZXMucHJvcGVydHlOYW1lIG9yIHZhcnMucHJvcGVydHlOYW1lKVxuICAgKiAtIG91dHB1dHM6IFByZXZpb3VzIGFjdGl2aXR5IG91dHB1dHMgKGFjY2Vzc2libGUgYXMgb3V0cHV0cy5hY3Rpdml0eUlkKVxuICAgKiAtIGNvbnRleHQuZXZhbChwYXRoKTogRnVuY3Rpb24gdG8gYWNjZXNzIG5lc3RlZCBwcm9wZXJ0aWVzIGZyb20gd29ya2Zsb3cgZGF0YVxuICAgKiBcbiAgICogRXhwcmVzc2lvbnMgY2FuIHVzZTpcbiAgICogLSB7e2lucHV0cy51c2VyTmFtZX19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBpbnB1dFxuICAgKiAtIHt7dmFyaWFibGVzLnNvbWVWYXJ9fSBvciB7e3ZhcnMuc29tZVZhcn19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyB2YXJpYWJsZVxuICAgKiAtIHt7b3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5fX0gLSBEaXJlY3QgYWNjZXNzIHRvIHByZXZpb3VzIGFjdGl2aXR5IG91dHB1dFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwiaW5wdXRzLnVzZXJOYW1lXCIpfX0gLSBBY2Nlc3MgdmlhIGNvbnRleHQuZXZhbCAoc3VwcG9ydHMgbmVzdGVkIHBhdGhzKVxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwidmFyaWFibGVzLnNvbWVWYXJcIil9fSAtIEFjY2VzcyB2YXJpYWJsZXMgdmlhIGNvbnRleHQuZXZhbFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwib3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5XCIpfX0gLSBBY2Nlc3Mgb3V0cHV0cyB2aWEgY29udGV4dC5ldmFsXG4gICAqIC0ge3tzZXNzaW9uLmN1cnJlbnRVc2VyKCkubmFtZX19IC0gQWNjZXNzIGN1cnJlbnQgdXNlciB2aWEgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzXG4gICAqIFxuICAgKiBUaGUgY29udGV4dC5ldmFsKCkgZnVuY3Rpb24gcHJvdmlkZXMgYSB1bmlmaWVkIHdheSB0byBhY2Nlc3MgYWxsIHdvcmtmbG93IGRhdGEsXG4gICAqIHNpbWlsYXIgdG8gaG93IGVudGl0eS1kZXRhaWwtbGlzdCB1c2VzIGNvbnRleHQuZXZhbCgpIHRvIGFjY2VzcyBwYXJlbnQgZGF0YS5cbiAgICogXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gV29ya2Zsb3cgZXhwcmVzc2lvbiBjb250ZXh0IGNvbnRhaW5pbmcgaW5wdXRzLCB2YXJpYWJsZXMsIGFuZCBvdXRwdXRzXG4gICAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdG9yIHNjb3BlIHdpdGggd29ya2Zsb3cgZGF0YSBhbmQgY29udGV4dC5ldmFsKCkgZnVuY3Rpb25cbiAgICovXG4gIGJ1aWxkU2NvcGUoY29udGV4dDogV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCk6IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZSB7XG4gICAgLy8gQnVpbGQgbWVyZ2VkIHdvcmtmbG93IGRhdGEgb2JqZWN0IGZvciBjb250ZXh0LmV2YWwoKVxuICAgIC8vIFRoaXMgYWxsb3dzIGV4cHJlc3Npb25zIGxpa2U6IGNvbnRleHQuZXZhbChcImlucHV0cy51c2VyTmFtZVwiKSBvciBjb250ZXh0LmV2YWwoXCJ2YXJpYWJsZXMuY291bnRcIilcbiAgICBjb25zdCB3b3JrZmxvd0RhdGEgPSB7XG4gICAgICBpbnB1dHM6IGNvbnRleHQuaW5wdXRzIHx8IHt9LFxuICAgICAgdmFyaWFibGVzOiBjb250ZXh0LnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIHZhcnM6IGNvbnRleHQudmFyaWFibGVzIHx8IHt9LCAvLyBBbGlhcyBmb3IgY29udmVuaWVuY2VcbiAgICAgIG91dHB1dHM6IGNvbnRleHQub3V0cHV0cyB8fCB7fSxcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgc2NvcGUgb2JqZWN0IHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSBhbmQgY29udGV4dC5ldmFsKClcbiAgICAvLyBOb3RlOiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGUgdHlwZSBleHBlY3RzIHsgW25hbWVzcGFjZV06IHsgW25hbWVdOiBGdW5jdGlvbiB9IH1cbiAgICAvLyBidXQgZXZhbHVhdGUoKSBtZXRob2QgYWN0dWFsbHkgYWNjZXB0cyBmbGF0IG9iamVjdHMgd2l0aCB2YWx1ZXMgdG9vXG4gICAgLy8gV2UnbGwgdXNlICdhbnknIHRvIGFsbG93IGJvdGggdmFsdWVzIGFuZCBmdW5jdGlvbnNcbiAgICBjb25zdCBzY29wZTogYW55ID0ge1xuICAgICAgLy8gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBkYXRhXG4gICAgICBpbnB1dHM6IHdvcmtmbG93RGF0YS5pbnB1dHMsXG4gICAgICB2YXJpYWJsZXM6IHdvcmtmbG93RGF0YS52YXJpYWJsZXMsXG4gICAgICB2YXJzOiB3b3JrZmxvd0RhdGEudmFycyxcbiAgICAgIG91dHB1dHM6IHdvcmtmbG93RGF0YS5vdXRwdXRzLFxuICAgICAgXG4gICAgICAvLyBDb250ZXh0IG9iamVjdCB3aXRoIGV2YWwgZnVuY3Rpb24gKHNpbWlsYXIgdG8gZW50aXR5LWRldGFpbC1saXN0IHBhdHRlcm4pXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGV2YWw6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBVc2UgbG9kYXNoIGdldCB0byBhY2Nlc3MgbmVzdGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAvLyBTdXBwb3J0cyBwYXRocyBsaWtlOiBcImlucHV0cy51c2VyTmFtZVwiLCBcInZhcmlhYmxlcy5jb3VudFwiLCBcIm91dHB1dHMuYWN0aXZpdHlJZC5wcm9wZXJ0eVwiXG4gICAgICAgICAgcmV0dXJuIGdldCh3b3JrZmxvd0RhdGEsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNjb3BlIGFzIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGV4dHJhY3RzIGRhdGEgZnJvbSBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUuXG4gICAqIFxuICAgKiBAcGFyYW0gc3RhdGUgLSBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZVxuICAgKiBAcGFyYW0gYWN0aXZpdHlPdXRwdXRzIC0gTWFwIG9mIGFjdGl2aXR5IG91dHB1dHMgKGFjdGl2aXR5SWQgLT4gb3V0cHV0KVxuICAgKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRvciBzY29wZSB3aXRoIHdvcmtmbG93IGRhdGEgYW5kIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uXG4gICAqL1xuICBidWlsZFNjb3BlRnJvbVN0YXRlKFxuICAgIHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gICAgYWN0aXZpdHlPdXRwdXRzPzogTWFwPHN0cmluZywgYW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIHtcbiAgICAvLyBDb252ZXJ0IGFjdGl2aXR5IG91dHB1dHMgdG8gcmVjb3JkIGZvcm1hdFxuICAgIGNvbnN0IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBpZiAoYWN0aXZpdHlPdXRwdXRzKSB7XG4gICAgICBpZiAoYWN0aXZpdHlPdXRwdXRzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGFjdGl2aXR5T3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGFjdGl2aXR5SWQpID0+IHtcbiAgICAgICAgICBvdXRwdXRzW2FjdGl2aXR5SWRdID0gb3V0cHV0O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0cywgYWN0aXZpdHlPdXRwdXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZFNjb3BlKHtcbiAgICAgIGlucHV0czogc3RhdGUuaW5wdXQgfHwge30sXG4gICAgICB2YXJpYWJsZXM6IHN0YXRlLnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { WorkflowExpressionScopeService } from './workflow-expression-scope.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Activity Executor Service\n *\n * Service for executing workflow activities via CommandBus.\n * Automatically evaluates expressions in activity inputs before execution.\n *\n * @example\n * ```typescript\n * const executor = inject(ActivityExecutor);\n *\n * // Execute activity with task and workflow state (expressions will be evaluated)\n * const result = await executor.execute(task, workflowState, activityOutputs);\n * ```\n */\nexport class ActivityExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\n this.expressionScopeService = inject(WorkflowExpressionScopeService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a workflow activity with expression evaluation.\n *\n * Evaluates expressions in activity inputs using workflow state,\n * then executes the activity via CommandBus.\n *\n * @param task - Workflow task containing activity information\n * @param workflowState - Current workflow instance state (for expression evaluation)\n * @param activityOutputs - Map of previous activity outputs (for expression evaluation)\n * @returns Execution result with output and outcome\n */\n async execute(task, workflowState, activityOutputs) {\n try {\n console.log('[ActivityExecutor] 🔍 Evaluating inputs:', task.input);\n const activityName = task.activityType;\n // Evaluate inputs if workflow state is provided\n let evaluatedInputs = task.input || {};\n if (workflowState) {\n // Build expression scope from workflow state\n const scope = this.expressionScopeService.buildScopeFromState(workflowState, activityOutputs);\n // Evaluate all inputs recursively (handles nested objects and arrays)\n evaluatedInputs = await this.expressionEvaluator.evaluate(task.input || {}, scope);\n console.log('[ActivityExecutor] 🔍 Evaluated inputs:', evaluatedInputs);\n }\n // Check if command exists\n const commandExists = this.commandService.exists(activityName);\n if (!commandExists) {\n console.warn(`[ActivityExecutor] ⚠️ Activity '${activityName}' is not registered as Command. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Flatten properties if nested (workflow-studio format)\n let commandInput = evaluatedInputs;\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(activityName, 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(`[ActivityExecutor] ❌ Error evaluating expressions or executing activity:`, 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.15\", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: ActivityExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZXhlY3V0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvcnVudGltZS9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQW1CckYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0EwR2xGO0lBeEdDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBcUIsRUFDckIsYUFBd0MsRUFDeEMsZUFBd0Q7UUFHeEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUV2QyxnREFBZ0Q7WUFDaEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxhQUFh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QU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93VGFzaywgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93RXhwcmVzc2lvblNjb3BlU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIGV4ZWN1dGluZyBhIHdvcmtmbG93IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBvdXRwdXQuXG4gICAqL1xuICBvdXRwdXQ6IGFueTtcblxuICAvKipcbiAgICogQWN0aXZpdHkgZXhlY3V0aW9uIG91dGNvbWUgKGUuZy4sICdEb25lJywgJ0NvbmZpcm1lZCcsICdDYW5jZWxsZWQnLCAnRmFpbGVkJykuXG4gICAqL1xuICBvdXRjb21lOiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEFjdGl2aXR5IEV4ZWN1dG9yIFNlcnZpY2VcbiAqIFxuICogU2VydmljZSBmb3IgZXhlY3V0aW5nIHdvcmtmbG93IGFjdGl2aXRpZXMgdmlhIENvbW1hbmRCdXMuXG4gKiBBdXRvbWF0aWNhbGx5IGV2YWx1YXRlcyBleHByZXNzaW9ucyBpbiBhY3Rpdml0eSBpbnB1dHMgYmVmb3JlIGV4ZWN1dGlvbi5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGV4ZWN1dG9yID0gaW5qZWN0KEFjdGl2aXR5RXhlY3V0b3IpO1xuICogXG4gKiAvLyBFeGVjdXRlIGFjdGl2aXR5IHdpdGggdGFzayBhbmQgd29ya2Zsb3cgc3RhdGUgKGV4cHJlc3Npb25zIHdpbGwgYmUgZXZhbHVhdGVkKVxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZSh0YXNrLCB3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5RXhlY3V0b3Ige1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFNlcnZpY2UgPSBpbmplY3QoQVhQQ29tbWFuZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25FdmFsdWF0b3IgPSBpbmplY3QoQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25TY29wZVNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgd29ya2Zsb3cgYWN0aXZpdHkgd2l0aCBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gICAqIFxuICAgKiBFdmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW4gYWN0aXZpdHkgaW5wdXRzIHVzaW5nIHdvcmtmbG93IHN0YXRlLFxuICAgKiB0aGVuIGV4ZWN1dGVzIHRoZSBhY3Rpdml0eSB2aWEgQ29tbWFuZEJ1cy5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gV29ya2Zsb3cgdGFzayBjb250YWluaW5nIGFjdGl2aXR5IGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB3b3JrZmxvd1N0YXRlIC0gQ3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSAoZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbilcbiAgICogQHBhcmFtIGFjdGl2aXR5T3V0cHV0cyAtIE1hcCBvZiBwcmV2aW91cyBhY3Rpdml0eSBvdXRwdXRzIChmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uKVxuICAgKiBAcmV0dXJucyBFeGVjdXRpb24gcmVzdWx0IHdpdGggb3V0cHV0IGFuZCBvdXRjb21lXG4gICAqL1xuICBhc3luYyBleGVjdXRlKFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICB3b3JrZmxvd1N0YXRlPzogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICAgIGFjdGl2aXR5T3V0cHV0cz86IE1hcDxzdHJpbmcsIGFueT4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8QWN0aXZpdHlFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ1tBY3Rpdml0eUV4ZWN1dG9yXSDwn5SNIEV2YWx1YXRpbmcgaW5wdXRzOicsIHRhc2suaW5wdXQpO1xuICAgICAgY29uc3QgYWN0aXZpdHlOYW1lID0gdGFzay5hY3Rpdml0eVR5cGU7XG5cbiAgICAgIC8vIEV2YWx1YXRlIGlucHV0cyBpZiB3b3JrZmxvdyBzdGF0ZSBpcyBwcm92aWRlZFxuICAgICAgbGV0IGV2YWx1YXRlZElucHV0cyA9IHRhc2suaW5wdXQgfHwge307XG4gICAgICBpZiAod29ya2Zsb3dTdGF0ZSkge1xuICAgICAgICAvLyBCdWlsZCBleHByZXNzaW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmV4cHJlc3Npb25TY29wZVNlcnZpY2UuYnVpbGRTY29wZUZyb21TdGF0ZSh3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICAgICAgICBcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGlucHV0cyByZWN1cnNpdmVseSAoaGFuZGxlcyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzKVxuICAgICAgICBldmFsdWF0ZWRJbnB1dHMgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUodGFzay5pbnB1dCB8fCB7fSwgc2NvcGUpO1xuICAgICAgICBjb25zb2xlLmxvZygnW0FjdGl2aXR5RXhlY3V0b3JdIPCflI0gRXZhbHVhdGVkIGlucHV0czonLCBldmFsdWF0ZWRJbnB1dHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBjb21tYW5kIGV4aXN0c1xuICAgICAgY29uc3QgY29tbWFuZEV4aXN0cyA9IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhpc3RzKGFjdGl2aXR5TmFtZSk7XG5cbiAgICAgIGlmICghY29tbWFuZEV4aXN0cykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtBY3Rpdml0eUV4ZWN1dG9yXSDimqDvuI8gQWN0aXZpdHkgJyR7YWN0aXZpdHlOYW1lfScgaXMgbm90IHJlZ2lzdGVyZWQgYXMgQ29tbWFuZC4gYCArXG4gICAgICAgICAgYFNraXBwaW5nIGV4ZWN1dGlvbi5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBGbGF0dGVuIHByb3BlcnRpZXMgaWYgbmVzdGVkICh3b3JrZmxvdy1zdHVkaW8gZm9ybWF0KVxuICAgICAgbGV0IGNvbW1hbmRJbnB1dCA9IGV2YWx1YXRlZElucHV0cztcbiAgICAgIGlmIChjb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSAmJiB0eXBlb2YgY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEZsYXR0ZW46IHtwcm9wZXJ0aWVzOiB7dGV4dDogXCIuLi5cIn19IC0+IHt0ZXh0OiBcIi4uLlwifVxuICAgICAgICBjb21tYW5kSW5wdXQgPSB7IC4uLmNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEV4ZWN1dGUgYWN0aXZpdHkgdmlhIENvbW1hbmRCdXNcbiAgICAgIC8vIEFjdGl2aXRpZXMgcmVnaXN0ZXJlZCBhcyBBWFBDb21tYW5kIHJldHVybiB7b3V0cHV0LCBvdXRjb21lc31cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhlY3V0ZTxSZWNvcmQ8c3RyaW5nLCBhbnk+LCB7XG4gICAgICAgIG91dHB1dDogYW55O1xuICAgICAgICBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIH0+KGFjdGl2aXR5TmFtZSwgY29tbWFuZElucHV0KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICAgICAgb3V0Y29tZTogJ0ZhaWxlZCcsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZT8udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tYW5kUmVzdWx0ID0gcmVzdWx0LmRhdGE7XG4gICAgICBjb25zdCBvdXRjb21lcyA9IGNvbW1hbmRSZXN1bHQ/Lm91dGNvbWVzID8/IHt9O1xuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0Y29tZSBmcm9tIGNvbW1hbmQgcmVzdWx0c1xuICAgICAgLy8gRGVmYXVsdCB0byAnRG9uZScgaWYgbm8gb3V0Y29tZXMgc3BlY2lmaWVkXG4gICAgICBsZXQgb3V0Y29tZSA9ICdEb25lJztcbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdXRjb21lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRjb21lID0gb3V0Y29tZXNbJ0RvbmUnXSA/ICdEb25lJyA6IE9iamVjdC5rZXlzKG91dGNvbWVzKVswXSB8fCAnRG9uZSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogY29tbWFuZFJlc3VsdD8ub3V0cHV0ID8/IG51bGwsXG4gICAgICAgIG91dGNvbWUsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtBY3Rpdml0eUV4ZWN1dG9yXSDinYwgRXJyb3IgZXZhbHVhdGluZyBleHByZXNzaW9ucyBvciBleGVjdXRpbmcgYWN0aXZpdHk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyB9LFxuICAgICAgICBvdXRjb21lOiAnRmFpbGVkJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport { ActivityExecutor } from './activity-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 ActivityExecutor\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 ActivityExecutor)\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.activityExecutor = inject(ActivityExecutor);\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 ActivityExecutor for actual execution.\n * Only executes tasks with executionMode 'frontend' or 'both'.\n *\n * Provides workflow state to executor for expression evaluation.\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 console.error(`[AXPWorkflowManager] ❌ Invalid execution mode: ${task.executionMode}`);\n throw new Error(`Task '${task.activityId}' is not a frontend task. ` +\n `Execution mode: ${task.executionMode}. Backend tasks are handled automatically.`);\n }\n // Find workflow state from cache by matching currentStepId with task.activityId\n // This is needed for expression evaluation\n let workflowState;\n for (const [instanceId, state] of this.stateCache.entries()) {\n if (state.currentStepId === task.activityId) {\n workflowState = state;\n break;\n }\n }\n // If not found in cache, try to get from backend\n if (!workflowState) {\n console.warn(`[AXPWorkflowManager] ⚠️ Workflow state not found in cache for task ${task.activityId}. Expression evaluation may not work correctly.`);\n }\n // TODO: Get activity outputs from workflow state\n // For now, pass undefined - executor will build scope from state\n return this.activityExecutor.execute(task, workflowState, undefined);\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.15\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLM0UsT0FBTyxFQUFFLGdCQUFnQixFQUEyQixNQUFNLDZCQUE2QixDQUFDOztBQTZHeEYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsWUFBWTtRQUVaLG1DQUFtQztRQUVuQzs7OztXQUlHO1FBQ0ssZUFBVSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBRWpFOztXQUVHO1FBQ2MsY0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBcVI1QztJQW5SQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FDVCxVQUFrQixFQUNsQixRQUE2QixFQUFFO1FBRS9CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLFVBQVU7Z0JBQ1YsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixNQUFNLG9CQUFvQixHQUFHLEVB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QUMvQyxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBRUgsbURBQW1EO1lBQ25ELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEYsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUVELGVBQWU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFakQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzREFBc0QsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDOytHQXRTVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFbmdpbmUsIEFYUF9XT1JLRkxPV19FTkdJTkUgfSBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gIEFYUFdvcmtmbG93VGFzayxcbn0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7IEFjdGl2aXR5RXhlY3V0b3IsIEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0IH0gZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dTdGFydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIEZpcnN0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQgaW1tZWRpYXRlbHkpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNvbXBsZXRpbmcgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q29tcGxldGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzdW1pbmcgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Jlc3VtZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgd29ya2Zsb3cgc3RhdGUuXG4gICAqL1xuICBzdGF0ZT86IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcblxuICAvKipcbiAgICogTmV4dCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBNYW5hZ2VyIC0gRmFjYWRlIGZvciB3b3JrZmxvdyBsaWZlY3ljbGUgb3JjaGVzdHJhdGlvbi5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBPTkxZIGludGVyZmFjZSB0aGUgZnJvbnRlbmQgdXNlcyB0byBpbnRlcmFjdCB3aXRoIHdvcmtmbG93cy5cbiAqIEl0IGZvbGxvd3MgQ2xlYW4gQXJjaGl0ZWN0dXJlIHByaW5jaXBsZXMgYW5kIGRvZXMgTk9UIGNvbnRhaW4gZXhlY3V0aW9uIG9yIGJ1c2luZXNzIGxvZ2ljLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBPcmNoZXN0cmF0ZSB3b3JrZmxvdyBsaWZlY3ljbGUgKHN0YXJ0LCBleGVjdXRlLCBjb21wbGV0ZSwgcmVzdW1lKVxuICogLSBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gQWN0aXZpdHlFeGVjdXRvclxuICogLSBDYWNoZSB3b3JrZmxvdyBzdGF0ZSBpbiBtZW1vcnlcbiAqIC0gRXhwb3NlIGEgc3RhYmxlIEFQSSBmb3IgVUlcbiAqIFxuICogUnVsZXM6XG4gKiAtIE5vIEhUVFAgY2FsbHMgKGRlbGVnYXRlcyB0byBBWFBXb3JrZmxvd0VuZ2luZSlcbiAqIC0gTm8gQ29tbWFuZEJ1cyAvIENvbW1hbmQgZXhlY3V0aW9uIChkZWxlZ2F0ZXMgdG8gQWN0aXZpdHlFeGVjdXRvcilcbiAqIC0gTm8gd29ya2Zsb3cgYnJhbmNoaW5nIGxvZ2ljIChiYWNrZW5kIGRlY2lkZXMpXG4gKiAtIE5vIGJ1c2luZXNzIHZhbGlkYXRpb24gKGJhY2tlbmQgdmFsaWRhdGVzKVxuICogLSBObyBiYWNrZW5kIGFzc3VtcHRpb25zICh1c2VzIGFic3RyYWN0IHJ1bnRpbWUgc2VydmljZSlcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNYW5hZ2VyIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93RW5naW5lID0gaW5qZWN0KEFYUF9XT1JLRkxPV19FTkdJTkUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RXhlY3V0b3IgPSBpbmplY3QoQWN0aXZpdHlFeGVjdXRvcik7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBTdGF0ZSBDYWNoZSAgIC0tLS1cblxuICAvKipcbiAgICogQ2FjaGUgd29ya2Zsb3cgc3RhdGVzIGluIG1lbW9yeSBmb3IgcXVpY2sgYWNjZXNzLlxuICAgKiBLZXk6IGluc3RhbmNlSWRcbiAgICogVmFsdWU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4oKTtcblxuICAvKipcbiAgICogQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVFRMID0gNSAqIDYwICogMTAwMDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICogXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UgaW4gYmFja2VuZCBhbmQgcmV0dXJucyBpbnN0YW5jZSBJRC5cbiAgICogQmFja2VuZCBkZWNpZGVzIHdoYXQgdG8gZG86IHJldHVybnMgcGVuZGluZ1Rhc2sgb3IgaW5kaWNhdGVzIGNvbXBsZXRpb24uXG4gICAqIFxuICAgKiBAcGFyYW0gd29ya2Zsb3dJZCAtIFdvcmtmbG93IElEIHRvIHN0YXJ0XG4gICAqIEBwYXJhbSBpbnB1dCAtIEluaXRpYWwgaW5wdXQgZGF0YSAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIFN0YXJ0IHJlc3VsdCB3aXRoIGluc3RhbmNlSWQsIHN0YXRlLCBhbmQgbmV4dFRhc2tcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLnN0YXJ0KCdteS13b3JrZmxvdycsIHsgdXNlcklkOiAnMTIzJyB9KTtcbiAgICogXG4gICAqIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubmV4dFRhc2spIHtcbiAgICogICAvLyBFeGVjdXRlIHRhc2sgaWYgZnJvbnRlbmRcbiAgICogICBpZiAocmVzdWx0Lm5leHRUYXNrLmV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcpIHtcbiAgICogICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd01hbmFnZXIuZXhlY3V0ZShyZXN1bHQubmV4dFRhc2spO1xuICAgKiAgICAgYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLmNvbXBsZXRlKHJlc3VsdC5pbnN0YW5jZUlkISwgcmVzdWx0Lm5leHRUYXNrLCBleGVjUmVzdWx0Lm91dGNvbWUsIGV4ZWNSZXN1bHQub3V0cHV0KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdGFydChcbiAgICB3b3JrZmxvd0lkOiBzdHJpbmcsXG4gICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuICApOiBQcm9taXNlPFdvcmtmbG93U3RhcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLnN0YXJ0KHtcbiAgICAgICAgd29ya2Zsb3dJZCxcbiAgICAgICAgaW5wdXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDYWNoZSBzdGF0ZSAobm9ybWFsaXplIERhdGUpXG4gICAgICBjb25zdCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgIGlmIChzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KHJlc3BvbnNlLmluc3RhbmNlSWQsIHN0YXJ0Tm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgaW5zdGFuY2VJZDogcmVzcG9uc2UuaW5zdGFuY2VJZCxcbiAgICAgICAgc3RhdGU6IHN0YXJ0Tm9ybWFsaXplZFN0YXRlLFxuICAgICAgICBuZXh0VGFzazogcmVzcG9uc2UucGVuZGluZ1Rhc2sgfHwgbnVsbCxcbiAgICAgICAgb3V0cHV0OiBzdGFydE5vcm1hbGl6ZWRTdGF0ZS5vdXRwdXRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEVycm9yIHN0YXJ0aW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93J1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZyb250ZW5kIHRhc2suXG4gICAqIFxuICAgKiBEZWxlZ2F0ZXMgdG8gQWN0aXZpdHlFeGVjdXRvciBmb3IgYWN0dWFsIGV4ZWN1dGlvbi5cbiAgICogT25seSBleGVjdXRlcyB0YXNrcyB3aXRoIGV4ZWN1dGlvbk1vZGUgJ2Zyb250ZW5kJyBvciAnYm90aCcuXG4gICAqIFxuICAgKiBQcm92aWRlcyB3b3JrZmxvdyBzdGF0ZSB0byBleGVjdXRvciBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIHRhc2sgLSBUYXNrIHRvIGV4ZWN1dGVcbiAgICogQHJldHVybnMgRXhlY3V0aW9uIHJlc3VsdCB3aXRoIG91dHB1dCBhbmQgb3V0Y29tZVxuICAgKiBcbiAgICogQHRocm93cyBFcnJvciBpZiB0YXNrIGlzIG5vdCBhIGZyb250ZW5kIHRhc2tcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUodGFzazogQVhQV29ya2Zsb3dUYXNrKTogUHJvbWlzZTxBY3Rpdml0eUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIC8vIFZhbGlkYXRlIGV4ZWN1dGlvbiBtb2RlXG4gICAgaWYgKHRhc2suZXhlY3V0aW9uTW9kZSAhPT0gJ2Zyb250ZW5kJyAmJiB0YXNrLmV4ZWN1dGlvbk1vZGUgIT09ICdib3RoJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEludmFsaWQgZXhlY3V0aW9uIG1vZGU6ICR7dGFzay5leGVjdXRpb25Nb2RlfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFzayAnJHt0YXNrLmFjdGl2aXR5SWR9JyBpcyBub3QgYSBmcm9udGVuZCB0YXNrLiBgICtcbiAgICAgICAgYEV4ZWN1dGlvbiBtb2RlOiAke3Rhc2suZXhlY3V0aW9uTW9kZX0uIEJhY2tlbmQgdGFza3MgYXJlIGhhbmRsZWQgYXV0b21hdGljYWxseS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpbmQgd29ya2Zsb3cgc3RhdGUgZnJvbSBjYWNoZSBieSBtYXRjaGluZyBjdXJyZW50U3RlcElkIHdpdGggdGFzay5hY3Rpdml0eUlkXG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvblxuICAgIGxldCB3b3JrZmxvd1N0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBbaW5zdGFuY2VJZCwgc3RhdGVdIG9mIHRoaXMuc3RhdGVDYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50U3RlcElkID09PSB0YXNrLmFjdGl2aXR5SWQpIHtcbiAgICAgICAgd29ya2Zsb3dTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm90IGZvdW5kIGluIGNhY2hlLCB0cnkgdG8gZ2V0IGZyb20gYmFja2VuZFxuICAgIGlmICghd29ya2Zsb3dTdGF0ZSkge1xuICAgICAgY29uc29sZS53YXJuKGBbQVhQV29ya2Zsb3dNYW5hZ2VyXSDimqDvuI8gV29ya2Zsb3cgc3RhdGUgbm90IGZvdW5kIGluIGNhY2hlIGZvciB0YXNrICR7dGFzay5hY3Rpdml0eUlkfS4gRXhwcmVzc2lvbiBldmFsdWF0aW9uIG1heSBub3Qgd29yayBjb3JyZWN0bHkuYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRPRE86IEdldCBhY3Rpdml0eSBvdXRwdXRzIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAgICAvLyBGb3Igbm93LCBwYXNzIHVuZGVmaW5lZCAtIGV4ZWN1dG9yIHdpbGwgYnVpbGQgc2NvcGUgZnJvbSBzdGF0ZVxuICAgIHJldHVybiB0aGlzLmFjdGl2aXR5RXhlY3V0b3IuZXhlY3V0ZSh0YXNrLCB3b3JrZmxvd1N0YXRlLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgdGFzayBhbmQgZ2V0IG5leHQgdGFzayBmcm9tIGJhY2tlbmQuXG4gICAqIFxuICAgKiBTZW5kcyB0YXNrIHJlc3VsdCB0byBiYWNrZW5kIEFQSS5cbiAgICogQmFja2VuZCBkZWNpZGVzOiBuZXh0IHRhc2ssIGZhaWwsIG9yIGNvbXBsZXRlIHdvcmtmbG93LlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcGFyYW0gdGFzayAtIENvbXBsZXRlZCB0YXNrXG4gICAqIEBwYXJhbSBvdXRjb21lIC0gVGFzayBvdXRjb21lIChlLmcuLCAnRG9uZScsICdDb25maXJtZWQnLCAnQ2FuY2VsbGVkJylcbiAgICogQHBhcmFtIG91dHB1dCAtIFRhc2sgb3V0cHV0L3Jlc3VsdCAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIENvbXBsZXRlIHJlc3VsdCB3aXRoIG5leHQgdGFzayAoaWYgYW55KVxuICAgKi9cbiAgYXN5bmMgY29tcGxldGUoXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICBvdXRjb21lOiBzdHJpbmcsXG4gICAgb3V0cHV0PzogYW55XG4gICk6IFByb21pc2U8V29ya2Zsb3dDb21wbGV0ZVJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBTZW5kIHJlc3VsdCB0byBiYWNrZW5kIC0gYmFja2VuZCBkZWNpZGVzIG5leHQgc3RlcFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLnJlc3VtZSh7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIHN0ZXBJZDogdGFzay5hY3Rpdml0eUlkLFxuICAgICAgICB0YXNrVG9rZW46IHRhc2sudGFza1Rva2VuLFxuICAgICAgICBvdXRjb21lLFxuICAgICAgICB1c2VySW5wdXQ6IG91dHB1dFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgbGV0IGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlID0gcmVzcG9uc2Uuc3RhdGU7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgICAgIGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlID0geyAuLi5yZXNwb25zZS5zdGF0ZSB9O1xuICAgICAgICBpZiAoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIHN0YXRlOiBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLm5leHRUYXNrIHx8IG51bGwsXG4gICAgICAgIG91dHB1dDogcmVzcG9uc2Uub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBjb21wbGV0aW5nIHRhc2s6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY29tcGxldGUgdGFzaydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHN1c3BlbmRlZCB3b3JrZmxvdyAoZS5nLiwgYWZ0ZXIgdXNlciBpbnRlcmFjdGlvbikuXG4gICAqIFxuICAgKiBCYWNrZW5kIGRldGVybWluZXMgbmV4dFN0ZXAgYmFzZWQgb24gb3V0Y29tZSBhbmQgb3V0Y29tZUNvbm5lY3Rpb25zLlxuICAgKiBDbGllbnQgb25seSBwcm92aWRlcyBpbnN0YW5jZUlkLCBzdGVwSWQsIG91dGNvbWUsIGFuZCBvcHRpb25hbCB1c2VySW5wdXQuXG4gICAqIFxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFdvcmtmbG93IGluc3RhbmNlIElEXG4gICAqIEBwYXJhbSBzdGVwSWQgLSBTdGVwIElEIHRoYXQgd2FzIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXRcbiAgICogQHBhcmFtIG91dGNvbWUgLSBVc2VyIGFjdGlvbiBvdXRjb21lIChlLmcuLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdTdWJtaXR0ZWQnKVxuICAgKiBAcGFyYW0gdXNlcklucHV0IC0gT3B0aW9uYWwgdXNlciBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSB0YXNrVG9rZW4gLSBTZWN1cmUgdGFzayB0b2tlbiAocmVxdWlyZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uKVxuICAgKiBAcmV0dXJucyBSZXN1bWUgcmVzdWx0IHdpdGggbmV4dCB0YXNrIChpZiBhbnkpXG4gICAqL1xuICBhc3luYyByZXN1bWUoXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG91dGNvbWU6IHN0cmluZyxcbiAgICB1c2VySW5wdXQ/OiBhbnksXG4gICAgdGFza1Rva2VuPzogc3RyaW5nXG4gICk6IFByb21pc2U8V29ya2Zsb3dSZXN1bWVSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHRhc2tUb2tlbiBpcyBwcm92aWRlZCBmb3Igc2VjdXJlIHJlc3VtcHRpb25cbiAgICAgIGlmICghdGFza1Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXNrVG9rZW4gZm9yIHJlc3VtZSBvcGVyYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFja2VuZCBoYW5kbGVzIGV2ZXJ5dGhpbmc6IGNoZWNrcyBvdXRjb21lQ29ubmVjdGlvbnMgYW5kIGRldGVybWluZXMgbmV4dFN0ZXBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5yZXN1bWUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGVwSWQsXG4gICAgICAgIHRhc2tUb2tlbixcbiAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgdXNlcklucHV0XG4gICAgICB9KTtcblxuICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggc3RhdGUgZnJvbSBiYWNrZW5kXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KGluc3RhbmNlSWQsIG5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBzdGF0ZSBEYXRlIGZvciByZXR1cm5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHJlc3BvbnNlLnN0YXRlID8geyAuLi5yZXNwb25zZS5zdGF0ZSB9IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZSAmJiBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogbm9ybWFsaXplZFN0YXRlIHx8IHJlc3BvbnNlLnN0YXRlLFxuICAgICAgICBuZXh0VGFzazogcmVzcG9uc2UubmV4dFRhc2sgfHwgbnVsbCwgLy8gQmFja2VuZCBkZXRlcm1pbmVzIHRoaXMgZnJvbSBvdXRjb21lQ29ubmVjdGlvbnNcbiAgICAgICAgb3V0cHV0OiByZXNwb25zZS5vdXRwdXRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEVycm9yIHJlc3VtaW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlc3VtZSB3b3JrZmxvdydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIFJldHJpZXZlcyBzdGF0ZSBmcm9tIGNhY2hlIChpZiB2YWxpZCkgb3IgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcmV0dXJucyBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUoaW5zdGFuY2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0YXRlQ2FjaGUuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZENhY2hlZCA9IHsgLi4uY2FjaGVkIH07XG4gICAgICBpZiAobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIGFnZVxuICAgICAgY29uc3QgY2FjaGVBZ2UgPSBEYXRlLm5vdygpIC0gbm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZC5nZXRUaW1lKCk7XG4gICAgICBpZiAoY2FjaGVBZ2UgPCB0aGlzLkNBQ0hFX1RUTCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZENhY2hlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIGJhY2tlbmRcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLmdldFN0YXRlKHtcbiAgICAgICAgaW5zdGFuY2VJZFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZFN0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFN0YXRlO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBnZXR0aW5nIHdvcmtmbG93IHN0YXRlOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBdUJILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbj86IG51bWJlciAgICAgICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtcz86IG51bWJlciAgICAgICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbmV4cG9ydCB0eXBlIEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd1Byb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93UHJvdmlkZXI+O1xuXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbnMgZm9yIGEgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBmaWx0ZXIgd29ya2Zsb3dzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIGFycmF5XG4gICAgICovXG4gICAgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPjtcbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCB3b3JrZmxvdyBkZWZpbml0aW9uIGJ5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKS5cbiAgICAgKiBVc2VkIGJ5IHdvcmtmbG93IGVuZ2luZXMgZm9yIGV4ZWN1dGlvbiBhbmQgVUkgZm9yIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBmdWxsIHdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_PROVIDER, } from '../workflow/workflow-definition.provider';\nimport { AXPActivityDefinitionService } from '../activity/activity-definition.service';\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 ActivityExecutor.\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 constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\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 console.log(`[WorkflowLocalEngine] 🚀 Starting workflow: ${request.workflowId}`, request);\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n console.log(`[WorkflowLocalEngine] 📥 Loading workflow definition: ${request.workflowId}`);\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n console.error(`[WorkflowLocalEngine] ❌ Workflow definition not found: ${request.workflowId}`);\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n console.log(`[WorkflowLocalEngine] ✅ Definition loaded:`, {\n name: definition.name,\n activitiesCount: definition.graph?.activities?.length || 0,\n connectionsCount: definition.graph?.connections?.length || 0,\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 console.log(`[WorkflowLocalEngine] ⚙️ Executing workflow steps...`);\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n console.log(`[WorkflowLocalEngine] ✅ Workflow started:`, {\n instanceId,\n status: localState.state.status,\n hasPendingTask: !!pendingTask,\n pendingTaskType: pendingTask?.activityType,\n });\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 providers.\n */\n async getDefinition(workflowId) {\n // Try all providers in order\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value) {\n const provider = p.value;\n // Check if provider has getByName method\n if (typeof provider.getByName === 'function') {\n try {\n const definition = await provider.getByName(workflowId);\n if (definition) {\n return definition;\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\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 // Get activity definition to retrieve executionMode and title\n console.log(`[WorkflowLocalEngine] 🔍 Getting activity definition for: ${activity.name}`);\n const activityDefinition = await this.activityDefinitionService.getActivityByName(activity.name);\n console.log(`[WorkflowLocalEngine] 📋 Activity definition:`, {\n name: activityDefinition?.name,\n type: activityDefinition?.type,\n executionMode: activityDefinition?.executionMode,\n title: activityDefinition?.title,\n found: !!activityDefinition,\n });\n const executionMode = activityDefinition?.executionMode || 'frontend';\n const activityTitle = activityDefinition?.title;\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 // Note: Expression evaluation will be done by ActivityExecutor\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.name,\n activityName: activityTitle || undefined,\n executionMode: executionMode,\n input: activity.inputs || {}, // Pass raw inputs - executor will evaluate\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.15\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWlCbkQsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCekQsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVFLCtDQUErQztRQUU5Qiw4QkFBeUIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxzQkFBaUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0YsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7S0EwWHBGO0lBeFhDLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFnQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUYsdUJBQXVCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLGdCQUFn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LG1CQUFpRCxFQUNqRCxlQUE4RDtRQUU5RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsMENBQTBDO1FBQ3pELENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyw0RUFBNEU7UUFDNUUsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7WUFDOUMsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0E1WVUsc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RW5naW5lIH0gZnJvbSAnLi93b3JrZmxvdy1lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICBBWFBXb3JrZmxvd1Rhc2ssXG59IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbn0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBfV09SS0ZMT1dfUFJPVklERVIsXG4gIEFYUFdvcmtmbG93UHJvdmlkZXIsXG59IGZyb20gJy4uL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24ucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uL2FjdGl2aXR5L2FjdGl2aXR5LWRlZmluaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogSW50ZXJuYWwgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXRlLlxuICovXG5pbnRlcmZhY2UgTG9jYWxXb3JrZmxvd1N0YXRlIHtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIGRlZmluaXRpb246IEFYUFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgc3RhdGU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcbiAgY3VycmVudEFjdGl2aXR5SWQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEFjdGl2aXRpZXM6IFNldDxzdHJpbmc+O1xuICBhY3Rpdml0eVJlc3VsdHM6IE1hcDxzdHJpbmcsIHsgb3V0cHV0OiBhbnk7IG91dGNvbWU6IHN0cmluZyB9Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogTG9jYWwgZW5naW5lIGltcGxlbWVudGF0aW9uIHRoYXQgbWFuYWdlcyB3b3JrZmxvdyBwcm9ncmVzc2lvbiBhbmQgc3RhdGUuXG4gKiBcbiAqIFRoaXMgZW5naW5lOlxuICogLSBSZXR1cm5zIGZyb250ZW5kL2JvdGggYWN0aXZpdGllcyBhcyBwZW5kaW5nVGFzayAoZG9lcyBOT1QgZXhlY3V0ZSB0aGVtKVxuICogLSBTa2lwcyBiYWNrZW5kIGFjdGl2aXRpZXMgKGRvZXMgbm90IGVycm9yLCBjb250aW51ZXMgZXhlY3V0aW9uKVxuICogLSBNYWludGFpbnMgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIERvZXMgbm90IHJlcXVpcmUgYmFja2VuZCBBUEkgY2FsbHNcbiAqIFxuICogRXhlY3V0aW9uIG9mIGZyb250ZW5kIHRhc2tzIGlzIGhhbmRsZWQgYnkgQVhQV29ya2Zsb3dNYW5hZ2VyIHZpYSBBY3Rpdml0eUV4ZWN1dG9yLlxuICogVGhpcyBlbmdpbmUgb25seSBtYW5hZ2VzIHdvcmtmbG93IHByb2dyZXNzaW9uIGFuZCBzdGF0ZSBzdG9yYWdlLlxuICogXG4gKiBUaGlzIGlzIHRoZSBERUZBVUxUIGVuZ2luZSBwcm92aWRlci4gQXBwbGljYXRpb25zIGNhbiBvdmVycmlkZSBpdCB3aXRoXG4gKiBhbiBBUEktYmFzZWQgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSBpbXBsZW1lbnRzIEFYUFdvcmtmbG93RW5naW5lIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSBpbmplY3QoQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dQcm92aWRlcnMgPSBpbmplY3QoQVhQX1dPUktGTE9XX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgSW5zdGFuY2UgU3RvcmFnZSAgIC0tLS1cblxuICAvKipcbiAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIHdvcmtmbG93IGluc3RhbmNlcy5cbiAgICogS2V5OiBpbnN0YW5jZUlkXG4gICAqIFZhbHVlOiBMb2NhbFdvcmtmbG93U3RhdGVcbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2VzID0gbmV3IE1hcDxzdHJpbmcsIExvY2FsV29ya2Zsb3dTdGF0ZT4oKTtcblxuICAvKipcbiAgICogVGFzayB0b2tlbiBzdG9yYWdlIGZvciBzZWN1cmUgcmVzdW1lIG9wZXJhdGlvbnMuXG4gICAqIEtleTogdGFza1Rva2VuXG4gICAqIFZhbHVlOiB7IGluc3RhbmNlSWQsIGFjdGl2aXR5SWQgfVxuICAgKi9cbiAgcHJpdmF0ZSB0YXNrVG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIHsgaW5zdGFuY2VJZDogc3RyaW5nOyBhY3Rpdml0eUlkOiBzdHJpbmcgfT4oKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzIChBWFBXb3JrZmxvd0VuZ2luZSkgICAtLS0tXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogQ3JlYXRlcyBhbiBpbi1tZW1vcnkgd29ya2Zsb3cgaW5zdGFuY2UgYW5kIHByb2dyZXNzZXMgaXQuXG4gICAqIEZyb250ZW5kL2JvdGggYWN0aXZpdGllcyBhcmUgcmV0dXJuZWQgYXMgcGVuZGluZ1Rhc2sgZm9yIGV4dGVybmFsIGV4ZWN1dGlvbi5cbiAgICogQmFja2VuZCBhY3Rpdml0aWVzIGFyZSBza2lwcGVkLlxuICAgKi9cbiAgYXN5bmMgc3RhcnQocmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZT4ge1xuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+agCBTdGFydGluZyB3b3JrZmxvdzogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCwgcmVxdWVzdCk7XG4gICAgXG4gICAgLy8gR2VuZXJhdGUgaW5zdGFuY2UgSURcbiAgICBjb25zdCBpbnN0YW5jZUlkID0gQVhQRGF0YUdlbmVyYXRvci51dWlkKCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIExvYWQgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+TpSBMb2FkaW5nIHdvcmtmbG93IGRlZmluaXRpb246ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldERlZmluaXRpb24ocmVxdWVzdC53b3JrZmxvd0lkKTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinYwgV29ya2Zsb3cgZGVmaW5pdGlvbiBub3QgZm91bmQ6ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBkZWZpbml0aW9uIG5vdCBmb3VuZDogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinIUgRGVmaW5pdGlvbiBsb2FkZWQ6YCwge1xuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lLFxuICAgICAgYWN0aXZpdGllc0NvdW50OiBkZWZpbml0aW9uLmdyYXBoPy5hY3Rpdml0aWVzPy5sZW5ndGggfHwgMCxcbiAgICAgIGNvbm5lY3Rpb25zQ291bnQ6IGRlZmluaXRpb24uZ3JhcGg/LmNvbm5lY3Rpb25zPy5sZW5ndGggfHwgMCxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgd29ya2Zsb3cgc3RhdGVcbiAgICBjb25zdCBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlID0ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHdvcmtmbG93SWQ6IHJlcXVlc3Qud29ya2Zsb3dJZCxcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgIGlucHV0OiByZXF1ZXN0LmlucHV0IHx8IHt9LFxuICAgICAgb3V0cHV0OiB1bmRlZmluZWQsXG4gICAgICBsYXN0VXBkYXRlZDogbm93LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgbG9jYWwgc3RhdGVcbiAgICBjb25zdCBsb2NhbFN0YXRlOiBMb2NhbFdvcmtmbG93U3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgd29ya2Zsb3dJZDogcmVxdWVzdC53b3JrZmxvd0lkLFxuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIHN0YXRlLFxuICAgICAgY29tcGxldGVkQWN0aXZpdGllczogbmV3IFNldCgpLFxuICAgICAgYWN0aXZpdHlSZXN1bHRzOiBuZXcgTWFwKCksXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGluc3RhbmNlXG4gICAgdGhpcy5pbnN0YW5jZXMuc2V0KGluc3RhbmNlSWQsIGxvY2FsU3RhdGUpO1xuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4pqZ77iPIEV4ZWN1dGluZyB3b3JrZmxvdyBzdGVwcy4uLmApO1xuICAgIGNvbnN0IHBlbmRpbmdUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinIUgV29ya2Zsb3cgc3RhcnRlZDpgLCB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgc3RhdHVzOiBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyxcbiAgICAgIGhhc1BlbmRpbmdUYXNrOiAhIXBlbmRpbmdUYXNrLFxuICAgICAgcGVuZGluZ1Rhc2tUeXBlOiBwZW5kaW5nVGFzaz8uYWN0aXZpdHlUeXBlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBzdGF0ZTogbG9jYWxTdGF0ZS5zdGF0ZSxcbiAgICAgIHBlbmRpbmdUYXNrOiBwZW5kaW5nVGFzayB8fCBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogVmFsaWRhdGVzIHRhc2sgdG9rZW4sIGFwcGxpZXMgZXh0ZXJuYWxseSBleGVjdXRlZCByZXN1bHQsXG4gICAqIGFuZCBjb250aW51ZXMgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMuXG4gICAqL1xuICBhc3luYyByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgLy8gVmFsaWRhdGUgdGFzayB0b2tlblxuICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMudGFza1Rva2Vucy5nZXQocmVxdWVzdC50YXNrVG9rZW4pO1xuICAgIGlmICghdG9rZW5JbmZvIHx8IHRva2VuSW5mby5pbnN0YW5jZUlkICE9PSByZXF1ZXN0Lmluc3RhbmNlSWQgfHwgdG9rZW5JbmZvLmFjdGl2aXR5SWQgIT09IHJlcXVlc3Quc3RlcElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFzayB0b2tlbicpO1xuICAgIH1cblxuICAgIC8vIEdldCBpbnN0YW5jZVxuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBhY3Rpdml0eSByZXN1bHQgKGZyb20gZXh0ZXJuYWwgZXhlY3V0aW9uKVxuICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChyZXF1ZXN0LnN0ZXBJZCwge1xuICAgICAgb3V0cHV0OiByZXF1ZXN0LnVzZXJJbnB1dCB8fCB7fSxcbiAgICAgIG91dGNvbWU6IHJlcXVlc3Qub3V0Y29tZSxcbiAgICB9KTtcbiAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKHJlcXVlc3Quc3RlcElkKTtcblxuICAgIC8vIE1lcmdlIG91dHB1dC91c2VySW5wdXQgaW50byBzdGF0ZSB2YXJpYWJsZXNcbiAgICBpZiAocmVxdWVzdC51c2VySW5wdXQpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzID0ge1xuICAgICAgICAuLi5sb2NhbFN0YXRlLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgLi4uKHJlcXVlc3QudXNlcklucHV0IHx8IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhY3Rpdml0eSBhcyBjb21wbGV0ZWQgYW5kIGNvbnRpbnVlIHByb2dyZXNzaW9uXG4gICAgLy8gQ29udGludWUgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMgKHNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdGllcylcbiAgICBjb25zdCBuZXh0VGFzayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhdGVcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcblxuICAgIC8vIERldGVybWluZSBmaW5hbCBzdGF0dXNcbiAgICBpZiAoIW5leHRUYXNrICYmIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICBsb2NhbFN0YXRlLnN0YXRlLm91dHB1dCA9IGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3QudXNlcklucHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZXM6IHsgW3JlcXVlc3Qub3V0Y29tZV06IHRydWUgfSxcbiAgICAgIHN0YXRlOiBsb2NhbFN0YXRlLnN0YXRlLFxuICAgICAgbmV4dFRhc2s6IG5leHRUYXNrIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIGdldFN0YXRlKHJlcXVlc3Q6IEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0KTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+IHtcbiAgICBjb25zdCBsb2NhbFN0YXRlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHJlcXVlc3QuaW5zdGFuY2VJZCk7XG4gICAgaWYgKCFsb2NhbFN0YXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IGluc3RhbmNlIG5vdCBmb3VuZDogJHtyZXF1ZXN0Lmluc3RhbmNlSWR9YCk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLmxvY2FsU3RhdGUuc3RhdGUgfTtcbiAgICBpZiAoc3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICBzdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKHN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gZnJvbSBhdmFpbGFibGUgcHJvdmlkZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZWZpbml0aW9uKHdvcmtmbG93SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgbnVsbD4ge1xuICAgIC8vIFRyeSBhbGwgcHJvdmlkZXJzIGluIG9yZGVyXG4gICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy53b3JrZmxvd1Byb3ZpZGVycyk7XG4gICAgZm9yIChjb25zdCBwIG9mIHJlc29sdmVkUHJvdmlkZXJzKSB7XG4gICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBwLnZhbHVlO1xuICAgICAgICAvLyBDaGVjayBpZiBwcm92aWRlciBoYXMgZ2V0QnlOYW1lIG1ldGhvZFxuICAgICAgICBpZiAodHlwZW9mIHByb3ZpZGVyLmdldEJ5TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcHJvdmlkZXIuZ2V0QnlOYW1lKHdvcmtmbG93SWQpO1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmVzcyB3b3JrZmxvdyBzdGVwcyBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKiBcbiAgICogRm9yIGZyb250ZW5kL2JvdGggYWN0aXZpdGllczogcmV0dXJucyB0YXNrIGltbWVkaWF0ZWx5IChzdXNwZW5kcyB3b3JrZmxvdykuXG4gICAqIEZvciBiYWNrZW5kIGFjdGl2aXRpZXM6IHNraXBzIGFuZCBjb250aW51ZXMuXG4gICAqIFxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IHBlbmRpbmcgdGFzayAoaWYgZnJvbnRlbmQgYWN0aXZpdHkgZm91bmQpIG9yIG51bGwgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVXb3JrZmxvd1N0ZXBzKGxvY2FsU3RhdGU6IExvY2FsV29ya2Zsb3dTdGF0ZSk6IFByb21pc2U8QVhQV29ya2Zsb3dUYXNrIHwgbnVsbD4ge1xuICAgIGNvbnN0IGdyYXBoID0gbG9jYWxTdGF0ZS5kZWZpbml0aW9uLmdyYXBoO1xuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBncmFwaC5hY3Rpdml0aWVzIHx8IFtdO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gZ3JhcGguY29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBhY3Rpdml0eSBtYXBcbiAgICBjb25zdCBhY3Rpdml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0FjdGl2aXR5SW5zdGFuY2U+KCk7XG4gICAgYWN0aXZpdGllcy5mb3JFYWNoKGFjdGl2aXR5ID0+IHtcbiAgICAgIGFjdGl2aXR5TWFwLnNldChhY3Rpdml0eS5pZCwgYWN0aXZpdHkpO1xuICAgIH0pO1xuXG4gICAgLy8gQnVpbGQgY29ubmVjdGlvbiBncmFwaFxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgQVhQQ29ubmVjdGlvbltdPigpO1xuICAgIGNvbnN0IGluY29taW5nQ29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgQVhQQ29ubmVjdGlvbltdPigpO1xuXG4gICAgY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZUlkID0gY29ubi5zb3VyY2UuYWN0aXZ0eU5hbWU7XG4gICAgICBjb25zdCB0YXJnZXRJZCA9IGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lO1xuXG4gICAgICBpZiAoIW91dGdvaW5nQ29ubmVjdGlvbnMuaGFzKHNvdXJjZUlkKSkge1xuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLnNldChzb3VyY2VJZCwgW10pO1xuICAgICAgfVxuICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucy5nZXQoc291cmNlSWQpIS5wdXNoKGNvbm4pO1xuXG4gICAgICBpZiAoIWluY29taW5nQ29ubmVjdGlvbnMuaGFzKHRhcmdldElkKSkge1xuICAgICAgICBpbmNvbWluZ0Nvbm5lY3Rpb25zLnNldCh0YXJnZXRJZCwgW10pO1xuICAgICAgfVxuICAgICAgaW5jb21pbmdDb25uZWN0aW9ucy5nZXQodGFyZ2V0SWQpIS5wdXNoKGNvbm4pO1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCBzdGFydGluZyBhY3Rpdml0eSAodXNlIHN0YXJ0QWN0aXZpdHlJZCBvciBubyBpbmNvbWluZyBjb25uZWN0aW9ucywgb3IgZmlyc3QgYWN0aXZpdHkpXG4gICAgbGV0IGN1cnJlbnRBY3Rpdml0eUlkID0gbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZDtcbiAgICBpZiAoIWN1cnJlbnRBY3Rpdml0eUlkKSB7XG4gICAgICAvLyBVc2Ugc3RhcnRBY3Rpdml0eUlkIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCkge1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IGdyYXBoLnN0YXJ0QWN0aXZpdHlJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZpbmQgcm9vdCBhY3Rpdml0eSAobm8gaW5jb21pbmcgY29ubmVjdGlvbnMpXG4gICAgICAgIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgYWN0aXZpdGllcykge1xuICAgICAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9ucy5oYXMoYWN0aXZpdHkuaWQpKSB7XG4gICAgICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IGFjdGl2aXR5LmlkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vIHJvb3QgZm91bmQsIHVzZSBmaXJzdCBhY3Rpdml0eVxuICAgICAgICBpZiAoIWN1cnJlbnRBY3Rpdml0eUlkICYmIGFjdGl2aXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdGllc1swXS5pZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgd29ya2Zsb3cgc3RlcHNcbiAgICB3aGlsZSAoY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgYWxyZWFkeSBjb21wbGV0ZWRcbiAgICAgIGlmIChsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuaGFzKGN1cnJlbnRBY3Rpdml0eUlkKSkge1xuICAgICAgICAvLyBNb3ZlIHRvIG5leHQgYWN0aXZpdHlcbiAgICAgICAgY29uc3QgbmV4dElkID0gdGhpcy5nZXROZXh0QWN0aXZpdHlJZChcbiAgICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCxcbiAgICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLFxuICAgICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gbmV4dElkID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBhY3Rpdml0eSBkZWZpbml0aW9uIHRvIHJldHJpZXZlIGV4ZWN1dGlvbk1vZGUgYW5kIHRpdGxlXG4gICAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCflI0gR2V0dGluZyBhY3Rpdml0eSBkZWZpbml0aW9uIGZvcjogJHthY3Rpdml0eS5uYW1lfWApO1xuICAgICAgY29uc3QgYWN0aXZpdHlEZWZpbml0aW9uID0gYXdhaXQgdGhpcy5hY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlLmdldEFjdGl2aXR5QnlOYW1lKGFjdGl2aXR5Lm5hbWUpO1xuICAgICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDwn5OLIEFjdGl2aXR5IGRlZmluaXRpb246YCwge1xuICAgICAgICBuYW1lOiBhY3Rpdml0eURlZmluaXRpb24/Lm5hbWUsXG4gICAgICAgIHR5cGU6IGFjdGl2aXR5RGVmaW5pdGlvbj8udHlwZSxcbiAgICAgICAgZXhlY3V0aW9uTW9kZTogYWN0aXZpdHlEZWZpbml0aW9uPy5leGVjdXRpb25Nb2RlLFxuICAgICAgICB0aXRsZTogYWN0aXZpdHlEZWZpbml0aW9uPy50aXRsZSxcbiAgICAgICAgZm91bmQ6ICEhYWN0aXZpdHlEZWZpbml0aW9uLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBhY3Rpdml0eURlZmluaXRpb24/LmV4ZWN1dGlvbk1vZGUgfHwgJ2Zyb250ZW5kJztcbiAgICAgIGNvbnN0IGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eURlZmluaXRpb24/LnRpdGxlO1xuXG4gICAgICAvLyBIYW5kbGUgYmFja2VuZCBhY3Rpdml0aWVzOiBza2lwXG4gICAgICBpZiAoZXhlY3V0aW9uTW9kZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4o+t77iPIFNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdHk6ICR7YWN0aXZpdHkubmFtZX0gKCR7YWN0aXZpdHkuaWR9KWBcbiAgICAgICAgKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5jb21wbGV0ZWRBY3Rpdml0aWVzLmFkZChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChjdXJyZW50QWN0aXZpdHlJZCwge1xuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBvdXRjb21lOiAnRG9uZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZyb250ZW5kL2JvdGggYWN0aXZpdGllczogcmV0dXJuIGFzIHBlbmRpbmdUYXNrIChkbyBOT1QgZXhlY3V0ZSlcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnIHx8IGV4ZWN1dGlvbk1vZGUgPT09ICdib3RoJykge1xuICAgICAgICAvLyBDcmVhdGUgdGFzayBmb3IgZXh0ZXJuYWwgZXhlY3V0aW9uXG4gICAgICAgIC8vIE5vdGU6IEV4cHJlc3Npb24gZXZhbHVhdGlvbiB3aWxsIGJlIGRvbmUgYnkgQWN0aXZpdHlFeGVjdXRvclxuICAgICAgICBjb25zdCB0YXNrOiBBWFBXb3JrZmxvd1Rhc2sgPSB7XG4gICAgICAgICAgdGFza1Rva2VuOiBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKSxcbiAgICAgICAgICBhY3Rpdml0eUlkOiBhY3Rpdml0eS5pZCxcbiAgICAgICAgICBhY3Rpdml0eVR5cGU6IGFjdGl2aXR5Lm5hbWUsXG4gICAgICAgICAgYWN0aXZpdHlOYW1lOiBhY3Rpdml0eVRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleGVjdXRpb25Nb2RlOiBleGVjdXRpb25Nb2RlIGFzICdmcm9udGVuZCcgfCAnYmFja2VuZCcgfCAnYm90aCcsXG4gICAgICAgICAgaW5wdXQ6IGFjdGl2aXR5LmlucHV0cyB8fCB7fSwgLy8gUGFzcyByYXcgaW5wdXRzIC0gZXhlY3V0b3Igd2lsbCBldmFsdWF0ZVxuICAgICAgICAgIGNvbmZpZzogYWN0aXZpdHkuY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdG9yZSB0YXNrIHRva2VuIGZvciBzZWN1cmUgcmVzdW1lXG4gICAgICAgIHRoaXMudGFza1Rva2Vucy5zZXQodGFzay50YXNrVG9rZW4sIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBsb2NhbFN0YXRlLmluc3RhbmNlSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB0byBpbmRpY2F0ZSBzdXNwZW5zaW9uXG4gICAgICAgIGxvY2FsU3RhdGUuY3VycmVudEFjdGl2aXR5SWQgPSBjdXJyZW50QWN0aXZpdHlJZDtcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnc3VzcGVuZGVkJztcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5jdXJyZW50U3RlcElkID0gY3VycmVudEFjdGl2aXR5SWQ7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRhc2sgaW1tZWRpYXRlbHkgLSBBWFBXb3JrZmxvd01hbmFnZXIgd2lsbCBleGVjdXRlIGl0XG4gICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIG5leHQgYWN0aXZpdHlcbiAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLFxuICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgKTtcbiAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gbmV4dElkID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBXb3JrZmxvdyBjb21wbGV0ZWRcbiAgICBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZCA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXh0IGFjdGl2aXR5IElEIGJhc2VkIG9uIGNvbm5lY3Rpb25zIGFuZCBvdXRjb21lcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgY3VycmVudEFjdGl2aXR5SWQ6IHN0cmluZyxcbiAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zOiBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+LFxuICAgIGFjdGl2aXR5UmVzdWx0czogTWFwPHN0cmluZywgeyBvdXRwdXQ6IGFueTsgb3V0Y29tZTogc3RyaW5nIH0+XG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gb3V0Z29pbmdDb25uZWN0aW9ucy5nZXQoY3VycmVudEFjdGl2aXR5SWQpIHx8IFtdO1xuXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIE5vIG91dGdvaW5nIGNvbm5lY3Rpb25zIC0gd29ya2Zsb3cgZW5kc1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IGFjdGl2aXR5IHJlc3VsdFxuICAgIGNvbnN0IHJlc3VsdCA9IGFjdGl2aXR5UmVzdWx0cy5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgIGNvbnN0IG91dGNvbWUgPSByZXN1bHQ/Lm91dGNvbWUgfHwgJ0RvbmUnO1xuXG4gICAgLy8gRmluZCBjb25uZWN0aW9uIG1hdGNoaW5nIG91dGNvbWVcbiAgICAvLyBPdXRjb21lIG1hdGNoaW5nIGlzIHR5cGljYWxseSBkb25lIHZpYSBwb3J0IG5hbWUgKGUuZy4sIFwiRG9uZVwiLCBcIkZhaWxlZFwiKVxuICAgIGZvciAoY29uc3QgY29ubiBvZiBjb25uZWN0aW9ucykge1xuICAgICAgY29uc3Qgc291cmNlUG9ydCA9IGNvbm4uc291cmNlLnBvcnQgfHwgJ0RvbmUnO1xuICAgICAgaWYgKHNvdXJjZVBvcnQgPT09IG91dGNvbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIG1hdGNoaW5nIG91dGNvbWUsIHVzZSBmaXJzdCBjb25uZWN0aW9uIChkZWZhdWx0IHBhdGgpXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uc1swXS50YXJnZXQuYWN0aXZ0eU5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './workflow-local-engine';\nexport * from './activity-executor.service';\nexport * from './workflow-expression-scope.service';\nexport * from './workflow-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrZmxvdyBSdW50aW1lIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1sb2NhbC1lbmdpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJzsiXX0=","//#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 definitions\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 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 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 // Note: AXPWorkflowDefinition doesn't have category field\n // Category is managed separately through category providers\n // This method searches through cached categories\n const definition = await this.getWorkflowByName(workflowName);\n if (definition) {\n // Search through all categories to find which one contains this workflow\n const categories = await this.getCategories();\n for (const category of categories) {\n const workflows = await this.getWorkflowsByCategoryId(category.id);\n if (workflows.some(w => w.name === workflowName)) {\n return category.id;\n }\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.getByName === 'function') {\n try {\n const definition = await p.value.getByName(name);\n if (definition) {\n this.workflowsByName.set(name, definition);\n return definition;\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.15\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUV6RSxzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztRQUVuRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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Q0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7K0dBaGRRLDRCQUE0QjttSEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzRGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dDYXRlZ29yeSB9IGZyb20gJy4vd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBpbmRpdmlkdWFsIHdvcmtmbG93IGRlZmluaXRpb25zIGJ5IG5hbWUgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgd29ya2Zsb3dzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+PigpO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBXb3JrZmxvdyBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgd29ya2Zsb3cgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBlbXB0eUFycmF5KTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5nZXQoY2F0ZWdvcnlJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd3NGcm9tUHJvdmlkZXJzKGNhdGVnb3J5SWQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFdvcmtmbG93IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKVxuICAgICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93QnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IE8oMSkgbG9va3VwIGluIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndvcmtmbG93c0J5TmFtZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnMuc29tZShkZWYgPT4gZGVmLm5hbWUgPT09IHdvcmtmbG93TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBUcnkgbG9hZGluZyB0aGUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBmaW5kIGl0cyBjYXRlZ29yeVxuICAgICAgICAvLyBOb3RlOiBBWFBXb3JrZmxvd0RlZmluaXRpb24gZG9lc24ndCBoYXZlIGNhdGVnb3J5IGZpZWxkXG4gICAgICAgIC8vIENhdGVnb3J5IGlzIG1hbmFnZWQgc2VwYXJhdGVseSB0aHJvdWdoIGNhdGVnb3J5IHByb3ZpZGVyc1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBzZWFyY2hlcyB0aHJvdWdoIGNhY2hlZCBjYXRlZ29yaWVzXG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAvLyBTZWFyY2ggdGhyb3VnaCBhbGwgY2F0ZWdvcmllcyB0byBmaW5kIHdoaWNoIG9uZSBjb250YWlucyB0aGlzIHdvcmtmbG93XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93cy5zb21lKHcgPT4gdy5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZvciBhIHdvcmtmbG93XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBhd2FpdCB0aGlzLmdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpO1xuICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIGFueSBjYXRlZ29yeWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldENhdGVnb3JpZXNQYXRoQnlJZChjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZTogRGF0YSBMb2FkaW5nICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBjYXRlZ29yaWVzIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBUcmFja3MgcHJvdmlkZXIgb3duZXJzaGlwIHRvIGF2b2lkIHVubmVjZXNzYXJ5IEFQSSBjYWxsc1xuICAgICAqIC0gRm9yIHJvb3QgKHBhcmVudElkID0gdW5kZWZpbmVkKTogUXVlcnkgQUxMIHByb3ZpZGVyc1xuICAgICAqIC0gRm9yIGNoaWxkcmVuOiBPbmx5IHF1ZXJ5IHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIHBhcmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuY2F0ZWdvcnlQcm92aWRlcnMpO1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllczogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBwcm92aWRlcihzKSB0byBxdWVyeVxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbmRpY2VzVG9RdWVyeSA9IHBhcmVudElkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShwYXJlbnRJZClcbiAgICAgICAgICAgICAgICA6IG51bGw7IC8vIFJvb3Q6IHF1ZXJ5IGFsbCBwcm92aWRlcnNcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdHMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2F0cykgJiYgY2F0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKC4uLmNhdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4pyFIFRyYWNrIG93bmVyc2hpcDogVGhpcyBwcm92aWRlciBJTkRFWCBvd25zIHRoZXNlIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuc2V0KGNhdC5pZCwgaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgQ2FjaGUgcmVzdWx0cyBmb3IgZmFzdCBzdWJzZXF1ZW50IGFjY2Vzc1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5zZXQocGFyZW50SWQsIGNhdGVnb3JpZXMpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXQuaWQsIGNhdCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5kZWxldGUocGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcm92aWRlciBpbmRleCB0aGF0IG93bnMgYSBzcGVjaWZpYyBjYXRlZ29yeVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IHdpdGggcHJvdmlkZXIgaW5kZXgsIG9yIG51bGwgaWYgb3duZXJzaGlwIHVua25vd24gKHF1ZXJ5IGFsbClcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgaWYgKG93bmVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtvd25lckluZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE93bmVyc2hpcCB1bmtub3duIC0gd2lsbCBxdWVyeSBhbGwgcHJvdmlkZXJzIChmYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogT25seSBxdWVyaWVzIHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIGNhdGVnb3J5XG4gICAgICogVXNlcyBwcm92aWRlciBJTkRFWCB0byBtYXRjaCBjYXRlZ29yeSBwcm92aWRlciB3aXRoIHdvcmtmbG93IHByb3ZpZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGRlZmluaXRpb25zKTtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLmZvckVhY2goZGVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KGRlZi5uYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMud29ya2Zsb3dQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcC52YWx1ZS5nZXRCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLnNldChuYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGYWxsYmFjazogU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9ucyBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KG5hbWUsIGZvdW5kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBjYXRlZ29yeSBoaWVyYXJjaHlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaENhdGVnb3J5SW5IaWVyYXJjaHkoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXVlOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZF07XG4gICAgICAgIGNvbnN0IHNlYXJjaGVkID0gbmV3IFNldDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAgICAgd2hpbGUgKHNlYXJjaFF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc2VhcmNoUXVldWUuc2hpZnQoKSE7XG4gICAgICAgICAgICBpZiAoc2VhcmNoZWQuaGFzKHBhcmVudElkKSkgY29udGludWU7XG4gICAgICAgICAgICBzZWFyY2hlZC5hZGQocGFyZW50SWQpO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBPcHRpbWl6YXRpb246IE9ubHkgc2VhcmNoIGNoaWxkcmVuIGlmIGNoaWxkcmVuQ291bnQgPiAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgJiYgIXNlYXJjaGVkLmhhcyhjYXRlZ29yeS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVldWUucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyBjaGlsZHJlbiAodXNlcyBjYWNoZWQgY291bnQpXG4gICAgICovXG4gICAgY2F0ZWdvcnlIYXNDaGlsZHJlbihjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgd29ya2Zsb3dzICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc1dvcmtmbG93cyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB3b3JrZmxvd3MgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyV29ya2Zsb3dzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","// 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLDZDQUE2QztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBbUIxQyxxQ0FBcUM7QUFDckMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLFlBQVksQ0FBQztBQUUzQixvQ0FBb0M7QUFDcEMsY0FBYyxXQUFXLENBQUM7QUFFMUIsbURBQW1EO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IERlZmluaXRpb24gVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG4vLyBFeHBvcnQgd29ya2Zsb3cgZGVmaW5pdGlvbiB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbiAgQVhQVmFyaWFibGVEZWZpbml0aW9uLFxuICBBWFBXb3JrZmxvd0lucHV0RGVzY3JpcHRvcixcbiAgQVhQV29ya2Zsb3dPdXRwdXREZXNjcmlwdG9yLFxuICBBWFBXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUEVsc2FXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUFdvcmtmbG93QmluZGluZyxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8gV29ya2Zsb3cgSW5zdGFuY2UgVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuXG4vLyBSZS1leHBvcnQgV29ya2Zsb3cgSW5zdGFuY2UgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZSxcbiAgQVhQV29ya2Zsb3dTdGF0ZSxcbiAgQVhQV29ya2Zsb3dTdGF0dXMsXG4gIEFYUFdvcmtmbG93U3ViU3RhdHVzLFxuICBBWFBBY3Rpdml0eVN0YXR1cyxcbiAgQVhQRXhjZXB0aW9uU3RhdGUsXG4gIEFYUEFjdGl2aXR5SW5jaWRlbnQsXG4gIEFYUFdvcmtmbG93RmF1bHRTdGF0ZSxcbiAgQVhQQm9va21hcmssXG4gIEFYUENvbXBsZXRpb25DYWxsYmFja1N0YXRlLFxuICBBWFBBY3Rpdml0eVZhcmlhYmxlLFxuICBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG5cbi8vIEFjdGl2aXR5IFN5c3RlbSBUeXBlcyAoU2ltcGxpZmllZClcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHkvYWN0aXZpdHkudHlwZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2aXR5JztcblxuLy8gU2ltcGxlIFJ1bnRpbWUgKENvb3JkaW5hdG9yIG9ubHkpXG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUnO1xuXG4vLyBXb3JrZmxvdyBEZWZpbml0aW9uIFN5c3RlbSAoQ2F0ZWdvcnkgKyBNZXRhZGF0YSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24uc2VydmljZSc7Il19","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.15\", 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.15\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", 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-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/workflow-expression-scope.service.js","../tmp-esm2022/workflow/lib/engine/runtime/activity-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.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.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.15\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", 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.15\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","// ============================================\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.15\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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 } from '@angular/core';\nimport { get } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Expression Scope Service\n *\n * Shared service for building expression evaluation scope from workflow data.\n * Used by both Local Engine and Mock Runtime to manage workflow data (inputs, variables, outputs).\n *\n * Responsibilities:\n * - Build expression evaluation scope from workflow state\n * - Provide context.eval() function for accessing workflow data\n * - Manage workflow data structure (inputs, variables, outputs)\n *\n * This service does NOT:\n * - Execute activities\n * - Evaluate expressions (delegates to AXPExpressionEvaluatorService)\n * - Manage workflow state (handled by runtime)\n *\n * @example\n * ```typescript\n * const scopeService = inject(WorkflowExpressionScopeService);\n *\n * // Build scope from workflow state\n * const scope = scopeService.buildScope({\n * inputs: state.input || {},\n * variables: state.variables || {},\n * outputs: activityOutputs\n * });\n *\n * // Or build from state directly\n * const scope = scopeService.buildScopeFromState(state, activityOutputs);\n * ```\n */\nexport class WorkflowExpressionScopeService {\n //#region ---- Public Methods ----\n /**\n * Build expression evaluation scope for workflow activities.\n *\n * Provides workflow-specific data (inputs, variables, outputs) and context.eval() function.\n * Other data (session, current user, etc.) are provided by expression evaluator scope providers.\n *\n * Scope includes:\n * - inputs: Workflow input values (accessible as inputs.propertyName)\n * - variables: Workflow state variables (accessible as variables.propertyName or vars.propertyName)\n * - outputs: Previous activity outputs (accessible as outputs.activityId)\n * - context.eval(path): Function to access nested properties from workflow data\n *\n * Expressions can use:\n * - {{inputs.userName}} - Direct access to workflow input\n * - {{variables.someVar}} or {{vars.someVar}} - Direct access to workflow variable\n * - {{outputs.activityId.property}} - Direct access to previous activity output\n * - {{context.eval(\"inputs.userName\")}} - Access via context.eval (supports nested paths)\n * - {{context.eval(\"variables.someVar\")}} - Access variables via context.eval\n * - {{context.eval(\"outputs.activityId.property\")}} - Access outputs via context.eval\n * - {{session.currentUser().name}} - Access current user via expression evaluator scope providers\n *\n * The context.eval() function provides a unified way to access all workflow data,\n * similar to how entity-detail-list uses context.eval() to access parent data.\n *\n * @param context - Workflow expression context containing inputs, variables, and outputs\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScope(context) {\n // Build merged workflow data object for context.eval()\n // This allows expressions like: context.eval(\"inputs.userName\") or context.eval(\"variables.count\")\n const workflowData = {\n inputs: context.inputs || {},\n variables: context.variables || {},\n vars: context.variables || {}, // Alias for convenience\n outputs: context.outputs || {},\n };\n // Build scope object with workflow-specific data and context.eval()\n // Note: AXPExpressionEvaluatorScope type expects { [namespace]: { [name]: Function } }\n // but evaluate() method actually accepts flat objects with values too\n // We'll use 'any' to allow both values and functions\n const scope = {\n // Direct access to workflow data\n inputs: workflowData.inputs,\n variables: workflowData.variables,\n vars: workflowData.vars,\n outputs: workflowData.outputs,\n // Context object with eval function (similar to entity-detail-list pattern)\n context: {\n eval: (path) => {\n // Use lodash get to access nested properties\n // Supports paths like: \"inputs.userName\", \"variables.count\", \"outputs.activityId.property\"\n return get(workflowData, path);\n },\n },\n };\n return scope;\n }\n /**\n * Build expression evaluation scope from workflow instance state.\n *\n * Convenience method that extracts data from AXPWorkflowInstanceState.\n *\n * @param state - Workflow instance state\n * @param activityOutputs - Map of activity outputs (activityId -> output)\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScopeFromState(state, activityOutputs) {\n // Convert activity outputs to record format\n const outputs = {};\n if (activityOutputs) {\n if (activityOutputs instanceof Map) {\n activityOutputs.forEach((output, activityId) => {\n outputs[activityId] = output;\n });\n }\n else {\n Object.assign(outputs, activityOutputs);\n }\n }\n return this.buildScope({\n inputs: state.input || {},\n variables: state.variables || {},\n outputs: outputs,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: WorkflowExpressionScopeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWV4cHJlc3Npb24tc2NvcGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBb0JoQyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILFVBQVUsQ0FBQyxPQUFrQztRQUMzQyx1REFBdUQ7UUFDdkQsbUdBQW1HO1FBQ25HLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsd0JBQXdCO1lBQ3ZELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLG9FQUFvRTtRQUNwRSx1RkFBdUY7UUFDdkYsc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCxNQUFNLEtBQUssR0FBUTtZQUNqQixpQ0FBaUM7WUFDakMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBRTdCLDRFQUE0RTtZQUM1RSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7b0JBQ3JCLDZDQUE2QztvQkFDN0MsMkZBQTJGO29CQUMzRixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7YUFDRjtTQUNGLENBQUM7UUFFRixPQUFPLEtBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLENBQ2pCLEtBQStCLEVBQy9CLGVBQXdEO1FBRXhELDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxlQUFlLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNoQyxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQTlGVSw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQUY3QixNQUFNOzs0RkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICYgSW50ZXJmYWNlcyAgIC0tLS1cblxuLyoqXG4gKiBXb3JrZmxvdyBleHByZXNzaW9uIGV2YWx1YXRpb24gY29udGV4dC5cbiAqIENvbnRhaW5zIHdvcmtmbG93IHN0YXRlIGRhdGEgbmVlZGVkIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCB7XG4gIC8qKiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKi9cbiAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBcbiAgLyoqIFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAqL1xuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIFxuICAvKiogUHJldmlvdXMgYWN0aXZpdHkgb3V0cHV0cyAoYWN0aXZpdHlJZCAtPiBvdXRwdXQpICovXG4gIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIFdvcmtmbG93IEV4cHJlc3Npb24gU2NvcGUgU2VydmljZVxuICogXG4gKiBTaGFyZWQgc2VydmljZSBmb3IgYnVpbGRpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgZGF0YS5cbiAqIFVzZWQgYnkgYm90aCBMb2NhbCBFbmdpbmUgYW5kIE1vY2sgUnVudGltZSB0byBtYW5hZ2Ugd29ya2Zsb3cgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBzdGF0ZVxuICogLSBQcm92aWRlIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uIGZvciBhY2Nlc3Npbmcgd29ya2Zsb3cgZGF0YVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgZGF0YSBzdHJ1Y3R1cmUgKGlucHV0cywgdmFyaWFibGVzLCBvdXRwdXRzKVxuICogXG4gKiBUaGlzIHNlcnZpY2UgZG9lcyBOT1Q6XG4gKiAtIEV4ZWN1dGUgYWN0aXZpdGllc1xuICogLSBFdmFsdWF0ZSBleHByZXNzaW9ucyAoZGVsZWdhdGVzIHRvIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlKVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgc3RhdGUgKGhhbmRsZWQgYnkgcnVudGltZSlcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjb3BlU2VydmljZSA9IGluamVjdChXb3JrZmxvd0V4cHJlc3Npb25TY29wZVNlcnZpY2UpO1xuICogXG4gKiAvLyBCdWlsZCBzY29wZSBmcm9tIHdvcmtmbG93IHN0YXRlXG4gKiBjb25zdCBzY29wZSA9IHNjb3BlU2VydmljZS5idWlsZFNjb3BlKHtcbiAqICAgaW5wdXRzOiBzdGF0ZS5pbnB1dCB8fCB7fSxcbiAqICAgdmFyaWFibGVzOiBzdGF0ZS52YXJpYWJsZXMgfHwge30sXG4gKiAgIG91dHB1dHM6IGFjdGl2aXR5T3V0cHV0c1xuICogfSk7XG4gKiBcbiAqIC8vIE9yIGJ1aWxkIGZyb20gc3RhdGUgZGlyZWN0bHlcbiAqIGNvbnN0IHNjb3BlID0gc2NvcGVTZXJ2aWNlLmJ1aWxkU2NvcGVGcm9tU3RhdGUoc3RhdGUsIGFjdGl2aXR5T3V0cHV0cyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQnVpbGQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZvciB3b3JrZmxvdyBhY3Rpdml0aWVzLlxuICAgKiBcbiAgICogUHJvdmlkZXMgd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpIGFuZCBjb250ZXh0LmV2YWwoKSBmdW5jdGlvbi5cbiAgICogT3RoZXIgZGF0YSAoc2Vzc2lvbiwgY3VycmVudCB1c2VyLCBldGMuKSBhcmUgcHJvdmlkZWQgYnkgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzLlxuICAgKiBcbiAgICogU2NvcGUgaW5jbHVkZXM6XG4gICAqIC0gaW5wdXRzOiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKGFjY2Vzc2libGUgYXMgaW5wdXRzLnByb3BlcnR5TmFtZSlcbiAgICogLSB2YXJpYWJsZXM6IFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAoYWNjZXNzaWJsZSBhcyB2YXJpYWJsZXMucHJvcGVydHlOYW1lIG9yIHZhcnMucHJvcGVydHlOYW1lKVxuICAgKiAtIG91dHB1dHM6IFByZXZpb3VzIGFjdGl2aXR5IG91dHB1dHMgKGFjY2Vzc2libGUgYXMgb3V0cHV0cy5hY3Rpdml0eUlkKVxuICAgKiAtIGNvbnRleHQuZXZhbChwYXRoKTogRnVuY3Rpb24gdG8gYWNjZXNzIG5lc3RlZCBwcm9wZXJ0aWVzIGZyb20gd29ya2Zsb3cgZGF0YVxuICAgKiBcbiAgICogRXhwcmVzc2lvbnMgY2FuIHVzZTpcbiAgICogLSB7e2lucHV0cy51c2VyTmFtZX19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBpbnB1dFxuICAgKiAtIHt7dmFyaWFibGVzLnNvbWVWYXJ9fSBvciB7e3ZhcnMuc29tZVZhcn19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyB2YXJpYWJsZVxuICAgKiAtIHt7b3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5fX0gLSBEaXJlY3QgYWNjZXNzIHRvIHByZXZpb3VzIGFjdGl2aXR5IG91dHB1dFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwiaW5wdXRzLnVzZXJOYW1lXCIpfX0gLSBBY2Nlc3MgdmlhIGNvbnRleHQuZXZhbCAoc3VwcG9ydHMgbmVzdGVkIHBhdGhzKVxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwidmFyaWFibGVzLnNvbWVWYXJcIil9fSAtIEFjY2VzcyB2YXJpYWJsZXMgdmlhIGNvbnRleHQuZXZhbFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwib3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5XCIpfX0gLSBBY2Nlc3Mgb3V0cHV0cyB2aWEgY29udGV4dC5ldmFsXG4gICAqIC0ge3tzZXNzaW9uLmN1cnJlbnRVc2VyKCkubmFtZX19IC0gQWNjZXNzIGN1cnJlbnQgdXNlciB2aWEgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzXG4gICAqIFxuICAgKiBUaGUgY29udGV4dC5ldmFsKCkgZnVuY3Rpb24gcHJvdmlkZXMgYSB1bmlmaWVkIHdheSB0byBhY2Nlc3MgYWxsIHdvcmtmbG93IGRhdGEsXG4gICAqIHNpbWlsYXIgdG8gaG93IGVudGl0eS1kZXRhaWwtbGlzdCB1c2VzIGNvbnRleHQuZXZhbCgpIHRvIGFjY2VzcyBwYXJlbnQgZGF0YS5cbiAgICogXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gV29ya2Zsb3cgZXhwcmVzc2lvbiBjb250ZXh0IGNvbnRhaW5pbmcgaW5wdXRzLCB2YXJpYWJsZXMsIGFuZCBvdXRwdXRzXG4gICAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdG9yIHNjb3BlIHdpdGggd29ya2Zsb3cgZGF0YSBhbmQgY29udGV4dC5ldmFsKCkgZnVuY3Rpb25cbiAgICovXG4gIGJ1aWxkU2NvcGUoY29udGV4dDogV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCk6IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZSB7XG4gICAgLy8gQnVpbGQgbWVyZ2VkIHdvcmtmbG93IGRhdGEgb2JqZWN0IGZvciBjb250ZXh0LmV2YWwoKVxuICAgIC8vIFRoaXMgYWxsb3dzIGV4cHJlc3Npb25zIGxpa2U6IGNvbnRleHQuZXZhbChcImlucHV0cy51c2VyTmFtZVwiKSBvciBjb250ZXh0LmV2YWwoXCJ2YXJpYWJsZXMuY291bnRcIilcbiAgICBjb25zdCB3b3JrZmxvd0RhdGEgPSB7XG4gICAgICBpbnB1dHM6IGNvbnRleHQuaW5wdXRzIHx8IHt9LFxuICAgICAgdmFyaWFibGVzOiBjb250ZXh0LnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIHZhcnM6IGNvbnRleHQudmFyaWFibGVzIHx8IHt9LCAvLyBBbGlhcyBmb3IgY29udmVuaWVuY2VcbiAgICAgIG91dHB1dHM6IGNvbnRleHQub3V0cHV0cyB8fCB7fSxcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgc2NvcGUgb2JqZWN0IHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSBhbmQgY29udGV4dC5ldmFsKClcbiAgICAvLyBOb3RlOiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGUgdHlwZSBleHBlY3RzIHsgW25hbWVzcGFjZV06IHsgW25hbWVdOiBGdW5jdGlvbiB9IH1cbiAgICAvLyBidXQgZXZhbHVhdGUoKSBtZXRob2QgYWN0dWFsbHkgYWNjZXB0cyBmbGF0IG9iamVjdHMgd2l0aCB2YWx1ZXMgdG9vXG4gICAgLy8gV2UnbGwgdXNlICdhbnknIHRvIGFsbG93IGJvdGggdmFsdWVzIGFuZCBmdW5jdGlvbnNcbiAgICBjb25zdCBzY29wZTogYW55ID0ge1xuICAgICAgLy8gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBkYXRhXG4gICAgICBpbnB1dHM6IHdvcmtmbG93RGF0YS5pbnB1dHMsXG4gICAgICB2YXJpYWJsZXM6IHdvcmtmbG93RGF0YS52YXJpYWJsZXMsXG4gICAgICB2YXJzOiB3b3JrZmxvd0RhdGEudmFycyxcbiAgICAgIG91dHB1dHM6IHdvcmtmbG93RGF0YS5vdXRwdXRzLFxuICAgICAgXG4gICAgICAvLyBDb250ZXh0IG9iamVjdCB3aXRoIGV2YWwgZnVuY3Rpb24gKHNpbWlsYXIgdG8gZW50aXR5LWRldGFpbC1saXN0IHBhdHRlcm4pXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGV2YWw6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBVc2UgbG9kYXNoIGdldCB0byBhY2Nlc3MgbmVzdGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAvLyBTdXBwb3J0cyBwYXRocyBsaWtlOiBcImlucHV0cy51c2VyTmFtZVwiLCBcInZhcmlhYmxlcy5jb3VudFwiLCBcIm91dHB1dHMuYWN0aXZpdHlJZC5wcm9wZXJ0eVwiXG4gICAgICAgICAgcmV0dXJuIGdldCh3b3JrZmxvd0RhdGEsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNjb3BlIGFzIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGV4dHJhY3RzIGRhdGEgZnJvbSBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUuXG4gICAqIFxuICAgKiBAcGFyYW0gc3RhdGUgLSBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZVxuICAgKiBAcGFyYW0gYWN0aXZpdHlPdXRwdXRzIC0gTWFwIG9mIGFjdGl2aXR5IG91dHB1dHMgKGFjdGl2aXR5SWQgLT4gb3V0cHV0KVxuICAgKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRvciBzY29wZSB3aXRoIHdvcmtmbG93IGRhdGEgYW5kIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uXG4gICAqL1xuICBidWlsZFNjb3BlRnJvbVN0YXRlKFxuICAgIHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gICAgYWN0aXZpdHlPdXRwdXRzPzogTWFwPHN0cmluZywgYW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIHtcbiAgICAvLyBDb252ZXJ0IGFjdGl2aXR5IG91dHB1dHMgdG8gcmVjb3JkIGZvcm1hdFxuICAgIGNvbnN0IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBpZiAoYWN0aXZpdHlPdXRwdXRzKSB7XG4gICAgICBpZiAoYWN0aXZpdHlPdXRwdXRzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGFjdGl2aXR5T3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGFjdGl2aXR5SWQpID0+IHtcbiAgICAgICAgICBvdXRwdXRzW2FjdGl2aXR5SWRdID0gb3V0cHV0O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0cywgYWN0aXZpdHlPdXRwdXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZFNjb3BlKHtcbiAgICAgIGlucHV0czogc3RhdGUuaW5wdXQgfHwge30sXG4gICAgICB2YXJpYWJsZXM6IHN0YXRlLnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { WorkflowExpressionScopeService } from './workflow-expression-scope.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Activity Executor Service\n *\n * Service for executing workflow activities via CommandBus.\n * Automatically evaluates expressions in activity inputs before execution.\n *\n * @example\n * ```typescript\n * const executor = inject(ActivityExecutor);\n *\n * // Execute activity with task and workflow state (expressions will be evaluated)\n * const result = await executor.execute(task, workflowState, activityOutputs);\n * ```\n */\nexport class ActivityExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\n this.expressionScopeService = inject(WorkflowExpressionScopeService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a workflow activity with expression evaluation.\n *\n * Evaluates expressions in activity inputs using workflow state,\n * then executes the activity via CommandBus.\n *\n * @param task - Workflow task containing activity information\n * @param workflowState - Current workflow instance state (for expression evaluation)\n * @param activityOutputs - Map of previous activity outputs (for expression evaluation)\n * @returns Execution result with output and outcome\n */\n async execute(task, workflowState, activityOutputs) {\n try {\n console.log('[ActivityExecutor] 🔍 Evaluating inputs:', task.input);\n const activityName = task.activityType;\n // Evaluate inputs if workflow state is provided\n let evaluatedInputs = task.input || {};\n if (workflowState) {\n // Build expression scope from workflow state\n const scope = this.expressionScopeService.buildScopeFromState(workflowState, activityOutputs);\n // Evaluate all inputs recursively (handles nested objects and arrays)\n evaluatedInputs = await this.expressionEvaluator.evaluate(task.input || {}, scope);\n console.log('[ActivityExecutor] 🔍 Evaluated inputs:', evaluatedInputs);\n }\n // Check if command exists\n const commandExists = this.commandService.exists(activityName);\n if (!commandExists) {\n console.warn(`[ActivityExecutor] ⚠️ Activity '${activityName}' is not registered as Command. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Flatten properties if nested (workflow-studio format)\n let commandInput = evaluatedInputs;\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(activityName, 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(`[ActivityExecutor] ❌ Error evaluating expressions or executing activity:`, 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.15\", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: ActivityExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZXhlY3V0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvcnVudGltZS9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQW1CckYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0EwR2xGO0lBeEdDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBcUIsRUFDckIsYUFBd0MsRUFDeEMsZUFBd0Q7UUFHeEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUV2QyxnREFBZ0Q7WUFDaEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxhQUFh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QU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93VGFzaywgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93RXhwcmVzc2lvblNjb3BlU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIGV4ZWN1dGluZyBhIHdvcmtmbG93IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBvdXRwdXQuXG4gICAqL1xuICBvdXRwdXQ6IGFueTtcblxuICAvKipcbiAgICogQWN0aXZpdHkgZXhlY3V0aW9uIG91dGNvbWUgKGUuZy4sICdEb25lJywgJ0NvbmZpcm1lZCcsICdDYW5jZWxsZWQnLCAnRmFpbGVkJykuXG4gICAqL1xuICBvdXRjb21lOiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEFjdGl2aXR5IEV4ZWN1dG9yIFNlcnZpY2VcbiAqIFxuICogU2VydmljZSBmb3IgZXhlY3V0aW5nIHdvcmtmbG93IGFjdGl2aXRpZXMgdmlhIENvbW1hbmRCdXMuXG4gKiBBdXRvbWF0aWNhbGx5IGV2YWx1YXRlcyBleHByZXNzaW9ucyBpbiBhY3Rpdml0eSBpbnB1dHMgYmVmb3JlIGV4ZWN1dGlvbi5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGV4ZWN1dG9yID0gaW5qZWN0KEFjdGl2aXR5RXhlY3V0b3IpO1xuICogXG4gKiAvLyBFeGVjdXRlIGFjdGl2aXR5IHdpdGggdGFzayBhbmQgd29ya2Zsb3cgc3RhdGUgKGV4cHJlc3Npb25zIHdpbGwgYmUgZXZhbHVhdGVkKVxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZSh0YXNrLCB3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5RXhlY3V0b3Ige1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFNlcnZpY2UgPSBpbmplY3QoQVhQQ29tbWFuZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25FdmFsdWF0b3IgPSBpbmplY3QoQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25TY29wZVNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgd29ya2Zsb3cgYWN0aXZpdHkgd2l0aCBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gICAqIFxuICAgKiBFdmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW4gYWN0aXZpdHkgaW5wdXRzIHVzaW5nIHdvcmtmbG93IHN0YXRlLFxuICAgKiB0aGVuIGV4ZWN1dGVzIHRoZSBhY3Rpdml0eSB2aWEgQ29tbWFuZEJ1cy5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gV29ya2Zsb3cgdGFzayBjb250YWluaW5nIGFjdGl2aXR5IGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB3b3JrZmxvd1N0YXRlIC0gQ3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSAoZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbilcbiAgICogQHBhcmFtIGFjdGl2aXR5T3V0cHV0cyAtIE1hcCBvZiBwcmV2aW91cyBhY3Rpdml0eSBvdXRwdXRzIChmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uKVxuICAgKiBAcmV0dXJucyBFeGVjdXRpb24gcmVzdWx0IHdpdGggb3V0cHV0IGFuZCBvdXRjb21lXG4gICAqL1xuICBhc3luYyBleGVjdXRlKFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICB3b3JrZmxvd1N0YXRlPzogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICAgIGFjdGl2aXR5T3V0cHV0cz86IE1hcDxzdHJpbmcsIGFueT4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8QWN0aXZpdHlFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ1tBY3Rpdml0eUV4ZWN1dG9yXSDwn5SNIEV2YWx1YXRpbmcgaW5wdXRzOicsIHRhc2suaW5wdXQpO1xuICAgICAgY29uc3QgYWN0aXZpdHlOYW1lID0gdGFzay5hY3Rpdml0eVR5cGU7XG5cbiAgICAgIC8vIEV2YWx1YXRlIGlucHV0cyBpZiB3b3JrZmxvdyBzdGF0ZSBpcyBwcm92aWRlZFxuICAgICAgbGV0IGV2YWx1YXRlZElucHV0cyA9IHRhc2suaW5wdXQgfHwge307XG4gICAgICBpZiAod29ya2Zsb3dTdGF0ZSkge1xuICAgICAgICAvLyBCdWlsZCBleHByZXNzaW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmV4cHJlc3Npb25TY29wZVNlcnZpY2UuYnVpbGRTY29wZUZyb21TdGF0ZSh3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICAgICAgICBcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGlucHV0cyByZWN1cnNpdmVseSAoaGFuZGxlcyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzKVxuICAgICAgICBldmFsdWF0ZWRJbnB1dHMgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUodGFzay5pbnB1dCB8fCB7fSwgc2NvcGUpO1xuICAgICAgICBjb25zb2xlLmxvZygnW0FjdGl2aXR5RXhlY3V0b3JdIPCflI0gRXZhbHVhdGVkIGlucHV0czonLCBldmFsdWF0ZWRJbnB1dHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBjb21tYW5kIGV4aXN0c1xuICAgICAgY29uc3QgY29tbWFuZEV4aXN0cyA9IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhpc3RzKGFjdGl2aXR5TmFtZSk7XG5cbiAgICAgIGlmICghY29tbWFuZEV4aXN0cykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtBY3Rpdml0eUV4ZWN1dG9yXSDimqDvuI8gQWN0aXZpdHkgJyR7YWN0aXZpdHlOYW1lfScgaXMgbm90IHJlZ2lzdGVyZWQgYXMgQ29tbWFuZC4gYCArXG4gICAgICAgICAgYFNraXBwaW5nIGV4ZWN1dGlvbi5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBGbGF0dGVuIHByb3BlcnRpZXMgaWYgbmVzdGVkICh3b3JrZmxvdy1zdHVkaW8gZm9ybWF0KVxuICAgICAgbGV0IGNvbW1hbmRJbnB1dCA9IGV2YWx1YXRlZElucHV0cztcbiAgICAgIGlmIChjb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSAmJiB0eXBlb2YgY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEZsYXR0ZW46IHtwcm9wZXJ0aWVzOiB7dGV4dDogXCIuLi5cIn19IC0+IHt0ZXh0OiBcIi4uLlwifVxuICAgICAgICBjb21tYW5kSW5wdXQgPSB7IC4uLmNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEV4ZWN1dGUgYWN0aXZpdHkgdmlhIENvbW1hbmRCdXNcbiAgICAgIC8vIEFjdGl2aXRpZXMgcmVnaXN0ZXJlZCBhcyBBWFBDb21tYW5kIHJldHVybiB7b3V0cHV0LCBvdXRjb21lc31cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhlY3V0ZTxSZWNvcmQ8c3RyaW5nLCBhbnk+LCB7XG4gICAgICAgIG91dHB1dDogYW55O1xuICAgICAgICBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIH0+KGFjdGl2aXR5TmFtZSwgY29tbWFuZElucHV0KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICAgICAgb3V0Y29tZTogJ0ZhaWxlZCcsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZT8udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tYW5kUmVzdWx0ID0gcmVzdWx0LmRhdGE7XG4gICAgICBjb25zdCBvdXRjb21lcyA9IGNvbW1hbmRSZXN1bHQ/Lm91dGNvbWVzID8/IHt9O1xuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0Y29tZSBmcm9tIGNvbW1hbmQgcmVzdWx0c1xuICAgICAgLy8gRGVmYXVsdCB0byAnRG9uZScgaWYgbm8gb3V0Y29tZXMgc3BlY2lmaWVkXG4gICAgICBsZXQgb3V0Y29tZSA9ICdEb25lJztcbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdXRjb21lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRjb21lID0gb3V0Y29tZXNbJ0RvbmUnXSA/ICdEb25lJyA6IE9iamVjdC5rZXlzKG91dGNvbWVzKVswXSB8fCAnRG9uZSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogY29tbWFuZFJlc3VsdD8ub3V0cHV0ID8/IG51bGwsXG4gICAgICAgIG91dGNvbWUsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtBY3Rpdml0eUV4ZWN1dG9yXSDinYwgRXJyb3IgZXZhbHVhdGluZyBleHByZXNzaW9ucyBvciBleGVjdXRpbmcgYWN0aXZpdHk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyB9LFxuICAgICAgICBvdXRjb21lOiAnRmFpbGVkJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport { ActivityExecutor } from './activity-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 ActivityExecutor\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 ActivityExecutor)\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.activityExecutor = inject(ActivityExecutor);\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 ActivityExecutor for actual execution.\n * Only executes tasks with executionMode 'frontend' or 'both'.\n *\n * Provides workflow state to executor for expression evaluation.\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 console.error(`[AXPWorkflowManager] ❌ Invalid execution mode: ${task.executionMode}`);\n throw new Error(`Task '${task.activityId}' is not a frontend task. ` +\n `Execution mode: ${task.executionMode}. Backend tasks are handled automatically.`);\n }\n // Find workflow state from cache by matching currentStepId with task.activityId\n // This is needed for expression evaluation\n let workflowState;\n for (const [instanceId, state] of this.stateCache.entries()) {\n if (state.currentStepId === task.activityId) {\n workflowState = state;\n break;\n }\n }\n // If not found in cache, try to get from backend\n if (!workflowState) {\n console.warn(`[AXPWorkflowManager] ⚠️ Workflow state not found in cache for task ${task.activityId}. Expression evaluation may not work correctly.`);\n }\n // TODO: Get activity outputs from workflow state\n // For now, pass undefined - executor will build scope from state\n return this.activityExecutor.execute(task, workflowState, undefined);\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.15\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLM0UsT0FBTyxFQUFFLGdCQUFnQixFQUEyQixNQUFNLDZCQUE2QixDQUFDOztBQTZHeEYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsWUFBWTtRQUVaLG1DQUFtQztRQUVuQzs7OztXQUlHO1FBQ0ssZUFBVSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBRWpFOztXQUVHO1FBQ2MsY0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBcVI1QztJQW5SQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FDVCxVQUFrQixFQUNsQixRQUE2QixFQUFFO1FBRS9CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLFVBQVU7Z0JBQ1YsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixNQUFNLG9CQUFvQixHQUFHLEVB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QUMvQyxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBRUgsbURBQW1EO1lBQ25ELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEYsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUVELGVBQWU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFakQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzREFBc0QsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDOytHQXRTVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFbmdpbmUsIEFYUF9XT1JLRkxPV19FTkdJTkUgfSBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gIEFYUFdvcmtmbG93VGFzayxcbn0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7IEFjdGl2aXR5RXhlY3V0b3IsIEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0IH0gZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dTdGFydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIEZpcnN0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQgaW1tZWRpYXRlbHkpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNvbXBsZXRpbmcgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q29tcGxldGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzdW1pbmcgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Jlc3VtZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgd29ya2Zsb3cgc3RhdGUuXG4gICAqL1xuICBzdGF0ZT86IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcblxuICAvKipcbiAgICogTmV4dCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBNYW5hZ2VyIC0gRmFjYWRlIGZvciB3b3JrZmxvdyBsaWZlY3ljbGUgb3JjaGVzdHJhdGlvbi5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBPTkxZIGludGVyZmFjZSB0aGUgZnJvbnRlbmQgdXNlcyB0byBpbnRlcmFjdCB3aXRoIHdvcmtmbG93cy5cbiAqIEl0IGZvbGxvd3MgQ2xlYW4gQXJjaGl0ZWN0dXJlIHByaW5jaXBsZXMgYW5kIGRvZXMgTk9UIGNvbnRhaW4gZXhlY3V0aW9uIG9yIGJ1c2luZXNzIGxvZ2ljLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBPcmNoZXN0cmF0ZSB3b3JrZmxvdyBsaWZlY3ljbGUgKHN0YXJ0LCBleGVjdXRlLCBjb21wbGV0ZSwgcmVzdW1lKVxuICogLSBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gQWN0aXZpdHlFeGVjdXRvclxuICogLSBDYWNoZSB3b3JrZmxvdyBzdGF0ZSBpbiBtZW1vcnlcbiAqIC0gRXhwb3NlIGEgc3RhYmxlIEFQSSBmb3IgVUlcbiAqIFxuICogUnVsZXM6XG4gKiAtIE5vIEhUVFAgY2FsbHMgKGRlbGVnYXRlcyB0byBBWFBXb3JrZmxvd0VuZ2luZSlcbiAqIC0gTm8gQ29tbWFuZEJ1cyAvIENvbW1hbmQgZXhlY3V0aW9uIChkZWxlZ2F0ZXMgdG8gQWN0aXZpdHlFeGVjdXRvcilcbiAqIC0gTm8gd29ya2Zsb3cgYnJhbmNoaW5nIGxvZ2ljIChiYWNrZW5kIGRlY2lkZXMpXG4gKiAtIE5vIGJ1c2luZXNzIHZhbGlkYXRpb24gKGJhY2tlbmQgdmFsaWRhdGVzKVxuICogLSBObyBiYWNrZW5kIGFzc3VtcHRpb25zICh1c2VzIGFic3RyYWN0IHJ1bnRpbWUgc2VydmljZSlcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNYW5hZ2VyIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93RW5naW5lID0gaW5qZWN0KEFYUF9XT1JLRkxPV19FTkdJTkUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RXhlY3V0b3IgPSBpbmplY3QoQWN0aXZpdHlFeGVjdXRvcik7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBTdGF0ZSBDYWNoZSAgIC0tLS1cblxuICAvKipcbiAgICogQ2FjaGUgd29ya2Zsb3cgc3RhdGVzIGluIG1lbW9yeSBmb3IgcXVpY2sgYWNjZXNzLlxuICAgKiBLZXk6IGluc3RhbmNlSWRcbiAgICogVmFsdWU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4oKTtcblxuICAvKipcbiAgICogQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVFRMID0gNSAqIDYwICogMTAwMDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICogXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UgaW4gYmFja2VuZCBhbmQgcmV0dXJucyBpbnN0YW5jZSBJRC5cbiAgICogQmFja2VuZCBkZWNpZGVzIHdoYXQgdG8gZG86IHJldHVybnMgcGVuZGluZ1Rhc2sgb3IgaW5kaWNhdGVzIGNvbXBsZXRpb24uXG4gICAqIFxuICAgKiBAcGFyYW0gd29ya2Zsb3dJZCAtIFdvcmtmbG93IElEIHRvIHN0YXJ0XG4gICAqIEBwYXJhbSBpbnB1dCAtIEluaXRpYWwgaW5wdXQgZGF0YSAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIFN0YXJ0IHJlc3VsdCB3aXRoIGluc3RhbmNlSWQsIHN0YXRlLCBhbmQgbmV4dFRhc2tcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLnN0YXJ0KCdteS13b3JrZmxvdycsIHsgdXNlcklkOiAnMTIzJyB9KTtcbiAgICogXG4gICAqIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQubmV4dFRhc2spIHtcbiAgICogICAvLyBFeGVjdXRlIHRhc2sgaWYgZnJvbnRlbmRcbiAgICogICBpZiAocmVzdWx0Lm5leHRUYXNrLmV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcpIHtcbiAgICogICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd01hbmFnZXIuZXhlY3V0ZShyZXN1bHQubmV4dFRhc2spO1xuICAgKiAgICAgYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLmNvbXBsZXRlKHJlc3VsdC5pbnN0YW5jZUlkISwgcmVzdWx0Lm5leHRUYXNrLCBleGVjUmVzdWx0Lm91dGNvbWUsIGV4ZWNSZXN1bHQub3V0cHV0KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdGFydChcbiAgICB3b3JrZmxvd0lkOiBzdHJpbmcsXG4gICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuICApOiBQcm9taXNlPFdvcmtmbG93U3RhcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLnN0YXJ0KHtcbiAgICAgICAgd29ya2Zsb3dJZCxcbiAgICAgICAgaW5wdXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDYWNoZSBzdGF0ZSAobm9ybWFsaXplIERhdGUpXG4gICAgICBjb25zdCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgIGlmIChzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KHJlc3BvbnNlLmluc3RhbmNlSWQsIHN0YXJ0Tm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgaW5zdGFuY2VJZDogcmVzcG9uc2UuaW5zdGFuY2VJZCxcbiAgICAgICAgc3RhdGU6IHN0YXJ0Tm9ybWFsaXplZFN0YXRlLFxuICAgICAgICBuZXh0VGFzazogcmVzcG9uc2UucGVuZGluZ1Rhc2sgfHwgbnVsbCxcbiAgICAgICAgb3V0cHV0OiBzdGFydE5vcm1hbGl6ZWRTdGF0ZS5vdXRwdXRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEVycm9yIHN0YXJ0aW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93J1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZyb250ZW5kIHRhc2suXG4gICAqIFxuICAgKiBEZWxlZ2F0ZXMgdG8gQWN0aXZpdHlFeGVjdXRvciBmb3IgYWN0dWFsIGV4ZWN1dGlvbi5cbiAgICogT25seSBleGVjdXRlcyB0YXNrcyB3aXRoIGV4ZWN1dGlvbk1vZGUgJ2Zyb250ZW5kJyBvciAnYm90aCcuXG4gICAqIFxuICAgKiBQcm92aWRlcyB3b3JrZmxvdyBzdGF0ZSB0byBleGVjdXRvciBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uLlxuICAgKiBcbiAgICogQHBhcmFtIHRhc2sgLSBUYXNrIHRvIGV4ZWN1dGVcbiAgICogQHJldHVybnMgRXhlY3V0aW9uIHJlc3VsdCB3aXRoIG91dHB1dCBhbmQgb3V0Y29tZVxuICAgKiBcbiAgICogQHRocm93cyBFcnJvciBpZiB0YXNrIGlzIG5vdCBhIGZyb250ZW5kIHRhc2tcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUodGFzazogQVhQV29ya2Zsb3dUYXNrKTogUHJvbWlzZTxBY3Rpdml0eUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIC8vIFZhbGlkYXRlIGV4ZWN1dGlvbiBtb2RlXG4gICAgaWYgKHRhc2suZXhlY3V0aW9uTW9kZSAhPT0gJ2Zyb250ZW5kJyAmJiB0YXNrLmV4ZWN1dGlvbk1vZGUgIT09ICdib3RoJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEludmFsaWQgZXhlY3V0aW9uIG1vZGU6ICR7dGFzay5leGVjdXRpb25Nb2RlfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFzayAnJHt0YXNrLmFjdGl2aXR5SWR9JyBpcyBub3QgYSBmcm9udGVuZCB0YXNrLiBgICtcbiAgICAgICAgYEV4ZWN1dGlvbiBtb2RlOiAke3Rhc2suZXhlY3V0aW9uTW9kZX0uIEJhY2tlbmQgdGFza3MgYXJlIGhhbmRsZWQgYXV0b21hdGljYWxseS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpbmQgd29ya2Zsb3cgc3RhdGUgZnJvbSBjYWNoZSBieSBtYXRjaGluZyBjdXJyZW50U3RlcElkIHdpdGggdGFzay5hY3Rpdml0eUlkXG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvblxuICAgIGxldCB3b3JrZmxvd1N0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBbaW5zdGFuY2VJZCwgc3RhdGVdIG9mIHRoaXMuc3RhdGVDYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50U3RlcElkID09PSB0YXNrLmFjdGl2aXR5SWQpIHtcbiAgICAgICAgd29ya2Zsb3dTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm90IGZvdW5kIGluIGNhY2hlLCB0cnkgdG8gZ2V0IGZyb20gYmFja2VuZFxuICAgIGlmICghd29ya2Zsb3dTdGF0ZSkge1xuICAgICAgY29uc29sZS53YXJuKGBbQVhQV29ya2Zsb3dNYW5hZ2VyXSDimqDvuI8gV29ya2Zsb3cgc3RhdGUgbm90IGZvdW5kIGluIGNhY2hlIGZvciB0YXNrICR7dGFzay5hY3Rpdml0eUlkfS4gRXhwcmVzc2lvbiBldmFsdWF0aW9uIG1heSBub3Qgd29yayBjb3JyZWN0bHkuYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRPRE86IEdldCBhY3Rpdml0eSBvdXRwdXRzIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAgICAvLyBGb3Igbm93LCBwYXNzIHVuZGVmaW5lZCAtIGV4ZWN1dG9yIHdpbGwgYnVpbGQgc2NvcGUgZnJvbSBzdGF0ZVxuICAgIHJldHVybiB0aGlzLmFjdGl2aXR5RXhlY3V0b3IuZXhlY3V0ZSh0YXNrLCB3b3JrZmxvd1N0YXRlLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgdGFzayBhbmQgZ2V0IG5leHQgdGFzayBmcm9tIGJhY2tlbmQuXG4gICAqIFxuICAgKiBTZW5kcyB0YXNrIHJlc3VsdCB0byBiYWNrZW5kIEFQSS5cbiAgICogQmFja2VuZCBkZWNpZGVzOiBuZXh0IHRhc2ssIGZhaWwsIG9yIGNvbXBsZXRlIHdvcmtmbG93LlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcGFyYW0gdGFzayAtIENvbXBsZXRlZCB0YXNrXG4gICAqIEBwYXJhbSBvdXRjb21lIC0gVGFzayBvdXRjb21lIChlLmcuLCAnRG9uZScsICdDb25maXJtZWQnLCAnQ2FuY2VsbGVkJylcbiAgICogQHBhcmFtIG91dHB1dCAtIFRhc2sgb3V0cHV0L3Jlc3VsdCAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIENvbXBsZXRlIHJlc3VsdCB3aXRoIG5leHQgdGFzayAoaWYgYW55KVxuICAgKi9cbiAgYXN5bmMgY29tcGxldGUoXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICBvdXRjb21lOiBzdHJpbmcsXG4gICAgb3V0cHV0PzogYW55XG4gICk6IFByb21pc2U8V29ya2Zsb3dDb21wbGV0ZVJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBTZW5kIHJlc3VsdCB0byBiYWNrZW5kIC0gYmFja2VuZCBkZWNpZGVzIG5leHQgc3RlcFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLnJlc3VtZSh7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIHN0ZXBJZDogdGFzay5hY3Rpdml0eUlkLFxuICAgICAgICB0YXNrVG9rZW46IHRhc2sudGFza1Rva2VuLFxuICAgICAgICBvdXRjb21lLFxuICAgICAgICB1c2VySW5wdXQ6IG91dHB1dFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgbGV0IGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlID0gcmVzcG9uc2Uuc3RhdGU7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgICAgIGNvbXBsZXRlTm9ybWFsaXplZFN0YXRlID0geyAuLi5yZXNwb25zZS5zdGF0ZSB9O1xuICAgICAgICBpZiAoY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgY29tcGxldGVOb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIHN0YXRlOiBjb21wbGV0ZU5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IHJlc3BvbnNlLm5leHRUYXNrIHx8IG51bGwsXG4gICAgICAgIG91dHB1dDogcmVzcG9uc2Uub3V0cHV0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBjb21wbGV0aW5nIHRhc2s6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY29tcGxldGUgdGFzaydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHN1c3BlbmRlZCB3b3JrZmxvdyAoZS5nLiwgYWZ0ZXIgdXNlciBpbnRlcmFjdGlvbikuXG4gICAqIFxuICAgKiBCYWNrZW5kIGRldGVybWluZXMgbmV4dFN0ZXAgYmFzZWQgb24gb3V0Y29tZSBhbmQgb3V0Y29tZUNvbm5lY3Rpb25zLlxuICAgKiBDbGllbnQgb25seSBwcm92aWRlcyBpbnN0YW5jZUlkLCBzdGVwSWQsIG91dGNvbWUsIGFuZCBvcHRpb25hbCB1c2VySW5wdXQuXG4gICAqIFxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFdvcmtmbG93IGluc3RhbmNlIElEXG4gICAqIEBwYXJhbSBzdGVwSWQgLSBTdGVwIElEIHRoYXQgd2FzIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXRcbiAgICogQHBhcmFtIG91dGNvbWUgLSBVc2VyIGFjdGlvbiBvdXRjb21lIChlLmcuLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdTdWJtaXR0ZWQnKVxuICAgKiBAcGFyYW0gdXNlcklucHV0IC0gT3B0aW9uYWwgdXNlciBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSB0YXNrVG9rZW4gLSBTZWN1cmUgdGFzayB0b2tlbiAocmVxdWlyZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uKVxuICAgKiBAcmV0dXJucyBSZXN1bWUgcmVzdWx0IHdpdGggbmV4dCB0YXNrIChpZiBhbnkpXG4gICAqL1xuICBhc3luYyByZXN1bWUoXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG91dGNvbWU6IHN0cmluZyxcbiAgICB1c2VySW5wdXQ/OiBhbnksXG4gICAgdGFza1Rva2VuPzogc3RyaW5nXG4gICk6IFByb21pc2U8V29ya2Zsb3dSZXN1bWVSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHRhc2tUb2tlbiBpcyBwcm92aWRlZCBmb3Igc2VjdXJlIHJlc3VtcHRpb25cbiAgICAgIGlmICghdGFza1Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXNrVG9rZW4gZm9yIHJlc3VtZSBvcGVyYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFja2VuZCBoYW5kbGVzIGV2ZXJ5dGhpbmc6IGNoZWNrcyBvdXRjb21lQ29ubmVjdGlvbnMgYW5kIGRldGVybWluZXMgbmV4dFN0ZXBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5yZXN1bWUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGVwSWQsXG4gICAgICAgIHRhc2tUb2tlbixcbiAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgdXNlcklucHV0XG4gICAgICB9KTtcblxuICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggc3RhdGUgZnJvbSBiYWNrZW5kXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KGluc3RhbmNlSWQsIG5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBzdGF0ZSBEYXRlIGZvciByZXR1cm5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHJlc3BvbnNlLnN0YXRlID8geyAuLi5yZXNwb25zZS5zdGF0ZSB9IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZSAmJiBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogbm9ybWFsaXplZFN0YXRlIHx8IHJlc3BvbnNlLnN0YXRlLFxuICAgICAgICBuZXh0VGFzazogcmVzcG9uc2UubmV4dFRhc2sgfHwgbnVsbCwgLy8gQmFja2VuZCBkZXRlcm1pbmVzIHRoaXMgZnJvbSBvdXRjb21lQ29ubmVjdGlvbnNcbiAgICAgICAgb3V0cHV0OiByZXNwb25zZS5vdXRwdXRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEVycm9yIHJlc3VtaW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlc3VtZSB3b3JrZmxvdydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIFJldHJpZXZlcyBzdGF0ZSBmcm9tIGNhY2hlIChpZiB2YWxpZCkgb3IgZnJvbSBiYWNrZW5kLlxuICAgKiBcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcmV0dXJucyBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUoaW5zdGFuY2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0YXRlQ2FjaGUuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZENhY2hlZCA9IHsgLi4uY2FjaGVkIH07XG4gICAgICBpZiAobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIGFnZVxuICAgICAgY29uc3QgY2FjaGVBZ2UgPSBEYXRlLm5vdygpIC0gbm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZC5nZXRUaW1lKCk7XG4gICAgICBpZiAoY2FjaGVBZ2UgPCB0aGlzLkNBQ0hFX1RUTCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZENhY2hlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIGJhY2tlbmRcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLmdldFN0YXRlKHtcbiAgICAgICAgaW5zdGFuY2VJZFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZFN0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFN0YXRlO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBnZXR0aW5nIHdvcmtmbG93IHN0YXRlOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBdUJILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbkNvdW50PzogbnVtYmVyICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtc0NvdW50PzogbnVtYmVyICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbmV4cG9ydCB0eXBlIEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd1Byb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93UHJvdmlkZXI+O1xuXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbnMgZm9yIGEgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBmaWx0ZXIgd29ya2Zsb3dzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIGFycmF5XG4gICAgICovXG4gICAgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPjtcbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCB3b3JrZmxvdyBkZWZpbml0aW9uIGJ5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKS5cbiAgICAgKiBVc2VkIGJ5IHdvcmtmbG93IGVuZ2luZXMgZm9yIGV4ZWN1dGlvbiBhbmQgVUkgZm9yIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBmdWxsIHdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_PROVIDER, } from '../workflow/workflow-definition.provider';\nimport { AXPActivityDefinitionService } from '../activity/activity-definition.service';\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 ActivityExecutor.\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 constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\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 console.log(`[WorkflowLocalEngine] 🚀 Starting workflow: ${request.workflowId}`, request);\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n console.log(`[WorkflowLocalEngine] 📥 Loading workflow definition: ${request.workflowId}`);\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n console.error(`[WorkflowLocalEngine] ❌ Workflow definition not found: ${request.workflowId}`);\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n console.log(`[WorkflowLocalEngine] ✅ Definition loaded:`, {\n name: definition.name,\n activitiesCount: definition.graph?.activities?.length || 0,\n connectionsCount: definition.graph?.connections?.length || 0,\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 console.log(`[WorkflowLocalEngine] ⚙️ Executing workflow steps...`);\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n console.log(`[WorkflowLocalEngine] ✅ Workflow started:`, {\n instanceId,\n status: localState.state.status,\n hasPendingTask: !!pendingTask,\n pendingTaskType: pendingTask?.activityType,\n });\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 providers.\n */\n async getDefinition(workflowId) {\n // Try all providers in order\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value) {\n const provider = p.value;\n // Check if provider has getByName method\n if (typeof provider.getByName === 'function') {\n try {\n const definition = await provider.getByName(workflowId);\n if (definition) {\n return definition;\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\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 // Get activity definition to retrieve executionMode and title\n console.log(`[WorkflowLocalEngine] 🔍 Getting activity definition for: ${activity.name}`);\n const activityDefinition = await this.activityDefinitionService.getActivityByName(activity.name);\n console.log(`[WorkflowLocalEngine] 📋 Activity definition:`, {\n name: activityDefinition?.name,\n type: activityDefinition?.type,\n executionMode: activityDefinition?.executionMode,\n title: activityDefinition?.title,\n found: !!activityDefinition,\n });\n const executionMode = activityDefinition?.executionMode || 'frontend';\n const activityTitle = activityDefinition?.title;\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 // Note: Expression evaluation will be done by ActivityExecutor\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.name,\n activityName: activityTitle || undefined,\n executionMode: executionMode,\n input: activity.inputs || {}, // Pass raw inputs - executor will evaluate\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.15\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWlCbkQsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCekQsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVFLCtDQUErQztRQUU5Qiw4QkFBeUIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxzQkFBaUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0YsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7S0EwWHBGO0lBeFhDLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFnQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUYsdUJBQXVCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLGdCQUFn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LG1CQUFpRCxFQUNqRCxlQUE4RDtRQUU5RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsMENBQTBDO1FBQ3pELENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyw0RUFBNEU7UUFDNUUsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7WUFDOUMsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0E1WVUsc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RW5naW5lIH0gZnJvbSAnLi93b3JrZmxvdy1lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICBBWFBXb3JrZmxvd1Rhc2ssXG59IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbn0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5pbXBvcnQge1xuICBBWFBfV09SS0ZMT1dfUFJPVklERVIsXG4gIEFYUFdvcmtmbG93UHJvdmlkZXIsXG59IGZyb20gJy4uL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24ucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uL2FjdGl2aXR5L2FjdGl2aXR5LWRlZmluaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogSW50ZXJuYWwgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXRlLlxuICovXG5pbnRlcmZhY2UgTG9jYWxXb3JrZmxvd1N0YXRlIHtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIGRlZmluaXRpb246IEFYUFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgc3RhdGU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcbiAgY3VycmVudEFjdGl2aXR5SWQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEFjdGl2aXRpZXM6IFNldDxzdHJpbmc+O1xuICBhY3Rpdml0eVJlc3VsdHM6IE1hcDxzdHJpbmcsIHsgb3V0cHV0OiBhbnk7IG91dGNvbWU6IHN0cmluZyB9Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogTG9jYWwgZW5naW5lIGltcGxlbWVudGF0aW9uIHRoYXQgbWFuYWdlcyB3b3JrZmxvdyBwcm9ncmVzc2lvbiBhbmQgc3RhdGUuXG4gKiBcbiAqIFRoaXMgZW5naW5lOlxuICogLSBSZXR1cm5zIGZyb250ZW5kL2JvdGggYWN0aXZpdGllcyBhcyBwZW5kaW5nVGFzayAoZG9lcyBOT1QgZXhlY3V0ZSB0aGVtKVxuICogLSBTa2lwcyBiYWNrZW5kIGFjdGl2aXRpZXMgKGRvZXMgbm90IGVycm9yLCBjb250aW51ZXMgZXhlY3V0aW9uKVxuICogLSBNYWludGFpbnMgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIERvZXMgbm90IHJlcXVpcmUgYmFja2VuZCBBUEkgY2FsbHNcbiAqIFxuICogRXhlY3V0aW9uIG9mIGZyb250ZW5kIHRhc2tzIGlzIGhhbmRsZWQgYnkgQVhQV29ya2Zsb3dNYW5hZ2VyIHZpYSBBY3Rpdml0eUV4ZWN1dG9yLlxuICogVGhpcyBlbmdpbmUgb25seSBtYW5hZ2VzIHdvcmtmbG93IHByb2dyZXNzaW9uIGFuZCBzdGF0ZSBzdG9yYWdlLlxuICogXG4gKiBUaGlzIGlzIHRoZSBERUZBVUxUIGVuZ2luZSBwcm92aWRlci4gQXBwbGljYXRpb25zIGNhbiBvdmVycmlkZSBpdCB3aXRoXG4gKiBhbiBBUEktYmFzZWQgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSBpbXBsZW1lbnRzIEFYUFdvcmtmbG93RW5naW5lIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSBpbmplY3QoQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dQcm92aWRlcnMgPSBpbmplY3QoQVhQX1dPUktGTE9XX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgSW5zdGFuY2UgU3RvcmFnZSAgIC0tLS1cblxuICAvKipcbiAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIHdvcmtmbG93IGluc3RhbmNlcy5cbiAgICogS2V5OiBpbnN0YW5jZUlkXG4gICAqIFZhbHVlOiBMb2NhbFdvcmtmbG93U3RhdGVcbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2VzID0gbmV3IE1hcDxzdHJpbmcsIExvY2FsV29ya2Zsb3dTdGF0ZT4oKTtcblxuICAvKipcbiAgICogVGFzayB0b2tlbiBzdG9yYWdlIGZvciBzZWN1cmUgcmVzdW1lIG9wZXJhdGlvbnMuXG4gICAqIEtleTogdGFza1Rva2VuXG4gICAqIFZhbHVlOiB7IGluc3RhbmNlSWQsIGFjdGl2aXR5SWQgfVxuICAgKi9cbiAgcHJpdmF0ZSB0YXNrVG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIHsgaW5zdGFuY2VJZDogc3RyaW5nOyBhY3Rpdml0eUlkOiBzdHJpbmcgfT4oKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzIChBWFBXb3JrZmxvd0VuZ2luZSkgICAtLS0tXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogQ3JlYXRlcyBhbiBpbi1tZW1vcnkgd29ya2Zsb3cgaW5zdGFuY2UgYW5kIHByb2dyZXNzZXMgaXQuXG4gICAqIEZyb250ZW5kL2JvdGggYWN0aXZpdGllcyBhcmUgcmV0dXJuZWQgYXMgcGVuZGluZ1Rhc2sgZm9yIGV4dGVybmFsIGV4ZWN1dGlvbi5cbiAgICogQmFja2VuZCBhY3Rpdml0aWVzIGFyZSBza2lwcGVkLlxuICAgKi9cbiAgYXN5bmMgc3RhcnQocmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZT4ge1xuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+agCBTdGFydGluZyB3b3JrZmxvdzogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCwgcmVxdWVzdCk7XG4gICAgXG4gICAgLy8gR2VuZXJhdGUgaW5zdGFuY2UgSURcbiAgICBjb25zdCBpbnN0YW5jZUlkID0gQVhQRGF0YUdlbmVyYXRvci51dWlkKCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIExvYWQgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+TpSBMb2FkaW5nIHdvcmtmbG93IGRlZmluaXRpb246ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldERlZmluaXRpb24ocmVxdWVzdC53b3JrZmxvd0lkKTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinYwgV29ya2Zsb3cgZGVmaW5pdGlvbiBub3QgZm91bmQ6ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBkZWZpbml0aW9uIG5vdCBmb3VuZDogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinIUgRGVmaW5pdGlvbiBsb2FkZWQ6YCwge1xuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lLFxuICAgICAgYWN0aXZpdGllc0NvdW50OiBkZWZpbml0aW9uLmdyYXBoPy5hY3Rpdml0aWVzPy5sZW5ndGggfHwgMCxcbiAgICAgIGNvbm5lY3Rpb25zQ291bnQ6IGRlZmluaXRpb24uZ3JhcGg/LmNvbm5lY3Rpb25zPy5sZW5ndGggfHwgMCxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgd29ya2Zsb3cgc3RhdGVcbiAgICBjb25zdCBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlID0ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHdvcmtmbG93SWQ6IHJlcXVlc3Qud29ya2Zsb3dJZCxcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgIGlucHV0OiByZXF1ZXN0LmlucHV0IHx8IHt9LFxuICAgICAgb3V0cHV0OiB1bmRlZmluZWQsXG4gICAgICBsYXN0VXBkYXRlZDogbm93LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgbG9jYWwgc3RhdGVcbiAgICBjb25zdCBsb2NhbFN0YXRlOiBMb2NhbFdvcmtmbG93U3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgd29ya2Zsb3dJZDogcmVxdWVzdC53b3JrZmxvd0lkLFxuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIHN0YXRlLFxuICAgICAgY29tcGxldGVkQWN0aXZpdGllczogbmV3IFNldCgpLFxuICAgICAgYWN0aXZpdHlSZXN1bHRzOiBuZXcgTWFwKCksXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGluc3RhbmNlXG4gICAgdGhpcy5pbnN0YW5jZXMuc2V0KGluc3RhbmNlSWQsIGxvY2FsU3RhdGUpO1xuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4pqZ77iPIEV4ZWN1dGluZyB3b3JrZmxvdyBzdGVwcy4uLmApO1xuICAgIGNvbnN0IHBlbmRpbmdUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDinIUgV29ya2Zsb3cgc3RhcnRlZDpgLCB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgc3RhdHVzOiBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyxcbiAgICAgIGhhc1BlbmRpbmdUYXNrOiAhIXBlbmRpbmdUYXNrLFxuICAgICAgcGVuZGluZ1Rhc2tUeXBlOiBwZW5kaW5nVGFzaz8uYWN0aXZpdHlUeXBlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBzdGF0ZTogbG9jYWxTdGF0ZS5zdGF0ZSxcbiAgICAgIHBlbmRpbmdUYXNrOiBwZW5kaW5nVGFzayB8fCBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogVmFsaWRhdGVzIHRhc2sgdG9rZW4sIGFwcGxpZXMgZXh0ZXJuYWxseSBleGVjdXRlZCByZXN1bHQsXG4gICAqIGFuZCBjb250aW51ZXMgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMuXG4gICAqL1xuICBhc3luYyByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgLy8gVmFsaWRhdGUgdGFzayB0b2tlblxuICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMudGFza1Rva2Vucy5nZXQocmVxdWVzdC50YXNrVG9rZW4pO1xuICAgIGlmICghdG9rZW5JbmZvIHx8IHRva2VuSW5mby5pbnN0YW5jZUlkICE9PSByZXF1ZXN0Lmluc3RhbmNlSWQgfHwgdG9rZW5JbmZvLmFjdGl2aXR5SWQgIT09IHJlcXVlc3Quc3RlcElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFzayB0b2tlbicpO1xuICAgIH1cblxuICAgIC8vIEdldCBpbnN0YW5jZVxuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBhY3Rpdml0eSByZXN1bHQgKGZyb20gZXh0ZXJuYWwgZXhlY3V0aW9uKVxuICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChyZXF1ZXN0LnN0ZXBJZCwge1xuICAgICAgb3V0cHV0OiByZXF1ZXN0LnVzZXJJbnB1dCB8fCB7fSxcbiAgICAgIG91dGNvbWU6IHJlcXVlc3Qub3V0Y29tZSxcbiAgICB9KTtcbiAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKHJlcXVlc3Quc3RlcElkKTtcblxuICAgIC8vIE1lcmdlIG91dHB1dC91c2VySW5wdXQgaW50byBzdGF0ZSB2YXJpYWJsZXNcbiAgICBpZiAocmVxdWVzdC51c2VySW5wdXQpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzID0ge1xuICAgICAgICAuLi5sb2NhbFN0YXRlLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgLi4uKHJlcXVlc3QudXNlcklucHV0IHx8IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhY3Rpdml0eSBhcyBjb21wbGV0ZWQgYW5kIGNvbnRpbnVlIHByb2dyZXNzaW9uXG4gICAgLy8gQ29udGludWUgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMgKHNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdGllcylcbiAgICBjb25zdCBuZXh0VGFzayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhdGVcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcblxuICAgIC8vIERldGVybWluZSBmaW5hbCBzdGF0dXNcbiAgICBpZiAoIW5leHRUYXNrICYmIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICBsb2NhbFN0YXRlLnN0YXRlLm91dHB1dCA9IGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3QudXNlcklucHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZXM6IHsgW3JlcXVlc3Qub3V0Y29tZV06IHRydWUgfSxcbiAgICAgIHN0YXRlOiBsb2NhbFN0YXRlLnN0YXRlLFxuICAgICAgbmV4dFRhc2s6IG5leHRUYXNrIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIGdldFN0YXRlKHJlcXVlc3Q6IEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0KTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+IHtcbiAgICBjb25zdCBsb2NhbFN0YXRlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHJlcXVlc3QuaW5zdGFuY2VJZCk7XG4gICAgaWYgKCFsb2NhbFN0YXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IGluc3RhbmNlIG5vdCBmb3VuZDogJHtyZXF1ZXN0Lmluc3RhbmNlSWR9YCk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLmxvY2FsU3RhdGUuc3RhdGUgfTtcbiAgICBpZiAoc3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICBzdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKHN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGRlZmluaXRpb24gZnJvbSBhdmFpbGFibGUgcHJvdmlkZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZWZpbml0aW9uKHdvcmtmbG93SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgbnVsbD4ge1xuICAgIC8vIFRyeSBhbGwgcHJvdmlkZXJzIGluIG9yZGVyXG4gICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy53b3JrZmxvd1Byb3ZpZGVycyk7XG4gICAgZm9yIChjb25zdCBwIG9mIHJlc29sdmVkUHJvdmlkZXJzKSB7XG4gICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBwLnZhbHVlO1xuICAgICAgICAvLyBDaGVjayBpZiBwcm92aWRlciBoYXMgZ2V0QnlOYW1lIG1ldGhvZFxuICAgICAgICBpZiAodHlwZW9mIHByb3ZpZGVyLmdldEJ5TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcHJvdmlkZXIuZ2V0QnlOYW1lKHdvcmtmbG93SWQpO1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvciAtIHRyeSBvdGhlciBwcm92aWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmVzcyB3b3JrZmxvdyBzdGVwcyBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKiBcbiAgICogRm9yIGZyb250ZW5kL2JvdGggYWN0aXZpdGllczogcmV0dXJucyB0YXNrIGltbWVkaWF0ZWx5IChzdXNwZW5kcyB3b3JrZmxvdykuXG4gICAqIEZvciBiYWNrZW5kIGFjdGl2aXRpZXM6IHNraXBzIGFuZCBjb250aW51ZXMuXG4gICAqIFxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IHBlbmRpbmcgdGFzayAoaWYgZnJvbnRlbmQgYWN0aXZpdHkgZm91bmQpIG9yIG51bGwgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVXb3JrZmxvd1N0ZXBzKGxvY2FsU3RhdGU6IExvY2FsV29ya2Zsb3dTdGF0ZSk6IFByb21pc2U8QVhQV29ya2Zsb3dUYXNrIHwgbnVsbD4ge1xuICAgIGNvbnN0IGdyYXBoID0gbG9jYWxTdGF0ZS5kZWZpbml0aW9uLmdyYXBoO1xuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBncmFwaC5hY3Rpdml0aWVzIHx8IFtdO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gZ3JhcGguY29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBhY3Rpdml0eSBtYXBcbiAgICBjb25zdCBhY3Rpdml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0FjdGl2aXR5SW5zdGFuY2U+KCk7XG4gICAgYWN0aXZpdGllcy5mb3JFYWNoKGFjdGl2aXR5ID0+IHtcbiAgICAgIGFjdGl2aXR5TWFwLnNldChhY3Rpdml0eS5pZCwgYWN0aXZpdHkpO1xuICAgIH0pO1xuXG4gICAgLy8gQnVpbGQgY29ubmVjdGlvbiBncmFwaFxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgQVhQQ29ubmVjdGlvbltdPigpO1xuICAgIGNvbnN0IGluY29taW5nQ29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgQVhQQ29ubmVjdGlvbltdPigpO1xuXG4gICAgY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZUlkID0gY29ubi5zb3VyY2UuYWN0aXZ0eU5hbWU7XG4gICAgICBjb25zdCB0YXJnZXRJZCA9IGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lO1xuXG4gICAgICBpZiAoIW91dGdvaW5nQ29ubmVjdGlvbnMuaGFzKHNvdXJjZUlkKSkge1xuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLnNldChzb3VyY2VJZCwgW10pO1xuICAgICAgfVxuICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucy5nZXQoc291cmNlSWQpIS5wdXNoKGNvbm4pO1xuXG4gICAgICBpZiAoIWluY29taW5nQ29ubmVjdGlvbnMuaGFzKHRhcmdldElkKSkge1xuICAgICAgICBpbmNvbWluZ0Nvbm5lY3Rpb25zLnNldCh0YXJnZXRJZCwgW10pO1xuICAgICAgfVxuICAgICAgaW5jb21pbmdDb25uZWN0aW9ucy5nZXQodGFyZ2V0SWQpIS5wdXNoKGNvbm4pO1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCBzdGFydGluZyBhY3Rpdml0eSAodXNlIHN0YXJ0QWN0aXZpdHlJZCBvciBubyBpbmNvbWluZyBjb25uZWN0aW9ucywgb3IgZmlyc3QgYWN0aXZpdHkpXG4gICAgbGV0IGN1cnJlbnRBY3Rpdml0eUlkID0gbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZDtcbiAgICBpZiAoIWN1cnJlbnRBY3Rpdml0eUlkKSB7XG4gICAgICAvLyBVc2Ugc3RhcnRBY3Rpdml0eUlkIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCkge1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IGdyYXBoLnN0YXJ0QWN0aXZpdHlJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZpbmQgcm9vdCBhY3Rpdml0eSAobm8gaW5jb21pbmcgY29ubmVjdGlvbnMpXG4gICAgICAgIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgYWN0aXZpdGllcykge1xuICAgICAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9ucy5oYXMoYWN0aXZpdHkuaWQpKSB7XG4gICAgICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IGFjdGl2aXR5LmlkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vIHJvb3QgZm91bmQsIHVzZSBmaXJzdCBhY3Rpdml0eVxuICAgICAgICBpZiAoIWN1cnJlbnRBY3Rpdml0eUlkICYmIGFjdGl2aXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdGllc1swXS5pZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgd29ya2Zsb3cgc3RlcHNcbiAgICB3aGlsZSAoY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgYWxyZWFkeSBjb21wbGV0ZWRcbiAgICAgIGlmIChsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuaGFzKGN1cnJlbnRBY3Rpdml0eUlkKSkge1xuICAgICAgICAvLyBNb3ZlIHRvIG5leHQgYWN0aXZpdHlcbiAgICAgICAgY29uc3QgbmV4dElkID0gdGhpcy5nZXROZXh0QWN0aXZpdHlJZChcbiAgICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCxcbiAgICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLFxuICAgICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gbmV4dElkID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBhY3Rpdml0eSBkZWZpbml0aW9uIHRvIHJldHJpZXZlIGV4ZWN1dGlvbk1vZGUgYW5kIHRpdGxlXG4gICAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCflI0gR2V0dGluZyBhY3Rpdml0eSBkZWZpbml0aW9uIGZvcjogJHthY3Rpdml0eS5uYW1lfWApO1xuICAgICAgY29uc3QgYWN0aXZpdHlEZWZpbml0aW9uID0gYXdhaXQgdGhpcy5hY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlLmdldEFjdGl2aXR5QnlOYW1lKGFjdGl2aXR5Lm5hbWUpO1xuICAgICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDwn5OLIEFjdGl2aXR5IGRlZmluaXRpb246YCwge1xuICAgICAgICBuYW1lOiBhY3Rpdml0eURlZmluaXRpb24/Lm5hbWUsXG4gICAgICAgIHR5cGU6IGFjdGl2aXR5RGVmaW5pdGlvbj8udHlwZSxcbiAgICAgICAgZXhlY3V0aW9uTW9kZTogYWN0aXZpdHlEZWZpbml0aW9uPy5leGVjdXRpb25Nb2RlLFxuICAgICAgICB0aXRsZTogYWN0aXZpdHlEZWZpbml0aW9uPy50aXRsZSxcbiAgICAgICAgZm91bmQ6ICEhYWN0aXZpdHlEZWZpbml0aW9uLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBhY3Rpdml0eURlZmluaXRpb24/LmV4ZWN1dGlvbk1vZGUgfHwgJ2Zyb250ZW5kJztcbiAgICAgIGNvbnN0IGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eURlZmluaXRpb24/LnRpdGxlO1xuXG4gICAgICAvLyBIYW5kbGUgYmFja2VuZCBhY3Rpdml0aWVzOiBza2lwXG4gICAgICBpZiAoZXhlY3V0aW9uTW9kZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4o+t77iPIFNraXBwaW5nIGJhY2tlbmQgYWN0aXZpdHk6ICR7YWN0aXZpdHkubmFtZX0gKCR7YWN0aXZpdHkuaWR9KWBcbiAgICAgICAgKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5jb21wbGV0ZWRBY3Rpdml0aWVzLmFkZChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChjdXJyZW50QWN0aXZpdHlJZCwge1xuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBvdXRjb21lOiAnRG9uZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZyb250ZW5kL2JvdGggYWN0aXZpdGllczogcmV0dXJuIGFzIHBlbmRpbmdUYXNrIChkbyBOT1QgZXhlY3V0ZSlcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnIHx8IGV4ZWN1dGlvbk1vZGUgPT09ICdib3RoJykge1xuICAgICAgICAvLyBDcmVhdGUgdGFzayBmb3IgZXh0ZXJuYWwgZXhlY3V0aW9uXG4gICAgICAgIC8vIE5vdGU6IEV4cHJlc3Npb24gZXZhbHVhdGlvbiB3aWxsIGJlIGRvbmUgYnkgQWN0aXZpdHlFeGVjdXRvclxuICAgICAgICBjb25zdCB0YXNrOiBBWFBXb3JrZmxvd1Rhc2sgPSB7XG4gICAgICAgICAgdGFza1Rva2VuOiBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKSxcbiAgICAgICAgICBhY3Rpdml0eUlkOiBhY3Rpdml0eS5pZCxcbiAgICAgICAgICBhY3Rpdml0eVR5cGU6IGFjdGl2aXR5Lm5hbWUsXG4gICAgICAgICAgYWN0aXZpdHlOYW1lOiBhY3Rpdml0eVRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleGVjdXRpb25Nb2RlOiBleGVjdXRpb25Nb2RlIGFzICdmcm9udGVuZCcgfCAnYmFja2VuZCcgfCAnYm90aCcsXG4gICAgICAgICAgaW5wdXQ6IGFjdGl2aXR5LmlucHV0cyB8fCB7fSwgLy8gUGFzcyByYXcgaW5wdXRzIC0gZXhlY3V0b3Igd2lsbCBldmFsdWF0ZVxuICAgICAgICAgIGNvbmZpZzogYWN0aXZpdHkuY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdG9yZSB0YXNrIHRva2VuIGZvciBzZWN1cmUgcmVzdW1lXG4gICAgICAgIHRoaXMudGFza1Rva2Vucy5zZXQodGFzay50YXNrVG9rZW4sIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBsb2NhbFN0YXRlLmluc3RhbmNlSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB0byBpbmRpY2F0ZSBzdXNwZW5zaW9uXG4gICAgICAgIGxvY2FsU3RhdGUuY3VycmVudEFjdGl2aXR5SWQgPSBjdXJyZW50QWN0aXZpdHlJZDtcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnc3VzcGVuZGVkJztcbiAgICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5jdXJyZW50U3RlcElkID0gY3VycmVudEFjdGl2aXR5SWQ7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRhc2sgaW1tZWRpYXRlbHkgLSBBWFBXb3JrZmxvd01hbmFnZXIgd2lsbCBleGVjdXRlIGl0XG4gICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIG5leHQgYWN0aXZpdHlcbiAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLFxuICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgKTtcbiAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gbmV4dElkID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBXb3JrZmxvdyBjb21wbGV0ZWRcbiAgICBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZCA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXh0IGFjdGl2aXR5IElEIGJhc2VkIG9uIGNvbm5lY3Rpb25zIGFuZCBvdXRjb21lcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgY3VycmVudEFjdGl2aXR5SWQ6IHN0cmluZyxcbiAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zOiBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+LFxuICAgIGFjdGl2aXR5UmVzdWx0czogTWFwPHN0cmluZywgeyBvdXRwdXQ6IGFueTsgb3V0Y29tZTogc3RyaW5nIH0+XG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gb3V0Z29pbmdDb25uZWN0aW9ucy5nZXQoY3VycmVudEFjdGl2aXR5SWQpIHx8IFtdO1xuXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIE5vIG91dGdvaW5nIGNvbm5lY3Rpb25zIC0gd29ya2Zsb3cgZW5kc1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IGFjdGl2aXR5IHJlc3VsdFxuICAgIGNvbnN0IHJlc3VsdCA9IGFjdGl2aXR5UmVzdWx0cy5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgIGNvbnN0IG91dGNvbWUgPSByZXN1bHQ/Lm91dGNvbWUgfHwgJ0RvbmUnO1xuXG4gICAgLy8gRmluZCBjb25uZWN0aW9uIG1hdGNoaW5nIG91dGNvbWVcbiAgICAvLyBPdXRjb21lIG1hdGNoaW5nIGlzIHR5cGljYWxseSBkb25lIHZpYSBwb3J0IG5hbWUgKGUuZy4sIFwiRG9uZVwiLCBcIkZhaWxlZFwiKVxuICAgIGZvciAoY29uc3QgY29ubiBvZiBjb25uZWN0aW9ucykge1xuICAgICAgY29uc3Qgc291cmNlUG9ydCA9IGNvbm4uc291cmNlLnBvcnQgfHwgJ0RvbmUnO1xuICAgICAgaWYgKHNvdXJjZVBvcnQgPT09IG91dGNvbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIG1hdGNoaW5nIG91dGNvbWUsIHVzZSBmaXJzdCBjb25uZWN0aW9uIChkZWZhdWx0IHBhdGgpXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uc1swXS50YXJnZXQuYWN0aXZ0eU5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './workflow-local-engine';\nexport * from './activity-executor.service';\nexport * from './workflow-expression-scope.service';\nexport * from './workflow-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrZmxvdyBSdW50aW1lIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1sb2NhbC1lbmdpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJzsiXX0=","//#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 definitions\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 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 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 // Note: AXPWorkflowDefinition doesn't have category field\n // Category is managed separately through category providers\n // This method searches through cached categories\n const definition = await this.getWorkflowByName(workflowName);\n if (definition) {\n // Search through all categories to find which one contains this workflow\n const categories = await this.getCategories();\n for (const category of categories) {\n const workflows = await this.getWorkflowsByCategoryId(category.id);\n if (workflows.some(w => w.name === workflowName)) {\n return category.id;\n }\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.getByName === 'function') {\n try {\n const definition = await p.value.getByName(name);\n if (definition) {\n this.workflowsByName.set(name, definition);\n return definition;\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.15\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUV6RSxzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztRQUVuRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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Q0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7K0dBaGRRLDRCQUE0QjttSEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzRGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dDYXRlZ29yeSB9IGZyb20gJy4vd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBpbmRpdmlkdWFsIHdvcmtmbG93IGRlZmluaXRpb25zIGJ5IG5hbWUgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgd29ya2Zsb3dzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+PigpO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBXb3JrZmxvdyBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgd29ya2Zsb3cgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBlbXB0eUFycmF5KTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5nZXQoY2F0ZWdvcnlJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd3NGcm9tUHJvdmlkZXJzKGNhdGVnb3J5SWQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFdvcmtmbG93IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKVxuICAgICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93QnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IE8oMSkgbG9va3VwIGluIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndvcmtmbG93c0J5TmFtZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnMuc29tZShkZWYgPT4gZGVmLm5hbWUgPT09IHdvcmtmbG93TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBUcnkgbG9hZGluZyB0aGUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBmaW5kIGl0cyBjYXRlZ29yeVxuICAgICAgICAvLyBOb3RlOiBBWFBXb3JrZmxvd0RlZmluaXRpb24gZG9lc24ndCBoYXZlIGNhdGVnb3J5IGZpZWxkXG4gICAgICAgIC8vIENhdGVnb3J5IGlzIG1hbmFnZWQgc2VwYXJhdGVseSB0aHJvdWdoIGNhdGVnb3J5IHByb3ZpZGVyc1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBzZWFyY2hlcyB0aHJvdWdoIGNhY2hlZCBjYXRlZ29yaWVzXG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAvLyBTZWFyY2ggdGhyb3VnaCBhbGwgY2F0ZWdvcmllcyB0byBmaW5kIHdoaWNoIG9uZSBjb250YWlucyB0aGlzIHdvcmtmbG93XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93cy5zb21lKHcgPT4gdy5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZvciBhIHdvcmtmbG93XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBhd2FpdCB0aGlzLmdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpO1xuICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIGFueSBjYXRlZ29yeWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldENhdGVnb3JpZXNQYXRoQnlJZChjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZTogRGF0YSBMb2FkaW5nICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBjYXRlZ29yaWVzIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBUcmFja3MgcHJvdmlkZXIgb3duZXJzaGlwIHRvIGF2b2lkIHVubmVjZXNzYXJ5IEFQSSBjYWxsc1xuICAgICAqIC0gRm9yIHJvb3QgKHBhcmVudElkID0gdW5kZWZpbmVkKTogUXVlcnkgQUxMIHByb3ZpZGVyc1xuICAgICAqIC0gRm9yIGNoaWxkcmVuOiBPbmx5IHF1ZXJ5IHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIHBhcmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuY2F0ZWdvcnlQcm92aWRlcnMpO1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllczogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBwcm92aWRlcihzKSB0byBxdWVyeVxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbmRpY2VzVG9RdWVyeSA9IHBhcmVudElkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShwYXJlbnRJZClcbiAgICAgICAgICAgICAgICA6IG51bGw7IC8vIFJvb3Q6IHF1ZXJ5IGFsbCBwcm92aWRlcnNcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdHMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2F0cykgJiYgY2F0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKC4uLmNhdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4pyFIFRyYWNrIG93bmVyc2hpcDogVGhpcyBwcm92aWRlciBJTkRFWCBvd25zIHRoZXNlIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuc2V0KGNhdC5pZCwgaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgQ2FjaGUgcmVzdWx0cyBmb3IgZmFzdCBzdWJzZXF1ZW50IGFjY2Vzc1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5zZXQocGFyZW50SWQsIGNhdGVnb3JpZXMpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXQuaWQsIGNhdCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5kZWxldGUocGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcm92aWRlciBpbmRleCB0aGF0IG93bnMgYSBzcGVjaWZpYyBjYXRlZ29yeVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IHdpdGggcHJvdmlkZXIgaW5kZXgsIG9yIG51bGwgaWYgb3duZXJzaGlwIHVua25vd24gKHF1ZXJ5IGFsbClcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgaWYgKG93bmVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtvd25lckluZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE93bmVyc2hpcCB1bmtub3duIC0gd2lsbCBxdWVyeSBhbGwgcHJvdmlkZXJzIChmYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogT25seSBxdWVyaWVzIHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIGNhdGVnb3J5XG4gICAgICogVXNlcyBwcm92aWRlciBJTkRFWCB0byBtYXRjaCBjYXRlZ29yeSBwcm92aWRlciB3aXRoIHdvcmtmbG93IHByb3ZpZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGRlZmluaXRpb25zKTtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLmZvckVhY2goZGVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KGRlZi5uYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMud29ya2Zsb3dQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcC52YWx1ZS5nZXRCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLnNldChuYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGYWxsYmFjazogU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9ucyBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KG5hbWUsIGZvdW5kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBjYXRlZ29yeSBoaWVyYXJjaHlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaENhdGVnb3J5SW5IaWVyYXJjaHkoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXVlOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZF07XG4gICAgICAgIGNvbnN0IHNlYXJjaGVkID0gbmV3IFNldDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAgICAgd2hpbGUgKHNlYXJjaFF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc2VhcmNoUXVldWUuc2hpZnQoKSE7XG4gICAgICAgICAgICBpZiAoc2VhcmNoZWQuaGFzKHBhcmVudElkKSkgY29udGludWU7XG4gICAgICAgICAgICBzZWFyY2hlZC5hZGQocGFyZW50SWQpO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBPcHRpbWl6YXRpb246IE9ubHkgc2VhcmNoIGNoaWxkcmVuIGlmIGNoaWxkcmVuQ291bnQgPiAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgJiYgIXNlYXJjaGVkLmhhcyhjYXRlZ29yeS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVldWUucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyBjaGlsZHJlbiAodXNlcyBjYWNoZWQgY291bnQpXG4gICAgICovXG4gICAgY2F0ZWdvcnlIYXNDaGlsZHJlbihjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgd29ya2Zsb3dzICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc1dvcmtmbG93cyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB3b3JrZmxvd3MgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyV29ya2Zsb3dzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","// 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLDZDQUE2QztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBbUIxQyxxQ0FBcUM7QUFDckMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLFlBQVksQ0FBQztBQUUzQixvQ0FBb0M7QUFDcEMsY0FBYyxXQUFXLENBQUM7QUFFMUIsbURBQW1EO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IERlZmluaXRpb24gVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG4vLyBFeHBvcnQgd29ya2Zsb3cgZGVmaW5pdGlvbiB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbiAgQVhQVmFyaWFibGVEZWZpbml0aW9uLFxuICBBWFBXb3JrZmxvd0lucHV0RGVzY3JpcHRvcixcbiAgQVhQV29ya2Zsb3dPdXRwdXREZXNjcmlwdG9yLFxuICBBWFBXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUEVsc2FXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUFdvcmtmbG93QmluZGluZyxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8gV29ya2Zsb3cgSW5zdGFuY2UgVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuXG4vLyBSZS1leHBvcnQgV29ya2Zsb3cgSW5zdGFuY2UgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZSxcbiAgQVhQV29ya2Zsb3dTdGF0ZSxcbiAgQVhQV29ya2Zsb3dTdGF0dXMsXG4gIEFYUFdvcmtmbG93U3ViU3RhdHVzLFxuICBBWFBBY3Rpdml0eVN0YXR1cyxcbiAgQVhQRXhjZXB0aW9uU3RhdGUsXG4gIEFYUEFjdGl2aXR5SW5jaWRlbnQsXG4gIEFYUFdvcmtmbG93RmF1bHRTdGF0ZSxcbiAgQVhQQm9va21hcmssXG4gIEFYUENvbXBsZXRpb25DYWxsYmFja1N0YXRlLFxuICBBWFBBY3Rpdml0eVZhcmlhYmxlLFxuICBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG5cbi8vIEFjdGl2aXR5IFN5c3RlbSBUeXBlcyAoU2ltcGxpZmllZClcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHkvYWN0aXZpdHkudHlwZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2aXR5JztcblxuLy8gU2ltcGxlIFJ1bnRpbWUgKENvb3JkaW5hdG9yIG9ubHkpXG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUnO1xuXG4vLyBXb3JrZmxvdyBEZWZpbml0aW9uIFN5c3RlbSAoQ2F0ZWdvcnkgKyBNZXRhZGF0YSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24uc2VydmljZSc7Il19","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.15\", 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.15\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", 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.15\", 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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"}