@decaf-ts/core 0.8.85 → 0.9.1-9.tasks
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.
- package/README.md +1 -1
- package/dist/core.cjs +6705 -2
- package/dist/core.js +6932 -2
- package/lib/auth/constants.cjs +1 -1
- package/lib/auth/decorators.cjs +1 -1
- package/lib/auth/index.cjs +1 -1
- package/lib/esm/auth/constants.js +1 -1
- package/lib/esm/auth/decorators.js +1 -1
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/esm/fs/FilesystemAdapter.js +3 -2
- package/lib/esm/fs/FsDispatch.js +1 -1
- package/lib/esm/fs/helpers.js +1 -1
- package/lib/esm/fs/index.js +1 -1
- package/lib/esm/fs/indexStore.js +1 -1
- package/lib/esm/fs/locks/FilesystemLock.js +1 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
- package/lib/esm/fs/types.d.ts +6 -0
- package/lib/esm/fs/types.js +1 -1
- package/lib/esm/identity/decorators.js +1 -1
- package/lib/esm/identity/index.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
- package/lib/esm/interfaces/ErrorParser.js +1 -1
- package/lib/esm/interfaces/Executor.js +1 -1
- package/lib/esm/interfaces/Observable.js +1 -1
- package/lib/esm/interfaces/Observer.js +1 -1
- package/lib/esm/interfaces/Paginatable.js +1 -1
- package/lib/esm/interfaces/Queriable.js +1 -1
- package/lib/esm/interfaces/RawExecutor.js +1 -1
- package/lib/esm/interfaces/SequenceOptions.js +1 -1
- package/lib/esm/interfaces/index.js +1 -1
- package/lib/esm/migrations/Migration.js +1 -1
- package/lib/esm/migrations/MigrationService.js +1 -1
- package/lib/esm/migrations/MigrationTasks.js +1 -1
- package/lib/esm/migrations/constants.js +1 -1
- package/lib/esm/migrations/decorators.js +1 -1
- package/lib/esm/migrations/index.js +1 -1
- package/lib/esm/migrations/types.js +1 -1
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/model/SequenceModel.js +1 -1
- package/lib/esm/model/construction.d.ts +1 -1
- package/lib/esm/model/construction.js +25 -3
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/index.js +1 -1
- package/lib/esm/model/indexing.js +1 -1
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/overrides/Metadata.js +1 -1
- package/lib/esm/overrides/Model.js +1 -1
- package/lib/esm/overrides/ModelBuilder.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/injectables.js +1 -1
- package/lib/esm/overrides/overrides.js +29 -1
- package/lib/esm/persistence/Adapter.js +14 -2
- package/lib/esm/persistence/Context.js +1 -1
- package/lib/esm/persistence/ContextLock.js +1 -1
- package/lib/esm/persistence/Dispatch.d.ts +7 -0
- package/lib/esm/persistence/Dispatch.js +20 -3
- package/lib/esm/persistence/ObserverHandler.js +1 -1
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/constants.js +2 -1
- package/lib/esm/persistence/decorators.js +1 -1
- package/lib/esm/persistence/errors.js +1 -1
- package/lib/esm/persistence/event-filters.js +1 -1
- package/lib/esm/persistence/generators.js +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/transactions.js +1 -1
- package/lib/esm/persistence/types.d.ts +1 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/query/Condition.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/Paginator.js +1 -1
- package/lib/esm/query/Statement.js +1 -1
- package/lib/esm/query/constants.js +1 -1
- package/lib/esm/query/decorators.js +1 -1
- package/lib/esm/query/errors.js +1 -1
- package/lib/esm/query/index.js +1 -1
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/query/selectors.js +1 -1
- package/lib/esm/query/types.js +1 -1
- package/lib/esm/query/utils.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamStatement.js +1 -1
- package/lib/esm/ram/constants.js +1 -1
- package/lib/esm/ram/handlers.js +1 -1
- package/lib/esm/ram/index.js +1 -1
- package/lib/esm/ram/types.js +1 -1
- package/lib/esm/repository/Repository.d.ts +2 -2
- package/lib/esm/repository/Repository.js +19 -16
- package/lib/esm/repository/constants.js +1 -1
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/errors.js +1 -1
- package/lib/esm/repository/index.js +1 -1
- package/lib/esm/repository/injectables.js +4 -2
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.js +1 -1
- package/lib/esm/services/ModelService.d.ts +4 -5
- package/lib/esm/services/ModelService.js +4 -2
- package/lib/esm/services/PersistenceService.js +1 -1
- package/lib/esm/services/index.js +1 -1
- package/lib/esm/services/services.js +1 -1
- package/lib/esm/tasks/CleanUpTask.js +1 -1
- package/lib/esm/tasks/TaskContext.d.ts +3 -1
- package/lib/esm/tasks/TaskContext.js +9 -2
- package/lib/esm/tasks/TaskEngine.d.ts +2 -0
- package/lib/esm/tasks/TaskEngine.js +84 -20
- package/lib/esm/tasks/TaskErrors.js +1 -1
- package/lib/esm/tasks/TaskEventBus.js +1 -1
- package/lib/esm/tasks/TaskEventService.d.ts +7 -0
- package/lib/esm/tasks/TaskEventService.js +16 -0
- package/lib/esm/tasks/TaskHandler.js +1 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
- package/lib/esm/tasks/TaskService.d.ts +5 -1
- package/lib/esm/tasks/TaskService.js +11 -37
- package/lib/esm/tasks/TaskStateChangeError.js +1 -1
- package/lib/esm/tasks/TaskTracker.js +1 -1
- package/lib/esm/tasks/builder.js +1 -1
- package/lib/esm/tasks/constants.js +1 -1
- package/lib/esm/tasks/decorators.js +1 -1
- package/lib/esm/tasks/index.d.ts +1 -0
- package/lib/esm/tasks/index.js +2 -1
- package/lib/esm/tasks/logging.js +4 -7
- package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
- package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
- package/lib/esm/tasks/models/TaskEventModel.js +1 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
- package/lib/esm/tasks/models/TaskModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
- package/lib/esm/tasks/models/index.js +1 -1
- package/lib/esm/tasks/types.d.ts +8 -3
- package/lib/esm/tasks/types.js +1 -1
- package/lib/esm/tasks/utils.js +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +1 -1
- package/lib/esm/utils/decorators.js +1 -1
- package/lib/esm/utils/errors.js +1 -1
- package/lib/esm/utils/index.js +1 -1
- package/lib/esm/utils/throttling.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.d.ts +2 -1
- package/lib/esm/utils/utils.js +23 -6
- package/lib/esm/workers/TaskEngine.js +15 -4
- package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
- package/lib/esm/workers/index.js +1 -1
- package/lib/esm/workers/messages.js +1 -1
- package/lib/esm/workers/types.js +1 -1
- package/lib/esm/workers/workerThread.js +36 -8
- package/lib/fs/FilesystemAdapter.cjs +3 -2
- package/lib/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/fs/FsDispatch.cjs +1 -1
- package/lib/fs/helpers.cjs +1 -1
- package/lib/fs/index.cjs +1 -1
- package/lib/fs/indexStore.cjs +1 -1
- package/lib/fs/locks/FilesystemLock.cjs +1 -1
- package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
- package/lib/fs/types.cjs +1 -1
- package/lib/fs/types.d.ts +6 -0
- package/lib/identity/decorators.cjs +1 -1
- package/lib/identity/index.cjs +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.cjs +1 -1
- package/lib/interfaces/ErrorParser.cjs +1 -1
- package/lib/interfaces/Executor.cjs +1 -1
- package/lib/interfaces/Observable.cjs +1 -1
- package/lib/interfaces/Observer.cjs +1 -1
- package/lib/interfaces/Paginatable.cjs +1 -1
- package/lib/interfaces/Queriable.cjs +1 -1
- package/lib/interfaces/RawExecutor.cjs +1 -1
- package/lib/interfaces/SequenceOptions.cjs +1 -1
- package/lib/interfaces/index.cjs +1 -1
- package/lib/migrations/Migration.cjs +1 -1
- package/lib/migrations/MigrationService.cjs +1 -1
- package/lib/migrations/MigrationTasks.cjs +1 -1
- package/lib/migrations/constants.cjs +1 -1
- package/lib/migrations/decorators.cjs +1 -1
- package/lib/migrations/index.cjs +1 -1
- package/lib/migrations/types.cjs +1 -1
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/model/SequenceModel.cjs +1 -1
- package/lib/model/construction.cjs +25 -3
- package/lib/model/construction.d.ts +1 -1
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/index.cjs +1 -1
- package/lib/model/indexing.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/overrides/Metadata.cjs +1 -1
- package/lib/overrides/Model.cjs +1 -1
- package/lib/overrides/ModelBuilder.cjs +1 -1
- package/lib/overrides/index.cjs +1 -1
- package/lib/overrides/injectables.cjs +1 -1
- package/lib/overrides/overrides.cjs +29 -1
- package/lib/persistence/Adapter.cjs +14 -2
- package/lib/persistence/Context.cjs +1 -1
- package/lib/persistence/ContextLock.cjs +1 -1
- package/lib/persistence/Dispatch.cjs +20 -3
- package/lib/persistence/Dispatch.d.ts +7 -0
- package/lib/persistence/ObserverHandler.cjs +1 -1
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/constants.cjs +2 -1
- package/lib/persistence/decorators.cjs +1 -1
- package/lib/persistence/errors.cjs +1 -1
- package/lib/persistence/event-filters.cjs +1 -1
- package/lib/persistence/generators.cjs +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/transactions.cjs +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +1 -0
- package/lib/query/Condition.cjs +1 -1
- package/lib/query/MethodQueryBuilder.cjs +1 -1
- package/lib/query/Paginator.cjs +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/constants.cjs +1 -1
- package/lib/query/decorators.cjs +1 -1
- package/lib/query/errors.cjs +1 -1
- package/lib/query/index.cjs +1 -1
- package/lib/query/options.cjs +1 -1
- package/lib/query/selectors.cjs +1 -1
- package/lib/query/types.cjs +1 -1
- package/lib/query/utils.cjs +1 -1
- package/lib/ram/RamAdapter.cjs +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamStatement.cjs +1 -1
- package/lib/ram/constants.cjs +1 -1
- package/lib/ram/handlers.cjs +1 -1
- package/lib/ram/index.cjs +1 -1
- package/lib/ram/types.cjs +1 -1
- package/lib/repository/Repository.cjs +19 -16
- package/lib/repository/Repository.d.ts +2 -2
- package/lib/repository/constants.cjs +1 -1
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/errors.cjs +1 -1
- package/lib/repository/index.cjs +1 -1
- package/lib/repository/injectables.cjs +4 -2
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/utils.cjs +1 -1
- package/lib/services/ModelService.cjs +4 -2
- package/lib/services/ModelService.d.ts +4 -5
- package/lib/services/PersistenceService.cjs +1 -1
- package/lib/services/index.cjs +1 -1
- package/lib/services/services.cjs +1 -1
- package/lib/tasks/CleanUpTask.cjs +1 -1
- package/lib/tasks/TaskContext.cjs +9 -2
- package/lib/tasks/TaskContext.d.ts +3 -1
- package/lib/tasks/TaskEngine.cjs +84 -20
- package/lib/tasks/TaskEngine.d.ts +2 -0
- package/lib/tasks/TaskErrors.cjs +1 -1
- package/lib/tasks/TaskEventBus.cjs +1 -1
- package/lib/tasks/TaskEventService.cjs +20 -0
- package/lib/tasks/TaskEventService.d.ts +7 -0
- package/lib/tasks/TaskHandler.cjs +1 -1
- package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
- package/lib/tasks/TaskService.cjs +10 -36
- package/lib/tasks/TaskService.d.ts +5 -1
- package/lib/tasks/TaskStateChangeError.cjs +1 -1
- package/lib/tasks/TaskTracker.cjs +1 -1
- package/lib/tasks/builder.cjs +1 -1
- package/lib/tasks/constants.cjs +1 -1
- package/lib/tasks/decorators.cjs +1 -1
- package/lib/tasks/index.cjs +2 -1
- package/lib/tasks/index.d.ts +1 -0
- package/lib/tasks/logging.cjs +4 -7
- package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
- package/lib/tasks/models/TaskErrorModel.cjs +1 -1
- package/lib/tasks/models/TaskEventModel.cjs +1 -1
- package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
- package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
- package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/tasks/models/TaskModel.cjs +1 -1
- package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
- package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
- package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/tasks/models/index.cjs +1 -1
- package/lib/tasks/types.cjs +1 -1
- package/lib/tasks/types.d.ts +8 -3
- package/lib/tasks/utils.cjs +1 -1
- package/lib/utils/ContextualLoggedClass.cjs +1 -1
- package/lib/utils/decorators.cjs +1 -1
- package/lib/utils/errors.cjs +1 -1
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/throttling.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +22 -5
- package/lib/utils/utils.d.ts +2 -1
- package/lib/workers/TaskEngine.cjs +15 -4
- package/lib/workers/WorkThreadEnvironment.cjs +1 -1
- package/lib/workers/index.cjs +1 -1
- package/lib/workers/messages.cjs +1 -1
- package/lib/workers/types.cjs +1 -1
- package/lib/workers/workerThread.cjs +35 -7
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/lib/auth/constants.js.map +0 -1
- package/lib/auth/decorators.js.map +0 -1
- package/lib/auth/index.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
- package/lib/esm/fs/FsDispatch.js.map +0 -1
- package/lib/esm/fs/helpers.js.map +0 -1
- package/lib/esm/fs/index.js.map +0 -1
- package/lib/esm/fs/indexStore.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/esm/fs/types.js.map +0 -1
- package/lib/esm/identity/decorators.js.map +0 -1
- package/lib/esm/identity/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/esm/interfaces/ErrorParser.js.map +0 -1
- package/lib/esm/interfaces/Executor.js.map +0 -1
- package/lib/esm/interfaces/Observable.js.map +0 -1
- package/lib/esm/interfaces/Observer.js.map +0 -1
- package/lib/esm/interfaces/Paginatable.js.map +0 -1
- package/lib/esm/interfaces/Queriable.js.map +0 -1
- package/lib/esm/interfaces/RawExecutor.js.map +0 -1
- package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
- package/lib/esm/interfaces/index.js.map +0 -1
- package/lib/esm/migrations/Migration.js.map +0 -1
- package/lib/esm/migrations/MigrationService.js.map +0 -1
- package/lib/esm/migrations/MigrationTasks.js.map +0 -1
- package/lib/esm/migrations/constants.js.map +0 -1
- package/lib/esm/migrations/decorators.js.map +0 -1
- package/lib/esm/migrations/index.js.map +0 -1
- package/lib/esm/migrations/types.js.map +0 -1
- package/lib/esm/model/BaseModel.js.map +0 -1
- package/lib/esm/model/SequenceModel.js.map +0 -1
- package/lib/esm/model/construction.js.map +0 -1
- package/lib/esm/model/decorators.js.map +0 -1
- package/lib/esm/model/index.js.map +0 -1
- package/lib/esm/model/indexing.js.map +0 -1
- package/lib/esm/model/types.js.map +0 -1
- package/lib/esm/overrides/Metadata.js.map +0 -1
- package/lib/esm/overrides/Model.js.map +0 -1
- package/lib/esm/overrides/ModelBuilder.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/injectables.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/persistence/Adapter.js.map +0 -1
- package/lib/esm/persistence/Context.js.map +0 -1
- package/lib/esm/persistence/ContextLock.js.map +0 -1
- package/lib/esm/persistence/Dispatch.js.map +0 -1
- package/lib/esm/persistence/ObserverHandler.js.map +0 -1
- package/lib/esm/persistence/Sequence.js.map +0 -1
- package/lib/esm/persistence/constants.js.map +0 -1
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/esm/persistence/errors.js.map +0 -1
- package/lib/esm/persistence/event-filters.js.map +0 -1
- package/lib/esm/persistence/generators.js.map +0 -1
- package/lib/esm/persistence/index.js.map +0 -1
- package/lib/esm/persistence/transactions.js.map +0 -1
- package/lib/esm/persistence/types.js.map +0 -1
- package/lib/esm/query/Condition.js.map +0 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
- package/lib/esm/query/Paginator.js.map +0 -1
- package/lib/esm/query/Statement.js.map +0 -1
- package/lib/esm/query/constants.js.map +0 -1
- package/lib/esm/query/decorators.js.map +0 -1
- package/lib/esm/query/errors.js.map +0 -1
- package/lib/esm/query/index.js.map +0 -1
- package/lib/esm/query/options.js.map +0 -1
- package/lib/esm/query/selectors.js.map +0 -1
- package/lib/esm/query/types.js.map +0 -1
- package/lib/esm/query/utils.js.map +0 -1
- package/lib/esm/ram/RamAdapter.js.map +0 -1
- package/lib/esm/ram/RamPaginator.js.map +0 -1
- package/lib/esm/ram/RamStatement.js.map +0 -1
- package/lib/esm/ram/constants.js.map +0 -1
- package/lib/esm/ram/handlers.js.map +0 -1
- package/lib/esm/ram/index.js.map +0 -1
- package/lib/esm/ram/types.js.map +0 -1
- package/lib/esm/repository/Repository.js.map +0 -1
- package/lib/esm/repository/constants.js.map +0 -1
- package/lib/esm/repository/decorators.js.map +0 -1
- package/lib/esm/repository/errors.js.map +0 -1
- package/lib/esm/repository/index.js.map +0 -1
- package/lib/esm/repository/injectables.js.map +0 -1
- package/lib/esm/repository/types.js.map +0 -1
- package/lib/esm/repository/utils.js.map +0 -1
- package/lib/esm/services/ModelService.js.map +0 -1
- package/lib/esm/services/PersistenceService.js.map +0 -1
- package/lib/esm/services/index.js.map +0 -1
- package/lib/esm/services/services.js.map +0 -1
- package/lib/esm/tasks/CleanUpTask.js.map +0 -1
- package/lib/esm/tasks/TaskContext.js.map +0 -1
- package/lib/esm/tasks/TaskEngine.js.map +0 -1
- package/lib/esm/tasks/TaskErrors.js.map +0 -1
- package/lib/esm/tasks/TaskEventBus.js.map +0 -1
- package/lib/esm/tasks/TaskHandler.js.map +0 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/esm/tasks/TaskService.js.map +0 -1
- package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/esm/tasks/TaskTracker.js.map +0 -1
- package/lib/esm/tasks/builder.js.map +0 -1
- package/lib/esm/tasks/constants.js.map +0 -1
- package/lib/esm/tasks/decorators.js.map +0 -1
- package/lib/esm/tasks/index.js.map +0 -1
- package/lib/esm/tasks/logging.js.map +0 -1
- package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/esm/tasks/models/index.js.map +0 -1
- package/lib/esm/tasks/types.js.map +0 -1
- package/lib/esm/tasks/utils.js.map +0 -1
- package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/esm/utils/errors.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/throttling.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/workers/TaskEngine.js.map +0 -1
- package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/esm/workers/index.js.map +0 -1
- package/lib/esm/workers/messages.js.map +0 -1
- package/lib/esm/workers/types.js.map +0 -1
- package/lib/esm/workers/workerThread.js.map +0 -1
- package/lib/fs/FilesystemAdapter.js.map +0 -1
- package/lib/fs/FsDispatch.js.map +0 -1
- package/lib/fs/helpers.js.map +0 -1
- package/lib/fs/index.js.map +0 -1
- package/lib/fs/indexStore.js.map +0 -1
- package/lib/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/fs/types.js.map +0 -1
- package/lib/identity/decorators.js.map +0 -1
- package/lib/identity/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/interfaces/ErrorParser.js.map +0 -1
- package/lib/interfaces/Executor.js.map +0 -1
- package/lib/interfaces/Observable.js.map +0 -1
- package/lib/interfaces/Observer.js.map +0 -1
- package/lib/interfaces/Paginatable.js.map +0 -1
- package/lib/interfaces/Queriable.js.map +0 -1
- package/lib/interfaces/RawExecutor.js.map +0 -1
- package/lib/interfaces/SequenceOptions.js.map +0 -1
- package/lib/interfaces/index.js.map +0 -1
- package/lib/migrations/Migration.js.map +0 -1
- package/lib/migrations/MigrationService.js.map +0 -1
- package/lib/migrations/MigrationTasks.js.map +0 -1
- package/lib/migrations/constants.js.map +0 -1
- package/lib/migrations/decorators.js.map +0 -1
- package/lib/migrations/index.js.map +0 -1
- package/lib/migrations/types.js.map +0 -1
- package/lib/model/BaseModel.js.map +0 -1
- package/lib/model/SequenceModel.js.map +0 -1
- package/lib/model/construction.js.map +0 -1
- package/lib/model/decorators.js.map +0 -1
- package/lib/model/index.js.map +0 -1
- package/lib/model/indexing.js.map +0 -1
- package/lib/model/types.js.map +0 -1
- package/lib/overrides/Metadata.js.map +0 -1
- package/lib/overrides/Model.js.map +0 -1
- package/lib/overrides/ModelBuilder.js.map +0 -1
- package/lib/overrides/index.js.map +0 -1
- package/lib/overrides/injectables.js.map +0 -1
- package/lib/overrides/overrides.js.map +0 -1
- package/lib/persistence/Adapter.js.map +0 -1
- package/lib/persistence/Context.js.map +0 -1
- package/lib/persistence/ContextLock.js.map +0 -1
- package/lib/persistence/Dispatch.js.map +0 -1
- package/lib/persistence/ObserverHandler.js.map +0 -1
- package/lib/persistence/Sequence.js.map +0 -1
- package/lib/persistence/constants.js.map +0 -1
- package/lib/persistence/decorators.js.map +0 -1
- package/lib/persistence/errors.js.map +0 -1
- package/lib/persistence/event-filters.js.map +0 -1
- package/lib/persistence/generators.js.map +0 -1
- package/lib/persistence/index.js.map +0 -1
- package/lib/persistence/transactions.js.map +0 -1
- package/lib/persistence/types.js.map +0 -1
- package/lib/query/Condition.js.map +0 -1
- package/lib/query/MethodQueryBuilder.js.map +0 -1
- package/lib/query/Paginator.js.map +0 -1
- package/lib/query/Statement.js.map +0 -1
- package/lib/query/constants.js.map +0 -1
- package/lib/query/decorators.js.map +0 -1
- package/lib/query/errors.js.map +0 -1
- package/lib/query/index.js.map +0 -1
- package/lib/query/options.js.map +0 -1
- package/lib/query/selectors.js.map +0 -1
- package/lib/query/types.js.map +0 -1
- package/lib/query/utils.js.map +0 -1
- package/lib/ram/RamAdapter.js.map +0 -1
- package/lib/ram/RamPaginator.js.map +0 -1
- package/lib/ram/RamStatement.js.map +0 -1
- package/lib/ram/constants.js.map +0 -1
- package/lib/ram/handlers.js.map +0 -1
- package/lib/ram/index.js.map +0 -1
- package/lib/ram/types.js.map +0 -1
- package/lib/repository/Repository.js.map +0 -1
- package/lib/repository/constants.js.map +0 -1
- package/lib/repository/decorators.js.map +0 -1
- package/lib/repository/errors.js.map +0 -1
- package/lib/repository/index.js.map +0 -1
- package/lib/repository/injectables.js.map +0 -1
- package/lib/repository/types.js.map +0 -1
- package/lib/repository/utils.js.map +0 -1
- package/lib/services/ModelService.js.map +0 -1
- package/lib/services/PersistenceService.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/services/services.js.map +0 -1
- package/lib/tasks/CleanUpTask.js.map +0 -1
- package/lib/tasks/TaskContext.js.map +0 -1
- package/lib/tasks/TaskEngine.js.map +0 -1
- package/lib/tasks/TaskErrors.js.map +0 -1
- package/lib/tasks/TaskEventBus.js.map +0 -1
- package/lib/tasks/TaskHandler.js.map +0 -1
- package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/tasks/TaskService.js.map +0 -1
- package/lib/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/tasks/TaskTracker.js.map +0 -1
- package/lib/tasks/builder.js.map +0 -1
- package/lib/tasks/constants.js.map +0 -1
- package/lib/tasks/decorators.js.map +0 -1
- package/lib/tasks/index.js.map +0 -1
- package/lib/tasks/logging.js.map +0 -1
- package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/tasks/models/TaskModel.js.map +0 -1
- package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/tasks/models/index.js.map +0 -1
- package/lib/tasks/types.js.map +0 -1
- package/lib/tasks/utils.js.map +0 -1
- package/lib/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/utils/decorators.js.map +0 -1
- package/lib/utils/errors.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/throttling.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/workers/TaskEngine.js.map +0 -1
- package/lib/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/workers/index.js.map +0 -1
- package/lib/workers/messages.js.map +0 -1
- package/lib/workers/types.js.map +0 -1
- package/lib/workers/workerThread.js.map +0 -1
package/lib/esm/model/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBDYXNjYWRlTWV0YWRhdGEgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIERlc2NyaWJlcyBqb2luIGNvbHVtbiBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSBKb2luQ29sdW1uT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb2x1bW4gaW4gdGhlIGVudGl0eSB0byB3aGljaCB0aGlzIGNvbHVtbiBpcyByZWZlcmVuY2VkLlxuICAgKi9cbiAgcmVmZXJlbmNlZENvbHVtbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgKi9cbiAgZm9yZWlnbktleUNvbnN0cmFpbnROYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSm9pblRhYmxlT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRhYmxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIHN0b3JlIHZhbHVlcyBvZiB0aGUgYm90aCB0YWJsZXMgKGpvaW4gdGFibGUpLlxuICAgKiBCeSBkZWZhdWx0IGlzIGF1dG8gZ2VuZXJhdGVkLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEZpcnN0IGNvbHVtbiBvZiB0aGUgam9pbiB0YWJsZS5cbiAgICovXG4gIGpvaW5Db2x1bW4/OiBKb2luQ29sdW1uT3B0aW9ucztcbiAgLyoqXG4gICAqIFNlY29uZCAoaW52ZXJzZSkgY29sdW1uIG9mIHRoZSBqb2luIHRhYmxlLlxuICAgKi9cbiAgaW52ZXJzZUpvaW5Db2x1bW4/OiBKb2luQ29sdW1uT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB0YWJsZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCB0byBzdG9yZSB2YWx1ZXMgb2YgdGhlIGJvdGggdGFibGVzIChqb2luIHRhYmxlKS5cbiAgICogQnkgZGVmYXVsdCBpcyBhdXRvIGdlbmVyYXRlZC5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGaXJzdCBjb2x1bW4gb2YgdGhlIGpvaW4gdGFibGUuXG4gICAqL1xuICBqb2luQ29sdW1ucz86IEpvaW5Db2x1bW5PcHRpb25zW107XG4gIC8qKlxuICAgKiBTZWNvbmQgKGludmVyc2UpIGNvbHVtbiBvZiB0aGUgam9pbiB0YWJsZS5cbiAgICovXG4gIGludmVyc2VKb2luQ29sdW1ucz86IEpvaW5Db2x1bW5PcHRpb25zW107XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNNZXRhZGF0YSA9IHtcbiAgY2xhc3M6IENvbnN0cnVjdG9yPGFueT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8YW55Pik7XG4gIGNhc2NhZGU6IENhc2NhZGVNZXRhZGF0YTtcbiAgcG9wdWxhdGU6IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGpvaW5UYWJsZT86IEpvaW5UYWJsZU9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhID0gUmVsYXRpb25zTWV0YWRhdGEgJiB7XG4gIGtleTpcbiAgICB8IFBlcnNpc3RlbmNlS2V5cy5PTkVfVE9fT05FXG4gICAgfCBQZXJzaXN0ZW5jZUtleXMuT05FX1RPX01BTllcbiAgICB8IFBlcnNpc3RlbmNlS2V5cy5NQU5ZX1RPX09ORVxuICAgIHwgUGVyc2lzdGVuY2VLZXlzLk1BTllfVE9fTUFOWTtcbn07XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import "@decaf-ts/decoration";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3ZlcnJpZGVzL01ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL3R5cGVzXCI7XG5pbXBvcnQgeyBUYXNrSGFuZGxlciB9IGZyb20gXCIuLi90YXNrcy9UYXNrSGFuZGxlclwiO1xuaW1wb3J0IHsgTWlncmF0aW9uIH0gZnJvbSBcIi4uL21pZ3JhdGlvbnMvdHlwZXNcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgZXhwb3J0IG5hbWVzcGFjZSBNZXRhZGF0YSB7XG4gICAgZnVuY3Rpb24gdGFza3MoKTpcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8VGFza0hhbmRsZXI8YW55LCBhbnk+Pj5cbiAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gdGFza0hhbmRsZXJGb3IoXG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICApOiBDb25zdHJ1Y3RvcjxUYXNrSGFuZGxlcjxhbnksIGFueT4+IHwgdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGlvbkV4Y2VwdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIG9wOiBPcGVyYXRpb25LZXlzXG4gICAgKTogc3RyaW5nW107XG5cbiAgICBmdW5jdGlvbiBtaWdyYXRpb25zRm9yPFxuICAgICAgQSBleHRlbmRzIEFkYXB0ZXI8Q09ORiwgQ09OTiwgUVVFUlksIENPTlRFWFQ+LFxuICAgICAgQ09ORixcbiAgICAgIENPTk4sXG4gICAgICBRVUVSWSxcbiAgICAgIEZMQUdTIGV4dGVuZHMgQWRhcHRlckZsYWdzID0gQWRhcHRlckZsYWdzLFxuICAgICAgQ09OVEVYVCBleHRlbmRzIENvbnRleHQ8RkxBR1M+ID0gQ29udGV4dDxGTEFHUz4sXG4gICAgPihhZGFwdGVyPzogQSk6IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIEE+PltdO1xuXG4gICAgZnVuY3Rpb24gbWlncmF0aW9ucygpOiBbc3RyaW5nLCBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+Pl1bXTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT5cbiAgICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBmdW5jdGlvbiByZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+LFxuICAgICAgcHJvcDoga2V5b2YgTVxuICAgICk6IEV4dGVuZGVkUmVsYXRpb25zTWV0YWRhdGE7XG4gICAgZnVuY3Rpb24gcmVsYXRpb25zPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIHByb3A/OiBrZXlvZiBNXG4gICAgKTogc3RyaW5nW10gfCBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhIHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import "@decaf-ts/decorator-validation";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3ZlcnJpZGVzL01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNb2RlbEVycm9yRGVmaW5pdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5pbXBvcnQgeyBJbmRleE1ldGFkYXRhIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvdHlwZXNcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIGV4cG9ydCBuYW1lc3BhY2UgTW9kZWwge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFsbCByZWxhdGlvbiBwcm9wZXJ0aWVzIGRlZmluZWQgb24gYSBtb2RlbC5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIG1hcmtlZCBhcyByZWxhdGlvbnMgaW4gdGhlIG1vZGVsIGhpZXJhcmNoeS5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXhpc3RpbmdSZWxhdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXIsIHRoZSBleGlzdGluZyByZWxhdGlvbnMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgYXJlIHJlbGF0aW9ucy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZXN0ZWRSZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBleGlzdGluZ1JlbGF0aW9ucz86IHN0cmluZ1tdXG4gICAgKTogc3RyaW5nW107XG5cbiAgICBmdW5jdGlvbiBmcm9tVGFibGU8TSBleHRlbmRzIE1vZGVsPih0YWJsZU5hbWU6IHN0cmluZyk6IENvbnN0cnVjdG9yPE0+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIHJlbGF0aW9uIHByb3BlcnRpZXMgZGVmaW5lZCBvbiBhIG1vZGVsLlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgbWFya2VkIGFzIHJlbGF0aW9ucyBpbiB0aGUgbW9kZWwgaGllcmFyY2h5LlxuICAgICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgcmVsYXRpb25zLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KG06IENvbnN0cnVjdG9yPE0+IHwgTSk6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIHJlbGF0aW9uIHByb3BlcnRpZXMgZGVmaW5lZCBvbiBhIG1vZGVsLlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgbWFya2VkIGFzIHJlbGF0aW9ucyBpbiB0aGUgbW9kZWwgaGllcmFyY2h5LlxuICAgICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgcmVsYXRpb25zLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgcHJvcDoga2V5b2YgTVxuICAgICk6IEV4dGVuZGVkUmVsYXRpb25zTWV0YWRhdGE7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVsYXRpb24gcHJvcGVydGllcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyBtYXJrZWQgYXMgcmVsYXRpb25zIGluIHRoZSBtb2RlbCBoaWVyYXJjaHkuXG4gICAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFyZSByZWxhdGlvbnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBwcm9wOiBrZXlvZiBNXG4gICAgKTogYm9vbGVhbjtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZWRCeTxNIGV4dGVuZHMgTW9kZWw+KG06IENvbnN0cnVjdG9yPE0+IHwgTSk6IGtleW9mIE07XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVkQnk8TSBleHRlbmRzIE1vZGVsPihtOiBDb25zdHJ1Y3RvcjxNPiB8IE0pOiBrZXlvZiBNO1xuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5QXR0cmlidXRlczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgdXNlRGVmYXVsdD86IGJvb2xlYW5cbiAgICApOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFsbCByZWxhdGlvbiBwcm9wZXJ0aWVzIGRlZmluZWQgb24gYSBtb2RlbC5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIG1hcmtlZCBhcyByZWxhdGlvbnMgaW4gdGhlIG1vZGVsIGhpZXJhcmNoeS5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgYXJlIHJlbGF0aW9ucy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+IHwgTSxcbiAgICAgIHByb3A/OiBrZXlvZiBNXG4gICAgKTogc3RyaW5nW10gfCBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIGluZGV4ZXMgZGVmaW5lZCBvbiBhIG1vZGVsLlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgaW5kZXggbWV0YWRhdGEgZnJvbSBhIG1vZGVsJ3MgcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+fSBBIG5lc3RlZCByZWNvcmQgb2YgcHJvcGVydHkgbmFtZXMgdG8gaW5kZXggbWV0YWRhdGEuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPlxuICAgICk6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEluZGV4TWV0YWRhdGE+PjtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHNlcXVlbmNlIG9wdGlvbnMgZm9yIGEgbW9kZWwncyBwcmltYXJ5IGtleS5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIHNlcXVlbmNlIGNvbmZpZ3VyYXRpb24gZm9yIGEgbW9kZWwncyBwcmltYXJ5IGtleSBmcm9tIG1ldGFkYXRhLlxuICAgICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAgICogQHJldHVybiB7U2VxdWVuY2VPcHRpb25zfSBUaGUgc2VxdWVuY2Ugb3B0aW9ucyBmb3IgdGhlIG1vZGVsJ3MgcHJpbWFyeSBrZXkuXG4gICAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gc2VxdWVuY2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIG1vZGVsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlRm9yPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gICAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgcHJvcGVydHk/OiBrZXlvZiBNXG4gICAgKTogU2VxdWVuY2VPcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG5hbWUgZm9yIGEgbW9kZWxcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgc3RhbmRhcmRpemVkIHNlcXVlbmNlIG5hbWUgYnkgY29tYmluaW5nIHRoZSB0YWJsZSBuYW1lIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgdGhhdCBleHRlbmRzIE1vZGVsXG4gICAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yIHRvIGdlbmVyYXRlIHRoZSBzZXF1ZW5jZSBuYW1lIGZvclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBhcmdzIC0gQWRkaXRpb25hbCBzdHJpbmcgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aGUgc2VxdWVuY2UgbmFtZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBuYW1lXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxdWVuY2VOYW1lPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtb2RlbDogTSB8IENvbnN0cnVjdG9yPE0+LFxuICAgICAgLi4uYXJnczogc3RyaW5nW11cbiAgICApOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRhYmxlIG5hbWUgZm9yIGEgbW9kZWxcbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIHRhYmxlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgbW9kZWwgYnkgY2hlY2tpbmcgbWV0YWRhdGEgb3IgZmFsbGluZyBiYWNrIHRvIHRoZSBjb25zdHJ1Y3RvciBuYW1lXG4gICAgICogQHRlbXBsYXRlIE0gLSBUeXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICAgICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3RvciB0byBnZXQgdGhlIHRhYmxlIG5hbWUgZm9yXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZSBmb3IgdGhlIG1vZGVsXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFibGVOYW1lPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gICAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBNXG4gICAgKTogc3RyaW5nO1xuICAgIGZ1bmN0aW9uIGNvbHVtbk5hbWU8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBwcm9wOiBrZXlvZiBNXG4gICAgKTogc3RyaW5nO1xuICAgIGZ1bmN0aW9uIG5vblZhbGlkYXRhYmxlRm9yPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBvcDogT3BlcmF0aW9uS2V5cy5DUkVBVEUgfCBPcGVyYXRpb25LZXlzLlVQREFURSB8IHN0cmluZ1xuICAgICk6IHN0cmluZ1tdO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlT248TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+IHwgTSxcbiAgICAgIG9wOiBPcGVyYXRpb25LZXlzLkNSRUFURSB8IE9wZXJhdGlvbktleXNcbiAgICApOiBNIGV4dGVuZHMgTW9kZWw8dHJ1ZT5cbiAgICAgID8gUHJvbWlzZTxNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZWRCeVNlcXVlbmNlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtb2RlbDogTSB8IENvbnN0cnVjdG9yPE0+LFxuICAgICAgcHJvcD86IGtleW9mIE1cbiAgICApOiBib29sZWFuO1xuICB9XG5cbiAgLy8gZXhwb3J0IGludGVyZmFjZSBNb2RlbCB7XG4gIC8vICAgaGFzRXJyb3JzT248TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgLy8gICAgIG9wOiBPcGVyYXRpb25LZXlzLkNSRUFURSB8IE9wZXJhdGlvbktleXMuVVBEQVRFIHwgc3RyaW5nXG4gIC8vICAgKTogTSBleHRlbmRzIE1vZGVsPHRydWU+XG4gIC8vICAgICA/IFByb21pc2U8TW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ+XG4gIC8vICAgICA6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICAvLyB9XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import "@decaf-ts/decorator-validation";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL292ZXJyaWRlcy9Nb2RlbEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNb2RlbEJ1aWxkZXI8TT4ge1xuICAgIHRhYmxlKHRhYmxlTmFtZTogc3RyaW5nKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIHVuaXF1ZShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIGNyZWF0ZWRCeShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIHVwZGF0ZWRCeShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIGNyZWF0ZWRBdChhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIHVwZGF0ZWRBdChhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG9uZVRvT25lPE4gZXh0ZW5kcyBrZXlvZiBNPihcbiAgICAgIGF0dHI6IE4sXG4gICAgICBjbGF6ejogYW55IHwgKCgpID0+IGFueSksXG4gICAgICBjYXNjYWRlPzogYW55LFxuICAgICAgcG9wdWxhdGU/OiBib29sZWFuLFxuICAgICAgam9pbkNvbHVtbk9wdHM/OiBhbnksXG4gICAgICBmaz86IHN0cmluZ1xuICAgICk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICBvbmVUb01hbnk8TiBleHRlbmRzIGtleW9mIE0+KFxuICAgICAgYXR0cjogTixcbiAgICAgIGNsYXp6OiBhbnkgfCAoKCkgPT4gYW55KSxcbiAgICAgIGNhc2NhZGU/OiBhbnksXG4gICAgICBwb3B1bGF0ZT86IGJvb2xlYW4sXG4gICAgICBqb2luVGFibGVPcHRzPzogYW55LFxuICAgICAgZms/OiBzdHJpbmdcbiAgICApOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgbWFueVRvT25lPE4gZXh0ZW5kcyBrZXlvZiBNPihcbiAgICAgIGF0dHI6IE4sXG4gICAgICBjbGF6ejogYW55IHwgKCgpID0+IGFueSksXG4gICAgICBjYXNjYWRlPzogYW55LFxuICAgICAgcG9wdWxhdGU/OiBib29sZWFuLFxuICAgICAgam9pblRhYmxlT3B0cz86IGFueSxcbiAgICAgIGZrPzogc3RyaW5nXG4gICAgKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG1hbnlUb01hbnk8TiBleHRlbmRzIGtleW9mIE0+KFxuICAgICAgYXR0cjogTixcbiAgICAgIGNsYXp6OiBhbnkgfCAoKCkgPT4gYW55KSxcbiAgICAgIGNhc2NhZGU/OiBhbnksXG4gICAgICBwb3B1bGF0ZT86IGJvb2xlYW4sXG4gICAgICBqb2luVGFibGVPcHRzPzogYW55LFxuICAgICAgZms/OiBzdHJpbmdcbiAgICApOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgbm9WYWxpZGF0ZU9uKGF0dHI6IGtleW9mIE0sIC4uLm9wczogYW55W10pOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgbm9WYWxpZGF0ZU9uQ3JlYXRlKGF0dHI6IGtleW9mIE0pOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgbm9WYWxpZGF0ZU9uVXBkYXRlKGF0dHI6IGtleW9mIE0pOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgbm9WYWxpZGF0ZU9uQ3JlYXRlVXBkYXRlKGF0dHI6IGtleW9mIE0pOiBNb2RlbEJ1aWxkZXI8TT47XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlQnVpbGRlcjxNLCBOIGV4dGVuZHMga2V5b2YgTSwgVD4ge1xuICAgIGNvbHVtbjxOMiBleHRlbmRzIGtleW9mIE0+KGNvbHVtbk5hbWU/OiBzdHJpbmcpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICB1bmlxdWU8TjIgZXh0ZW5kcyBrZXlvZiBNPigpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICBjcmVhdGVkQnk8TjIgZXh0ZW5kcyBrZXlvZiBNPigpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICB1cGRhdGVkQnk8TjIgZXh0ZW5kcyBrZXlvZiBNPigpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICBjcmVhdGVkQXQ8TjIgZXh0ZW5kcyBrZXlvZiBNPigpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICB1cGRhdGVkQXQ8TjIgZXh0ZW5kcyBrZXlvZiBNPigpOiBBdHRyaWJ1dGVCdWlsZGVyPE0sIE4yLCBUPjtcbiAgICBub1ZhbGlkYXRlT248TjIgZXh0ZW5kcyBrZXlvZiBNPiguLi5vcHM6IGFueVtdKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgbm9WYWxpZGF0ZU9uQ3JlYXRlPE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgbm9WYWxpZGF0ZU9uVXBkYXRlPE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgbm9WYWxpZGF0ZU9uQ3JlYXRlVXBkYXRlPE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,4 +8,4 @@ export * from "./injectables.js";
|
|
|
8
8
|
export * from "./Model.js";
|
|
9
9
|
export * from "./overrides.js";
|
|
10
10
|
export * from "./ModelBuilder.js";
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3ZlcnJpZGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCw4QkFBMkI7QUFDM0IsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUN4QiwrQkFBNEI7QUFDNUIsa0NBQStCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhwb3J0cyBmb3IgdGhlIG92ZXJyaWRlcyBtb2R1bGUuXG4gKiBAc3VtbWFyeSBUaGlzIGZpbGUgZXhwb3J0cyBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciB0aGUgb3ZlcnJpZGVzIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBNZXRhZGF0YSwgaW5qZWN0YWJsZXMsIE1vZGVsLCBhbmQgb3ZlcnJpZGVzLlxuICogQG1vZHVsZSBjb3JlL292ZXJyaWRlc1xuICovXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhZGF0YVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW5qZWN0YWJsZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vdmVycmlkZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01vZGVsQnVpbGRlclwiO1xuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import "@decaf-ts/injectable-decorators";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3ZlcnJpZGVzL2luamVjdGFibGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NlcnZpY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIGV4cG9ydCBuYW1lc3BhY2UgSW5qZWN0YWJsZXMge1xuICAgIGZ1bmN0aW9uIHJlcG9zaXRvcmllczxSIGV4dGVuZHMgUmVwb3NpdG9yeTxhbnksIGFueT4+KFxuICAgICAgZmxhdm91cjogc3RyaW5nXG4gICAgKTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8Uj4+PjtcblxuICAgIGZ1bmN0aW9uIHNlcnZpY2VzPFMgZXh0ZW5kcyBTZXJ2aWNlPigpOiBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RvcjxTPj47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -134,4 +134,32 @@ Injectables.services = function () {
|
|
|
134
134
|
Injectables.repositories = function () {
|
|
135
135
|
return Metadata["innerGet"](Symbol.for(DBKeys.REPOSITORY));
|
|
136
136
|
};
|
|
137
|
-
|
|
137
|
+
/**
|
|
138
|
+
* @description Merges two model instances into a new instance.
|
|
139
|
+
* @summary Creates a new model instance by combining properties from an old model and a new model.
|
|
140
|
+
* Properties from the new model override properties from the old model if they are defined.
|
|
141
|
+
* @template {M} - Type extending Model
|
|
142
|
+
* @param {M} oldModel - The original model instance
|
|
143
|
+
* @param {M} model - The new model instance with updated properties
|
|
144
|
+
* @return {M} A new model instance with merged properties
|
|
145
|
+
*/
|
|
146
|
+
Model.merge = function merge(oldModel, newModel, constructor) {
|
|
147
|
+
constructor = constructor || oldModel.constructor;
|
|
148
|
+
const extract = (model) => Object.entries(model).reduce((accum, [key, val]) => {
|
|
149
|
+
let hasOneToOneRelation = false;
|
|
150
|
+
try {
|
|
151
|
+
const relations = Model.relations(constructor, key);
|
|
152
|
+
if (relations.key === "relation.one-to-one")
|
|
153
|
+
hasOneToOneRelation = true;
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
hasOneToOneRelation = false;
|
|
158
|
+
}
|
|
159
|
+
if (typeof val !== "undefined" || hasOneToOneRelation)
|
|
160
|
+
accum[key] = val;
|
|
161
|
+
return accum;
|
|
162
|
+
}, {});
|
|
163
|
+
return new constructor(Object.assign({}, extract(oldModel), extract(newModel)));
|
|
164
|
+
}.bind(Model);
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL292ZXJyaWRlcy9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG9DQUErQjtBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNDQUFpQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUNBQThCO0FBS3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLGdDQUEyQjtBQUc3QyxRQUFnQixDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUs7SUFHdEMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFaEIsUUFBZ0IsQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQzFDLElBQVk7SUFFWixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFaEIsUUFBZ0IsQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLG9CQUFvQixDQUVwRCxLQUFxQixFQUFFLEVBQWlCO0lBQ3hELE1BQU0sWUFBWSxHQUNoQixR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QUM7WUFDcEIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFdBQVcsSUFBSSxtQkFBbUI7WUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVQsT0FBTyxJQUFJLFdBQVcsQ0FDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0FBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEQktleXMsIEludGVybmFsRXJyb3IsIE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuXG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2Vycm9yc1wiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7IEluZGV4TWV0YWRhdGEgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS90eXBlc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IEluamVjdGFibGVzIH0gZnJvbSBcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvc2VydmljZXNcIjtcbmltcG9ydCB7IFRhc2tIYW5kbGVyIH0gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tIYW5kbGVyXCI7XG5pbXBvcnQgeyBUYXNrc0tleSB9IGZyb20gXCIuLi90YXNrcy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHR5cGUgTWlncmF0aW9uIH0gZnJvbSBcIi4uL21pZ3JhdGlvbnMvdHlwZXNcIjtcblxuKE1ldGFkYXRhIGFzIGFueSkudGFza3MgPSBmdW5jdGlvbiB0YXNrcygpOlxuICB8IFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFRhc2tIYW5kbGVyPGFueSwgYW55Pj4+XG4gIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE1ldGFkYXRhW1wiaW5uZXJHZXRcIl0oU3ltYm9sLmZvcihUYXNrc0tleSkpO1xufS5iaW5kKE1ldGFkYXRhKTtcblxuKE1ldGFkYXRhIGFzIGFueSkudGFza0ZvciA9IGZ1bmN0aW9uIHRhc2tGb3IoXG4gIHR5cGU6IHN0cmluZ1xuKTogQ29uc3RydWN0b3I8VGFza0hhbmRsZXI8YW55LCBhbnk+PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS50YXNrcygpO1xuICByZXR1cm4gbWV0YSA/IG1ldGFbdHlwZV0gOiB1bmRlZmluZWQ7XG59LmJpbmQoTWV0YWRhdGEpO1xuXG4oTWV0YWRhdGEgYXMgYW55KS52YWxpZGF0aW9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uIHZhbGlkYXRpb25FeGNlcHRpb25zPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4+KHRoaXM6IE1ldGFkYXRhLCBtb2RlbDogQ29uc3RydWN0b3I8TT4sIG9wOiBPcGVyYXRpb25LZXlzKTogc3RyaW5nW10ge1xuICBjb25zdCBub1ZhbGlkYXRpb246IHN0cmluZ1tdID1cbiAgICBNZXRhZGF0YS5nZXQobW9kZWwsIFBlcnNpc3RlbmNlS2V5cy5OT19WQUxJREFURSkgfHwgW107XG4gIGNvbnN0IG5vdmFsaWRhdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhub1ZhbGlkYXRpb24pXG4gICAgLmZpbHRlcigoWywgdmFsXSkgPT4gdmFsLmluY2x1ZGVzKG9wKSlcbiAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgbGV0IG5lc3RlZFJlbHM6IHN0cmluZ1tdID0gW107XG4gIGlmIChvcCA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3AgPT09IE9wZXJhdGlvbktleXMuVVBEQVRFKVxuICAgIG5lc3RlZFJlbHMgPSBNb2RlbC5uZXN0ZWRSZWxhdGlvbnMobW9kZWwpO1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLm5vdmFsaWRhdGlvbkVudHJpZXMsIC4uLm5lc3RlZFJlbHNdKV07XG59LmJpbmQoTWV0YWRhdGEpO1xuXG4oTWV0YWRhdGEgYXMgYW55KS5taWdyYXRpb25zRm9yID0gZnVuY3Rpb24gPFxuICBBIGV4dGVuZHMgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+LFxuPihhZGFwdGVyPzogQSk6IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIEE+PltdIHtcbiAgYWRhcHRlciA9IGFkYXB0ZXIgPz8gKEFkYXB0ZXIuY3VycmVudCBhcyBBKTtcbiAgaWYgKCFhZGFwdGVyKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGdldCBhZGFwdGVyIGZvciBtaWdyYXRpb25zYCk7XG4gIGNvbnN0IG1pZ3JhdGlvbnMgPSBNZXRhZGF0YVtcImlubmVyR2V0XCJdKFxuICAgIFN5bWJvbC5mb3IoUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTiksXG4gICAgYWRhcHRlci5hbGlhc1xuICApO1xuICByZXR1cm4gbWlncmF0aW9ucy5tYXAoXG4gICAgKG06IHsgY2xhc3M6IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIEE+PiB9KSA9PiBtLmNsYXNzXG4gICk7XG59LmJpbmQoTWV0YWRhdGEpO1xuXG4oTWV0YWRhdGEgYXMgYW55KS5taWdyYXRpb25zID0gZnVuY3Rpb24gbWlncmF0aW9ucygpOiBbXG4gIHN0cmluZyxcbiAgQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj4sXG5dW10ge1xuICBjb25zdCBtaWdyYXRpb25zOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIGFueT4+PlxuICA+ID0gTWV0YWRhdGFbXCJpbm5lckdldFwiXShcbiAgICBTeW1ib2wuZm9yKFtQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCBQZXJzaXN0ZW5jZUtleXMuQllfS0VZXS5qb2luKFwiLVwiKSlcbiAgKTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMobWlncmF0aW9ucylcbiAgICAuZmxhdCgpXG4gICAgLm1hcCgobSkgPT4gW20uY2xhc3MubmFtZSwgbS5jbGFzc10pO1xufS5iaW5kKE1ldGFkYXRhKTtcblxuKE1ldGFkYXRhIGFzIGFueSkucmVsYXRpb25zID0gZnVuY3Rpb24gPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG06IENvbnN0cnVjdG9yPE0+LFxuICBwcm9wPzoga2V5b2YgTVxuKTogc3RyaW5nW10gfCBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldChtLCBQZXJzaXN0ZW5jZUtleXMuUkVMQVRJT05TKTtcbiAgaWYgKCFtZXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIXByb3ApIHJldHVybiBPYmplY3Qua2V5cyhtZXRhKTtcbiAgaWYgKCFtZXRhW3Byb3AgYXMgc3RyaW5nXSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBObyByZWxhdGlvbnMgbWV0YWRhdGEgZm91bmQgZm9yIHByb3BlcnR5ICR7cHJvcCBhcyBzdHJpbmd9YFxuICAgICk7XG4gIHJldHVybiBtZXRhW3Byb3AgYXMgc3RyaW5nXTtcbn0uYmluZChNZXRhZGF0YSk7XG5cbihNb2RlbCBhcyBhbnkpLnJlbGF0aW9ucyA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KFxuICBtOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gIHByb3A/OiBrZXlvZiBNXG4pOiBzdHJpbmdbXSB8IEV4dGVuZGVkUmVsYXRpb25zTWV0YWRhdGEge1xuICByZXR1cm4gKFxuICAgIE1ldGFkYXRhLnJlbGF0aW9ucyhcbiAgICAgIG0gaW5zdGFuY2VvZiBNb2RlbCA/IChtLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPE0+KSA6IG0sXG4gICAgICBwcm9wXG4gICAgKSB8fCBbXVxuICApO1xufTtcblxuKE1vZGVsIGFzIGFueSkubmVzdGVkUmVsYXRpb25zID0gZnVuY3Rpb24gPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gIGV4aXN0aW5nUmVsYXRpb25zOiBzdHJpbmdbXSA9IFtdXG4pOiBzdHJpbmdbXSB8IEV4dGVuZGVkUmVsYXRpb25zTWV0YWRhdGEge1xuICBsZXQgaW5uZXI6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHJlbHMgPSBNZXRhZGF0YS5nZXQobW9kZWwgYXMgQ29uc3RydWN0b3I8TT4sIFBlcnNpc3RlbmNlS2V5cy5SRUxBVElPTlMpO1xuICBpZiAoIXJlbHMgfHwgIU9iamVjdC5rZXlzKHJlbHMpLmxlbmd0aClcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLmV4aXN0aW5nUmVsYXRpb25zXSldO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gcmVscykge1xuICAgIGNvbnN0IHJlbGF0aW9uTWV0YSA9IHJlbHNbcHJvcF0gYXMgYW55O1xuICAgIGlmIChyZWxhdGlvbk1ldGE/LmNsYXNzICYmIE1vZGVsLnJlbGF0aW9ucyhyZWxhdGlvbk1ldGEuY2xhc3MpKSB7XG4gICAgICBjb25zdCBpbm5lck1vZGVsUmVscyA9IE1vZGVsLnJlbGF0aW9ucyhyZWxhdGlvbk1ldGEuY2xhc3MpIGFzIHN0cmluZ1tdO1xuICAgICAgY29uc3QgaW5uZXJNb2RlbERvdFJlbHMgPSBpbm5lck1vZGVsUmVscy5tYXAoKHIpID0+IGAke3Byb3B9LiR7cn1gKTtcbiAgICAgIGV4aXN0aW5nUmVsYXRpb25zID0gWy4uLmV4aXN0aW5nUmVsYXRpb25zLCAuLi5pbm5lck1vZGVsRG90UmVsc107XG4gICAgICBpbm5lciA9IE1vZGVsLm5lc3RlZFJlbGF0aW9ucyhyZWxhdGlvbk1ldGEuY2xhc3MsIGV4aXN0aW5nUmVsYXRpb25zKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KFsuLi5leGlzdGluZ1JlbGF0aW9ucywgLi4uaW5uZXJdKV07XG59LmJpbmQoTW9kZWwpO1xuXG4oTW9kZWwgYXMgYW55KS5nZW5lcmF0ZWRCeVNlcXVlbmNlID0gZnVuY3Rpb24gZ2VuZXJhdGVkQnlTZXF1ZW5jZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4sIHByb3A/OiBrZXlvZiBNKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnN0ciA9XG4gICAgdHlwZW9mIG1vZGVsICE9PSBcImZ1bmN0aW9uXCIgPyAobW9kZWwuY29uc3RydWN0b3IgYXMgYW55KSA6IG1vZGVsO1xuICBjb25zdCBzZXEgPSBNb2RlbC5zZXF1ZW5jZUZvcihjb25zdHIpO1xuICByZXR1cm4gISFzZXEuZ2VuZXJhdGVkO1xufS5iaW5kKE1vZGVsKTtcblxuKE1vZGVsIGFzIGFueSkuZnJvbVRhYmxlID0gZnVuY3Rpb24gZnJvbVRhYmxlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIHRhYmxlTmFtZTogc3RyaW5nXG4pOiBDb25zdHJ1Y3RvcjxNPiB7XG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YVtcImlubmVyR2V0XCJdKFN5bWJvbC5mb3IoUGVyc2lzdGVuY2VLZXlzLlRBQkxFKSk7XG4gIGlmICghbWV0YSB8fCAhbWV0YVt0YWJsZU5hbWVdIHx8ICFNb2RlbC5nZXQobWV0YVt0YWJsZU5hbWVdLm5hbWUpKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYE5vIHRhYmxlIG1ldGFkYXRhIGZvdW5kIGZvciBtb2RlbC4gZGlkIHlvdSB1c2UgQHRhYmxlKCk/YFxuICAgICk7XG4gIHJldHVybiBNb2RlbC5nZXQobWV0YVt0YWJsZU5hbWVdLm5hbWUpIGFzIENvbnN0cnVjdG9yPE0+O1xufS5iaW5kKE1vZGVsKTtcblxuKE1ldGFkYXRhIGFzIGFueSkuY3JlYXRlZEJ5ID0gZnVuY3Rpb24gY3JlYXRlZEJ5PE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT5cbik6IGtleW9mIE0ge1xuICBjb25zdCBtZXRhID0gTWV0YWRhdGEuZ2V0KFxuICAgIHR5cGVvZiBtb2RlbCAhPT0gXCJmdW5jdGlvblwiID8gKG1vZGVsLmNvbnN0cnVjdG9yIGFzIGFueSkgOiBtb2RlbCxcbiAgICBQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWVxuICApO1xuICBpZiAoIW1ldGEpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgTm8gY3JlYXRlZEJ5IG1ldGFkYXRhIGZvdW5kIGZvciBtb2RlbC4gZGlkIHlvdSB1c2UgQGNyZWF0ZWRCeSgpP2BcbiAgICApO1xuICByZXR1cm4gbWV0YTtcbn0uYmluZChNZXRhZGF0YSk7XG5cbihNZXRhZGF0YSBhcyBhbnkpLnVwZGF0ZWRCeSA9IGZ1bmN0aW9uIHVwZGF0ZWRCeTxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogTSB8IENvbnN0cnVjdG9yPE0+XG4pOiBrZXlvZiBNIHtcbiAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldChcbiAgICB0eXBlb2YgbW9kZWwgIT09IFwiZnVuY3Rpb25cIiA/IChtb2RlbC5jb25zdHJ1Y3RvciBhcyBhbnkpIDogbW9kZWwsXG4gICAgUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQllcbiAgKTtcbiAgaWYgKCFtZXRhKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYE5vIHVwZGF0ZWRCeSBtZXRhZGF0YSBmb3VuZCBmb3IgbW9kZWwuIGRpZCB5b3UgdXNlIEB1cGRhdGVkQnkoKT9gXG4gICAgKTtcbiAgcmV0dXJuIG1ldGE7XG59LmJpbmQoTWV0YWRhdGEpO1xuXG4oTW9kZWwgYXMgYW55KS50YWJsZU5hbWUgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgTVxuKTogc3RyaW5nIHtcbiAgY29uc3Qgb2JqID1cbiAgICBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsID8gTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpIDogbW9kZWw7XG5cbiAgaWYgKCFvYmopIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBVbmFibGUgdG8gZmluZCBtb2RlbCAke21vZGVsfWApO1xuXG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoXG4gICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogKG1vZGVsIGFzIGFueSksXG4gICAgUGVyc2lzdGVuY2VLZXlzLlRBQkxFXG4gICk7XG5cbiAgaWYgKG1ldGEpIHtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuICBpZiAobW9kZWwgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgIHJldHVybiBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG4gIHJldHVybiBtb2RlbC5uYW1lO1xufTtcblxuKE1vZGVsIGFzIGFueSkuY29sdW1uTmFtZSA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBNLFxuICBhdHRyaWJ1dGU6IGtleW9mIE1cbik6IHN0cmluZyB7XG4gIGNvbnN0IG1ldGFkYXRhID0gTWV0YWRhdGEuZ2V0KFxuICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3RvciA6IChtb2RlbCBhcyBhbnkpLFxuICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuQ09MVU1OLCBhdHRyaWJ1dGUgYXMgc3RyaW5nKVxuICApO1xuICByZXR1cm4gbWV0YWRhdGEgPyBtZXRhZGF0YSA6IChhdHRyaWJ1dGUgYXMgc3RyaW5nKTtcbn07XG5cbihNb2RlbCBhcyBhbnkpLmRlZmF1bHRRdWVyeUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlBdHRyaWJ1dGVzPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4+KG06IENvbnN0cnVjdG9yPE0+IHwgTSwgdXNlRGVmYXVsdCA9IGZhbHNlKTogc3RyaW5nW10ge1xuICBjb25zdCBjb25zdHIgPSB0eXBlb2YgbSA9PT0gXCJmdW5jdGlvblwiID8gbSA6IG0uY29uc3RydWN0b3I7XG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoXG4gICAgY29uc3RyIGFzIGFueSxcbiAgICBNZXRhZGF0YS5rZXkoUGVyc2lzdGVuY2VLZXlzLkRFRkFVTFRfUVVFUllfQVRUUilcbiAgKTtcbiAgcmV0dXJuIG1ldGEgPyBtZXRhIDogdXNlRGVmYXVsdCA/IFtNb2RlbC5wayhtKSBhcyBzdHJpbmddIDogW107XG59O1xuXG4oTW9kZWwgYXMgYW55KS5zZXF1ZW5jZU5hbWUgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPixcbiAgLi4uYXJnczogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBbTW9kZWwudGFibGVOYW1lKG1vZGVsKSwgLi4uYXJnc10uam9pbihcIl9cIik7XG59O1xuXG4oTW9kZWwgYXMgYW55KS5zZXF1ZW5jZUZvciA9IGZ1bmN0aW9uIHNlcXVlbmNlRm9yPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gIHByb3BlcnR5Pzoga2V5b2YgTVxuKTogU2VxdWVuY2VPcHRpb25zIHtcbiAgaWYgKHByb3BlcnR5KSB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcIm5vdCBjdXJyZW50bHkgc3VwcG9ydGVkXCIpO1xuICBjb25zdCBtZXRhZGF0YTogU2VxdWVuY2VPcHRpb25zID0gTW9kZWwucGtQcm9wcyhcbiAgICBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsID8gKG1vZGVsLmNvbnN0cnVjdG9yIGFzIGFueSkgOiBtb2RlbFxuICApO1xuICBpZiAoIW1ldGFkYXRhKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgXCJObyBzZXF1ZW5jZSBvcHRpb25zIGRlZmluZWQgZm9yIG1vZGVsLiBkaWQgeW91IHVzZSB0aGUgQHBrIGRlY29yYXRvcj9cIlxuICAgICk7XG4gIHJldHVybiBtZXRhZGF0YSBhcyBTZXF1ZW5jZU9wdGlvbnM7XG59O1xuXG4oTW9kZWwgYXMgYW55KS5pbmRleGVzID0gZnVuY3Rpb24gaW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogTSB8IENvbnN0cnVjdG9yPE0+XG4pOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBJbmRleE1ldGFkYXRhPj4ge1xuICBjb25zdCBpbmRleERlY29yYXRvcnMgPSBNZXRhZGF0YS5nZXQoXG4gICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogKG1vZGVsIGFzIGFueSksXG4gICAgUGVyc2lzdGVuY2VLZXlzLklOREVYXG4gICk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGluZGV4RGVjb3JhdG9ycyB8fCB7fSkucmVkdWNlKFxuICAgIChhY3VtOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBJbmRleE1ldGFkYXRhPj4sIHQ6IGFueSkgPT4ge1xuICAgICAgYWN1bVt0XSA9IHsgW1BlcnNpc3RlbmNlS2V5cy5JTkRFWF06IGluZGV4RGVjb3JhdG9yc1t0XSB9O1xuICAgICAgcmV0dXJuIGFjdW07XG4gICAgfSxcbiAgICB7fVxuICApO1xufTtcblxuKEluamVjdGFibGVzIGFzIGFueSkuc2VydmljZXMgPSBmdW5jdGlvbiA8UyBleHRlbmRzIFNlcnZpY2U+KCk6IFJlY29yZDxcbiAgc3RyaW5nLFxuICBDb25zdHJ1Y3RvcjxTPlxuPiB7XG4gIHJldHVybiBNZXRhZGF0YVtcImlubmVyR2V0XCJdKFN5bWJvbC5mb3IoUGVyc2lzdGVuY2VLZXlzLlNFUlZJQ0UpKSBhcyBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIENvbnN0cnVjdG9yPFM+XG4gID47XG59O1xuXG4oSW5qZWN0YWJsZXMgYXMgYW55KS5yZXBvc2l0b3JpZXMgPSBmdW5jdGlvbiA8XG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PGFueSwgYW55Pixcbj4oKTogUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8Uj4+IHtcbiAgcmV0dXJuIE1ldGFkYXRhW1wiaW5uZXJHZXRcIl0oU3ltYm9sLmZvcihEQktleXMuUkVQT1NJVE9SWSkpIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgQ29uc3RydWN0b3I8Uj5cbiAgPjtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1lcmdlcyB0d28gbW9kZWwgaW5zdGFuY2VzIGludG8gYSBuZXcgaW5zdGFuY2UuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgbmV3IG1vZGVsIGluc3RhbmNlIGJ5IGNvbWJpbmluZyBwcm9wZXJ0aWVzIGZyb20gYW4gb2xkIG1vZGVsIGFuZCBhIG5ldyBtb2RlbC5cbiAqIFByb3BlcnRpZXMgZnJvbSB0aGUgbmV3IG1vZGVsIG92ZXJyaWRlIHByb3BlcnRpZXMgZnJvbSB0aGUgb2xkIG1vZGVsIGlmIHRoZXkgYXJlIGRlZmluZWQuXG4gKiBAdGVtcGxhdGUge019IC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBwYXJhbSB7TX0gb2xkTW9kZWwgLSBUaGUgb3JpZ2luYWwgbW9kZWwgaW5zdGFuY2VcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbmV3IG1vZGVsIGluc3RhbmNlIHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJuIHtNfSBBIG5ldyBtb2RlbCBpbnN0YW5jZSB3aXRoIG1lcmdlZCBwcm9wZXJ0aWVzXG4gKi9cbihNb2RlbCBhcyBhbnkpLm1lcmdlID0gZnVuY3Rpb24gbWVyZ2U8TSBleHRlbmRzIE1vZGVsPihcbiAgb2xkTW9kZWw6IE0sXG4gIG5ld01vZGVsOiBNLFxuICBjb25zdHJ1Y3Rvcj86IENvbnN0cnVjdG9yPE0+XG4pOiBNIHtcbiAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvciB8fCAob2xkTW9kZWwuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8TT4pO1xuXG4gIGNvbnN0IGV4dHJhY3QgPSAobW9kZWw6IE0pID0+XG4gICAgT2JqZWN0LmVudHJpZXMobW9kZWwpLnJlZHVjZSgoYWNjdW06IFJlY29yZDxzdHJpbmcsIGFueT4sIFtrZXksIHZhbF0pID0+IHtcbiAgICAgIGxldCBoYXNPbmVUb09uZVJlbGF0aW9uID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBNb2RlbC5yZWxhdGlvbnMoY29uc3RydWN0b3IsIGtleSBhcyBrZXlvZiBNKTtcbiAgICAgICAgaWYgKHJlbGF0aW9ucy5rZXkgPT09IFwicmVsYXRpb24ub25lLXRvLW9uZVwiKSBoYXNPbmVUb09uZVJlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBoYXNPbmVUb09uZVJlbGF0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJ1bmRlZmluZWRcIiB8fCBoYXNPbmVUb09uZVJlbGF0aW9uKSBhY2N1bVtrZXldID0gdmFsO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIHt9KTtcblxuICByZXR1cm4gbmV3IGNvbnN0cnVjdG9yKFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGV4dHJhY3Qob2xkTW9kZWwpLCBleHRyYWN0KG5ld01vZGVsKSlcbiAgKTtcbn0uYmluZChNb2RlbCk7XG4iXX0=
|
|
@@ -367,6 +367,7 @@ export class Adapter extends AbsContextual {
|
|
|
367
367
|
flags.correlationId ||
|
|
368
368
|
`${correlationPrefix}|${operation}|${UUID.instance.generate()}`;
|
|
369
369
|
const log = (flags.logger || Logging.for(this));
|
|
370
|
+
const cacheForPopulate = Object.assign({}, DefaultAdapterFlags.cacheForPopulate, flags.cacheForPopulate);
|
|
370
371
|
return Object.assign({}, DefaultAdapterFlags, flags, {
|
|
371
372
|
affectedTables: model
|
|
372
373
|
? [
|
|
@@ -380,6 +381,7 @@ export class Adapter extends AbsContextual {
|
|
|
380
381
|
]),
|
|
381
382
|
]
|
|
382
383
|
: flags.affectedTables,
|
|
384
|
+
cacheForPopulate,
|
|
383
385
|
args: args,
|
|
384
386
|
writeOperation: TransactionOperationKeys.includes(operation),
|
|
385
387
|
timestamp: new Date(),
|
|
@@ -654,8 +656,8 @@ export class Adapter extends AbsContextual {
|
|
|
654
656
|
if (!this.dispatch) {
|
|
655
657
|
log.verbose(`Creating dispatch for ${this.alias}`);
|
|
656
658
|
this.dispatch = this.Dispatch();
|
|
657
|
-
this.dispatch.observe(this);
|
|
658
659
|
}
|
|
660
|
+
this.dispatch.observe(this);
|
|
659
661
|
return () => this.unObserve(observer);
|
|
660
662
|
}
|
|
661
663
|
/**
|
|
@@ -668,6 +670,16 @@ export class Adapter extends AbsContextual {
|
|
|
668
670
|
if (!this.observerHandler)
|
|
669
671
|
throw new InternalError("ObserverHandler not initialized. Did you register any observables?");
|
|
670
672
|
this.observerHandler.unObserve(observer);
|
|
673
|
+
if (this.observerHandler.count() <= 0) {
|
|
674
|
+
this.log
|
|
675
|
+
.for(this.unObserve)
|
|
676
|
+
.debug("No active observers for adpter. Closing dispatcher and unobserving.");
|
|
677
|
+
this.dispatch?.close([]); // close first
|
|
678
|
+
this.dispatch?.unObserve(this); // unobserve later
|
|
679
|
+
// Once initialized, the Dispatch instance must be preserved,
|
|
680
|
+
// because it enhances the adapter’s original methods and links itself to them
|
|
681
|
+
// this.dispatch = undefined;
|
|
682
|
+
}
|
|
671
683
|
this.log
|
|
672
684
|
.for(this.unObserve)
|
|
673
685
|
.debug(`Observer ${observer.toString()} removed`);
|
|
@@ -893,4 +905,4 @@ __decorate([
|
|
|
893
905
|
__metadata("design:type", Object),
|
|
894
906
|
__metadata("design:paramtypes", [])
|
|
895
907
|
], Adapter.prototype, "client", null);
|
|
896
|
-
//# sourceMappingURL=Adapter.js.map
|
|
908
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wZXJzaXN0ZW5jZS9BZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsYUFBYSxFQUdiLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssR0FFTixNQUFNLGdDQUFnQyxDQUFDO0FBR3hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHdCQUF3QixHQUN6Qix1QkFBb0I7QUFLckIsT0FBTyxFQUFFLEtBQUssRUFBMEIsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBYzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsNkJBQTBCO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQWtCO0FBQ3BDLE9BQU8sRUFFTCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxhQUFhLEdBS2QsNENBQXVDO0FBR3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsNEJBQXVCO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsd0JBQXFCO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBc0I7QUFFbkQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDOUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxJQUFJLE1BQU0sS0FBSyxjQUFjO1lBQUUsT0FB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QyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxLQUFLLENBQUMsY0FBYztRQUM1QixPQUFPLElBQXVCLENBQUM7SUFDakMsQ0FBQztJQTRCa0IsTUFBTSxDQUl2QixJQUF1QyxFQUN2QyxTQUFpQixFQUNqQixjQUF1QixLQUFLLEVBQzVCLFNBQXFDO1FBTXJDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEUsQ0FBQzs7QUE3dkJjO0lBRGQsS0FBSyxFQUFFOzs2REFLc0IsT0FBTzs7c0NBZ0VwQztBQThXRDtJQURDLEtBQUssRUFBRTs7OztzQ0FpQlA7QUFTRDtJQURDLEtBQUssRUFBRTs7Ozt3Q0F3QlA7QUFpTEQ7SUFBQyxLQUFLLEVBQUU7OztxQ0FNUCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VFcnJvcixcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxuICBQcmltYXJ5S2V5VHlwZSxcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IHR5cGUgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHtcbiAgaGFzaE9iaixcbiAgTW9kZWwsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuaW1wb3J0IHsgUmF3UGFnZWRFeGVjdXRvciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1Jhd0V4ZWN1dG9yXCI7XG5pbXBvcnQge1xuICBEZWZhdWx0QWRhcHRlckZsYWdzLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFRyYW5zYWN0aW9uT3BlcmF0aW9uS2V5cyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFNlcXVlbmNlIH0gZnJvbSBcIi4vU2VxdWVuY2VcIjtcbmltcG9ydCB7IEVycm9yUGFyc2VyIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuLi9xdWVyeS9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IGZpbmFsLCBJbXBlcnNvbmF0YWJsZSwgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBMb2NrIH0gZnJvbSBcIkBkZWNhZi10cy90cmFuc2FjdGlvbmFsLWRlY29yYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tIFwiLi9EaXNwYXRjaFwiO1xuaW1wb3J0IHtcbiAgQWRhcHRlckRpc3BhdGNoLFxuICB0eXBlIEFkYXB0ZXJGbGFncyxcbiAgQWxsT3BlcmF0aW9uS2V5cyxcbiAgdHlwZSBFdmVudElkcyxcbiAgRmxhZ3NPZixcbiAgdHlwZSBPYnNlcnZlckZpbHRlcixcbiAgUGVyc2lzdGVuY2VPYnNlcnZhYmxlLFxuICBQZXJzaXN0ZW5jZU9ic2VydmVyLFxuICBQcmVwYXJlZE1vZGVsLFxuICBSYXdSZXN1bHQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckhhbmRsZXIgfSBmcm9tIFwiLi9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQge1xuICB0eXBlIENvbnN0cnVjdG9yLFxuICBEZWNvcmF0aW9uLFxuICBEZWZhdWx0Rmxhdm91cixcbiAgTWV0YWRhdGEsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHtcbiAgQWJzQ29udGV4dHVhbCxcbiAgQ29udGV4dHVhbEFyZ3MsXG4gIENvbnRleHR1YWxpemVkQXJncyxcbiAgTWF5YmVDb250ZXh0dWFsQXJnLFxuICBNZXRob2RPck9wZXJhdGlvbixcbn0gZnJvbSBcIi4uL3V0aWxzL0NvbnRleHR1YWxMb2dnZWRDbGFzc1wiO1xuaW1wb3J0IHsgUGFnaW5hdG9yIH0gZnJvbSBcIi4uL3F1ZXJ5L1BhZ2luYXRvclwiO1xuaW1wb3J0IHsgUHJlcGFyZWRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcXVlcnkvdHlwZXNcIjtcbmltcG9ydCB7IHByb21pc2VTZXF1ZW5jZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVVVJRCB9IGZyb20gXCIuL2dlbmVyYXRvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXJUcmFuc2FjdGlvbiB9IGZyb20gXCIuL0NvbnRleHRMb2NrXCI7XG5cbmNvbnN0IGZsYXZvdXJSZXNvbHZlciA9IERlY29yYXRpb25bXCJmbGF2b3VyUmVzb2x2ZXJcIl0uYmluZChEZWNvcmF0aW9uKTtcbkRlY29yYXRpb25bXCJmbGF2b3VyUmVzb2x2ZXJcIl0gPSAob2JqOiBvYmplY3QpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBmbGF2b3VyUmVzb2x2ZXIob2JqKTtcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCAhPT0gRGVmYXVsdEZsYXZvdXIpIHJldHVybiByZXN1bHQ7XG4gICAgY29uc3QgdGFyZ2V0Q3RvciA9XG4gICAgICB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyAob2JqIGFzIENvbnN0cnVjdG9yKVxuICAgICAgICA6ICgob2JqIGFzIHsgY29uc3RydWN0b3I/OiBDb25zdHJ1Y3RvciB9KT8uY29uc3RydWN0b3IgYXNcbiAgICAgICAgICAgIHwgQ29uc3RydWN0b3JcbiAgICAgICAgICAgIHwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCByZWdpc3RlcmVkRmxhdm91ciA9XG4gICAgICB0YXJnZXRDdG9yICYmIHR5cGVvZiBNZXRhZGF0YVtcInJlZ2lzdGVyZWRGbGF2b3VyXCJdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBNZXRhZGF0YS5yZWdpc3RlcmVkRmxhdm91cih0YXJnZXRDdG9yKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVnaXN0ZXJlZEZsYXZvdXIgJiYgcmVnaXN0ZXJlZEZsYXZvdXIgIT09IERlZmF1bHRGbGF2b3VyKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRGbGF2b3VyO1xuICAgIGNvbnN0IGN1cnJlbnRGbGF2b3VyID0gQWRhcHRlcltcIl9jdXJyZW50Rmxhdm91clwiXTtcbiAgICBpZiAoY3VycmVudEZsYXZvdXIpIHtcbiAgICAgIGNvbnN0IGNhY2hlZEFkYXB0ZXIgPSBBZGFwdGVyW1wiX2NhY2hlXCJdPy5bY3VycmVudEZsYXZvdXJdO1xuICAgICAgaWYgKGNhY2hlZEFkYXB0ZXI/LmZsYXZvdXIpIHJldHVybiBjYWNoZWRBZGFwdGVyLmZsYXZvdXI7XG4gICAgICByZXR1cm4gY3VycmVudEZsYXZvdXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHJldHVybiBEZWZhdWx0Rmxhdm91cjtcbiAgfVxufTtcblxuY29uc3QgQWRhcHRlclByb3h5Q2xlYW51cCA9IFN5bWJvbChcIkFkYXB0ZXJQcm94eUNsZWFudXBcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnVsa1NlcXVlbmNlUmVzdWx0PFQ+KFxuICByZXN1bHQ6IFRbXSB8IFByb21pc2VTZXR0bGVkUmVzdWx0PFQ+W10sXG4gIGNvbnRpbnVlT25FcnJvcjogYm9vbGVhbixcbiAgbG9nOiBMb2dnZXIsXG4gIG9wZXJhdGlvbjogc3RyaW5nXG4pOiBUW10ge1xuICBpZiAoIWNvbnRpbnVlT25FcnJvcikge1xuICAgIHJldHVybiByZXN1bHQgYXMgVFtdO1xuICB9XG5cbiAgY29uc3Qgc2V0dGxlZCA9IHJlc3VsdCBhcyBQcm9taXNlU2V0dGxlZFJlc3VsdDxUPltdO1xuICBjb25zdCBmdWxmaWxsZWQ6IFRbXSA9IFtdO1xuICBjb25zdCBlcnJvcnM6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2Ygc2V0dGxlZCkge1xuICAgIGlmIChlbnRyeS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpIHtcbiAgICAgIGZ1bGZpbGxlZC5wdXNoKGVudHJ5LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JzLnB1c2goZW50cnkucmVhc29uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYEJ1bGsgJHtvcGVyYXRpb259IGVuY291bnRlcmVkICR7ZXJyb3JzLmxlbmd0aH0gZmFpbHVyZShzKSB3aGlsZSBjb250aW51aW5nYFxuICAgICk7XG4gICAgY29uc3QgYWdncmVnYXRlID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgZXJyb3JzLFxuICAgICAgYEJ1bGsgJHtvcGVyYXRpb259IGZhaWxlZCBmb3IgJHtlcnJvcnMubGVuZ3RofSBpdGVtKHMpYFxuICAgICk7XG4gICAgKGFnZ3JlZ2F0ZSBhcyBhbnkpLnJlc3VsdHMgPSBzZXR0bGVkO1xuICAgIHRocm93IGFnZ3JlZ2F0ZTtcbiAgfVxuICByZXR1cm4gZnVsZmlsbGVkO1xufVxuXG5leHBvcnQgdHlwZSBBZGFwdGVyU3ViQ2xhc3M8QT4gPVxuICBBIGV4dGVuZHMgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+ID8gQSA6IG5ldmVyO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBGYWNhZGUgY2xhc3MgZm9yIHBlcnNpc3RlbmNlIGFkYXB0ZXJzXG4gKiBAc3VtbWFyeSBQcm92aWRlcyB0aGUgZm91bmRhdGlvbiBmb3IgYWxsIGRhdGFiYXNlIGFkYXB0ZXJzIGluIHRoZSBwZXJzaXN0ZW5jZSBsYXllci4gVGhpcyBjbGFzc1xuICogaW1wbGVtZW50cyBzZXZlcmFsIGludGVyZmFjZXMgdG8gcHJvdmlkZSBhIGNvbnNpc3RlbnQgQVBJIGZvciBkYXRhYmFzZSBvcGVyYXRpb25zLCBvYnNlcnZlclxuICogcGF0dGVybiBzdXBwb3J0LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEl0IG1hbmFnZXMgYWRhcHRlciByZWdpc3RyYXRpb24sIENSVUQgb3BlcmF0aW9ucywgYW5kXG4gKiBvYnNlcnZlciBub3RpZmljYXRpb25zLlxuICogQHRlbXBsYXRlIENPTkZJRyAtIFRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIGRyaXZlciBjb25maWdcbiAqIEB0ZW1wbGF0ZSBRVUVSWSAtIFRoZSBxdWVyeSBvYmplY3QgdHlwZSB1c2VkIGJ5IHRoZSBhZGFwdGVyXG4gKiBAdGVtcGxhdGUgRkxBR1MgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQ09OVEVYVCAtIFRoZSBjb250ZXh0IHR5cGVcbiAqIEBwYXJhbSB7Q09ORklHfSBfY29uZmlnIC0gVGhlIHVuZGVybHlpbmcgcGVyc2lzdGVuY2UgZHJpdmVyIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgLSBUaGUgaWRlbnRpZmllciBmb3IgdGhpcyBhZGFwdGVyIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbX2FsaWFzXSAtIE9wdGlvbmFsIGFsdGVybmF0aXZlIG5hbWUgZm9yIHRoaXMgYWRhcHRlclxuICogQGNsYXNzIEFkYXB0ZXJcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbXBsZW1lbnRpbmcgYSBjb25jcmV0ZSBhZGFwdGVyXG4gKiBjbGFzcyBQb3N0Z3Jlc0FkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVyPHBnLlBvb2xDb25maWcsIHBnLlF1ZXJ5LCBQb3N0Z3Jlc0ZsYWdzLCBQb3N0Z3Jlc0NvbnRleHQ+IHtcbiAqICAgY29uc3RydWN0b3IoY2xpZW50OiBwZy5Qb29sQ29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY2xpZW50LCAncG9zdGdyZXMnKTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAqICAgICAvLyBTZXQgdXAgdGhlIGFkYXB0ZXJcbiAqICAgICBhd2FpdCB0aGlzLm5hdGl2ZS5jb25uZWN0KCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbCkge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uIGZvciBjcmVhdGluZyByZWNvcmRzXG4gKiAgICAgY29uc3QgY29sdW1ucyA9IE9iamVjdC5rZXlzKG1vZGVsKS5qb2luKCcsICcpO1xuICogICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMobW9kZWwpO1xuICogICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHZhbHVlcy5tYXAoKF8sIGkpID0+IGAkJHtpKzF9YCkuam9pbignLCAnKTtcbiAqXG4gKiAgICAgY29uc3QgcXVlcnkgPSBgSU5TRVJUIElOVE8gJHt0YWJsZU5hbWV9ICgke2NvbHVtbnN9KSBWQUxVRVMgKCR7cGxhY2Vob2xkZXJzfSkgUkVUVVJOSU5HICpgO1xuICogICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubmF0aXZlLnF1ZXJ5KHF1ZXJ5LCB2YWx1ZXMpO1xuICogICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbiAqICAgfVxuICpcbiAqICAgLy8gT3RoZXIgcmVxdWlyZWQgbWV0aG9kIGltcGxlbWVudGF0aW9ucy4uLlxuICogfVxuICpcbiAqIC8vIFVzaW5nIHRoZSBhZGFwdGVyXG4gKiBjb25zdCBwZ0NsaWVudCA9IG5ldyBwZy5DbGllbnQoY29ubmVjdGlvblN0cmluZyk7XG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IFBvc3RncmVzQWRhcHRlcihwZ0NsaWVudCk7XG4gKiBhd2FpdCBhZGFwdGVyLmluaXRpYWxpemUoKTtcbiAqXG4gKiAvLyBTZXQgYXMgdGhlIGRlZmF1bHQgYWRhcHRlclxuICogQWRhcHRlci5zZXRDdXJyZW50KCdwb3N0Z3JlcycpO1xuICpcbiAqIC8vIFBlcmZvcm0gb3BlcmF0aW9uc1xuICogY29uc3QgdXNlciA9IGF3YWl0IGFkYXB0ZXIuY3JlYXRlKCd1c2VycycsIDEsIHsgbmFtZTogJ0pvaG4nLCBlbWFpbDogJ2pvaG5AZXhhbXBsZS5jb20nIH0pO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogY2xhc3NEaWFncmFtXG4gKiAgIGNsYXNzIEFkYXB0ZXIge1xuICogICAgICtZIG5hdGl2ZVxuICogICAgICtzdHJpbmcgZmxhdm91clxuICogICAgICtzdHJpbmcgYWxpYXNcbiAqICAgICArY3JlYXRlKHRhYmxlTmFtZSwgaWQsIG1vZGVsKVxuICogICAgICtyZWFkKHRhYmxlTmFtZSwgaWQpXG4gKiAgICAgK3VwZGF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbClcbiAqICAgICArZGVsZXRlKHRhYmxlTmFtZSwgaWQpXG4gKiAgICAgK29ic2VydmUob2JzZXJ2ZXIsIGZpbHRlcilcbiAqICAgICArdW5PYnNlcnZlKG9ic2VydmVyKVxuICogICAgICtzdGF0aWMgY3VycmVudFxuICogICAgICtzdGF0aWMgZ2V0KGZsYXZvdXIpXG4gKiAgICAgK3N0YXRpYyBzZXRDdXJyZW50KGZsYXZvdXIpXG4gKiAgIH1cbiAqXG4gKiAgIGNsYXNzIFJhd0V4ZWN1dG9yIHtcbiAqICAgICArcmF3KHF1ZXJ5KVxuICogICB9XG4gKlxuICogICBjbGFzcyBPYnNlcnZhYmxlIHtcbiAqICAgICArb2JzZXJ2ZShvYnNlcnZlciwgZmlsdGVyKVxuICogICAgICt1bk9ic2VydmUob2JzZXJ2ZXIpXG4gKiAgICAgK3VwZGF0ZU9ic2VydmVycyh0YWJsZSwgZXZlbnQsIGlkKVxuICogICB9XG4gKlxuICogICBjbGFzcyBPYnNlcnZlciB7XG4gKiAgICAgK3JlZnJlc2godGFibGUsIGV2ZW50LCBpZClcbiAqICAgfVxuICpcbiAqICAgY2xhc3MgRXJyb3JQYXJzZXIge1xuICogICAgICtwYXJzZUVycm9yKGVycilcbiAqICAgfVxuICpcbiAqICAgQWRhcHRlciAtLXw+IFJhd0V4ZWN1dG9yXG4gKiAgIEFkYXB0ZXIgLS18PiBPYnNlcnZhYmxlXG4gKiAgIEFkYXB0ZXIgLS18PiBPYnNlcnZlclxuICogICBBZGFwdGVyIC0tfD4gRXJyb3JQYXJzZXJcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFkYXB0ZXI8XG4gICAgQ09ORixcbiAgICBDT05OLFxuICAgIFFVRVJZLFxuICAgIENPTlRFWFQgZXh0ZW5kcyBDb250ZXh0PEFkYXB0ZXJGbGFncz4gPSBDb250ZXh0PEFkYXB0ZXJGbGFncz4sXG4gID5cbiAgZXh0ZW5kcyBBYnNDb250ZXh0dWFsPENPTlRFWFQ+XG4gIGltcGxlbWVudHNcbiAgICBSYXdQYWdlZEV4ZWN1dG9yPFFVRVJZPixcbiAgICBQZXJzaXN0ZW5jZU9ic2VydmFibGU8Q09OVEVYVD4sXG4gICAgUGVyc2lzdGVuY2VPYnNlcnZlcjxDT05URVhUPixcbiAgICBJbXBlcnNvbmF0YWJsZTxhbnksIFtQYXJ0aWFsPENPTkY+LCAuLi5hbnlbXV0+LFxuICAgIEVycm9yUGFyc2VyXG57XG4gIHByaXZhdGUgc3RhdGljIF9jdXJyZW50Rmxhdm91cj86IHN0cmluZztcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBSZWNvcmQ8c3RyaW5nLCBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4+ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9iYXNlUmVwb3NpdG9yeTogQ29uc3RydWN0b3I8UmVwb3NpdG9yeTxhbnksIGFueT4+O1xuICBwcml2YXRlIHN0YXRpYyBfYmFzZVNlcXVlbmNlOiBDb25zdHJ1Y3RvcjxTZXF1ZW5jZT47XG4gIHByaXZhdGUgc3RhdGljIF9iYXNlRGlzcGF0Y2g6IENvbnN0cnVjdG9yPFxuICAgIERpc3BhdGNoPEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pj5cbiAgPjtcblxuICBwcm90ZWN0ZWQgZGlzcGF0Y2g/OiBBZGFwdGVyRGlzcGF0Y2g8QWRhcHRlcjxDT05GLCBDT05OLCBRVUVSWSwgQ09OVEVYVD4+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBvYnNlcnZlckhhbmRsZXI/OiBPYnNlcnZlckhhbmRsZXI7XG5cbiAgcHJvdGVjdGVkIF9jbGllbnQ/OiBDT05OO1xuXG4gIHByb3RlY3RlZCBzaHV0ZG93blByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBJbnRlcm5hbCBsb2NrIGZvciBzaHV0ZG93biBtZWNoYW5pc21zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgaW50ZXJuYWxMb2NrOiBMb2NrID0gbmV3IExvY2soKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIG5hdGl2ZSBwZXJzaXN0ZW5jZSBjb25maWdcbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIGRyaXZlciBjb25maWdcbiAgICogQHRlbXBsYXRlIENPTkZcbiAgICogQHJldHVybiB7Q09ORn0gVGhlIG5hdGl2ZSBwZXJzaXN0ZW5jZSBkcml2ZXIgY29uZmlnXG4gICAqL1xuICBnZXQgY29uZmlnKCk6IENPTkYge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGFkYXB0ZXIncyBhbGlhcyBvciBmbGF2b3IgbmFtZVxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBhbGlhcyBpZiBzZXQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBmbGF2b3IgbmFtZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBhZGFwdGVyJ3MgaWRlbnRpZmllclxuICAgKi9cbiAgZ2V0IGFsaWFzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWFzIHx8IHRoaXMuZmxhdm91cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBmb3IgdGhpcyBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyByZXBvc2l0b3JpZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBhZGFwdGVyXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHJldHVybiB7Q29uc3RydWN0b3I8UmVwb3NpdG9yeTxhbnksIEFkYXB0ZXI8Q09ORiwgQ09OTiwgUVVFUlksIENPTlRFWFQ+Pj59IFRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yXG4gICAqL1xuICByZXBvc2l0b3J5PFxuICAgIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PGFueSwgQWRhcHRlcjxDT05GLCBDT05OLCBRVUVSWSwgQ09OVEVYVD4+LFxuICA+KCk6IENvbnN0cnVjdG9yPFI+IHtcbiAgICBpZiAoIUFkYXB0ZXIuX2Jhc2VSZXBvc2l0b3J5KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIHdoZW4gbmVjZXNzYXJ5LiBPdGhlcndpc2UgaXQgd2lsbCBiZSByZXBsYWNlZCBsYXppbHlgXG4gICAgICApO1xuICAgIHJldHVybiBBZGFwdGVyLl9iYXNlUmVwb3NpdG9yeSBhcyBDb25zdHJ1Y3RvcjxSPjtcbiAgfVxuXG4gIHRyYW5zYWN0aW9uTG9jayguLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBuZXcgQWRhcHRlclRyYW5zYWN0aW9uKHRoaXMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNodXRkb3duUHJveGllcyguLi5hcmdzOiBDb250ZXh0dWFsQXJnczxhbnk+KTogUHJvbWlzZTx2b2lkPjtcbiAgcHJvdGVjdGVkIGFzeW5jIHNodXRkb3duUHJveGllcyhcbiAgICBrOiBzdHJpbmcsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8YW55PlxuICApOiBQcm9taXNlPHZvaWQ+O1xuICBwcm90ZWN0ZWQgYXN5bmMgc2h1dGRvd25Qcm94aWVzKGs/OiBzdHJpbmcsIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPGFueT4pIHtcbiAgICBpZiAoayAmJiB0eXBlb2YgayAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgYXJncyA9IFtrLCAuLi5hcmdzXTtcbiAgICAgIGsgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHsgbG9nIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnNodXRkb3duUHJveGllcyk7XG4gICAgaWYgKCF0aGlzLnByb3hpZXMpIHJldHVybjtcbiAgICBpZiAoayAmJiAhKGsgaW4gdGhpcy5wcm94aWVzKSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBObyBwcm94eSBmb3VuZCBmb3IgJHtrfWApO1xuICAgIGNvbnN0IGNsZWFudXBQcm94eSA9IGFzeW5jIChwcm94eT86IHR5cGVvZiB0aGlzKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoIXByb3h5KSByZXR1cm47XG4gICAgICBjb25zdCBjbGVhbnVwID0gKHByb3h5IGFzIGFueSlbQWRhcHRlclByb3h5Q2xlYW51cF07XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikgYXdhaXQgY2xlYW51cCgpO1xuICAgIH07XG4gICAgaWYgKCFrKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3hpZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjbGVhbnVwUHJveHkodGhpcy5wcm94aWVzW2tleV0pO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gY2xlYW51cCBwcm94aWVkIGFkYXB0ZXIgJHtrZXl9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMucHJveGllc1trZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUHJveHkodGhpcy5wcm94aWVzW2tdKTtcbiAgICAgICAgZGVsZXRlIHRoaXMucHJveGllc1trXTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gY2xlYW51cCBwcm94aWVkIGFkYXB0ZXIgJHtrfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2h1dHMgZG93biB0aGUgYWRhcHRlclxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgY2xvc2luZyBjb25uZWN0aW9uc1xuICAgKiBXaGVuIG92ZXJyaWRpbmcgdGhpcyBtZXRob2QsIGVuc3VyZSB0byBjYWxsIHRoZSBiYXNlIG1ldGhvZCBmaXJzdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNodXRkb3duIGlzIGNvbXBsZXRlXG4gICAqL1xuICBhc3luYyBzaHV0ZG93biguLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q09OVEVYVD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUGVyc2lzdGVuY2VLZXlzLlNIVVRET1dOLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuc2h1dGRvd24pO1xuICAgIGF3YWl0IHRoaXMuaW50ZXJuYWxMb2NrLmFjcXVpcmUoUGVyc2lzdGVuY2VLZXlzLlNIVVRET1dOKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc2h1dGRvd25Qcm9taXNlKSByZXR1cm4gdGhpcy5zaHV0ZG93blByb21pc2U7XG4gICAgICB0aGlzLnNodXRkb3duUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgbG9nLFxuICAgICAgICB9ID0gLy8gVE9ETyBwYXNzIGNvbnRleHQgYWxvbmcuIGl0IHNob3VsZCBnbyBldmVyeXdoZXJlXG4gICAgICAgICAgKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFBlcnNpc3RlbmNlS2V5cy5TSFVURE9XTiwgdHJ1ZSkpLmZvcihcbiAgICAgICAgICAgIHRoaXMuc2h1dGRvd25cbiAgICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnNodXRkb3duUHJveGllcyguLi5jdHhBcmdzKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGF0Y2gpIGF3YWl0IHRoaXMuZGlzcGF0Y2guY2xvc2UoLi4uY3R4QXJncyk7XG4gICAgICB9KSgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIHNodXRkb3duIHdyYXBwZXI6ICR7ZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pbnRlcm5hbExvY2sucmVsZWFzZShQZXJzaXN0ZW5jZUtleXMuU0hVVERPV04pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zaHV0ZG93blByb21pc2U7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBkdXJpbmcgcHJveHkgc2h1dGRvd25gLCBlIGFzIEVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zaHV0ZG93blByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGFkYXB0ZXIgd2l0aCB0aGUgbmF0aXZlIGRyaXZlciBhbmQgcmVnaXN0ZXJzIGl0IGluIHRoZSBhZGFwdGVyIGNhY2hlXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDT05GLFxuICAgIHJlYWRvbmx5IGZsYXZvdXI6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbGlhcz86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0aGlzLmFsaWFzIGluIEFkYXB0ZXIuX2NhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGAke3RoaXMuYWxpYXN9IHBlcnNpc3RlbmNlIGFkYXB0ZXIgJHt0aGlzLl9hbGlhcyA/IGAoJHt0aGlzLmZsYXZvdXJ9KSBgIDogXCJcIn0gYWxyZWFkeSByZWdpc3RlcmVkYFxuICAgICAgKTtcbiAgICBBZGFwdGVyLl9jYWNoZVt0aGlzLmFsaWFzXSA9IHRoaXM7XG4gICAgaWYgKHRoaXMuYWxpYXMgIT09IHRoaXMuZmxhdm91cikge1xuICAgICAgQWRhcHRlci5fY2FjaGVbdGhpcy5mbGF2b3VyXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMubG9nLmluZm8oXG4gICAgICBgQ3JlYXRlZCAke3RoaXMuYWxpYXN9IHBlcnNpc3RlbmNlIGFkYXB0ZXIgJHt0aGlzLl9hbGlhcyA/IGAoJHt0aGlzLmZsYXZvdXJ9KSBgIDogXCJcIn0gcGVyc2lzdGVuY2UgYWRhcHRlcmBcbiAgICApO1xuICAgIGlmICghQWRhcHRlci5fY3VycmVudEZsYXZvdXIpIHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYERlZmluZWQgJHt0aGlzLmFsaWFzfSBwZXJzaXN0ZW5jZSBhZGFwdGVyIGFzIGN1cnJlbnRgKTtcbiAgICAgIEFkYXB0ZXIuX2N1cnJlbnRGbGF2b3VyID0gdGhpcy5hbGlhcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgc3RhdGVtZW50IGJ1aWxkZXIgZm9yIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIHN0YXRlbWVudCBidWlsZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHF1ZXJpZXMgZm9yIGEgc3BlY2lmaWMgbW9kZWxcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcmV0dXJuIHtTdGF0ZW1lbnR9IEEgc3RhdGVtZW50IGJ1aWxkZXIgZm9yIHRoZSBtb2RlbFxuICAgKi9cbiAgYWJzdHJhY3QgU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxBZGFwdGVyRmxhZ3M+XG4gICk6IFN0YXRlbWVudDxNLCBBZGFwdGVyPENPTkYsIENPTk4sIFFVRVJZLCBDT05URVhUPiwgYW55PjtcblxuICBhYnN0cmFjdCBQYWdpbmF0b3I8TSBleHRlbmRzIE1vZGVsPihcbiAgICBxdWVyeTogUVVFUlkgfCBQcmVwYXJlZFN0YXRlbWVudDxNPixcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICk6IFBhZ2luYXRvcjxNLCBhbnksIFFVRVJZPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgZGlzcGF0Y2ggaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgRmFjdG9yeSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgZGlzcGF0Y2ggaW5zdGFuY2UgZm9yIHRoaXMgYWRhcHRlclxuICAgKiBAcmV0dXJuIHtEaXNwYXRjaH0gQSBuZXcgZGlzcGF0Y2ggaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBEaXNwYXRjaCgpOiBEaXNwYXRjaDxBZGFwdGVyPENPTkYsIENPTk4sIFFVRVJZLCBDT05URVhUPj4ge1xuICAgIHJldHVybiBuZXcgQWRhcHRlci5fYmFzZURpc3BhdGNoKCkgYXMgRGlzcGF0Y2g8XG4gICAgICBBZGFwdGVyPENPTkYsIENPTk4sIFFVRVJZLCBDT05URVhUPlxuICAgID47XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgb2JzZXJ2ZXIgaGFuZGxlclxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYW4gb2JzZXJ2ZXIgaGFuZGxlciBmb3IgdGhpcyBhZGFwdGVyXG4gICAqIEByZXR1cm4ge09ic2VydmVySGFuZGxlcn0gQSBuZXcgb2JzZXJ2ZXIgaGFuZGxlciBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIE9ic2VydmVySGFuZGxlcigpOiBPYnNlcnZlckhhbmRsZXIge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXJIYW5kbGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyByZXNlcnZlZFxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgaXMgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGEgY29sdW1uIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIgLSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByb3RlY3RlZCBpc1Jlc2VydmVkKGF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhYXR0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgZGF0YWJhc2UgZXJyb3IgaW50byBhIHN0YW5kYXJkaXplZCBlcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBkYXRhYmFzZS1zcGVjaWZpYyBlcnJvcnMgaW50byBzdGFuZGFyZGl6ZWQgYXBwbGljYXRpb24gZXJyb3JzXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVyciAtIFRoZSBvcmlnaW5hbCBkYXRhYmFzZSBlcnJvclxuICAgKiBAcGFyYW0gYXJnc1xuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IEEgc3RhbmRhcmRpemVkIGVycm9yXG4gICAqL1xuICBhYnN0cmFjdCBwYXJzZUVycm9yPEUgZXh0ZW5kcyBCYXNlRXJyb3I+KGVycjogRXJyb3IsIC4uLmFyZ3M6IGFueVtdKTogRTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGFueSBuZWNlc3Nhcnkgc2V0dXAgZm9yIHRoZSBhZGFwdGVyLCBzdWNoIGFzIGVzdGFibGlzaGluZyBjb25uZWN0aW9uc1xuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gSW5pdGlhbGl6YXRpb24gYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXN5bmMgaW5pdGlhbGl6ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzZXF1ZW5jZSBnZW5lcmF0b3JcbiAgICogQHN1bW1hcnkgRmFjdG9yeSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgc2VxdWVuY2UgZ2VuZXJhdG9yIGZvciBnZW5lcmF0aW5nIHNlcXVlbnRpYWwgdmFsdWVzXG4gICAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc2VxdWVuY2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTZXF1ZW5jZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbmV3IHNlcXVlbmNlIGluc3RhbmNlXG4gICAqL1xuICBhc3luYyBTZXF1ZW5jZShcbiAgICBvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGbGFnc09mPENPTlRFWFQ+PlxuICApOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIG5ldyBBZGFwdGVyLl9iYXNlU2VxdWVuY2Uob3B0aW9ucywgdGhpcywgb3ZlcnJpZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyByZXBvc2l0b3J5IGZsYWdzIGZvciBhbiBvcGVyYXRpb25cbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgc2V0IG9mIGZsYWdzIHRoYXQgZGVzY3JpYmUgYSBkYXRhYmFzZSBvcGVyYXRpb24sIGNvbWJpbmluZyBkZWZhdWx0IGZsYWdzIHdpdGggb3ZlcnJpZGVzXG4gICAqIEB0ZW1wbGF0ZSBGIC0gVGhlIFJlcG9zaXRvcnkgRmxhZ3MgdHlwZVxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c30gb3BlcmF0aW9uIC0gVGhlIHR5cGUgb2Ygb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IGZsYWdzIC0gQ3VzdG9tIGZsYWcgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEY+fSBUaGUgY29tcGxldGUgc2V0IG9mIGZsYWdzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMgfCBzdHJpbmcsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgQ29uc3RydWN0b3I8TT5bXSB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczogUGFydGlhbDxGbGFnc09mPENPTlRFWFQ+PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q09OVEVYVD5cbiAgKTogUHJvbWlzZTxGbGFnc09mPENPTlRFWFQ+PiB7XG4gICAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiTW9kZWwgbXVzdCBiZSBhIGNvbnN0cnVjdG9yIG9yIGFycmF5IG9mIGNvbnN0cnVjdG9ycyBvciB1bmRlZmluZWQuIHRoaXMgc2hvdWxkIGJlIGltcG9zc2libGVcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0TW9kZWwgPSBBcnJheS5pc0FycmF5KG1vZGVsKVxuICAgICAgPyBtb2RlbC5sZW5ndGhcbiAgICAgICAgPyBtb2RlbFswXVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgOiBtb2RlbDtcbiAgICBjb25zdCBjb3JyZWxhdGlvblByZWZpeCA9IHRhcmdldE1vZGVsXG4gICAgICA/IGAke01vZGVsLnRhYmxlTmFtZSh0YXJnZXRNb2RlbCl9YFxuICAgICAgOiBcIlwiO1xuICAgIGZsYWdzLmNvcnJlbGF0aW9uSWQgPVxuICAgICAgZmxhZ3MuY29ycmVsYXRpb25JZCB8fFxuICAgICAgYCR7Y29ycmVsYXRpb25QcmVmaXh9fCR7b3BlcmF0aW9ufXwke1VVSUQuaW5zdGFuY2UuZ2VuZXJhdGUoKX1gO1xuICAgIGNvbnN0IGxvZyA9IChmbGFncy5sb2dnZXIgfHwgTG9nZ2luZy5mb3IodGhpcyBhcyBhbnkpKSBhcyBMb2dnZXI7XG4gICAgY29uc3QgY2FjaGVGb3JQb3B1bGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRBZGFwdGVyRmxhZ3MuY2FjaGVGb3JQb3B1bGF0ZSxcbiAgICAgIGZsYWdzLmNhY2hlRm9yUG9wdWxhdGVcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0QWRhcHRlckZsYWdzLCBmbGFncywge1xuICAgICAgYWZmZWN0ZWRUYWJsZXM6IG1vZGVsXG4gICAgICAgID8gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChbXG4gICAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsIDogW21vZGVsXSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICAgICAgICAuLi4oZmxhZ3MuYWZmZWN0ZWRUYWJsZXNcbiAgICAgICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoZmxhZ3MuYWZmZWN0ZWRUYWJsZXMpXG4gICAgICAgICAgICAgICAgICA/IGZsYWdzLmFmZmVjdGVkVGFibGVzXG4gICAgICAgICAgICAgICAgICA6IFtmbGFncy5hZmZlY3RlZFRhYmxlc11cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBmbGFncy5hZmZlY3RlZFRhYmxlcyxcbiAgICAgIGNhY2hlRm9yUG9wdWxhdGUsXG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgd3JpdGVPcGVyYXRpb246IFRyYW5zYWN0aW9uT3BlcmF0aW9uS2V5cy5pbmNsdWRlcyhvcGVyYXRpb24pLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb24sXG4gICAgICBpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXM6IG1vZGVsXG4gICAgICAgID8gTWV0YWRhdGEudmFsaWRhdGlvbkV4Y2VwdGlvbnMoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KG1vZGVsKSAmJiBtb2RlbFswXVxuICAgICAgICAgICAgICA/IChtb2RlbFswXSBhcyBDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgOiAobW9kZWwgYXMgQ29uc3RydWN0b3IpLFxuICAgICAgICAgICAgb3BlcmF0aW9uIGFzIGFueVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSxcbiAgICAgIGxvZ2dlcjogbG9nLFxuICAgIH0pIGFzIHVua25vd24gYXMgRmxhZ3NPZjxDT05URVhUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbnRleHQgY29uc3RydWN0b3IgZm9yIHRoaXMgYWRhcHRlclxuICAgKiBAc3VtbWFyeSBSZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQgY2xhc3MgY29uc3RydWN0b3IgdXNlZCBieSB0aGlzIGFkYXB0ZXJcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgQ29udGV4dCgpOiBDb25zdHJ1Y3RvcjxDT05URVhUPiB7XG4gICAgcmV0dXJuIENvbnRleHQ8RmxhZ3NPZjxDT05URVhUPj4gYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxDT05URVhUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNvbnRleHQgZm9yIGEgZGF0YWJhc2Ugb3BlcmF0aW9uXG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGNvbnRleHQgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgZGF0YWJhc2Ugb3BlcmF0aW9uLCB1c2VkIGZvciB0cmFja2luZyBhbmQgYXVkaXRpbmdcbiAgICogQHRlbXBsYXRlIEYgLSBUaGUgUmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzLkNSRUFURXxPcGVyYXRpb25LZXlzLlJFQUR8T3BlcmF0aW9uS2V5cy5VUERBVEV8T3BlcmF0aW9uS2V5cy5ERUxFVEV9IG9wZXJhdGlvbiAtIFRoZSB0eXBlIG9mIG9wZXJhdGlvblxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IG92ZXJyaWRlcyAtIEN1c3RvbSBmbGFnIG92ZXJyaWRlc1xuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRleHQgb2JqZWN0XG4gICAqL1xuICBAZmluYWwoKVxuICBvdmVycmlkZSBhc3luYyBjb250ZXh0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3BlcmF0aW9uOiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgQWxsT3BlcmF0aW9uS2V5cyxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8RmxhZ3NPZjxDT05URVhUPj4sXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgQ29uc3RydWN0b3I8TT5bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxhbnk+PlxuICApOiBQcm9taXNlPENPTlRFWFQ+IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jb250ZXh0KTtcbiAgICBsb2cuc2lsbHkoXG4gICAgICBgY3JlYXRpbmcgbmV3IGNvbnRleHQgZm9yICR7b3BlcmF0aW9ufSBvcGVyYXRpb24gb24gJHttb2RlbCA/IChBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsLm1hcCgobSkgPT4gTW9kZWwudGFibGVOYW1lKG0pKSA6IE1vZGVsLnRhYmxlTmFtZShtb2RlbCkpIDogXCJub1wifSB0YWJsZSAke292ZXJyaWRlcyAmJiBPYmplY3Qua2V5cyhvdmVycmlkZXMpID8gT2JqZWN0LmtleXMob3ZlcnJpZGVzKS5sZW5ndGggOiBcIm5vXCJ9IHdpdGggZmxhZyBvdmVycmlkZXNgXG4gICAgKTtcbiAgICBsZXQgY3R4ID0gYXJncy5wb3AoKTtcbiAgICBpZiAodHlwZW9mIGN0eCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhKGN0eCBpbnN0YW5jZW9mIENvbnRleHQpKSB7XG4gICAgICBhcmdzLnB1c2goY3R4KTtcbiAgICAgIGN0eCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBvdmVycmlkZXMgPSBjdHhcbiAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgY3R4LnRvT3ZlcnJpZGVzKCksIG92ZXJyaWRlcylcbiAgICAgIDogb3ZlcnJpZGVzO1xuICAgIGNvbnN0IGZsYWdzID0gYXdhaXQgdGhpcy5mbGFncyhcbiAgICAgIHR5cGVvZiBvcGVyYXRpb24gPT09IFwic3RyaW5nXCIgPyBvcGVyYXRpb24gOiBvcGVyYXRpb24ubmFtZSxcbiAgICAgIG1vZGVsLFxuICAgICAgb3ZlcnJpZGVzIGFzIFBhcnRpYWw8RmxhZ3NPZjxDT05URVhUPj4sXG4gICAgICAuLi5bLi4uYXJncywgY3R4XS5maWx0ZXIoQm9vbGVhbilcbiAgICApO1xuXG4gICAgaWYgKGN0eCkge1xuICAgICAgaWYgKCEoY3R4IGluc3RhbmNlb2YgdGhpcy5Db250ZXh0KSkge1xuICAgICAgICBjb25zdCBuZXdDdHggPSBuZXcgdGhpcy5Db250ZXh0KCkuYWNjdW11bGF0ZSh7XG4gICAgICAgICAgLi4uY3R4W1wiY2FjaGVcIl0sXG4gICAgICAgICAgLi4uZmxhZ3MsXG4gICAgICAgICAgcGFyZW50Q29udGV4dDogY3R4LFxuICAgICAgICB9KSBhcyBhbnk7XG4gICAgICAgIGN0eC5hY2N1bXVsYXRlKHtcbiAgICAgICAgICBjaGlsZENvbnRleHRzOiBbXG4gICAgICAgICAgICAuLi4oY3R4LmdldE9yVW5kZWZpbmVkKFwiY2hpbGRDb250ZXh0c1wiKSB8fCBbXSksXG4gICAgICAgICAgICBuZXdDdHgsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDdHg7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3AgPSBjdHguZ2V0T3JVbmRlZmluZWQoXCJvcGVyYXRpb25cIik7XG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBjdHguZ2V0T3JVbmRlZmluZWQoXCJhZmZlY3RlZFRhYmxlc1wiKTtcbiAgICAgIGlmIChcbiAgICAgICAgIWN1cnJlbnRPcCB8fFxuICAgICAgICBjdXJyZW50T3AgIT09IG9wZXJhdGlvbiB8fFxuICAgICAgICAobW9kZWwgJiYgbW9kZWwgIT09IGN1cnJlbnRNb2RlbClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBuZXdDdHggPSBuZXcgdGhpcy5Db250ZXh0KCkuYWNjdW11bGF0ZSh7XG4gICAgICAgICAgLi4uY3R4W1wiY2FjaGVcIl0sXG4gICAgICAgICAgLi4uZmxhZ3MsXG4gICAgICAgICAgcGFyZW50Q29udGV4dDogY3R4LFxuICAgICAgICB9KSBhcyBhbnk7XG5cbiAgICAgICAgY3R4LmFjY3VtdWxhdGUoe1xuICAgICAgICAgIGNoaWxkQ29udGV4dHM6IFtcbiAgICAgICAgICAgIC4uLihjdHguZ2V0T3JVbmRlZmluZWQoXCJjaGlsZENvbnRleHRzXCIpIHx8IFtdKSxcbiAgICAgICAgICAgIG5ld0N0eCxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld0N0eDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdHguYWNjdW11bGF0ZShmbGFncykgYXMgYW55O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgdGhpcy5Db250ZXh0KCkuYWNjdW11bGF0ZSh7XG4gICAgICAuLi5mbGFncyxcbiAgICB9KSBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHBlcnNpc3RlbmNlXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgbW9kZWwgaW5zdGFuY2UgaW50byBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgZGF0YWJhc2Ugc3RvcmFnZSxcbiAgICogaGFuZGxpbmcgY29sdW1uIG1hcHBpbmcgYW5kIHNlcGFyYXRpbmcgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICogaGFuZGxpbmcgY29sdW1uIG1hcHBpbmcgYW5kIHNlcGFyYXRpbmcgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHByZXBhcmVcbiAgICogQHBhcmFtIGFyZ3MgLSBvcHRpb25hbCBhcmdzIGZvciBzdWJjbGFzc2luZyBwdXJwb3Nlc1xuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBkYXRhXG4gICAqL1xuICBwcmVwYXJlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogUHJlcGFyZWRNb2RlbCB7XG4gICAgY29uc3QgeyBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucHJlcGFyZSk7XG4gICAgY29uc3Qgc3BsaXQgPSBtb2RlbC5zZWdyZWdhdGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhzcGxpdC5tb2RlbCkucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gYWNjdW07XG4gICAgICAgIGNvbnN0IG1hcHBlZFByb3A6IHN0cmluZyA9IE1vZGVsLmNvbHVtbk5hbWUoXG4gICAgICAgICAgbW9kZWwuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8TT4sXG4gICAgICAgICAga2V5IGFzIGtleW9mIE1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNlcnZlZChtYXBwZWRQcm9wKSlcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgUHJvcGVydHkgbmFtZSAke21hcHBlZFByb3B9IGlzIHJlc2VydmVkYCk7XG4gICAgICAgIGFjY3VtW21hcHBlZFByb3BdID0gdmFsO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICAgIGlmICgobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdKSB7XG4gICAgICAvLyBUT0RPIG1vdm8gdG8gY291Y2hkYlxuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyBwZXJzaXN0ZW5jZSBtZXRhZGF0YSBmb3IgJHsobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdfWBcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZDogcmVzdWx0LFxuICAgICAgaWQ6IG1vZGVsW01vZGVsLnBrKG1vZGVsLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPE0+KV0gYXMgc3RyaW5nLFxuICAgICAgdHJhbnNpZW50OiBzcGxpdC50cmFuc2llbnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgZGF0YWJhc2UgZGF0YSBiYWNrIGludG8gYSBtb2RlbCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBSZWNvbnN0cnVjdHMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIGRhdGFiYXNlIGRhdGEsIGhhbmRsaW5nIGNvbHVtbiBtYXBwaW5nXG4gICAqIGFuZCByZWF0dGFjaGluZyB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSBvYmogLSBUaGUgZGF0YWJhc2UgcmVjb3JkXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIG1vZGVsIGNsYXNzIG9yIG5hbWVcbiAgICogQHBhcmFtIHBrIC0gVGhlIHByaW1hcnkga2V5IHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJpZ2ludH0gaWQgLSBUaGUgcHJpbWFyeSBrZXkgdmFsdWVcbiAgICogQHBhcmFtIFt0cmFuc2llbnRdIC0gVHJhbnNpZW50IHByb3BlcnRpZXMgdG8gcmVhdHRhY2hcbiAgICogQHBhcmFtIFthcmdzXSAtIG9wdGlvbnMgYXJncyBmb3Igc3ViY2xhc3NpbmcgcHVycG9zZXNcbiAgICogQHJldHVybiB7TX0gVGhlIHJlY29uc3RydWN0ZWQgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIHJldmVydDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogTSB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZXZlcnQpO1xuICAgIGNvbnN0IHBrID0gTW9kZWwucGsoY2xhenopO1xuICAgIGNvbnN0IG0gPSBuZXcgY2xhenooKSBhcyBNO1xuICAgIG1bcGtdID0gaWQgYXMgYW55O1xuICAgIGxvZy5zaWxseShgUmVidWlsZGluZyBtb2RlbCAke20uY29uc3RydWN0b3IubmFtZX0gaWQgJHtpZH1gKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG9ialtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdOyAvLyBUT0RPIG1vdmUgdG8gY291Y2hkYlxuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5rZXlzKG0pXG4gICAgICAuZmlsdGVyKChrKSA9PiBrICE9PSBwaylcbiAgICAgIC5yZWR1Y2UoKGFjY3VtOiBNLCBrZXkpID0+IHtcbiAgICAgICAgKGFjY3VtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPVxuICAgICAgICAgIG9ialtNb2RlbC5jb2x1bW5OYW1lKGNsYXp6LCBrZXkgYXMga2V5b2YgTSldO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCBtKTtcblxuICAgIGlmIChjdHguZ2V0KFwicmVidWlsZFdpdGhUcmFuc2llbnRcIikgJiYgdHJhbnNpZW50KSB7XG4gICAgICBsb2cudmVyYm9zZShcbiAgICAgICAgYHJlLWFkZGluZyB0cmFuc2llbnQgcHJvcGVydGllczogJHtPYmplY3Qua2V5cyh0cmFuc2llbnQpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgT2JqZWN0LmVudHJpZXModHJhbnNpZW50KS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gcmVzdWx0ICYmXG4gICAgICAgICAgdHlwZW9mIHJlc3VsdFtrZXkgYXMga2V5b2YgdHlwZW9mIHJlc3VsdF0gIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYFRyYW5zaWVudCBwcm9wZXJ0eSAke2tleX0gYWxyZWFkeSBleGlzdHMgb24gbW9kZWwgJHttLmNvbnN0cnVjdG9yLm5hbWV9LiBzaG91bGQgYmUgaW1wb3NzaWJsZWBcbiAgICAgICAgICApO1xuICAgICAgICByZXN1bHRba2V5IGFzIGtleW9mIE1dID0gdmFsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAvLyBUT0RPIG1vdmUgdG8gY291Y2hkYlxuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyAke3RoaXMuZmxhdm91cn0gcGVyc2lzdGVuY2UgbWV0YWRhdGEgZm9yICR7bS5jb25zdHJ1Y3Rvci5uYW1lfSBpZCAke2lkfTogJHttZXRhZGF0YX1gXG4gICAgICApO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbWV0YWRhdGEsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHJlY29yZCBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgSW5zZXJ0cyBhIG5ldyByZWNvcmQgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGF6eiAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBpbnNlcnQgaW50b1xuICAgKiBAcGFyYW0ge1ByaW1hcnlLZXlUeXBlfSBpZCAtIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHJlY29yZFxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgZGF0YSB0byBpbnNlcnRcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHNwZWNpZmljIHRvIHRoZSBhZGFwdGVyIGltcGxlbWVudGF0aW9uXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBjcmVhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENPTlRFWFQ+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIHJlY29yZHMgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEluc2VydHMgbXVsdGlwbGUgcmVjb3JkcyB3aXRoIHRoZSBnaXZlbiBJRHMgYW5kIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gaW5zZXJ0IGludG9cbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkZW50aWZpZXJzIGZvciB0aGUgbmV3IHJlY29yZHNcbiAgICogQHBhcmFtIG1vZGVsIC0gVGhlIGRhdGEgdG8gaW5zZXJ0IGZvciBlYWNoIHJlY29yZFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgc3BlY2lmaWMgdG8gdGhlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBjcmVhdGVkIHJlY29yZHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENPTlRFWFQ+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5jcmVhdGVBbGwpO1xuICAgIGlmICghaWQgfHwgIW1vZGVsKVxuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIklkcyBhbmQgbW9kZWxzIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiAgICBpZiAoaWQubGVuZ3RoICE9PSBtb2RlbC5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCB0YWJsZUxhYmVsID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuZGVidWcoYENyZWF0aW5nICR7aWQubGVuZ3RofSBlbnRyaWVzICR7dGFibGVMYWJlbH0gdGFibGVgKTtcbiAgICBjb25zdCBicmVha09uU2luZ2xlRmFpbHVyZSA9IGN0eC5nZXQoXCJicmVha09uU2luZ2xlRmFpbHVyZUluQnVsa1wiKSA/PyB0cnVlO1xuICAgIGNvbnN0IGNvbnRpbnVlT25FcnJvciA9ICFicmVha09uU2luZ2xlRmFpbHVyZTtcbiAgICBjb25zdCB0YXNrcyA9IGlkLm1hcChcbiAgICAgIChpLCBjb3VudCkgPT4gKCkgPT5cbiAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgY2xhenosXG4gICAgICAgICAgaSxcbiAgICAgICAgICBtb2RlbFtjb3VudF0sXG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBjdHgub3ZlcnJpZGUoeyBub0VtaXRTaW5nbGU6IHRydWUgfSkgYXMgQ09OVEVYVFxuICAgICAgICApXG4gICAgKTtcbiAgICBjb25zdCByYXdSZXN1bHQgPSBjb250aW51ZU9uRXJyb3JcbiAgICAgID8gYXdhaXQgcHJvbWlzZVNlcXVlbmNlKHRhc2tzLCB0cnVlKVxuICAgICAgOiBhd2FpdCBwcm9taXNlU2VxdWVuY2UodGFza3MpO1xuICAgIHJldHVybiByZXNvbHZlQnVsa1NlcXVlbmNlUmVzdWx0KFxuICAgICAgcmF3UmVzdWx0LFxuICAgICAgY29udGludWVPbkVycm9yLFxuICAgICAgbG9nLFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTExcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJlY29yZCB3aXRoIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBzcGVjaWZpZWQgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byByZWFkIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJpZ2ludH0gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgcmVjb3JkIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBzcGVjaWZpYyB0byB0aGUgYWRhcHRlciBpbXBsZW1lbnRhdGlvblxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCByZWFkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgdGFibGVOYW1lOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBtdWx0aXBsZSByZWNvcmRzIGZyb20gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEZldGNoZXMgbXVsdGlwbGUgcmVjb3JkcyB3aXRoIHRoZSBnaXZlbiBJRHMgZnJvbSB0aGUgc3BlY2lmaWVkIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gcmVhZCBmcm9tXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVycyBvZiB0aGUgcmVjb3JkcyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgc3BlY2lmaWMgdG8gdGhlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiByZXRyaWV2ZWQgcmVjb3Jkc1xuICAgKi9cbiAgYXN5bmMgcmVhZEFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDT05URVhUPlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmVhZEFsbCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuZGVidWcoYFJlYWRpbmcgJHtpZC5sZW5ndGh9IGVudHJpZXMgJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgY29uc3QgYnJlYWtPblNpbmdsZUZhaWx1cmUgPSBjdHguZ2V0KFwiYnJlYWtPblNpbmdsZUZhaWx1cmVJbkJ1bGtcIikgPz8gdHJ1ZTtcbiAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSAhYnJlYWtPblNpbmdsZUZhaWx1cmU7XG4gICAgY29uc3QgdGFza3MgPSBpZC5tYXAoXG4gICAgICAoaSkgPT4gKCkgPT5cbiAgICAgICAgdGhpcy5yZWFkKFxuICAgICAgICAgIGNsYXp6LFxuICAgICAgICAgIGksXG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBjdHgub3ZlcnJpZGUoeyBub0VtaXRTaW5nbGU6IHRydWUgfSkgYXMgQ09OVEVYVFxuICAgICAgICApXG4gICAgKTtcbiAgICBjb25zdCByYXdSZXN1bHQgPSBjb250aW51ZU9uRXJyb3JcbiAgICAgID8gYXdhaXQgcHJvbWlzZVNlcXVlbmNlKHRhc2tzLCB0cnVlKVxuICAgICAgOiBhd2FpdCBwcm9taXNlU2VxdWVuY2UodGFza3MpO1xuICAgIHJldHVybiByZXNvbHZlQnVsa1NlcXVlbmNlUmVzdWx0KFxuICAgICAgcmF3UmVzdWx0LFxuICAgICAgY29udGludWVPbkVycm9yLFxuICAgICAgbG9nLFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHJlY29yZCBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgTW9kaWZpZXMgYW4gZXhpc3RpbmcgcmVjb3JkIHdpdGggdGhlIGdpdmVuIElEIGluIHRoZSBzcGVjaWZpZWQgdGFibGVcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7UHJpbWFyeUtleVR5cGV9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlY29yZCB0byB1cGRhdGVcbiAgICogQHBhcmFtICBtb2RlbCAtIFRoZSBuZXcgZGF0YSBmb3IgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgc3BlY2lmaWMgdG8gdGhlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXBkYXRlZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IHVwZGF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgTW9kaWZpZXMgbXVsdGlwbGUgZXhpc3RpbmcgcmVjb3JkcyB3aXRoIHRoZSBnaXZlbiBJRHMgaW4gdGhlIHNwZWNpZmllZCB0YWJsZVxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGlkIC0gVGhlIGlkZW50aWZpZXJzIG9mIHRoZSByZWNvcmRzIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbmV3IGRhdGEgZm9yIGVhY2ggcmVjb3JkXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBzcGVjaWZpYyB0byB0aGUgYWRhcHRlciBpbXBsZW1lbnRhdGlvblxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHVwZGF0ZWQgcmVjb3Jkc1xuICAgKi9cbiAgYXN5bmMgdXBkYXRlQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZUFsbCk7XG4gICAgaWYgKGlkLmxlbmd0aCAhPT0gbW9kZWwubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IHRhYmxlTGFiZWwgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy5kZWJ1ZyhgVXBkYXRpbmcgJHtpZC5sZW5ndGh9IGVudHJpZXMgJHt0YWJsZUxhYmVsfSB0YWJsZWApO1xuICAgIGNvbnN0IGJyZWFrT25TaW5nbGVGYWlsdXJlID0gY3R4LmdldChcImJyZWFrT25TaW5nbGVGYWlsdXJlSW5CdWxrXCIpID8/IHRydWU7XG4gICAgY29uc3QgY29udGludWVPbkVycm9yID0gIWJyZWFrT25TaW5nbGVGYWlsdXJlO1xuICAgIGNvbnN0IHRhc2tzID0gaWQubWFwKFxuICAgICAgKGksIGNvdW50KSA9PiAoKSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZShcbiAgICAgICAgICBjbGF6eixcbiAgICAgICAgICBpLFxuICAgICAgICAgIG1vZGVsW2NvdW50XSxcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGN0eC5vdmVycmlkZSh7IG5vRW1pdFNpbmdsZTogdHJ1ZSB9KSBhcyBDT05URVhUXG4gICAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IHJhd1Jlc3VsdCA9IGNvbnRpbnVlT25FcnJvclxuICAgICAgPyBhd2FpdCBwcm9taXNlU2VxdWVuY2UodGFza3MsIHRydWUpXG4gICAgICA6IGF3YWl0IHByb21pc2VTZXF1ZW5jZSh0YXNrcyk7XG4gICAgcmV0dXJuIHJlc29sdmVCdWxrU2VxdWVuY2VSZXN1bHQoXG4gICAgICByYXdSZXN1bHQsXG4gICAgICBjb250aW51ZU9uRXJyb3IsXG4gICAgICBsb2csXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhIHJlY29yZCB3aXRoIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBzcGVjaWZpZWQgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBkZWxldGUgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8YmlnaW50fSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSByZWNvcmQgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBzcGVjaWZpYyB0byB0aGUgYWRhcHRlciBpbXBsZW1lbnRhdGlvblxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgYWJzdHJhY3QgZGVsZXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgdGFibGVOYW1lOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q09OVEVYVD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgcmVjb3JkcyBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIG11bHRpcGxlIHJlY29yZHMgd2l0aCB0aGUgZ2l2ZW4gSURzIGZyb20gdGhlIHNwZWNpZmllZCB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGRlbGV0ZSBmcm9tXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVycyBvZiB0aGUgcmVjb3JkcyB0byBkZWxldGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHNwZWNpZmljIHRvIHRoZSBhZGFwdGVyIGltcGxlbWVudGF0aW9uXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgZGVsZXRlZCByZWNvcmRzXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICB0YWJsZU5hbWU6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENPTlRFWFQ+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGVBbGwpO1xuICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgJHtpZC5sZW5ndGh9IGVudHJpZXMgZnJvbSAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBjb25zdCBicmVha09uU2luZ2xlRmFpbHVyZSA9IGN0eC5nZXQoXCJicmVha09uU2luZ2xlRmFpbHVyZUluQnVsa1wiKSA/PyB0cnVlO1xuICAgIGNvbnN0IGNvbnRpbnVlT25FcnJvciA9ICFicmVha09uU2luZ2xlRmFpbHVyZTtcbiAgICBjb25zdCB0YXNrcyA9IGlkLm1hcChcbiAgICAgIChpKSA9PiAoKSA9PlxuICAgICAgICB0aGlzLmRlbGV0ZShcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgaSxcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGN0eC5vdmVycmlkZSh7IG5vRW1pdFNpbmdsZTogdHJ1ZSB9KSBhcyBDT05URVhUXG4gICAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IHJhd1Jlc3VsdCA9IGNvbnRpbnVlT25FcnJvclxuICAgICAgPyBhd2FpdCBwcm9taXNlU2VxdWVuY2UodGFza3MsIHRydWUpXG4gICAgICA6IGF3YWl0IHByb21pc2VTZXF1ZW5jZSh0YXNrcyk7XG4gICAgcmV0dXJuIHJlc29sdmVCdWxrU2VxdWVuY2VSZXN1bHQoXG4gICAgICByYXdSZXN1bHQsXG4gICAgICBjb250aW51ZU9uRXJyb3IsXG4gICAgICBsb2csXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcmF3IHF1ZXJ5IGFnYWluc3QgdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFsbG93cyBleGVjdXRpbmcgZGF0YWJhc2Utc3BlY2lmaWMgcXVlcmllcyBkaXJlY3RseVxuICAgKiBAdGVtcGxhdGUgUSAtIFRoZSByYXcgcXVlcnkgdHlwZVxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtRfSByYXdJbnB1dCAtIFRoZSBxdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBzcGVjaWZpYyB0byB0aGUgYWRhcHRlciBpbXBsZW1lbnRhdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFI+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcXVlcnkgcmVzdWx0XG4gICAqL1xuICBhYnN0cmFjdCByYXc8UiwgRCBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHJhd0lucHV0OiBRVUVSWSxcbiAgICBkb2NzT25seTogRCxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDT05URVhUPlxuICApOiBQcm9taXNlPFJhd1Jlc3VsdDxSLCBEPj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYW4gb2JzZXJ2ZXIgZm9yIGRhdGFiYXNlIGV2ZW50c1xuICAgKiBAc3VtbWFyeSBBZGRzIGFuIG9ic2VydmVyIHRvIGJlIG5vdGlmaWVkIGFib3V0IGRhdGFiYXNlIGNoYW5nZXMuIFRoZSBvYnNlcnZlciBjYW4gb3B0aW9uYWxseVxuICAgKiBwcm92aWRlIGEgZmlsdGVyIGZ1bmN0aW9uIHRvIHJlY2VpdmUgb25seSBzcGVjaWZpYyBldmVudHMuXG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyIC0gVGhlIG9ic2VydmVyIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJGaWx0ZXJ9IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBldmVudHMgdGhlIG9ic2VydmVyIHJlY2VpdmVzXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBAZmluYWwoKVxuICBvYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlciwgZmlsdGVyPzogT2JzZXJ2ZXJGaWx0ZXIpOiAoKSA9PiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwib2JzZXJ2ZXJIYW5kbGVyXCIsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuT2JzZXJ2ZXJIYW5kbGVyKCksXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIHRoaXMub2JzZXJ2ZXJIYW5kbGVyIS5vYnNlcnZlKG9ic2VydmVyLCBmaWx0ZXIpO1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLm9ic2VydmUpO1xuICAgIGxvZy5zaWxseShgUmVnaXN0ZXJpbmcgbmV3IG9ic2VydmVyICR7b2JzZXJ2ZXIudG9TdHJpbmcoKX1gKTtcbiAgICBpZiAoIXRoaXMuZGlzcGF0Y2gpIHtcbiAgICAgIGxvZy52ZXJib3NlKGBDcmVhdGluZyBkaXNwYXRjaCBmb3IgJHt0aGlzLmFsaWFzfWApO1xuICAgICAgdGhpcy5kaXNwYXRjaCA9IHRoaXMuRGlzcGF0Y2goKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoLm9ic2VydmUodGhpcyk7XG4gICAgcmV0dXJuICgpID0+IHRoaXMudW5PYnNlcnZlKG9ic2VydmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5yZWdpc3RlcnMgYW4gb2JzZXJ2ZXJcbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvYnNlcnZlciBzbyBpdCBubyBsb25nZXIgcmVjZWl2ZXMgZGF0YWJhc2UgZXZlbnQgbm90aWZpY2F0aW9uc1xuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlciAtIFRoZSBvYnNlcnZlciB0byB1bnJlZ2lzdGVyXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBAZmluYWwoKVxuICB1bk9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVySGFuZGxlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBcIk9ic2VydmVySGFuZGxlciBub3QgaW5pdGlhbGl6ZWQuIERpZCB5b3UgcmVnaXN0ZXIgYW55IG9ic2VydmFibGVzP1wiXG4gICAgICApO1xuICAgIHRoaXMub2JzZXJ2ZXJIYW5kbGVyLnVuT2JzZXJ2ZShvYnNlcnZlcik7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCkgPD0gMCkge1xuICAgICAgdGhpcy5sb2dcbiAgICAgICAgLmZvcih0aGlzLnVuT2JzZXJ2ZSlcbiAgICAgICAgLmRlYnVnKFxuICAgICAgICAgIFwiTm8gYWN0aXZlIG9ic2VydmVycyBmb3IgYWRwdGVyLiBDbG9zaW5nIGRpc3BhdGNoZXIgYW5kIHVub2JzZXJ2aW5nLlwiXG4gICAgICAgICk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2g/LmNsb3NlKFtdIGFzIGFueSk7IC8vIGNsb3NlIGZpcnN0XG4gICAgICB0aGlzLmRpc3BhdGNoPy51bk9ic2VydmUodGhpcyk7IC8vIHVub2JzZXJ2ZSBsYXRlclxuICAgICAgLy8gT25jZSBpbml0aWFsaXplZCwgdGhlIERpc3BhdGNoIGluc3RhbmNlIG11c3QgYmUgcHJlc2VydmVkLFxuICAgICAgLy8gYmVjYXVzZSBpdCBlbmhhbmNlcyB0aGUgYWRhcHRlcuKAmXMgb3JpZ2luYWwgbWV0aG9kcyBhbmQgbGlua3MgaXRzZWxmIHRvIHRoZW1cbiAgICAgIC8vIHRoaXMuZGlzcGF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dcbiAgICAgIC5mb3IodGhpcy51bk9ic2VydmUpXG4gICAgICAuZGVidWcoYE9ic2VydmVyICR7b2JzZXJ2ZXIudG9TdHJpbmcoKX0gcmVtb3ZlZGApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOb3RpZmllcyBhbGwgb2JzZXJ2ZXJzIGFib3V0IGEgZGF0YWJhc2UgZXZlbnRcbiAgICogQHN1bW1hcnkgU2VuZHMgbm90aWZpY2F0aW9ucyB0byBhbGwgcmVnaXN0ZXJlZCBvYnNlcnZlcnMgYWJvdXQgYSBjaGFuZ2UgaW4gdGhlIGRhdGFiYXNlLFxuICAgKiBmaWx0ZXJpbmcgYmFzZWQgb24gZWFjaCBvYnNlcnZlcidzIGZpbHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgd2hlcmUgdGhlIGNoYW5nZSBvY2N1cnJlZFxuICAgKiBAcGFyYW0ge09wZXJhdGlvbktleXN8QnVsa0NydWRPcGVyYXRpb25LZXlzfHN0cmluZ30gZXZlbnQgLSBUaGUgdHlwZSBvZiBvcGVyYXRpb24gdGhhdCBvY2N1cnJlZFxuICAgKiBAcGFyYW0ge0V2ZW50SWRzfSBpZCAtIFRoZSBpZGVudGlmaWVyKHMpIG9mIHRoZSBhZmZlY3RlZCByZWNvcmQocylcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG9ic2VydmVyc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBvYnNlcnZlcnMgaGF2ZSBiZWVuIG5vdGlmaWVkXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICB0YWJsZTogQ29uc3RydWN0b3I8TT4gfCBzdHJpbmcsXG4gICAgZXZlbnQ6IE9wZXJhdGlvbktleXMgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMgfCBzdHJpbmcsXG4gICAgaWQ6IEV2ZW50SWRzLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENPTlRFWFQ+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5vYnNlcnZlckhhbmRsZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgXCJPYnNlcnZlckhhbmRsZXIgbm90IGluaXRpYWxpemVkLiBEaWQgeW91IHJlZ2lzdGVyIGFueSBvYnNlcnZhYmxlcz9cIlxuICAgICAgKTtcbiAgICBjb25zdCB7IGN0eCwgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVPYnNlcnZlcnMpO1xuICAgIGlmICghY3R4LmdldChcIm5vRW1pdFwiKSkge1xuICAgICAgY29uc3QgaXNCdWxrID0gQXJyYXkuaXNBcnJheShpZCk7XG4gICAgICBjb25zdCBlbWl0U2luZ2xlID0gIWN0eC5nZXQoXCJub0VtaXRTaW5nbGVcIik7XG4gICAgICBjb25zdCBlbWl0QnVsayA9ICFjdHguZ2V0KFwibm9FbWl0QnVsa1wiKTtcbiAgICAgIGlmICgoaXNCdWxrICYmIGVtaXRCdWxrKSB8fCAoIWlzQnVsayAmJiBlbWl0U2luZ2xlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9ic2VydmVySGFuZGxlci51cGRhdGVPYnNlcnZlcnMoXG4gICAgICAgICAgdGFibGUsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgLi4uY3R4QXJnc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmcmVzaGVzIGRhdGEgYmFzZWQgb24gYSBkYXRhYmFzZSBldmVudFxuICAgKiBAc3VtbWFyeSBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgT2JzZXJ2ZXIgaW50ZXJmYWNlIG1ldGhvZCB0aGF0IGRlbGVnYXRlcyB0byB1cGRhdGVPYnNlcnZlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHdoZXJlIHRoZSBjaGFuZ2Ugb2NjdXJyZWRcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzfEJ1bGtDcnVkT3BlcmF0aW9uS2V5c3xzdHJpbmd9IGV2ZW50IC0gVGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHRoYXQgb2NjdXJyZWRcbiAgICogQHBhcmFtIHtFdmVudElkc30gaWQgLSBUaGUgaWRlbnRpZmllcihzKSBvZiB0aGUgYWZmZWN0ZWQgcmVjb3JkKHMpXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyByZWxhdGVkIHRvIHRoZSBldmVudFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByZWZyZXNoIGlzIGNvbXBsZXRlXG4gICAqL1xuICBhc3luYyByZWZyZXNoPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgdGFibGU6IENvbnN0cnVjdG9yPE0+IHwgc3RyaW5nLFxuICAgIGV2ZW50OiBPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nLFxuICAgIGlkOiBFdmVudElkcyxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDT05URVhUPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPYnNlcnZlcnModGFibGUsIGV2ZW50LCBpZCwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFkYXB0ZXJcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBpZGVudGlmeWluZyB0aGlzIGFkYXB0ZXJcbiAgICogQHJldHVybiB7c3RyaW5nfSBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWRhcHRlclxuICAgKi9cbiAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5mbGF2b3VyfSBhZGFwdGVyYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgYWRhcHRlciBmbGF2b3IgYXNzb2NpYXRlZCB3aXRoIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBhZGFwdGVyIGZsYXZvciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBhIHNwZWNpZmljIG1vZGVsIGNsYXNzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgYWRhcHRlciBmbGF2b3IgbmFtZVxuICAgKi9cbiAgc3RhdGljIGZsYXZvdXJPZjxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBDb25zdHJ1Y3RvcjxNPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldGFkYXRhLmZsYXZvdXJPZihtb2RlbCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGN1cnJlbnRGbGF2b3VyKCkge1xuICAgIGlmICghQWRhcHRlci5fY3VycmVudEZsYXZvdXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIHBlcnNpc3RlbmNlIGZsYXZvdXIgc2V0LiBQbGVhc2UgaW5pdGlhbGl6ZSB5b3VyIGFkYXB0ZXJgXG4gICAgICApO1xuICAgIHJldHVybiBBZGFwdGVyLl9jdXJyZW50Rmxhdm91cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBkZWZhdWx0IGFkYXB0ZXJcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBhZGFwdGVyIHRoYXQgaXMgY3VycmVudGx5IHNldCBhcyB0aGUgZGVmYXVsdCBmb3Igb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJuIHtBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT59IFRoZSBjdXJyZW50IGFkYXB0ZXJcbiAgICovXG4gIHN0YXRpYyBnZXQgY3VycmVudCgpOiBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBBZGFwdGVyLmdldCh0aGlzLmN1cnJlbnRGbGF2b3VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5yZWdpc3RlcnMgYW4gYWRhcHRlciBieSBhbGlhc1xuICAgKiBAc3VtbWFyeSBSZW1vdmVzIHRoZSBhZGFwdGVyIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWxpYXMgZnJvbSB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzIC0gVGhlIGFsaWFzIHRoYXQgd2FzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGFkYXB0ZXJcbiAgICovXG4gIHN0YXRpYyB1bnJlZ2lzdGVyKGFsaWFzPzogc3RyaW5nKSB7XG4gICAgaWYgKCFhbGlhcykgcmV0dXJuO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBBZGFwdGVyLl9jYWNoZVthbGlhc10gYXNcbiAgICAgIHwgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWFkYXB0ZXIpIHJldHVybjtcbiAgICBkZWxldGUgQWRhcHRlci5fY2FjaGVbYWxpYXNdO1xuICAgIGlmIChBZGFwdGVyLl9jdXJyZW50Rmxhdm91ciA9PT0gYWxpYXMpIEFkYXB0ZXIuX2N1cnJlbnRGbGF2b3VyID0gdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIGFkYXB0ZXIuZmxhdm91ciAmJlxuICAgICAgQWRhcHRlci5fY2FjaGVbYWRhcHRlci5mbGF2b3VyXSAmJlxuICAgICAgQWRhcHRlci5fY2FjaGVbYWRhcHRlci5mbGF2b3VyXSA9PT0gYWRhcHRlclxuICAgICkge1xuICAgICAgZGVsZXRlIEFkYXB0ZXIuX2NhY2hlW2FkYXB0ZXIuZmxhdm91cl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFuIGFkYXB0ZXIgYnkgZmxhdm9yXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhIHJlZ2lzdGVyZWQgYWRhcHRlciBieSBpdHMgZmxhdm9yIG5hbWVcbiAgICogQHRlbXBsYXRlIENPTkYgLSBUaGUgZGF0YWJhc2UgZHJpdmVyIGNvbmZpZ1xuICAgKiBAdGVtcGxhdGUgQ09OTiAtIFRoZSBkYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2VcbiAgICogQHRlbXBsYXRlIFFVRVJZIC0gVGhlIHF1ZXJ5IHR5cGVcbiAgICogQHRlbXBsYXRlIENPTlRFWFQgLSBUaGUgY29udGV4dCB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIC0gVGhlIGZsYXZvciBuYW1lIG9mIHRoZSBhZGFwdGVyIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm4ge0FkYXB0ZXI8Q09ORiwgQ09OTiwgUVVFUlksIENPTlRFWFQ+IHwgdW5kZWZpbmVkfSBUaGUgYWRhcHRlciBpbnN0YW5jZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZ2V0PEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4+KFxuICAgIGZsYXZvdXI/OiBhbnlcbiAgKTogQSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFmbGF2b3VyKSByZXR1cm4gQWRhcHRlci5nZXQodGhpcy5fY3VycmVudEZsYXZvdXIpO1xuICAgIGlmIChmbGF2b3VyIGluIHRoaXMuX2NhY2hlKSByZXR1cm4gdGhpcy5fY2FjaGVbZmxhdm91cl0gYXMgQTtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQWRhcHRlciByZWdpc3RlcmVkIHVuZGVyICR7Zmxhdm91cn0uYCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGN1cnJlbnQgZGVmYXVsdCBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IENoYW5nZXMgd2hpY2ggYWRhcHRlciBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGZvciBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIC0gVGhlIGZsYXZvciBuYW1lIG9mIHRoZSBhZGFwdGVyIHRvIHNldCBhcyBjdXJyZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgc2V0Q3VycmVudChmbGF2b3VyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50Rmxhdm91ciA9IGZsYXZvdXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIG1vZGVscyBhc3NvY2lhdGVkIHdpdGggYW4gYWRhcHRlciBmbGF2b3JcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGFsbCBtb2RlbCBjb25zdHJ1Y3RvcnMgdGhhdCBhcmUgY29uZmlndXJlZCB0byB1c2UgYSBzcGVjaWZpYyBhZGFwdGVyIGZsYXZvclxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIC0gVGhlIGFkYXB0ZXIgZmxhdm9yIHRvIGZpbmQgbW9kZWxzIGZvclxuICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIG1vZGVsIGNvbnN0cnVjdG9yc1xuICAgKi9cbiAgc3RhdGljIG1vZGVsczxNIGV4dGVuZHMgTW9kZWw+KGZsYXZvdXI6IHN0cmluZyk6IE1vZGVsQ29uc3RydWN0b3I8TT5bXSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBNZXRhZGF0YS5mbGF2b3VyZWRBcyhmbGF2b3VyKS5maWx0ZXIoXG4gICAgICAgIChNb2RlbCBhcyBhbnkpLmlzTW9kZWxcbiAgICAgICkgYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPltdO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRlY29yYXRpb24oKTogdm9pZCB7fVxuXG4gIHByb3RlY3RlZCBwcm94aWVzPzogUmVjb3JkPHN0cmluZywgdHlwZW9mIHRoaXM+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgY2xpZW50IGluc3RhbmNlIGZvciB0aGUgYWRhcHRlclxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHJldHVybiB0aGUgY2xpZW50IGluc3RhbmNlIGZvciB0aGUgYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIENPTiAtIFRoZSB0eXBlIG9mIHRoZSBjbGllbnQgaW5zdGFuY2VcbiAgICogQHJldHVybiB7Q09OfSBUaGUgY2xpZW50IGluc3RhbmNlIGZvciB0aGUgYWRhcHRlclxuICAgKiBAYWJzdHJhY3RcbiAgICogQGZ1bmN0aW9uIGdldENsaWVudFxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAgICogQGluc3RhbmNlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRDbGllbnQoKTogQ09OTjtcblxuICBAZmluYWwoKVxuICBnZXQgY2xpZW50KCk6IENPTk4ge1xuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICB0aGlzLl9jbGllbnQgPSB0aGlzLmdldENsaWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBmb3IoY29uZmlnOiBQYXJ0aWFsPENPTkY+LCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmICghdGhpcy5wcm94aWVzKSB0aGlzLnByb3hpZXMgPSB7fTtcbiAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmFsaWFzfSAtICR7aGFzaE9iaihjb25maWcpfWA7XG4gICAgaWYgKGtleSBpbiB0aGlzLnByb3hpZXMpIHJldHVybiB0aGlzLnByb3hpZXNba2V5XSBhcyB0eXBlb2YgdGhpcztcblxuICAgIGxldCBjbGllbnQ6IGFueTtcbiAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0aGlzLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQ6IHR5cGVvZiB0aGlzLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHAgPT09IFwiX2NvbmZpZ1wiKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb25mOiBDT05GID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsQ29uZiwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocCA9PT0gXCJfY2xpZW50XCIpIHtcbiAgICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6ICh0YXJnZXQ6IGFueSwgcDogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogYW55LCByZWNlaXZlcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChwID09PSBcIl9jbGllbnRcIikge1xuICAgICAgICAgIGNsaWVudCA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHAsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNsZWFudXBQcm94eUNsaWVudCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY2xpZW50KSByZXR1cm47XG4gICAgICBjb25zdCBtZXRob2RzID0gW1wiY2FuY2VsXCIsIFwiY2xvc2VcIiwgXCJkZXN0cm95XCIsIFwiZGlzY29ubmVjdFwiXTtcbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgZm4gPSBjbGllbnRbbWV0aG9kXTtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSBjb250aW51ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbi5jYWxsKGNsaWVudCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIGF3YWl0IHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gaWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsaWVudCA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocHJveHksIEFkYXB0ZXJQcm94eUNsZWFudXAsIHtcbiAgICAgIHZhbHVlOiBjbGVhbnVwUHJveHlDbGllbnQsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3hpZXNba2V5XSA9IHByb3h5O1xuICAgIHJldHVybiBwcm94eSBhcyB0eXBlb2YgdGhpcztcbiAgfVxuXG4gIG1pZ3JhdGlvbnMoKSB7XG4gICAgcmV0dXJuIE1ldGFkYXRhLm1pZ3JhdGlvbnNGb3IodGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UXVlcnlSdW5uZXIoKTogUHJvbWlzZTxDT05OPiB7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBDT05OO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDT05URVhULCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRFxuICApOiBDb250ZXh0dWFsaXplZEFyZ3M8Q09OVEVYVCwgQVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPjtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDT05URVhULCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogZmFsc2VcbiAgKTogQ29udGV4dHVhbGl6ZWRBcmdzPENPTlRFWFQsIEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q09OVEVYVCwgQVJHUz4sXG4gICAgb3BlcmF0aW9uOiBNRVRIT0QsXG4gICAgYWxsb3dDcmVhdGU6IHRydWUsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGbGFnc09mPENPTlRFWFQ+PlxuICApOiBQcm9taXNlPFxuICAgIENvbnRleHR1YWxpemVkQXJnczxDT05URVhULCBBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+XG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q09OVEVYVCwgQVJHUz4sXG4gICAgb3BlcmF0aW9uOiBNRVRIT0QsXG4gICAgYWxsb3dDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEZsYWdzT2Y8Q09OVEVYVD4+XG4gICk6XG4gICAgfCBQcm9taXNlPFxuICAgICAgICBDb250ZXh0dWFsaXplZEFyZ3M8Q09OVEVYVCwgQVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPlxuICAgICAgPlxuICAgIHwgQ29udGV4dHVhbGl6ZWRBcmdzPENPTlRFWFQsIEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT4ge1xuICAgIHJldHVybiBzdXBlci5sb2dDdHgoYXJncywgb3BlcmF0aW9uLCBhbGxvd0NyZWF0ZSBhcyBhbnksIG92ZXJyaWRlcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -85,4 +85,4 @@ export class Context extends Ctx {
|
|
|
85
85
|
return super.accumulate(value);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
//# sourceMappingURL=
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wZXJzaXN0ZW5jZS9Db250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3hFLE1BQU0sT0FBTyxPQUVYLFNBQVEsR0FBTTtJQUNkLFlBQVksR0FBa0I7UUFDNUIsS0FBSyxDQUFDLEdBQWUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVyxFQUFFLEVBQVU7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksYUFBYSxDQUNyQixxQ0FBcUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUN2RCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlLENBQ2IsR0FBTSxFQUNOLFVBQTZCLElBQUksR0FBRyxFQUFFO1FBRXRDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFD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NEJBQ0osSUFBSSxJQUFJLElBQUksSUFBSTtnQ0FBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDcEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ25ELENBQUM7cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUMsQ0FBQztTQUNGLENBQVMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQXdCLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDaEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBVSxDQUFDLENBQUM7WUFDaEMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRVEsVUFBVSxDQUFtQixLQUFRO1FBQzVDLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQW1CLENBQUM7SUFDbkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCBhcyBDdHgsIEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXJGbGFncywgQ29udGV4dEZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIENvbnRleHQ8XG4gIEYgZXh0ZW5kcyBDb250ZXh0RmxhZ3M8YW55PiA9IEFkYXB0ZXJGbGFnczxhbnk+LFxuPiBleHRlbmRzIEN0eDxGPiB7XG4gIGNvbnN0cnVjdG9yKGN0eD86IENvbnRleHQ8YW55Pikge1xuICAgIHN1cGVyKGN0eCBhcyBDdHg8YW55Pik7XG4gIH1cblxuICBwdXNoUGVuZGluZyhrZXk6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmcoKSB8fCB7fTtcbiAgICBwZW5kaW5nW2tleV0gPSBwZW5kaW5nW2tleV0gfHwgW107XG4gICAgaWYgKHBlbmRpbmdba2V5XS5pbmNsdWRlcyhpZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgVHJ5aW5nIHRvIHB1c2ggYSByZXBlYXRlZCBwZW5kaW5nICR7a2V5fSB0YXNrOiAke2lkfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHBlbmRpbmdba2V5XS5wdXNoKGlkKTtcbiAgICB0aGlzLmFjY3VtdWxhdGUoeyBwZW5kaW5nOiBwZW5kaW5nIH0pO1xuICB9XG5cbiAgZ2V0RnJvbUNoaWxkcmVuPEsgZXh0ZW5kcyBrZXlvZiBGPihcbiAgICBrZXk6IEssXG4gICAgdmlzaXRlZDogU2V0PENvbnRleHQ8YW55Pj4gPSBuZXcgU2V0KClcbiAgKTogRltLXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHZpc2l0ZWQuYWRkKHRoaXMpO1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0T3JVbmRlZmluZWQoa2V5KTtcbiAgICBpZiAocmVzICE9PSB1bmRlZmluZWQgJiYgcmVzICE9PSBudWxsKSByZXR1cm4gcmVzO1xuICAgIGxldCBjaGlsZHJlbiA9IHRoaXMuZ2V0T3JVbmRlZmluZWQoXCJjaGlsZENvbnRleHRzXCIgYXMgSyk7XG4gICAgaWYgKGNoaWxkcmVuICYmIChjaGlsZHJlbiBhcyBhbnkpLmxlbmd0aCkge1xuICAgICAgY2hpbGRyZW4gPSAoY2hpbGRyZW4gYXMgYW55W10pLmZpbHRlcihcbiAgICAgICAgKGNoaWxkOiBhbnkpID0+ICF2aXNpdGVkLmhhcyhjaGlsZClcbiAgICAgICkgYXMgYW55O1xuICAgICAgaWYgKChjaGlsZHJlbiBhcyBhbnlbXSkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSAoY2hpbGRyZW4gYXMgYW55W10pXG4gICAgICAgICAgLm1hcCgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZ2V0RnJvbUNoaWxkcmVuKGtleSwgdmlzaXRlZCkpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjOiBhbnlbXSwgZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICAgICAgICAgIGFjYy5wdXNoKC4uLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwgIT09IHVuZGVmaW5lZCAmJiBlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBhY2MucHVzaChlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGVsOiB1bmtub3duKSA9PiBlbCAhPT0gdW5kZWZpbmVkICYmIGVsICE9PSBudWxsKSBhcyBGW0tdW107XG4gICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHRzLnNvbWUoKGVsKSA9PiB0eXBlb2YgZWwgIT09IFwib2JqZWN0XCIpKSByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGVsKSA9PiBPYmplY3QuYXNzaWduKGFjYywgZWwpLFxuICAgICAgICAgIHt9IGFzIFJlY29yZDxhbnksIGFueT5cbiAgICAgICAgKSBhcyBGW0tdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcGVuZGluZygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldEZyb21DaGlsZHJlbihcInBlbmRpbmdcIik7XG4gIH1cblxuICBnZXRPclVuZGVmaW5lZDxLIGV4dGVuZHMga2V5b2YgRj4oa2V5OiBLKTogRltLXSB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmdldChrZXkpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUoY29uZjogUGFydGlhbDxGPikge1xuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0OiAodGFyZ2V0OiB0aGlzLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHAgPT09IFwiZ2V0XCIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldC5nZXQsIHtcbiAgICAgICAgICAgIGFwcGx5OiAoXG4gICAgICAgICAgICAgIG1ldGhvZDogdHlwZW9mIHRhcmdldC5nZXQsXG4gICAgICAgICAgICAgIF90aGlzQXJnOiB1bmtub3duLFxuICAgICAgICAgICAgICBhcmdBcnJheTogYW55W11cbiAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwcm9wID0gYXJnQXJyYXlbMF0gYXMga2V5b2YgRjtcbiAgICAgICAgICAgICAgaWYgKCFwcm9wKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgYWNjZXNzIHRvIG92ZXJyaWRkZW4gY29udGV4dDogJHtwcm9wIGFzIHN0cmluZ31gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHByb3AgaW4gY29uZikgcmV0dXJuIGNvbmZbcHJvcF07XG4gICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG1ldGhvZCwgcmVjZWl2ZXIsIGFyZ0FycmF5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KSBhcyB0aGlzO1xuICB9XG5cbiAgdG9PdmVycmlkZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUua2V5cygpLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBrZXkpID0+IHtcbiAgICAgIGFjY1trZXldID0gdGhpcy5nZXQoa2V5IGFzIGFueSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiBDb250ZXh0PEYgJiBWPiB7XG4gICAgcmV0dXJuIHN1cGVyLmFjY3VtdWxhdGUodmFsdWUpIGFzIENvbnRleHQ8RiAmIFY+O1xuICB9XG59XG4iXX0=
|
|
@@ -72,4 +72,4 @@ export class ContextLock extends Lock {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
//# sourceMappingURL=
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dExvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGVyc2lzdGVuY2UvQ29udGV4dExvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1ksT0FBVTtJQUNwQiw2REFBNkQ7SUFDN0QsR0FBRyxJQUFXO1FBRkosWUFBTyxHQUFQLE9BQU8sQ0FBRztJQUduQixDQUFDO0lBRUosNkRBQTZEO0lBQzdELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFXO1FBQ3hCLGFBQWE7SUFDZixDQUFDO0lBRUQsNkRBQTZEO0lBQzdELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFXO1FBQ3pCLFlBQVk7SUFDZCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFXO1FBQzNCLGFBQWE7SUFDZixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sV0FBWSxTQUFRLElBQUk7SUFJbkMsWUFBc0Isa0JBQTJDO1FBQy9ELEtBQUssRUFBRSxDQUFDO1FBRFksdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF5QjtRQUh6RCxpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUNkLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBSTNDLENBQUM7SUFFUSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBVztRQUNuQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFXO1FBQ25DLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUNwQyxJQUFJLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsRUFDdkQsR0FBRyxJQUFJLENBQ1IsQ0FBQztZQUNKLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFRLEVBQUUsR0FBRyxJQUFXO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQ3BDLElBQUksYUFBYSxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsQ0FBQyxFQUN2RCxHQUFHLElBQUksQ0FDUixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NrIH0gZnJvbSBcIkBkZWNhZi10cy90cmFuc2FjdGlvbmFsLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IHR5cGUgQWRhcHRlciB9IGZyb20gXCIuL0FkYXB0ZXJcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0ZXJUcmFuc2FjdGlvbjxBIGV4dGVuZHMgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhZGFwdGVyOiBBLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhc3luYyBiZWdpbiguLi5hcmdzOiBhbnlbXSkge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXN5bmMgY29tbWl0KC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgLy9kbyBub3RoaW5nXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFzeW5jIHJvbGxiYWNrKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZXh0TG9jayBleHRlbmRzIExvY2sge1xuICBwcml2YXRlIGFjcXVpcmVDb3VudDogbnVtYmVyID0gMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2s6IExvY2sgPSBuZXcgTG9jaygpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhZGFwdGVyVHJhbnNhY3Rpb246IEFkYXB0ZXJUcmFuc2FjdGlvbjxhbnk+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGFjcXVpcmUoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIHRoaXMuYWNxdWlyZUNvdW50Kys7XG4gICAgaWYgKHRoaXMuYWNxdWlyZUNvdW50ID09PSAxKSB7XG4gICAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGFwdGVyVHJhbnNhY3Rpb24uYmVnaW4oLi4uYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jay5yZWxlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVsZWFzZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgdGhpcy5hY3F1aXJlQ291bnQtLTtcbiAgICBpZiAodGhpcy5hY3F1aXJlQ291bnQgPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRhcHRlclRyYW5zYWN0aW9uLmNvbW1pdCguLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGFwdGVyVHJhbnNhY3Rpb24ucm9sbGJhY2soXG4gICAgICAgICAgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byBzdWJtaXQgdHJhbnNhY3Rpb246ICR7ZX1gKSxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5hY3F1aXJlQ291bnQgPCAwKSB7XG4gICAgICB0aGlzLmFjcXVpcmVDb3VudCA9IDA7XG4gICAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJvbGxiYWNrKGU6IEVycm9yLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRhcHRlclRyYW5zYWN0aW9uLnJvbGxiYWNrKFxuICAgICAgICBuZXcgSW50ZXJuYWxFcnJvcihgRmFpbGVkIHRvIHN1Ym1pdCB0cmFuc2FjdGlvbjogJHtlfWApLFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gcm9sbGJhY2sgdHJhbnNhY3Rpb246ICR7ZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2NrLnJlbGVhc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -32,6 +32,13 @@ import { ContextualArgs, ContextualizedArgs, ContextualLoggedClass, MaybeContext
|
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
34
|
export declare class Dispatch<A extends Adapter<any, any, any, any>> extends ContextualLoggedClass<ContextOf<A>> implements AdapterDispatch<A> {
|
|
35
|
+
/**
|
|
36
|
+
* Indicates whether the dispatcher has already been initialized.
|
|
37
|
+
*
|
|
38
|
+
* @description Tracks the initialization state to prevent duplicate setup
|
|
39
|
+
* @summary Whether the dispatcher is initialized and ready to observe adapter operations
|
|
40
|
+
*/
|
|
41
|
+
protected initialized: boolean;
|
|
35
42
|
/**
|
|
36
43
|
* @description The adapter being observed
|
|
37
44
|
* @summary Reference to the database adapter whose operations are being monitored
|
|
@@ -37,6 +37,13 @@ export class Dispatch extends ContextualLoggedClass {
|
|
|
37
37
|
*/
|
|
38
38
|
constructor() {
|
|
39
39
|
super();
|
|
40
|
+
/**
|
|
41
|
+
* Indicates whether the dispatcher has already been initialized.
|
|
42
|
+
*
|
|
43
|
+
* @description Tracks the initialization state to prevent duplicate setup
|
|
44
|
+
* @summary Whether the dispatcher is initialized and ready to observe adapter operations
|
|
45
|
+
*/
|
|
46
|
+
this.initialized = false;
|
|
40
47
|
}
|
|
41
48
|
logCtx(args, operation, allowCreate = false) {
|
|
42
49
|
if (!this.adapter)
|
|
@@ -89,8 +96,15 @@ export class Dispatch extends ContextualLoggedClass {
|
|
|
89
96
|
.verbose(`No adapter observed for dispatch; skipping initialization`);
|
|
90
97
|
return;
|
|
91
98
|
}
|
|
99
|
+
if (this.initialized) {
|
|
100
|
+
this.log
|
|
101
|
+
.for(this.initialize)
|
|
102
|
+
.debug("Dispatcher already initialized; skipping initialization to prevent duplicate setup");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
92
105
|
const { log } = (await this.logCtx(args, PersistenceKeys.INITIALIZATION, true)).for(this.initialize);
|
|
93
106
|
log.verbose(`Initializing ${this.adapter}'s event Dispatch`);
|
|
107
|
+
this.initialized = true;
|
|
94
108
|
const adapter = this.adapter;
|
|
95
109
|
[
|
|
96
110
|
OperationKeys.CREATE,
|
|
@@ -169,6 +183,8 @@ export class Dispatch extends ContextualLoggedClass {
|
|
|
169
183
|
observe(observer) {
|
|
170
184
|
if (!(observer instanceof Adapter))
|
|
171
185
|
throw new UnsupportedError("Only Adapters can be observed by dispatch");
|
|
186
|
+
if (this.adapter)
|
|
187
|
+
return () => this.unObserve(this.adapter);
|
|
172
188
|
this.adapter = observer;
|
|
173
189
|
this.models = Adapter.models(this.adapter.alias);
|
|
174
190
|
this.initialize().then(() => this.log.verbose(`Dispatch initialized for ${this.adapter.alias} adapter`));
|
|
@@ -197,11 +213,12 @@ export class Dispatch extends ContextualLoggedClass {
|
|
|
197
213
|
if (!model)
|
|
198
214
|
throw new InternalError(`Model must be provided for observer update`);
|
|
199
215
|
const table = model && typeof model === "string" ? model : Model.tableName(model);
|
|
200
|
-
const { log, ctxArgs, ctx } = this.logCtx(args, this.updateObservers);
|
|
201
216
|
if (!this.adapter) {
|
|
202
|
-
log
|
|
217
|
+
const log = this.log.for(this.updateObservers);
|
|
218
|
+
log.debug(`No adapter observed for dispatch; skipping observer update for ${table}:${event}`);
|
|
203
219
|
return;
|
|
204
220
|
}
|
|
221
|
+
const { log, ctxArgs, ctx } = this.logCtx(args, this.updateObservers);
|
|
205
222
|
try {
|
|
206
223
|
log.debug(`dispatching observer refresh for ${event}:${table}: ${id}${ctx.get("observeFullResult") ? " - including result" : ""}`);
|
|
207
224
|
await this.adapter.refresh(model, event, id, ...ctxArgs);
|
|
@@ -216,4 +233,4 @@ export class Dispatch extends ContextualLoggedClass {
|
|
|
216
233
|
}
|
|
217
234
|
if (Adapter)
|
|
218
235
|
Adapter["_baseDispatch"] = Dispatch;
|
|
219
|
-
//# sourceMappingURL=Dispatch.js.map
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGVyc2lzdGVuY2UvRGlzcGF0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsYUFBYSxHQUNkLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFrQjtBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQWlCO0FBRzVDLE9BQU8sRUFHTCxxQkFBcUIsR0FHdEIsNENBQXVDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBRTlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLFFBQ1gsU0FBUSxxQkFBbUM7SUF1QjNDOzs7T0FHRztJQUNIO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUF6QlY7Ozs7O1dBS0c7UUFDTyxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQW9CdkMsQ0FBQztJQW1Da0IsTUFBTSxDQUl2QixJQUE0QyxFQUM1QyxTQUFpQixFQUNqQixjQUF1QixLQUFLO1FBYzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFrQixDQVk1RCxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1DRztJQUNPLEtBQUssQ0FBQyxVQUFVLENBQ3hCLEdBQUcsSUFBc0M7UUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixrRUFBa0U7WUFDbEUsMEVBQTBFO1lB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QUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxpQkFBaUIsQ0FBQztJQUN0RixDQUFDO0NBQ0Y7QUFFRCxJQUFJLE9BQU87SUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IE1vZGVsLCBNb2RlbENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuL0FkYXB0ZXJcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXJEaXNwYXRjaCwgQ29udGV4dE9mLCBFdmVudElkcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHtcbiAgQ29udGV4dHVhbEFyZ3MsXG4gIENvbnRleHR1YWxpemVkQXJncyxcbiAgQ29udGV4dHVhbExvZ2dlZENsYXNzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIE1ldGhvZE9yT3BlcmF0aW9uLFxufSBmcm9tIFwiLi4vdXRpbHMvQ29udGV4dHVhbExvZ2dlZENsYXNzXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGlzcGF0Y2hlcyBkYXRhYmFzZSBvcGVyYXRpb24gZXZlbnRzIHRvIG9ic2VydmVyc1xuICogQHN1bW1hcnkgVGhlIERpc3BhdGNoIGNsYXNzIGltcGxlbWVudHMgdGhlIE9ic2VydmFibGUgaW50ZXJmYWNlIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgaW50ZXJjZXB0aW5nXG4gKiBkYXRhYmFzZSBvcGVyYXRpb25zIGZyb20gYW4gQWRhcHRlciBhbmQgbm90aWZ5aW5nIG9ic2VydmVycyB3aGVuIGNoYW5nZXMgb2NjdXIuIEl0IHVzZXMgcHJveGllcyB0b1xuICogd3JhcCB0aGUgYWRhcHRlcidzIENSVUQgbWV0aG9kcyBhbmQgYXV0b21hdGljYWxseSB0cmlnZ2VyIG9ic2VydmVyIHVwZGF0ZXMgYWZ0ZXIgb3BlcmF0aW9ucyBjb21wbGV0ZS5cbiAqIEB0ZW1wbGF0ZSBZIC0gVGhlIG5hdGl2ZSBkYXRhYmFzZSBkcml2ZXIgdHlwZVxuICogQHBhcmFtIHt2b2lkfSAtIE5vIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnNcbiAqIEBjbGFzcyBEaXNwYXRjaFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0aW5nIGFuZCB1c2luZyBhIERpc3BhdGNoIGluc3RhbmNlXG4gKiBjb25zdCBkaXNwYXRjaCA9IG5ldyBEaXNwYXRjaDxQb3N0Z3Jlc0RyaXZlcj4oKTtcbiAqXG4gKiAvLyBDb25uZWN0IGl0IHRvIGFuIGFkYXB0ZXJcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgUG9zdGdyZXNBZGFwdGVyKGNvbm5lY3Rpb24pO1xuICogZGlzcGF0Y2gub2JzZXJ2ZShhZGFwdGVyKTtcbiAqXG4gKiAvLyBOb3cgYW55IENSVUQgb3BlcmF0aW9ucyBvbiB0aGUgYWRhcHRlciB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIC8vIHRyaWdnZXIgb2JzZXJ2ZXIgbm90aWZpY2F0aW9uc1xuICogYXdhaXQgYWRhcHRlci5jcmVhdGUoJ3VzZXJzJywgMTIzLCB1c2VyTW9kZWwpO1xuICogLy8gT2JzZXJ2ZXJzIHdpbGwgYmUgbm90aWZpZWQgYWJvdXQgdGhlIGNyZWF0aW9uXG4gKlxuICogLy8gV2hlbiBkb25lLCB5b3UgY2FuIGRpc2Nvbm5lY3RcbiAqIGRpc3BhdGNoLnVuT2JzZXJ2ZShhZGFwdGVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2g8QSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pj5cbiAgZXh0ZW5kcyBDb250ZXh0dWFsTG9nZ2VkQ2xhc3M8Q29udGV4dE9mPEE+PlxuICBpbXBsZW1lbnRzIEFkYXB0ZXJEaXNwYXRjaDxBPlxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpc3BhdGNoZXIgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cbiAgICpcbiAgICogQGRlc2NyaXB0aW9uIFRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgdG8gcHJldmVudCBkdXBsaWNhdGUgc2V0dXBcbiAgICogQHN1bW1hcnkgV2hldGhlciB0aGUgZGlzcGF0Y2hlciBpcyBpbml0aWFsaXplZCBhbmQgcmVhZHkgdG8gb2JzZXJ2ZSBhZGFwdGVyIG9wZXJhdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGFkYXB0ZXIgYmVpbmcgb2JzZXJ2ZWRcbiAgICogQHN1bW1hcnkgUmVmZXJlbmNlIHRvIHRoZSBkYXRhYmFzZSBhZGFwdGVyIHdob3NlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIG1vbml0b3JlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFkYXB0ZXI/OiBBO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBtb2RlbCBjb25zdHJ1Y3RvcnNcbiAgICogQHN1bW1hcnkgQXJyYXkgb2YgbW9kZWwgY29uc3RydWN0b3JzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYWRhcHRlclxuICAgKi9cbiAgcHJvdGVjdGVkIG1vZGVscyE6IE1vZGVsQ29uc3RydWN0b3I8YW55PltdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBEaXNwYXRjaCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBEaXNwYXRjaCBpbnN0YW5jZSB3aXRob3V0IGFueSBhZGFwdGVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4sIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9EXG4gICk6IENvbnRleHR1YWxpemVkQXJnczxcbiAgICBDb250ZXh0T2Y8QT4sXG4gICAgQVJHUyxcbiAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgPjtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4sIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBmYWxzZVxuICApOiBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgQ29udGV4dE9mPEE+LFxuICAgIEFSR1MsXG4gICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogdHJ1ZVxuICApOiBQcm9taXNlPFxuICAgIENvbnRleHR1YWxpemVkQXJnczxDb250ZXh0T2Y8QT4sIEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT5cbiAgPjtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4sIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTpcbiAgICB8IFByb21pc2U8XG4gICAgICAgIENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgICBDb250ZXh0T2Y8QT4sXG4gICAgICAgICAgQVJHUyxcbiAgICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgPlxuICAgICAgPlxuICAgIHwgQ29udGV4dHVhbGl6ZWRBcmdzPFxuICAgICAgICBDb250ZXh0T2Y8QT4sXG4gICAgICAgIEFSR1MsXG4gICAgICAgIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZVxuICAgICAgPiB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiQWRhcHRlciBub3Qgc2V0IHlldFwiKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyW1wibG9nQ3R4XCJdKGFyZ3MsIG9wZXJhdGlvbiwgYWxsb3dDcmVhdGUgYXMgYW55KSBhc1xuICAgICAgfCBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICAgICAgQ29udGV4dE9mPEE+LFxuICAgICAgICAgIEFSR1MsXG4gICAgICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgID5cbiAgICAgIHwgUHJvbWlzZTxcbiAgICAgICAgICBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICAgICAgICBDb250ZXh0T2Y8QT4sXG4gICAgICAgICAgICBBUkdTLFxuICAgICAgICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgPlxuICAgICAgICA+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgZGlzcGF0Y2ggYnkgcHJveHlpbmcgYWRhcHRlciBtZXRob2RzXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgcHJveGllcyBvbiB0aGUgYWRhcHRlcidzIENSVUQgbWV0aG9kcyB0byBpbnRlcmNlcHQgb3BlcmF0aW9ucyBhbmQgbm90aWZ5IG9ic2VydmVycy5cbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhbiBhZGFwdGVyIGlzIG9ic2VydmVkLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IERpc3BhdGNoXG4gICAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFByb3h5XG4gICAqXG4gICAqICAgRGlzcGF0Y2gtPj5EaXNwYXRjaDogaW5pdGlhbGl6ZSgpXG4gICAqICAgRGlzcGF0Y2gtPj5EaXNwYXRjaDogQ2hlY2sgaWYgYWRhcHRlciBleGlzdHNcbiAgICogICBhbHQgTm8gYWRhcHRlclxuICAgKiAgICAgRGlzcGF0Y2gtLT4+RGlzcGF0Y2g6IFRocm93IEludGVybmFsRXJyb3JcbiAgICogICBlbmRcbiAgICpcbiAgICogICBsb29wIEZvciBlYWNoIENSVUQgbWV0aG9kXG4gICAqICAgICBEaXNwYXRjaC0+PkFkYXB0ZXI6IENoZWNrIGlmIG1ldGhvZCBleGlzdHNcbiAgICogICAgIGFsdCBNZXRob2QgZG9lc24ndCBleGlzdFxuICAgKiAgICAgICBEaXNwYXRjaC0tPj5EaXNwYXRjaDogVGhyb3cgSW50ZXJuYWxFcnJvclxuICAgKiAgICAgZW5kXG4gICAqXG4gICAqICAgICBEaXNwYXRjaC0+PkFkYXB0ZXI6IEdldCBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gICAqICAgICBsb29wIFdoaWxlIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4gICAqICAgICAgIERpc3BhdGNoLT4+QWRhcHRlcjogQ2hlY2sgcHJvdG90eXBlIGNoYWluXG4gICAqICAgICBlbmRcbiAgICpcbiAgICogICAgIGFsdCBEZXNjcmlwdG9yIG5vdCBmb3VuZCBvciBub3Qgd3JpdGFibGVcbiAgICogICAgICAgRGlzcGF0Y2gtPj5EaXNwYXRjaDogTG9nIGVycm9yIGFuZCBjb250aW51ZVxuICAgKiAgICAgZWxzZSBEZXNjcmlwdG9yIGZvdW5kIGFuZCB3cml0YWJsZVxuICAgKiAgICAgICBEaXNwYXRjaC0+PlByb3h5OiBDcmVhdGUgcHJveHkgZm9yIG1ldGhvZFxuICAgKiAgICAgICBEaXNwYXRjaC0+PkFkYXB0ZXI6IFJlcGxhY2UgbWV0aG9kIHdpdGggcHJveHlcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGluaXRpYWxpemUoXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIC8vIEdyYWNlZnVsbHkgc2tpcCBpbml0aWFsaXphdGlvbiB3aGVuIG5vIGFkYXB0ZXIgaXMgb2JzZXJ2ZWQgeWV0LlxuICAgICAgLy8gU29tZSB0ZXN0cyBvciBzZXR1cHMgbWF5IGNvbnN0cnVjdCBhIERpc3BhdGNoIGJlZm9yZSBjYWxsaW5nIG9ic2VydmUoKS5cbiAgICAgIC8vIEluc3RlYWQgb2YgdGhyb3dpbmcsIHdlIG5vLW9wIHNvIHRoYXQgbGF0ZXIgb2JzZXJ2ZSgpIGNhbiBwcm9jZWVkLlxuICAgICAgdGhpcy5sb2dcbiAgICAgICAgLmZvcih0aGlzLmluaXRpYWxpemUpXG4gICAgICAgIC52ZXJib3NlKGBObyBhZGFwdGVyIG9ic2VydmVkIGZvciBkaXNwYXRjaDsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb25gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5sb2dcbiAgICAgICAgLmZvcih0aGlzLmluaXRpYWxpemUpXG4gICAgICAgIC5kZWJ1ZyhcbiAgICAgICAgICBcIkRpc3BhdGNoZXIgYWxyZWFkeSBpbml0aWFsaXplZDsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gdG8gcHJldmVudCBkdXBsaWNhdGUgc2V0dXBcIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQZXJzaXN0ZW5jZUtleXMuSU5JVElBTElaQVRJT04sIHRydWUpXG4gICAgKS5mb3IodGhpcy5pbml0aWFsaXplKTtcbiAgICBsb2cudmVyYm9zZShgSW5pdGlhbGl6aW5nICR7dGhpcy5hZGFwdGVyfSdzIGV2ZW50IERpc3BhdGNoYCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hZGFwdGVyIGFzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PjtcbiAgICAoXG4gICAgICBbXG4gICAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5DUkVBVEVfQUxMLFxuICAgICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTCxcbiAgICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsXG4gICAgICBdIGFzIChrZXlvZiBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4pW11cbiAgICApLmZvckVhY2goKHRvV3JhcCkgPT4ge1xuICAgICAgaWYgKCFhZGFwdGVyW3RvV3JhcF0pXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIGBNZXRob2QgJHt0b1dyYXB9IG5vdCBmb3VuZCBpbiAke2FkYXB0ZXIuYWxpYXN9IGFkYXB0ZXIgdG8gYmluZCBPYnNlcnZhYmxlcyBEaXNwYXRjaGBcbiAgICAgICAgKTtcblxuICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFkYXB0ZXIsIHRvV3JhcCk7XG4gICAgICBsZXQgcHJvdG86IGFueSA9IGFkYXB0ZXI7XG4gICAgICB3aGlsZSAoIWRlc2NyaXB0b3IgJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICAgICAgICBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgdG9XcmFwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkZXNjcmlwdG9yIHx8ICFkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBtZXRob2QgJHt0b1dyYXB9IHRvIGJpbmQgT2JzZXJ2YWJsZXMgRGlzcGF0Y2hgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGJ1bGtUb1NpbmdsZShtZXRob2Q6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgIGNhc2UgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTEw6XG4gICAgICAgICAgICByZXR1cm4gT3BlcmF0aW9uS2V5cy5DUkVBVEU7XG4gICAgICAgICAgY2FzZSBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTDpcbiAgICAgICAgICAgIHJldHVybiBPcGVyYXRpb25LZXlzLlVQREFURTtcbiAgICAgICAgICBjYXNlIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMOlxuICAgICAgICAgICAgcmV0dXJuIE9wZXJhdGlvbktleXMuREVMRVRFO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYmVjYXVzZSB0aGVyZSBhcmUgcmVhZCBvbmx5IHByb3BlcnRpZXNcbiAgICAgIGFkYXB0ZXJbdG9XcmFwXSA9IG5ldyBQcm94eShhZGFwdGVyW3RvV3JhcF0sIHtcbiAgICAgICAgYXBwbHk6IGFzeW5jICh0YXJnZXQ6IGFueSwgdGhpc0FyZzogQSwgYXJnQXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gdGhpc0FyZ1tcImxvZ0N0eFwiXShcbiAgICAgICAgICAgIGFyZ0FycmF5LnNsaWNlKDMgLSAoNCAtIGFyZ0FycmF5Lmxlbmd0aCksIGFyZ0FycmF5Lmxlbmd0aCksXG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IFt0YWJsZU5hbWUsIGlkcywgcGF5bG9hZF0gPSBhcmdBcnJheTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0YXJnZXQuYXBwbHkodGhpc0FyZywgW1xuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgaWRzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIC4uLmN0eEFyZ3MsXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBjb25zdCByZXN1bHRBcmdzOiBbc3RyaW5nLCBzdHJpbmcsIEV2ZW50SWRzXSA9IFtcbiAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgIGJ1bGtUb1NpbmdsZSh0b1dyYXApLFxuICAgICAgICAgICAgaWRzLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgICBpZiAoY3R4LmdldChcIm9ic2VydmVGdWxsUmVzdWx0XCIpKSB7XG4gICAgICAgICAgICByZXN1bHRBcmdzLnB1c2goXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0Lm1hcCgocikgPT4gdGFibGVOYW1lKHIpKVxuICAgICAgICAgICAgICAgIDogdGFibGVOYW1lKHJlc3VsdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlT2JzZXJ2ZXJzKC4uLnJlc3VsdEFyZ3MsIC4uLmN0eEFyZ3MpLmNhdGNoKChlOiB1bmtub3duKSA9PlxuICAgICAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIGRpc3BhdGNoIG9ic2VydmVyIHJlZnJlc2ggZm9yICR7dG9XcmFwfSBvbiAke3RhYmxlTmFtZS5uYW1lIHx8IHRhYmxlTmFtZX0gZm9yICR7aWRzfTogJHtlfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xvc2VzIHRoZSBkaXNwYXRjaFxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgd2hlbiB0aGUgZGlzcGF0Y2ggaXMgbm8gbG9uZ2VyIG5lZWRlZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGNsb3NpbmcgaXMgY29tcGxldGVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXN5bmMgY2xvc2UoLi4uY3R4QXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dE9mPEE+Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIHRvIG5vdGhpbmcgaW4gdGhpcyBpbnN0YW5jZSBidXQgbWF5IGJlIHJlcXVpcmVkIGZvciBjbG9zaW5nIGNvbm5lY3Rpb25zXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXJ0cyBvYnNlcnZpbmcgYW4gYWRhcHRlclxuICAgKiBAc3VtbWFyeSBDb25uZWN0cyB0aGlzIGRpc3BhdGNoIHRvIGFuIGFkYXB0ZXIgdG8gbW9uaXRvciBpdHMgb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0ge0FkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pn0gb2JzZXJ2ZXIgLSBUaGUgYWRhcHRlciB0byBvYnNlcnZlXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBvYnNlcnZlKG9ic2VydmVyOiBBKTogKCkgPT4gdm9pZCB7XG4gICAgaWYgKCEob2JzZXJ2ZXIgaW5zdGFuY2VvZiBBZGFwdGVyKSlcbiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFwiT25seSBBZGFwdGVycyBjYW4gYmUgb2JzZXJ2ZWQgYnkgZGlzcGF0Y2hcIik7XG5cbiAgICBpZiAodGhpcy5hZGFwdGVyKSByZXR1cm4gKCkgPT4gdGhpcy51bk9ic2VydmUodGhpcy5hZGFwdGVyIGFzIE9ic2VydmVyKTtcblxuICAgIHRoaXMuYWRhcHRlciA9IG9ic2VydmVyO1xuICAgIHRoaXMubW9kZWxzID0gQWRhcHRlci5tb2RlbHModGhpcy5hZGFwdGVyLmFsaWFzKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKS50aGVuKCgpID0+XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKFxuICAgICAgICBgRGlzcGF0Y2ggaW5pdGlhbGl6ZWQgZm9yICR7dGhpcy5hZGFwdGVyIS5hbGlhc30gYWRhcHRlcmBcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHRoaXMudW5PYnNlcnZlKG9ic2VydmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3RvcHMgb2JzZXJ2aW5nIGFuIGFkYXB0ZXJcbiAgICogQHN1bW1hcnkgRGlzY29ubmVjdHMgdGhpcyBkaXNwYXRjaCBmcm9tIGFuIGFkYXB0ZXJcbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgYWRhcHRlciB0byBzdG9wIG9ic2VydmluZ1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgdW5PYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFkYXB0ZXIgIT09IG9ic2VydmVyKVxuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICAgIFwiT25seSB0aGUgYWRhcHRlciB0aGF0IHdhcyB1c2VkIHRvIG9ic2VydmUgY2FuIGJlIHVub2JzZXJ2ZWRcIlxuICAgICAgKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgb2JzZXJ2ZXJzIGFib3V0IGEgZGF0YWJhc2UgZXZlbnRcbiAgICogQHN1bW1hcnkgTm90aWZpZXMgb2JzZXJ2ZXJzIGFib3V0IGEgY2hhbmdlIGluIHRoZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgd2hlcmUgdGhlIGNoYW5nZSBvY2N1cnJlZFxuICAgKiBAcGFyYW0ge09wZXJhdGlvbktleXN8QnVsa0NydWRPcGVyYXRpb25LZXlzfHN0cmluZ30gZXZlbnQgLSBUaGUgdHlwZSBvZiBvcGVyYXRpb24gdGhhdCBvY2N1cnJlZFxuICAgKiBAcGFyYW0ge0V2ZW50SWRzfSBpZCAtIFRoZSBpZGVudGlmaWVyKHMpIG9mIHRoZSBhZmZlY3RlZCByZWNvcmQocylcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgb2JzZXJ2ZXJzIGhhdmUgYmVlbiBub3RpZmllZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzKFxuICAgIG1vZGVsOiBDb25zdHJ1Y3Rvcjxhbnk+IHwgc3RyaW5nLFxuICAgIGV2ZW50OiBPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nLFxuICAgIGlkOiBFdmVudElkcyxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbW9kZWwpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTW9kZWwgbXVzdCBiZSBwcm92aWRlZCBmb3Igb2JzZXJ2ZXIgdXBkYXRlYCk7XG4gICAgY29uc3QgdGFibGUgPVxuICAgICAgbW9kZWwgJiYgdHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiID8gbW9kZWwgOiBNb2RlbC50YWJsZU5hbWUobW9kZWwpO1xuXG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnVwZGF0ZU9ic2VydmVycyk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBObyBhZGFwdGVyIG9ic2VydmVkIGZvciBkaXNwYXRjaDsgc2tpcHBpbmcgb2JzZXJ2ZXIgdXBkYXRlIGZvciAke3RhYmxlfToke2V2ZW50fWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVPYnNlcnZlcnMpO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBkaXNwYXRjaGluZyBvYnNlcnZlciByZWZyZXNoIGZvciAke2V2ZW50fToke3RhYmxlfTogJHtpZH0ke2N0eC5nZXQoXCJvYnNlcnZlRnVsbFJlc3VsdFwiKSA/IFwiIC0gaW5jbHVkaW5nIHJlc3VsdFwiIDogXCJcIn1gXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hZGFwdGVyLnJlZnJlc2gobW9kZWwsIGV2ZW50LCBpZCwgLi4uY3R4QXJncyk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byByZWZyZXNoIGRpc3BhdGNoOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuYWRhcHRlciA/IHRoaXMuYWRhcHRlci50b1N0cmluZygpIDogXCJ1bmluaXRpYWxpemVkXCJ9IGV2ZW50IGRpc3BhdGNoYDtcbiAgfVxufVxuXG5pZiAoQWRhcHRlcikgQWRhcHRlcltcIl9iYXNlRGlzcGF0Y2hcIl0gPSBEaXNwYXRjaDtcbiJdfQ==
|