@decaf-ts/core 0.9.0 → 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 +7 -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 +7 -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
|
@@ -336,4 +336,4 @@ export class RamStatement extends Statement {
|
|
|
336
336
|
}
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
|
-
//# sourceMappingURL=RamStatement.js.map
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhbS9SYW1TdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSw0QkFBaUI7QUFJMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0NBQTJCO0FBRy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUscUNBQWdDO0FBQ3pELE9BQU8sRUFBZSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLE9BQU8sWUFJWCxTQUFRLFNBQW9DO0lBQzVDLFlBQVksT0FBVSxFQUFFLFNBQWlDO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssT0FBTztRQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBVSxFQUFFLEdBQVUsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDakMsTUFBTSxJQUFJLGFBQWEsQ0FDckIsZ0RBQWdELENBQ2pELENBQUM7WUFDSixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLGVBQWUsR0FDbkIsbUJBQW1CLEtBQUssY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QUM7UUFDeEUsQ0FBQztRQUNELFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUM3QixNQUFNLElBQUksVUFBVSxDQUNsQixHQUFHLE9BQU8sdUJBQXVCLFFBQVEsd0JBQXdCLENBQ2xFLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLFVBQVUsQ0FDbEIsR0FBRyxPQUFPLDBCQUEwQixRQUFRLDBCQUEwQixDQUN2RSxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUM1QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxVQUFVLENBQ2xCLEdBQUcsT0FBTyx5QkFBeUIsUUFBUSwyQkFBMkIsQ0FDdkUsQ0FBQztZQUNKO2dCQUNFLE1BQU0sSUFBSSxVQUFVLENBQ2xCLEdBQUcsT0FBTyxzQkFBc0IsUUFBUSxvQkFBb0IsUUFBUSxHQUFHLENBQ3hFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZGl0aW9uLCBHcm91cE9wZXJhdG9yLCBPcGVyYXRvciwgUXVlcnlFcnJvciB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgU2VsZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vcXVlcnkvc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBSYW1Db250ZXh0LCBSYXdSYW1RdWVyeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuLi9xdWVyeS9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuaW1wb3J0IHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL3R5cGVzXCI7XG5pbXBvcnQgeyBPcmRlckRpcmVjdGlvbiB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJBTS1zcGVjaWZpYyBxdWVyeSBzdGF0ZW1lbnQgYnVpbGRlclxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzZSBTdGF0ZW1lbnQgY2xhc3MgdG8gcHJvdmlkZSBxdWVyeSBidWlsZGluZyBmdW5jdGlvbmFsaXR5IGZvciB0aGUgUkFNIGFkYXB0ZXIuXG4gKiBUaGlzIGNsYXNzIHRyYW5zbGF0ZXMgaGlnaC1sZXZlbCBxdWVyeSBvcGVyYXRpb25zIGludG8gcHJlZGljYXRlcyB0aGF0IGNhbiBmaWx0ZXIgYW5kIHNvcnRcbiAqIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMuXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGJlaW5nIHF1ZXJpZWRcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlIHJldHVybmVkIGJ5IHRoZSBxdWVyeVxuICogQHBhcmFtIHtSYW1BZGFwdGVyfSBhZGFwdGVyIC0gVGhlIFJBTSBhZGFwdGVyIGluc3RhbmNlIHRvIHVzZSBmb3IgZXhlY3V0aW5nIHF1ZXJpZXNcbiAqIEBjbGFzcyBSYW1TdGF0ZW1lbnRcbiAqIEBjYXRlZ29yeSBSYW1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBzdGF0ZW1lbnQgZm9yIHF1ZXJ5aW5nIFVzZXIgbW9kZWxzXG4gKiBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgUmFtU3RhdGVtZW50PFVzZXIsIFVzZXI+KHJhbUFkYXB0ZXIpO1xuICpcbiAqIC8vIEJ1aWxkIGEgcXVlcnkgdG8gZmluZCBhY3RpdmUgdXNlcnMgd2l0aCBhZ2UgPiAxOFxuICogY29uc3QgcmVzdWx0cyA9IGF3YWl0IHN0YXRlbWVudFxuICogICAuZnJvbShVc2VyKVxuICogICAud2hlcmUoQ29uZGl0aW9uLmFuZChcbiAqICAgICBDb25kaXRpb24uZXEoJ2FjdGl2ZScsIHRydWUpLFxuICogICAgIENvbmRpdGlvbi5ndCgnYWdlJywgMTgpXG4gKiAgICkpXG4gKiAgIC5vcmRlckJ5KCdsYXN0TmFtZScsICdhc2MnKVxuICogICAubGltaXQoMTApXG4gKiAgIC5leGVjdXRlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJhbVN0YXRlbWVudDxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSLFxuICBBIGV4dGVuZHMgQWRhcHRlcjxNLCBhbnksIFJhd1JhbVF1ZXJ5PGFueT4sIFJhbUNvbnRleHQ+LFxuPiBleHRlbmRzIFN0YXRlbWVudDxNLCBBLCBSLCBSYXdSYW1RdWVyeTxhbnk+PiB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI6IEEsIG92ZXJyaWRlcz86IFBhcnRpYWw8QWRhcHRlckZsYWdzPikge1xuICAgIHN1cGVyKGFkYXB0ZXIsIG92ZXJyaWRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzb3J0IGNvbXBhcmF0b3IgZnVuY3Rpb25cbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgZnVuY3Rpb24gdGhhdCBjb21wYXJlcyB0d28gbW9kZWwgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBvcmRlckJ5IGNyaXRlcmlhLlxuICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGRpZmZlcmVudCBkYXRhIHR5cGVzIChzdHJpbmcsIG51bWJlciwgZGF0ZSkgYW5kIHNvcnQgZGlyZWN0aW9ucyAoYXNjLCBkZXNjKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb24oTW9kZWwsIE1vZGVsKTogbnVtYmVyfSBBIGNvbXBhcmF0b3IgZnVuY3Rpb24gZm9yIHNvcnRpbmcgbW9kZWwgaW5zdGFuY2VzXG4gICAqL1xuICBwcml2YXRlIGdldFNvcnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gdGhpcy5vcmRlckJ5U2VsZWN0b3JzO1xuICAgIHJldHVybiAoZWwxOiBNb2RlbCwgZWwyOiBNb2RlbCkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvcnMgfHwgIXNlbGVjdG9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIFwib3JkZXJCeVNlbGVjdG9ycyBub3Qgc2V0LiBTaG91bGQgYmUgaW1wb3NzaWJsZVwiXG4gICAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gb2Ygc2VsZWN0b3JzKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREaXJlY3Rpb24gPSBTdHJpbmcoZGlyZWN0aW9uKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25GYWN0b3IgPVxuICAgICAgICAgIG5vcm1hbGl6ZWREaXJlY3Rpb24gPT09IE9yZGVyRGlyZWN0aW9uLkFTQyA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgY29tcGFyaXNvbiA9IHRoaXMuY29tcGFyZUJ5S2V5KGVsMSwgZWwyLCBrZXkgYXMga2V5b2YgTW9kZWwpO1xuICAgICAgICBpZiAoY29tcGFyaXNvbiAhPT0gMCkgcmV0dXJuIGRpcmVjdGlvbkZhY3RvciAqIGNvbXBhcmlzb247XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlQnlLZXkoZWwxOiBNb2RlbCwgZWwyOiBNb2RlbCwga2V5OiBrZXlvZiBNb2RlbCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUxID0gZWwxW2tleV07XG4gICAgY29uc3QgdmFsdWUyID0gZWwyW2tleV07XG5cbiAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHJldHVybiAwO1xuXG4gICAgaWYgKHZhbHVlMSA9PSBudWxsIHx8IHZhbHVlMiA9PSBudWxsKSByZXR1cm4gdmFsdWUxID09IG51bGwgPyAxIDogLTE7XG5cbiAgICBjb25zdCB7IGRlc2lnblR5cGU6IHR5cGUgfSA9IE1ldGFkYXRhLmdldFByb3BEZXNpZ25UeXBlcyhcbiAgICAgIGVsMS5jb25zdHJ1Y3RvciBhcyBhbnksXG4gICAgICBrZXkgYXMgc3RyaW5nXG4gICAgKTtcbiAgICBjb25zdCByZXNvbHZlZFR5cGUgPVxuICAgICAgKHR5cGUgJiYgdHlwZS5uYW1lICYmIHR5cGUubmFtZS50b0xvd2VyQ2FzZSgpKSB8fCB0eXBlb2YgdmFsdWUxO1xuXG4gICAgc3dpdGNoIChyZXNvbHZlZFR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVN0cmluZ3MoXG4gICAgICAgICAgdmFsdWUxIGFzIHVua25vd24gYXMgc3RyaW5nLFxuICAgICAgICAgIHZhbHVlMiBhcyB1bmtub3duIGFzIHN0cmluZ1xuICAgICAgICApO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlTnVtYmVycyhcbiAgICAgICAgICB2YWx1ZTEgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgICAgICAgdmFsdWUyIGFzIHVua25vd24gYXMgbnVtYmVyXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVCaWdJbnRzKFxuICAgICAgICAgIHZhbHVlMSBhcyB1bmtub3duIGFzIGJpZ2ludCxcbiAgICAgICAgICB2YWx1ZTIgYXMgdW5rbm93biBhcyBiaWdpbnRcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVCb29sZWFucyhcbiAgICAgICAgICB2YWx1ZTEgYXMgdW5rbm93biBhcyBib29sZWFuLFxuICAgICAgICAgIHZhbHVlMiBhcyB1bmtub3duIGFzIGJvb2xlYW5cbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIGlmICh2YWx1ZTEgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlMiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZXModmFsdWUxIGFzIERhdGUsIHZhbHVlMiBhcyBEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGBzb3J0aW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJHtyZXNvbHZlZFR5cGV9YCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVCb29sZWFucyhhOiBib29sZWFuLCBiOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYSA9PT0gYiA/IDAgOiBhID8gMSA6IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlTnVtYmVycyhhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlQmlnSW50cyhhOiBiaWdpbnQsIGI6IGJpZ2ludCk6IG51bWJlciB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiAwO1xuICAgIHJldHVybiBhID4gYiA/IDEgOiAtMTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVN0cmluZ3MoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXRlcyhhOiBEYXRlLCBiOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYS52YWx1ZU9mKCkgLSBiLnZhbHVlT2YoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGEgUkFNIHF1ZXJ5IGZyb20gdGhlIHN0YXRlbWVudFxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB0aGUgc3RhdGVtZW50J3Mgc2VsZWN0b3JzIGFuZCBjb25kaXRpb25zIGludG8gYSBSYXdSYW1RdWVyeSBvYmplY3RcbiAgICogdGhhdCBjYW4gYmUgZXhlY3V0ZWQgYnkgdGhlIFJBTSBhZGFwdGVyLiBUaGlzIG1ldGhvZCBhc3NlbWJsZXMgYWxsIHF1ZXJ5IGNvbXBvbmVudHNcbiAgICogKHNlbGVjdCwgZnJvbSwgd2hlcmUsIGxpbWl0LCBvZmZzZXQsIHNvcnQpIGludG8gdGhlIGZpbmFsIHF1ZXJ5IHN0cnVjdHVyZS5cbiAgICogQHJldHVybiB7UmF3UmFtUXVlcnk8TT59IFRoZSBjb25zdHJ1Y3RlZCBSQU0gcXVlcnkgb2JqZWN0XG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGQoKTogUmF3UmFtUXVlcnk8YW55PiB7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0b3IpXG4gICAgICB0aGlzLmVuc3VyZU51bWJlck9yRGF0ZVNlbGVjdG9yKHRoaXMubWluU2VsZWN0b3IsIFwiTUlOIG9wZXJhdGlvblwiKTtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3RvcilcbiAgICAgIHRoaXMuZW5zdXJlTnVtYmVyT3JEYXRlU2VsZWN0b3IodGhpcy5tYXhTZWxlY3RvciwgXCJNQVggb3BlcmF0aW9uXCIpO1xuICAgIGlmICh0aGlzLnN1bVNlbGVjdG9yKVxuICAgICAgdGhpcy5lbnN1cmVOdW1lcmljU2VsZWN0b3IodGhpcy5zdW1TZWxlY3RvciwgXCJTVU0gb3BlcmF0aW9uXCIpO1xuICAgIGlmICh0aGlzLmF2Z1NlbGVjdG9yKVxuICAgICAgdGhpcy5lbnN1cmVOdW1iZXJPckRhdGVTZWxlY3Rvcih0aGlzLmF2Z1NlbGVjdG9yLCBcIkFWRyBvcGVyYXRpb25cIik7XG5cbiAgICBjb25zdCByZXN1bHQ6IFJhd1JhbVF1ZXJ5PE0+ID0ge1xuICAgICAgc2VsZWN0OiB0aGlzLnNlbGVjdFNlbGVjdG9yLFxuICAgICAgZnJvbTogdGhpcy5mcm9tU2VsZWN0b3IsXG4gICAgICB3aGVyZTogdGhpcy53aGVyZUNvbmRpdGlvblxuICAgICAgICA/IHRoaXMucGFyc2VDb25kaXRpb24odGhpcy53aGVyZUNvbmRpdGlvbikud2hlcmVcbiAgICAgICAgOiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgKGVsOiBNKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgbGltaXQ6IHRoaXMubGltaXRTZWxlY3RvcixcbiAgICAgIHNraXA6IHRoaXMub2Zmc2V0U2VsZWN0b3IsXG4gICAgICBncm91cEJ5OiB0aGlzLmdyb3VwQnlTZWxlY3RvcnMsXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudFNlbGVjdG9yICE9PSBcInVuZGVmaW5lZFwiKSByZXN1bHQuY291bnQgPSB0aGlzLmNvdW50U2VsZWN0b3I7XG4gICAgaWYgKHRoaXMuY291bnREaXN0aW5jdFNlbGVjdG9yKSByZXN1bHQuY291bnREaXN0aW5jdCA9IHRoaXMuY291bnREaXN0aW5jdFNlbGVjdG9yO1xuICAgIGlmICh0aGlzLm1pblNlbGVjdG9yKSByZXN1bHQubWluID0gdGhpcy5taW5TZWxlY3RvcjtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3RvcikgcmVzdWx0Lm1heCA9IHRoaXMubWF4U2VsZWN0b3I7XG4gICAgaWYgKHRoaXMuc3VtU2VsZWN0b3IpIHJlc3VsdC5zdW0gPSB0aGlzLnN1bVNlbGVjdG9yO1xuICAgIGlmICh0aGlzLmF2Z1NlbGVjdG9yKSByZXN1bHQuYXZnID0gdGhpcy5hdmdTZWxlY3RvcjtcbiAgICBpZiAodGhpcy5kaXN0aW5jdFNlbGVjdG9yKSByZXN1bHQuZGlzdGluY3QgPSB0aGlzLmRpc3RpbmN0U2VsZWN0b3I7XG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9ycz8ubGVuZ3RoKSByZXN1bHQuc29ydCA9IHRoaXMuZ2V0U29ydCgpO1xuICAgIHJldHVybiByZXN1bHQgYXMgUmF3UmFtUXVlcnk8YW55PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgY29uZGl0aW9uIGludG8gYSBSQU0gcXVlcnkgcHJlZGljYXRlXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgQ29uZGl0aW9uIG9iamVjdCBpbnRvIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWRcbiAgICogdG8gZmlsdGVyIG1vZGVsIGluc3RhbmNlcyBpbiBtZW1vcnkuIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBzaW1wbGUgY29uZGl0aW9uc1xuICAgKiAoZXF1YWxzLCBncmVhdGVyIHRoYW4sIGV0Yy4pIGFuZCBjb21wbGV4IGNvbmRpdGlvbnMgd2l0aCBsb2dpY2FsIG9wZXJhdG9ycyAoQU5ELCBPUikuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZm9yIHRoZSBjb25kaXRpb25cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gcGFyc2VcbiAgICogQHJldHVybiB7UmF3UmFtUXVlcnk8TT59IEEgUkFNIHF1ZXJ5IG9iamVjdCB3aXRoIGEgd2hlcmUgcHJlZGljYXRlIGZ1bmN0aW9uXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFJhbVN0YXRlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IFNpbXBsZUNvbmRpdGlvblxuICAgKiAgIHBhcnRpY2lwYW50IENvbXBsZXhDb25kaXRpb25cbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICogICBhbHQgU2ltcGxlIGNvbmRpdGlvbiAoZXEsIGd0LCBsdCwgZXRjLilcbiAgICogICAgIFJhbVN0YXRlbWVudC0+PlNpbXBsZUNvbmRpdGlvbjogRXh0cmFjdCBhdHRyMSwgb3BlcmF0b3IsIGNvbXBhcmlzb25cbiAgICogICAgIFNpbXBsZUNvbmRpdGlvbi0tPj5SYW1TdGF0ZW1lbnQ6IFJldHVybiBwcmVkaWNhdGUgZnVuY3Rpb25cbiAgICogICBlbHNlIExvZ2ljYWwgb3BlcmF0b3IgKEFORCwgT1IpXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5Db21wbGV4Q29uZGl0aW9uOiBFeHRyYWN0IG5lc3RlZCBjb25kaXRpb25zXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGxlZnRDb25kaXRpb24pXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKHJpZ2h0Q29uZGl0aW9uKVxuICAgKiAgICAgQ29tcGxleENvbmRpdGlvbi0tPj5SYW1TdGF0ZW1lbnQ6IENvbWJpbmUgcHJlZGljYXRlcyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICogICBlbmRcbiAgICogICBSYW1TdGF0ZW1lbnQtLT4+Q2FsbGVyOiBSZXR1cm4gcXVlcnkgd2l0aCB3aGVyZSBwcmVkaWNhdGVcbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbjxNPik6IFJhd1JhbVF1ZXJ5PGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVyZTogKG06IE1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYXR0cjEsIG9wZXJhdG9yLCBjb21wYXJpc29uIH0gPSBjb25kaXRpb24gYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IgfCBHcm91cE9wZXJhdG9yO1xuICAgICAgICAgIGNvbXBhcmlzb246IGFueTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgICAgICBvcGVyYXRvciBhcyBHcm91cE9wZXJhdG9yXG4gICAgICAgICAgKSA9PT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5CSUdHRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA+IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkJJR0dFUl9FUTpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID49IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkRJRkZFUkVOVDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdICE9PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID09PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5SRUdFWFA6XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgSW52YWxpZCByZWdleHAgY29tcGFyaXNvbiBvbiBhIG5vbiBzdHJpbmcgYXR0cmlidXRlOiAke21bYXR0cjEgYXMga2V5b2YgTW9kZWxdfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gISEobVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKFxuICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoY29tcGFyaXNvbiwgXCJnXCIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNUQVJUU19XSVRIOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyMSBhcyBrZXlvZiBNb2RlbDtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlID0gbVthdHRyXSBhcyB1bmtub3duO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGF0dHJWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEludmFsaWQgc3RhcnRzV2l0aCBjb21wYXJpc29uIG9uIGEgbm9uIHN0cmluZyBhdHRyaWJ1dGUgXCIke2F0dHJOYW1lfVwiYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21wYXJpc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgU1RBUlRTX1dJVEggb3BlcmF0b3IgcmVxdWlyZXMgYSBzdHJpbmcgY29tcGFyaXNvbiwgZ290ICR7dHlwZW9mIGNvbXBhcmlzb259YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIChhdHRyVmFsdWUgYXMgc3RyaW5nKS5zdGFydHNXaXRoKGNvbXBhcmlzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5FTkRTX1dJVEg6IHtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ciA9IGF0dHIxIGFzIGtleW9mIE1vZGVsO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHIgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBtW2F0dHJdIGFzIHVua25vd247XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0clZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgSW52YWxpZCBlbmRzV2l0aCBjb21wYXJpc29uIG9uIGEgbm9uIHN0cmluZyBhdHRyaWJ1dGUgXCIke2F0dHJOYW1lfVwiYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21wYXJpc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgRU5EU19XSVRIIG9wZXJhdG9yIHJlcXVpcmVzIGEgc3RyaW5nIGNvbXBhcmlzb24sIGdvdCAke3R5cGVvZiBjb21wYXJpc29ufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAoYXR0clZhbHVlIGFzIHN0cmluZykuZW5kc1dpdGgoY29tcGFyaXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVJfRVE6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5JTjpcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBhcmlzb24pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYElOIG9wZXJhdG9yIHJlcXVpcmVzIGFuIGFycmF5LCBnb3Q6ICR7dHlwZW9mIGNvbXBhcmlzb259YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBjb21wYXJpc29uLmluY2x1ZGVzKG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdKTtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuQkVUV0VFTjoge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcGFyaXNvbikgfHwgY29tcGFyaXNvbi5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgQkVUV0VFTiBvcGVyYXRvciByZXF1aXJlcyBhbiBhcnJheSB3aXRoIDIgdmFsdWVzIFttaW4sIG1heF0sIGdvdDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvblxuICAgICAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ciA9IGF0dHIxIGFzIGtleW9mIE1vZGVsO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHIgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyVHlwZSA9IHRoaXMuZGV0ZXJtaW5lQXR0cmlidXRlVHlwZShcbiAgICAgICAgICAgICAgICBtLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPE1vZGVsPixcbiAgICAgICAgICAgICAgICBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICBcIkJFVFdFRU5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNOdW1lcmljVHlwZShhdHRyVHlwZSkgJiYgYXR0clR5cGUgIT09IFwiZGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgQkVUV0VFTiBvcGVyYXRvciByZXF1aXJlcyBudW1lcmljIG9yIGRhdGUgYXR0cmlidXRlcywgYnV0IFwiJHthdHRyTmFtZX1cIiBpcyAke2F0dHJUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwidW5rbm93blwifWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBjb21wYXJpc29uO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1bYXR0cl07XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmFibGVWYWx1ZSA9IHRoaXMudG9Db21wYXJhYmxlVmFsdWUoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgYXR0clR5cGUsXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgXCJCRVRXRUVOXCIsXG4gICAgICAgICAgICAgICAgeyBhbGxvd051bGw6IHRydWUgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY29tcGFyYWJsZVZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnN0IG1pbkNvbXBhcmFibGUgPSB0aGlzLnRvQ29tcGFyYWJsZVZhbHVlKFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBhdHRyVHlwZSxcbiAgICAgICAgICAgICAgICBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICBcIkJFVFdFRU4gbWluXCJcbiAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgIGNvbnN0IG1heENvbXBhcmFibGUgPSB0aGlzLnRvQ29tcGFyYWJsZVZhbHVlKFxuICAgICAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgICAgICBhdHRyVHlwZSxcbiAgICAgICAgICAgICAgICBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICBcIkJFVFdFRU4gbWF4XCJcbiAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY29tcGFyYWJsZVZhbHVlID49IG1pbkNvbXBhcmFibGUgJiYgY29tcGFyYWJsZVZhbHVlIDw9IG1heENvbXBhcmFibGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICAgIGBJbnZhbGlkIG9wZXJhdG9yIGZvciBzdGFuZGFyZCBjb21wYXJpc29uczogJHtvcGVyYXRvcn1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBPcGVyYXRvci5OT1QpIHtcbiAgICAgICAgICBpZiAoIShhdHRyMSBpbnN0YW5jZW9mIENvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICBcIk5PVCBvcGVyYXRvciByZXF1aXJlcyBhIG5lc3RlZCBjb25kaXRpb24gdG8gbmVnYXRlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMucGFyc2VDb25kaXRpb24oYXR0cjEgYXMgQ29uZGl0aW9uPE0+KTtcbiAgICAgICAgICByZXR1cm4gIW5lc3RlZC53aGVyZShtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcDE6IFJhd1JhbVF1ZXJ5PGFueT4gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICAgICAgYXR0cjEgYXMgQ29uZGl0aW9uPE0+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvcDI6IFJhd1JhbVF1ZXJ5PGFueT4gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICAgICAgY29tcGFyaXNvbiBhcyBDb25kaXRpb248TT5cbiAgICAgICAgICApO1xuICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgR3JvdXBPcGVyYXRvci5BTkQ6XG4gICAgICAgICAgICAgIHJldHVybiBvcDEud2hlcmUobSkgJiYgb3AyLndoZXJlKG0pO1xuICAgICAgICAgICAgY2FzZSBHcm91cE9wZXJhdG9yLk9SOlxuICAgICAgICAgICAgICByZXR1cm4gb3AxLndoZXJlKG0pIHx8IG9wMi53aGVyZShtKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICAgIGBJbnZhbGlkIG9wZXJhdG9yIGZvciBBbmQvT3IgY29tcGFyaXNvbnM6ICR7b3BlcmF0b3J9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIFJhd1JhbVF1ZXJ5PGFueT47XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZU51bWVyaWNTZWxlY3RvcihcbiAgICBzZWxlY3RvcjogU2VsZWN0U2VsZWN0b3I8TT4sXG4gICAgY29udGV4dDogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlU2VsZWN0b3JUeXBlKFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBjb250ZXh0LFxuICAgICAgKHR5cGUpID0+IHRoaXMuaXNOdW1lcmljVHlwZSh0eXBlKSxcbiAgICAgIFwibnVtZXJpY1wiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlTnVtYmVyT3JEYXRlU2VsZWN0b3IoXG4gICAgc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yPE0+LFxuICAgIGNvbnRleHQ6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVNlbGVjdG9yVHlwZShcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgY29udGV4dCxcbiAgICAgICh0eXBlKSA9PiB0aGlzLmlzTnVtZXJpY1R5cGUodHlwZSkgfHwgdHlwZSA9PT0gXCJkYXRlXCIsXG4gICAgICBcIm51bWVyaWMgb3IgZGF0ZVwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU2VsZWN0b3JUeXBlKFxuICAgIHNlbGVjdG9yOiBTZWxlY3RTZWxlY3RvcjxNPixcbiAgICBjb250ZXh0OiBzdHJpbmcsXG4gICAgcHJlZGljYXRlOiAodHlwZTogc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmZyb21TZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGAke2NvbnRleHR9IHJlcXVpcmVzIGEgdGFyZ2V0IG1vZGVsLiBDYWxsIGZyb20oKSBiZWZvcmUgYWdncmVnYXRpbmcuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0ciA9IHNlbGVjdG9yIGFzIHN0cmluZztcbiAgICBjb25zdCB0eXBlID0gdGhpcy5kZXRlcm1pbmVBdHRyaWJ1dGVUeXBlKFxuICAgICAgdGhpcy5mcm9tU2VsZWN0b3IsXG4gICAgICBhdHRyIGFzIGtleW9mIE1vZGVsPGZhbHNlPixcbiAgICAgIGNvbnRleHRcbiAgICApO1xuXG4gICAgaWYgKCFwcmVkaWNhdGUodHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBgJHtjb250ZXh0fSByZXF1aXJlcyBhICR7ZGVzY3JpcHRpb259IGF0dHJpYnV0ZSwgYnV0IFwiJHthdHRyfVwiIGlzICR7dHlwZSB8fCBcInVua25vd25cIn1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQXR0cmlidXRlVHlwZShcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TW9kZWw+LFxuICAgIGF0dHI6IHN0cmluZyxcbiAgICBjb250ZXh0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm9wS2V5ID0gYXR0ciBhcyBrZXlvZiBNb2RlbDxmYWxzZT47XG4gICAgY29uc3QgbWV0YVR5cGUgPVxuICAgICAgTWV0YWRhdGEudHlwZShjbGF6eiwgcHJvcEtleSkgPz9cbiAgICAgIE1ldGFkYXRhLmdldFByb3BEZXNpZ25UeXBlcyhjbGF6eiwgcHJvcEtleSk/LmRlc2lnblR5cGU7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLm5vcm1hbGl6ZU1ldGFUeXBlKG1ldGFUeXBlKTtcbiAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgYCR7Y29udGV4dH0gY291bGQgbm90IHJlc29sdmUgcHJvcGVydHkgdHlwZSBmb3IgXCIke2F0dHJ9XCJgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZU1ldGFUeXBlKG1ldGFUeXBlOiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghbWV0YVR5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBtZXRhVHlwZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIG1ldGFUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHR5cGVvZiBtZXRhVHlwZSA9PT0gXCJmdW5jdGlvblwiICYmIG1ldGFUeXBlLm5hbWUpXG4gICAgICByZXR1cm4gbWV0YVR5cGUubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtZXJpY1R5cGUodHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwiYmlnaW50XCI7XG4gIH1cblxuICBwcml2YXRlIHRvQ29tcGFyYWJsZVZhbHVlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgYXR0clR5cGU6IHN0cmluZyxcbiAgICBhdHRyTmFtZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBhbGxvd051bGw/OiBib29sZWFuIH1cbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zPy5hbGxvd051bGwpIHJldHVybiBudWxsO1xuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYCR7Y29udGV4dH0gcmVxdWlyZXMgYSB2YWx1ZSBmb3IgXCIke2F0dHJOYW1lfVwiYCk7XG4gICAgfVxuICAgIHN3aXRjaCAoYXR0clR5cGUpIHtcbiAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgIGAke2NvbnRleHR9IG9uIGRhdGUgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cIiByZXF1aXJlcyBEYXRlIHZhbHVlc2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXRUaW1lKCk7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgIGAke2NvbnRleHR9IG9uIG51bWVyaWMgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cIiByZXF1aXJlcyBudW1iZXIgdmFsdWVzYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICBgJHtjb250ZXh0fSBvbiBiaWdpbnQgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cIiByZXF1aXJlcyBudW1lcmljIHZhbHVlc2BcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgIGAke2NvbnRleHR9IHVuc3VwcG9ydGVkIHR5cGUgXCIke2F0dHJUeXBlfVwiIGZvciBhdHRyaWJ1dGUgXCIke2F0dHJOYW1lfVwiYFxuICAgICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/lib/esm/ram/constants.js
CHANGED
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* @category Ram
|
|
7
7
|
*/
|
|
8
8
|
export const RamFlavour = "ram";
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhbS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIElkZW50aWZpZXIgZm9yIHRoZSBSQU0gYWRhcHRlclxuICogQHN1bW1hcnkgQSBjb25zdGFudCBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBSQU0gYWRhcHRlciBpbiB0aGUgc3lzdGVtLiBVc2VkIGZvciBhZGFwdGVyIHR5cGUgaWRlbnRpZmljYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gYWNyb3NzIHRoZSBjb3JlIG1vZHVsZS5cbiAqIEBjb25zdCBSYW1GbGF2b3VyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBjYXRlZ29yeSBSYW1cbiAqL1xuZXhwb3J0IGNvbnN0IFJhbUZsYXZvdXIgPSBcInJhbVwiO1xuIl19
|
package/lib/esm/ram/handlers.js
CHANGED
|
@@ -24,4 +24,4 @@ export async function createdByOnRamCreateUpdate(context, data, key, model) {
|
|
|
24
24
|
throw new UnsupportedError("This adapter does not support user identification");
|
|
25
25
|
model[key] = uuid;
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFtL2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxrQ0FBdUI7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBSzlDLE9BQXFCLEVBQ3JCLElBQXVCLEVBQ3ZCLEdBQVksRUFDWixLQUFRO0lBRVIsTUFBTSxJQUFJLEdBQVcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsSUFBSTtRQUNQLE1BQU0sSUFBSSxnQkFBZ0IsQ0FDeEIsbURBQW1ELENBQ3BELENBQUM7SUFDSixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBa0IsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuLi9tb2RlbFwiO1xuaW1wb3J0IHsgUmFtUmVwb3NpdG9yeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0T2YsIFVuc3VwcG9ydGVkRXJyb3IgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgY3JlYXRlZCBieSBmaWVsZCBvbiBhIG1vZGVsIGR1cmluZyBSQU0gY3JlYXRlL3VwZGF0ZSBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWNhbGx5IHBvcHVsYXRlcyBhIG1vZGVsIGZpZWxkIHdpdGggdGhlIFVVSUQgZnJvbSB0aGUgY29udGV4dCBkdXJpbmcgY3JlYXRlIG9yIHVwZGF0ZSBvcGVyYXRpb25zLlxuICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgaGFuZGxlciBmb3IgUkFNIG9wZXJhdGlvbnMgdG8gdHJhY2sgZW50aXR5IGNyZWF0aW9uLlxuICogQHRlbXBsYXRlIE0gLSBUeXBlIG9mIHRoZSBtb2RlbCBiZWluZyBjcmVhdGVkL3VwZGF0ZWRcbiAqIEB0ZW1wbGF0ZSBSIC0gVHlwZSBvZiB0aGUgcmVwb3NpdG9yeSBoYW5kbGluZyB0aGUgbW9kZWxcbiAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBvZiB0aGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFR5cGUgb2YgdGhlIFJBTSBmbGFnc1xuICogQHRlbXBsYXRlIEMgLSBUeXBlIG9mIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIG9wZXJhdGlvbiBjb250ZXh0IGNvbnRhaW5pbmcgdXNlciBpZGVudGlmaWNhdGlvblxuICogQHBhcmFtIHtWfSBkYXRhIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gc2V0IHdpdGggdGhlIFVVSURcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgYmVpbmcgY3JlYXRlZC91cGRhdGVkXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWVsZCBoYXMgYmVlbiBzZXRcbiAqIEBmdW5jdGlvbiBjcmVhdGVkQnlPblJhbUNyZWF0ZVVwZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVkQnlPblJhbUNyZWF0ZVVwZGF0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmFtUmVwb3NpdG9yeTxNPixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB1dWlkOiBzdHJpbmcgPSBjb250ZXh0LmdldChcIlVVSURcIik7XG4gIGlmICghdXVpZClcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiVGhpcyBhZGFwdGVyIGRvZXMgbm90IHN1cHBvcnQgdXNlciBpZGVudGlmaWNhdGlvblwiXG4gICAgKTtcbiAgbW9kZWxba2V5XSA9IHV1aWQgYXMgTVtrZXlvZiBNXTtcbn1cbiJdfQ==
|
package/lib/esm/ram/index.js
CHANGED
|
@@ -13,4 +13,4 @@ export * from "./RamStatement.js";
|
|
|
13
13
|
export * from "./types.js";
|
|
14
14
|
// left to last on purpose
|
|
15
15
|
export * from "./RamAdapter.js";
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLHdCQUFxQjtBQUUxQyw4Q0FBOEM7QUFDOUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRXhCLCtCQUE0QjtBQUM1Qiw4QkFBMkI7QUFDM0Isa0NBQStCO0FBQy9CLGtDQUErQjtBQUMvQiwyQkFBd0I7QUFDeEIsMEJBQTBCO0FBQzFCLGdDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEV4cG9ydHMgZm9yIHRoZSByYW0gbW9kdWxlLlxuICogQHN1bW1hcnkgVGhpcyBmaWxlIGV4cG9ydHMgYWxsIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhlIHJhbSBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgdGhlIFJhbUFkYXB0ZXIsIGNvbnN0YW50cywgaGFuZGxlcnMsIGFuZCBtb3JlLlxuICogQG1vZHVsZSBjb3JlL3JhbVxuICovXG5pbXBvcnQgeyBSYW1BZGFwdGVyIH0gZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuXG4vLyBJbnZva2VkIHRoZXJlIHRvIGVuc3VyZSBkZWNvcmF0aW9uIG92ZXJyaWRlXG5SYW1BZGFwdGVyLmRlY29yYXRpb24oKTtcblxuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oYW5kbGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmFtUGFnaW5hdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SYW1TdGF0ZW1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4vLyBsZWZ0IHRvIGxhc3Qgb24gcHVycG9zZVxuZXhwb3J0ICogZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuIl19
|
package/lib/esm/ram/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFtL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEFkYXB0ZXIsIEFkYXB0ZXJGbGFncyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBNdWx0aUxvY2sgfSBmcm9tIFwiQGRlY2FmLXRzL3RyYW5zYWN0aW9uYWwtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUHJpbWFyeUtleVR5cGUgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW4tbWVtb3J5IHN0b3JhZ2Ugc3RydWN0dXJlIGZvciB0aGUgUkFNIGFkYXB0ZXJcbiAqIEBzdW1tYXJ5IEEgbmVzdGVkIE1hcCBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIGVudGl0aWVzIGJ5IHRoZWlyIHRhYmxlIG5hbWUgYW5kIHByaW1hcnkga2V5LlxuICogVGhlIG91dGVyIE1hcCB1c2VzIHRhYmxlIG5hbWVzIGFzIGtleXMsIHdoaWxlIHRoZSBpbm5lciBNYXAgdXNlcyBlbnRpdHkgSURzIGFzIGtleXMgYW5kIGVudGl0eSBpbnN0YW5jZXMgYXMgdmFsdWVzLlxuICogQHR5cGVkZWYge01hcDxzdHJpbmcsIE1hcDxzdHJpbmcgfCBudW1iZXIsIGFueT4+fSBSYW1TdG9yYWdlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBjYXRlZ29yeSBSYW1cbiAqL1xuZXhwb3J0IHR5cGUgUmFtU3RvcmFnZSA9IE1hcDxzdHJpbmcsIE1hcDxQcmltYXJ5S2V5VHlwZSwgYW55Pj47XG5cbmV4cG9ydCB0eXBlIFJhd1JhbVF1ZXJ5PE0gZXh0ZW5kcyBNb2RlbCA9IGFueT4gPSB7XG4gIHNlbGVjdDogdW5kZWZpbmVkIHwgKGtleW9mIE0pW107XG4gIGZyb206IENvbnN0cnVjdG9yPE0+O1xuICB3aGVyZTogKGVsOiBNKSA9PiBib29sZWFuO1xuICBzb3J0PzogKGVsOiBNLCBlbDI6IE0pID0+IG51bWJlcjtcbiAgZ3JvdXBCeT86IChrZXlvZiBNKVtdO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgY291bnQ/OiBrZXlvZiBNIHwgbnVsbDtcbiAgY291bnREaXN0aW5jdD86IGtleW9mIE07XG4gIG1pbj86IGtleW9mIE07XG4gIG1heD86IGtleW9mIE07XG4gIHN1bT86IGtleW9mIE07XG4gIGF2Zz86IGtleW9mIE07XG4gIGRpc3RpbmN0Pzoga2V5b2YgTTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZsYWdzIGZvciBSQU0gYWRhcHRlciBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgdGhhdCBleHRlbmRzIHRoZSBiYXNlIHJlcG9zaXRvcnkgZmxhZ3Mgd2l0aCBSQU0tc3BlY2lmaWMgZmxhZ3MuXG4gKiBDb250YWlucyB1c2VyIGlkZW50aWZpY2F0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdHJhY2tpbmcgZW50aXR5IGNyZWF0aW9uIGFuZCB1cGRhdGVzLlxuICogQGludGVyZmFjZSBSYW1GbGFnc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFVVSUQgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgdXNlclxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFtRmxhZ3MgZXh0ZW5kcyBBZGFwdGVyRmxhZ3Mge1xuICBVVUlEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJhbVJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PiA9IFJlcG9zaXRvcnk8XG4gIE0sXG4gIEFkYXB0ZXI8UmFtQ29uZmlnLCBSYW1TdG9yYWdlLCBSYXdSYW1RdWVyeTxhbnk+LCBSYW1Db250ZXh0PlxuPjtcblxuZXhwb3J0IHR5cGUgUmFtQ29udGV4dCA9IENvbnRleHQ8UmFtRmxhZ3M+O1xuXG5leHBvcnQgdHlwZSBSYW1Db25maWcgPSB7XG4gIHVzZXI6IHN0cmluZztcbiAgbG9jaz86IE11bHRpTG9jaztcbn07XG4iXX0=
|
|
@@ -116,7 +116,7 @@ export declare class Repository<M extends Model<boolean>, A extends Adapter<any,
|
|
|
116
116
|
*/
|
|
117
117
|
protected get pkProps(): SequenceOptions;
|
|
118
118
|
get filters(): Record<"onlyOnCreate" | "onlyOnUpdate" | "onlyOnDelete" | "onlyOnTransactional" | "onlyOnSingle" | "onlyOnBulk", ObserverFilter>;
|
|
119
|
-
constructor(adapter?: A, clazz?: Constructor<M>, ...args: any[]);
|
|
119
|
+
constructor(adapter?: A, clazz?: Constructor<M>, force?: boolean, ...args: any[]);
|
|
120
120
|
protected logCtx<ARGS extends any[] = any[], METHOD extends MethodOrOperation = MethodOrOperation>(args: MaybeContextualArg<ContextOf<A>, ARGS>, operation: METHOD): ContextualizedArgs<ContextOf<A>, ARGS, METHOD extends string ? true : false>;
|
|
121
121
|
protected logCtx<ARGS extends any[] = any[], METHOD extends MethodOrOperation = MethodOrOperation>(args: MaybeContextualArg<ContextOf<A>, ARGS>, operation: METHOD, allowCreate: false): ContextualizedArgs<ContextOf<A>, ARGS, METHOD extends string ? true : false>;
|
|
122
122
|
protected logCtx<ARGS extends any[] = any[], METHOD extends MethodOrOperation = MethodOrOperation>(args: MaybeContextualArg<ContextOf<A>, ARGS>, operation: METHOD, allowCreate: true): Promise<ContextualizedArgs<ContextOf<A>, ARGS, METHOD extends string ? true : false>>;
|
|
@@ -494,7 +494,7 @@ export declare class Repository<M extends Model<boolean>, A extends Adapter<any,
|
|
|
494
494
|
* @param {string} [alias] the adapter alias/flavour.
|
|
495
495
|
* @throws {InternalError} If a repository is already registered for the model.
|
|
496
496
|
*/
|
|
497
|
-
static register<M extends Model>(model: Constructor<M>, repo: Constructor<Repo<M>> | Repo<M>, alias?: string): void;
|
|
497
|
+
static register<M extends Model>(model: Constructor<M>, repo: Constructor<Repo<M>> | Repo<M>, alias?: string, force?: boolean): void;
|
|
498
498
|
static statements<R extends Repository<any, any>, K extends keyof R>(repo: Constructor<R> | R, method?: K): undefined | (K extends keyof R ? boolean : (keyof R)[]);
|
|
499
499
|
static queries<R extends Repository<any, any>, K extends keyof R>(repo: Constructor<R> | R, method?: K): undefined | (K extends keyof R ? QueryOptions : Record<keyof R, QueryOptions>);
|
|
500
500
|
}
|
|
@@ -120,8 +120,9 @@ export class Repository extends Rep {
|
|
|
120
120
|
get filters() {
|
|
121
121
|
return getFilters(this);
|
|
122
122
|
}
|
|
123
|
+
constructor(adapter, clazz, force = false,
|
|
123
124
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
124
|
-
|
|
125
|
+
...args) {
|
|
125
126
|
super(clazz);
|
|
126
127
|
this.observers = [];
|
|
127
128
|
this._overrides = {
|
|
@@ -139,7 +140,7 @@ export class Repository extends Rep {
|
|
|
139
140
|
if (adapter)
|
|
140
141
|
this._adapter = adapter;
|
|
141
142
|
if (clazz) {
|
|
142
|
-
Repository.register(clazz, this, this.adapter.alias);
|
|
143
|
+
Repository.register(clazz, this, this.adapter.alias, force);
|
|
143
144
|
if (adapter) {
|
|
144
145
|
const flavour = Metadata.get(clazz, DecorationKeys.FLAVOUR);
|
|
145
146
|
if (flavour === DefaultFlavour) {
|
|
@@ -924,17 +925,19 @@ export class Repository extends Rep {
|
|
|
924
925
|
});
|
|
925
926
|
const log = this.log.for(this.observe);
|
|
926
927
|
const tableName = this.class.name; // Model.tableName(this.class);
|
|
927
|
-
this.
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
928
|
+
if (!this.observerHandler?.count()) {
|
|
929
|
+
this.adapter.observe(this, (table,
|
|
930
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
931
|
+
event,
|
|
932
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
933
|
+
id,
|
|
934
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
935
|
+
...args) => {
|
|
936
|
+
if (typeof table === "string")
|
|
937
|
+
return table === tableName;
|
|
938
|
+
return Metadata.constr(table) === Metadata.constr(this.class);
|
|
939
|
+
});
|
|
940
|
+
}
|
|
938
941
|
log.verbose(`now observing ${this.adapter} filtering on table === ${tableName}`);
|
|
939
942
|
this.observerHandler.observe(observer, filter);
|
|
940
943
|
log.verbose(`Registered new observer ${observer.toString()}`);
|
|
@@ -1061,13 +1064,13 @@ export class Repository extends Rep {
|
|
|
1061
1064
|
* @param {string} [alias] the adapter alias/flavour.
|
|
1062
1065
|
* @throws {InternalError} If a repository is already registered for the model.
|
|
1063
1066
|
*/
|
|
1064
|
-
static register(model, repo, alias) {
|
|
1067
|
+
static register(model, repo, alias, force = false) {
|
|
1065
1068
|
let name = Model.tableName(model);
|
|
1066
1069
|
if (alias) {
|
|
1067
1070
|
name = [name, alias].join(DefaultSeparator);
|
|
1068
1071
|
}
|
|
1069
1072
|
if (name in this._cache) {
|
|
1070
|
-
if (this._cache[name] instanceof Repository)
|
|
1073
|
+
if (this._cache[name] instanceof Repository && !force)
|
|
1071
1074
|
throw new InternalError(`${name} already has a registered instance`);
|
|
1072
1075
|
}
|
|
1073
1076
|
this._cache[name] = repo;
|
|
@@ -1178,4 +1181,4 @@ __decorate([
|
|
|
1178
1181
|
], Repository.prototype, "unObserve", null);
|
|
1179
1182
|
if (Adapter)
|
|
1180
1183
|
Adapter["_baseRepository"] = Repository;
|
|
1181
|
-
//# sourceMappingURL=Repository.js.map
|
|
1184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsZUFBZSxFQUVmLGFBQWEsRUFDYixVQUFVLElBQUksR0FBRyxFQUNqQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBRW5CLGFBQWEsRUFDYiw4QkFBOEIsR0FDL0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFVLE1BQU0sbUJBQW1CLENBQUM7QUFPbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQ0FBK0I7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxzQ0FBaUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSw0Q0FBdUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSw2QkFBd0I7QUFJN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQ0FBMkI7QUFHL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBb0I7QUFZN0MsT0FBTyxFQUVMLGNBQWMsRUFDZCxjQUFjLEVBQ2QsUUFBUSxFQUNSLElBQUksR0FDTCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLGlDQUE0QjtBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0NBQTJCO0FBRzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsMENBQXFDO0FBZTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RHO0FBQ0gsTUFBTSxPQUFPLFVBSVgsU0FBUSxHQUFvQjthQU9iLFdBQU0sR0FHakIsRUFBRSxBQUhlLENBR2Q7SUF3QlA7Ozs7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VVA7QUFVSztJQURMLFFBQVEsRUFBRTs7eURBRUosQ0FBQyxvQkFBRCxDQUFDOzt1Q0FVUDtBQVVLO0lBREwsUUFBUSxFQUFFOzt5REFFSixDQUFDLG9CQUFELENBQUM7OzRDQVVQO0FBVUs7SUFETCxRQUFRLEVBQUU7O3lEQUVKLENBQUMsb0JBQUQsQ0FBQzs7eUNBVVA7QUFvREQ7SUFEQyxLQUFLLEVBQUU7Ozs7eUNBaUNQO0FBV0Q7SUFEQyxLQUFLLEVBQUU7Ozs7MkNBaUJQO0FBOE1ILElBQUksT0FBTztJQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgRGVmYXVsdFNlcGFyYXRvcixcbiAgZW5mb3JjZURCRGVjb3JhdG9ycyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICBJUmVwb3NpdG9yeSxcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUmVwb3NpdG9yeSBhcyBSZXAsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dCxcbiAgcmVkdWNlRXJyb3JzVG9QcmludCxcbiAgUHJpbWFyeUtleVR5cGUsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dEZvclVwZGF0ZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBmaW5hbCwgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQge1xuICBDb250ZXh0dWFsQXJncyxcbiAgQ29udGV4dHVhbGl6ZWRBcmdzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIE1ldGhvZE9yT3BlcmF0aW9uLFxufSBmcm9tIFwiLi4vdXRpbHMvQ29udGV4dHVhbExvZ2dlZENsYXNzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9ic2VydmVySGFuZGxlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi4vcXVlcnkvZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IERpcmVjdGlvbkxpbWl0T2Zmc2V0LCBRdWVyeU9wdGlvbnMgfSBmcm9tIFwiLi4vcXVlcnkvdHlwZXNcIjtcbmltcG9ydCB7IE9yZGVyQnlTZWxlY3RvciwgU2VsZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vcXVlcnkvc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBDb3VudFdoZXJlT3B0aW9uLCBXaGVyZU9wdGlvbiB9IGZyb20gXCIuLi9xdWVyeS9vcHRpb25zXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi4vcXVlcnkvQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBRdWVyaWFibGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9RdWVyaWFibGVcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWxsT3BlcmF0aW9uS2V5cyxcbiAgQ29udGV4dE9mLFxuICBFdmVudElkcyxcbiAgRmxhZ3NPZixcbiAgSW5mZXJyZWRBZGFwdGVyQ29uZmlnLFxuICBPYnNlcnZlckZpbHRlcixcbiAgUGVyc2lzdGVuY2VPYnNlcnZhYmxlLFxuICBQZXJzaXN0ZW5jZU9ic2VydmVyLFxufSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIERlY29yYXRpb25LZXlzLFxuICBEZWZhdWx0Rmxhdm91cixcbiAgTWV0YWRhdGEsXG4gIHVzZXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBwcmVwYXJlZCB9IGZyb20gXCIuLi9xdWVyeS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQcmVwYXJlZFN0YXRlbWVudEtleXMgfSBmcm9tIFwiLi4vcXVlcnkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBQYWdpbmF0b3IgfSBmcm9tIFwiLi4vcXVlcnkvUGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVkUGFnZSB9IGZyb20gXCIuLi9xdWVyeS9QYWdpbmF0b3JcIjtcbmltcG9ydCB7IGdldEZpbHRlcnMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvZXZlbnQtZmlsdGVyc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGFsaWFzIGZvciBSZXBvc2l0b3J5IGNsYXNzIHdpdGggc2ltcGxpZmllZCBnZW5lcmljIHBhcmFtZXRlcnMuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIG1vcmUgY29uY2lzZSB3YXkgdG8gcmVmZXJlbmNlIHRoZSBSZXBvc2l0b3J5IGNsYXNzIHdpdGggaXRzIGdlbmVyaWMgcGFyYW1ldGVycy5cbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlLlxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlLlxuICogQHRlbXBsYXRlIFEgLSBUaGUgcXVlcnkgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBBIC0gVGhlIGFkYXB0ZXIgdHlwZS5cbiAqIEB0eXBlZGVmIFJlcG9cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgdHlwZSBSZXBvPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4gPSBSZXBvc2l0b3J5PE0sIGFueT47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcmUgcmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YWJhc2Ugb3BlcmF0aW9ucyBvbiBtb2RlbHMgb24gYSB0YWJsZSBieSB0YWJsZSB3YXkuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgYW5kIG9ic2VydmVyIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gZm9yIG1vZGVsIHBlcnNpc3RlbmNlLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gKiBAdGVtcGxhdGUgUSAtIFRoZSBxdWVyeSB0eXBlIHVzZWQgYnkgdGhlIGFkYXB0ZXIuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUuXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZm9yIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0F9IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBbY2xhenpdIC0gT3B0aW9uYWwgY29uc3RydWN0b3IgZm9yIHRoZSBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7Li4uYW55W119IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uLlxuICogQGNsYXNzIFJlcG9zaXRvcnlcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGluZyBhIHJlcG9zaXRvcnkgZm9yIFVzZXIgbW9kZWxcbiAqIGNvbnN0IHVzZXJSZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChVc2VyKTtcbiAqXG4gKiAvLyBVc2luZyB0aGUgcmVwb3NpdG9yeSBmb3IgQ1JVRCBvcGVyYXRpb25zXG4gKiBjb25zdCB1c2VyID0gYXdhaXQgdXNlclJlcG8uY3JlYXRlKG5ldyBVc2VyKHsgbmFtZTogJ0pvaG4nIH0pKTtcbiAqIGNvbnN0IHJldHJpZXZlZFVzZXIgPSBhd2FpdCB1c2VyUmVwby5yZWFkKHVzZXIuaWQpO1xuICogdXNlci5uYW1lID0gJ0phbmUnO1xuICogYXdhaXQgdXNlclJlcG8udXBkYXRlKHVzZXIpO1xuICogYXdhaXQgdXNlclJlcG8uZGVsZXRlKHVzZXIuaWQpO1xuICpcbiAqIC8vIFF1ZXJ5aW5nIHdpdGggY29uZGl0aW9uc1xuICogY29uc3QgdXNlcnMgPSBhd2FpdCB1c2VyUmVwb1xuICogICAuc2VsZWN0KClcbiAqICAgLndoZXJlKHsgbmFtZTogJ0phbmUnIH0pXG4gKiAgIC5vcmRlckJ5KCdjcmVhdGVkQXQnLCBPcmRlckRpcmVjdGlvbi5EU0MpXG4gKiAgIC5saW1pdCgxMClcbiAqICAgLmV4ZWN1dGUoKTtcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnQgQ29kZVxuICogICBwYXJ0aWNpcGFudCBSIGFzIFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQSBhcyBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IERCIGFzIERhdGFiYXNlXG4gKiAgIHBhcnRpY2lwYW50IE8gYXMgT2JzZXJ2ZXJzXG4gKlxuICogICBDLT4+K1I6IGNyZWF0ZShtb2RlbClcbiAqICAgUi0+PlI6IGNyZWF0ZVByZWZpeChtb2RlbClcbiAqICAgUi0+PitBOiBwcmVwYXJlKG1vZGVsKVxuICogICBBLS0+Pi1SOiBwcmVwYXJlZCBkYXRhXG4gKiAgIFItPj4rQTogY3JlYXRlKHRhYmxlLCBpZCwgcmVjb3JkKVxuICogICBBLT4+K0RCOiBJbnNlcnQgT3BlcmF0aW9uXG4gKiAgIERCLS0+Pi1BOiBSZXN1bHRcbiAqICAgQS0tPj4tUjogcmVjb3JkXG4gKiAgIFItPj4rQTogcmV2ZXJ0KHJlY29yZClcbiAqICAgQS0tPj4tUjogbW9kZWwgaW5zdGFuY2VcbiAqICAgUi0+PlI6IGNyZWF0ZVN1ZmZpeChtb2RlbClcbiAqICAgUi0+PitPOiB1cGRhdGVPYnNlcnZlcnModGFibGUsIENSRUFURSwgaWQpXG4gKiAgIE8tLT4+LVI6IE5vdGlmaWNhdGlvbiBjb21wbGV0ZVxuICogICBSLS0+Pi1DOiBjcmVhdGVkIG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5PFxuICAgIE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPixcbiAgICBBIGV4dGVuZHMgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+LFxuICA+XG4gIGV4dGVuZHMgUmVwPE0sIENvbnRleHRPZjxBPj5cbiAgaW1wbGVtZW50c1xuICAgIFBlcnNpc3RlbmNlT2JzZXJ2YWJsZTxDb250ZXh0T2Y8QT4+LFxuICAgIFBlcnNpc3RlbmNlT2JzZXJ2ZXI8Q29udGV4dE9mPEE+PixcbiAgICBRdWVyaWFibGU8TT4sXG4gICAgSVJlcG9zaXRvcnk8TSwgQ29udGV4dE9mPEE+Plxue1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgQ29uc3RydWN0b3I8UmVwbzxNb2RlbD4+IHwgUmVwbzxNb2RlbD5cbiAgPiA9IHt9O1xuXG4gIHByb3RlY3RlZCBvYnNlcnZlcnM6IE9ic2VydmVyW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgb2JzZXJ2ZXJIYW5kbGVyPzogT2JzZXJ2ZXJIYW5kbGVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FkYXB0ZXIhOiBBO1xuICBwcml2YXRlIF90YWJsZU5hbWUhOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF9vdmVycmlkZXM6IFBhcnRpYWw8RmxhZ3NPZjxDb250ZXh0T2Y8QT4+PiA9IHtcbiAgICBpZ25vcmVIYW5kbGVyczogZmFsc2UsXG4gICAgaWdub3JlVmFsaWRhdGlvbjogZmFsc2UsXG4gICAgYWxsb3dHZW5lcmF0aW9uT3ZlcnJpZGU6IGZhbHNlLFxuICAgIGFsbG93UmF3U3RhdGVtZW50czogdHJ1ZSxcbiAgICBmb3JjZVByZXBhcmVTaW1wbGVRdWVyaWVzOiBmYWxzZSxcbiAgICBmb3JjZVByZXBhcmVDb21wbGV4UXVlcmllczogZmFsc2UsXG4gICAgaWdub3JlRGV2U2FmZUd1YXJkczogZmFsc2UsXG4gICAgbWVyZ2VGb3JVcGRhdGU6IHRydWUsXG4gICAgYXBwbHlVcGRhdGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgIGFmdGVyUXVlcnlIYW5kbGVyczogZmFsc2UsXG4gIH0gYXMgYW55O1xuXG4gIHByaXZhdGUgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGluc3RhbmNlIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbG9nZ2VyIGZvciB0aGlzIHJlcG9zaXRvcnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gVGhlIGxvZ2dlciBpbnN0YW5jZS5cbiAgICovXG4gIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKVxuICAgICAgdGhpcy5sb2dnZXIgPSAoXG4gICAgICAgIHRoaXMuYWRhcHRlcltcImxvZ1wiIGFzIGtleW9mIHR5cGVvZiB0aGlzLmFkYXB0ZXJdIGFzIExvZ2dlclxuICAgICAgKS5mb3IodGhpcy50b1N0cmluZygpKTtcbiAgICByZXR1cm4gdGhpcy5sb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkYXB0ZXIgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYWRhcHRlciBpbnN0YW5jZSBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUuXG4gICAqIEByZXR1cm4ge0F9IFRoZSBhZGFwdGVyIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyBhZGFwdGVyIGlzIGZvdW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhZGFwdGVyKCk6IEEge1xuICAgIGlmICghdGhpcy5fYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgTm8gYWRhcHRlciBmb3VuZCBmb3IgdGhpcyByZXBvc2l0b3J5LiBkaWQgeW91IHVzZSB0aGUgQHVzZXMgZGVjb3JhdG9yIG9yIHBhc3MgaXQgaW4gdGhlIGNvbnN0cnVjdG9yP2BcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRhYmxlIG5hbWUgZm9yIHRoaXMgcmVwb3NpdG9yeSdzIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBHZXRzIHRoZSBkYXRhYmFzZSB0YWJsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkncyBtb2RlbC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90YWJsZU5hbWUpIHRoaXMuX3RhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKTtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmltYXJ5IGtleSBwcm9wZXJ0aWVzIGZvciB0aGlzIHJlcG9zaXRvcnkncyBtb2RlbC5cbiAgICogQHN1bW1hcnkgR2V0cyB0aGUgc2VxdWVuY2Ugb3B0aW9ucyBjb250YWluaW5nIHByaW1hcnkga2V5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJuIHtTZXF1ZW5jZU9wdGlvbnN9IFRoZSBwcmltYXJ5IGtleSBwcm9wZXJ0aWVzLlxuICAgKiBAZGVwcmVjYXRlZCBmb3IgTW9kZWwuc2VxdWVuY2VGb3IoY2xhc3MpXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IHBrUHJvcHMoKTogU2VxdWVuY2VPcHRpb25zIHtcbiAgICByZXR1cm4gc3VwZXIucGtQcm9wcztcbiAgfVxuXG4gIGdldCBmaWx0ZXJzKCkge1xuICAgIHJldHVybiBnZXRGaWx0ZXJzKHRoaXMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWRhcHRlcj86IEEsXG4gICAgY2xheno/OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBmb3JjZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApIHtcbiAgICBzdXBlcihjbGF6eik7XG4gICAgaWYgKGFkYXB0ZXIpIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIGlmIChjbGF6eikge1xuICAgICAgUmVwb3NpdG9yeS5yZWdpc3RlcihjbGF6eiwgdGhpcywgdGhpcy5hZGFwdGVyLmFsaWFzLCBmb3JjZSk7XG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBjb25zdCBmbGF2b3VyID0gTWV0YWRhdGEuZ2V0KGNsYXp6LCBEZWNvcmF0aW9uS2V5cy5GTEFWT1VSKTtcbiAgICAgICAgaWYgKGZsYXZvdXIgPT09IERlZmF1bHRGbGF2b3VyKSB7XG4gICAgICAgICAgdXNlcyhhZGFwdGVyLmZsYXZvdXIpKGNsYXp6KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBbdGhpcy5jcmVhdGVBbGwsIHRoaXMucmVhZEFsbCwgdGhpcy5kZWxldGVBbGxdLmZvckVhY2goKG0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBtLm5hbWU7XG4gICAgICB3cmFwTWV0aG9kV2l0aENvbnRleHQoXG4gICAgICAgIHNlbGYsXG4gICAgICAgIChzZWxmIGFzIGFueSlbbmFtZSArIFwiUHJlZml4XCJdLFxuICAgICAgICBtLFxuICAgICAgICAoc2VsZiBhcyBhbnkpW25hbWUgKyBcIlN1ZmZpeFwiXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB3cmFwTWV0aG9kV2l0aENvbnRleHRGb3JVcGRhdGUoXG4gICAgICBzZWxmLFxuICAgICAgKHNlbGYgYXMgYW55KVt0aGlzLnVwZGF0ZUFsbC5uYW1lICsgXCJQcmVmaXhcIl0sXG4gICAgICB0aGlzLnVwZGF0ZUFsbCxcbiAgICAgIChzZWxmIGFzIGFueSlbdGhpcy51cGRhdGVBbGwubmFtZSArIFwiU3VmZml4XCJdXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRFxuICApOiBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgQ29udGV4dE9mPEE+LFxuICAgIEFSR1MsXG4gICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gID47XG4gIHByb3RlY3RlZCBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogZmFsc2VcbiAgKTogQ29udGV4dHVhbGl6ZWRBcmdzPFxuICAgIENvbnRleHRPZjxBPixcbiAgICBBUkdTLFxuICAgIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZVxuICA+O1xuICBwcm90ZWN0ZWQgbG9nQ3R4PFxuICAgIEFSR1MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLFxuICAgIE1FVEhPRCBleHRlbmRzIE1ldGhvZE9yT3BlcmF0aW9uID0gTWV0aG9kT3JPcGVyYXRpb24sXG4gID4oXG4gICAgYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPiwgQVJHUz4sXG4gICAgb3BlcmF0aW9uOiBNRVRIT0QsXG4gICAgYWxsb3dDcmVhdGU6IHRydWVcbiAgKTogUHJvbWlzZTxcbiAgICBDb250ZXh0dWFsaXplZEFyZ3M8Q29udGV4dE9mPEE+LCBBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+XG4gID47XG4gIHByb3RlY3RlZCBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogdHJ1ZSxcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEZsYWdzT2Y8Q29udGV4dE9mPEE+Pj5cbiAgKTogUHJvbWlzZTxcbiAgICBDb250ZXh0dWFsaXplZEFyZ3M8Q29udGV4dE9mPEE+LCBBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+XG4gID47XG4gIHByb3RlY3RlZCBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogZmFsc2UsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGbGFnc09mPENvbnRleHRPZjxBPj4+XG4gICk6IENvbnRleHR1YWxpemVkQXJnczxcbiAgICBDb250ZXh0T2Y8QT4sXG4gICAgQVJHUyxcbiAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgPjtcbiAgcHJvdGVjdGVkIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4sIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGbGFnc09mPENvbnRleHRPZjxBPj4+XG4gICk6XG4gICAgfCBQcm9taXNlPFxuICAgICAgICBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICAgICAgQ29udGV4dE9mPEE+LFxuICAgICAgICAgIEFSR1MsXG4gICAgICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgID5cbiAgICAgID5cbiAgICB8IENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgQ29udGV4dE9mPEE+LFxuICAgICAgICBBUkdTLFxuICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgID4ge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuYWRhcHRlcltcImxvZ0N0eFwiXShcbiAgICAgIFt0aGlzLmNsYXNzIGFzIGFueSwgLi4uYXJnc10gYXMgYW55LFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgYWxsb3dDcmVhdGUgYXMgYW55LFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGVzIHx8IHt9LCB0aGlzLl9vdmVycmlkZXMgfHwge30pXG4gICAgKSBhc1xuICAgICAgfCBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICAgICAgQ29udGV4dE9mPEE+LFxuICAgICAgICAgIEFSR1MsXG4gICAgICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgID5cbiAgICAgIHwgUHJvbWlzZTxcbiAgICAgICAgICBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICAgICAgICBDb250ZXh0T2Y8QT4sXG4gICAgICAgICAgICBBUkdTLFxuICAgICAgICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgPlxuICAgICAgICA+O1xuICAgIGZ1bmN0aW9uIHNxdWFzaEFyZ3MoY3R4OiBDb250ZXh0dWFsaXplZEFyZ3M8Q29udGV4dE9mPEE+Pikge1xuICAgICAgY3R4LmN0eEFyZ3Muc2hpZnQoKTsgLy8gcmVtb3ZlcyBhZGRlZCBtb2RlbCB0byBhcmdzXG4gICAgICByZXR1cm4gY3R4IGFzIGFueTtcbiAgICB9XG5cbiAgICBpZiAoIShjdHggaW5zdGFuY2VvZiBQcm9taXNlKSkgcmV0dXJuIHNxdWFzaEFyZ3MoY3R4KTtcbiAgICByZXR1cm4gY3R4LnRoZW4oc3F1YXNoQXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBwcm94eSB3aXRoIG92ZXJyaWRkZW4gcmVwb3NpdG9yeSBmbGFncy5cbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIHByb3h5IG9mIHRoaXMgcmVwb3NpdG9yeSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3Mgb3ZlcnJpZGRlbi5cbiAgICogQHBhcmFtIHtQYXJ0aWFsPEY+fSBmbGFncyAtIFRoZSBmbGFncyB0byBvdmVycmlkZS5cbiAgICogQHJldHVybiB7UmVwb3NpdG9yeX0gQSBwcm94eSBvZiB0aGlzIHJlcG9zaXRvcnkgd2l0aCBvdmVycmlkZGVuIGZsYWdzLlxuICAgKi9cbiAgb3ZlcnJpZGUoZmxhZ3M6IFBhcnRpYWw8RmxhZ3NPZjxDb250ZXh0T2Y8QT4+Pik6IHRoaXMge1xuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0OiAodGFyZ2V0OiB0eXBlb2YgdGhpcywgcDogc3RyaW5nIHwgc3ltYm9sLCByZWNlaXZlcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAocCAhPT0gXCJfb3ZlcnJpZGVzXCIpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIGZsYWdzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJlcG9zaXRvcnkgY2xhc3Mgd2l0aCBhIHNwZWNpZmljIGFkYXB0ZXIgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIEEgLSBUaGUgdHlwZSBvZiB0aGUgYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIFEgLSBUaGUgdHlwZSBvZiB0aGUgcXVlcnkgYnVpbGRlci5cbiAgICogQHRlbXBsYXRlIEYgLSBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLlxuICAgKiBAdGVtcGxhdGUgQyAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+Pn0gY29uZiAtIGFkYXB0ZXIgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybiBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIHRoZSBzcGVjaWZpZWQgYWRhcHRlciBhbmQgYXJndW1lbnRzLlxuICAgKi9cbiAgZm9yKGNvbmY6IFBhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+PiwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHAgPT09IFwiYWRhcHRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5mb3IoY29uZiwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBvYnNlcnZlciBoYW5kbGVyLlxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYW4gb2JzZXJ2ZXIgaGFuZGxlciBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7T2JzZXJ2ZXJIYW5kbGVyfSBBIG5ldyBvYnNlcnZlciBoYW5kbGVyIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIE9ic2VydmVySGFuZGxlcigpOiBPYnNlcnZlckhhbmRsZXIge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXJIYW5kbGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIGNyZWF0aW9uLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIG1vZGVsIGFuZCBwcmVwYXJlcyBpdCBmb3IgY3JlYXRpb24gaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbCBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgdGhlIG1vZGVsIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8W00sIC4uLmFueVtdLCBDb250ZXh0T2Y8QT5dPiB7XG4gICAgY29uc3QgeyBjdHgsIGN0eEFyZ3MsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpXG4gICAgKS5mb3IodGhpcy5jcmVhdGVQcmVmaXgpO1xuICAgIGNvbnN0IGlnbm9yZUhhbmRsZXJzID0gY3R4LmdldChcImlnbm9yZUhhbmRsZXJzXCIpO1xuICAgIGNvbnN0IGlnbm9yZVZhbGlkYXRlID0gY3R4LmdldChcImlnbm9yZVZhbGlkYXRpb25cIik7XG4gICAgbG9nLnNpbGx5KFxuICAgICAgYGhhbmRsZXJTZXR0aW5nOiAke2lnbm9yZUhhbmRsZXJzfSwgdmFsaWRhdGlvblNldHRpbmc6ICR7aWdub3JlVmFsaWRhdGV9YFxuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgaWYgKCFpZ25vcmVIYW5kbGVycylcbiAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnM8TSwgUmVwb3NpdG9yeTxNLCBBPiwgYW55PihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgY3R4LFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICk7XG5cbiAgICBpZiAoIWlnbm9yZVZhbGlkYXRlKSB7XG4gICAgICBjb25zdCBwcm9wc1RvSWdub3JlID0gY3R4LmdldChcImlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllc1wiKSB8fCBbXTtcbiAgICAgIGxvZy5zaWxseShgaWdub3JlZCB2YWxpZGF0aW9uIHByb3BlcnRpZXM6ICR7cHJvcHNUb0lnbm9yZX1gKTtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShtb2RlbC5oYXNFcnJvcnMoLi4ucHJvcHNUb0lnbm9yZSkpO1xuICAgICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFttb2RlbCwgLi4uY3R4QXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBtb2RlbCBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBzdW1tYXJ5IFBlcnNpc3RzIGEgbW9kZWwgaW5zdGFuY2UgdG8gdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBUaGUgY3JlYXRlZCBtb2RlbCB3aXRoIHVwZGF0ZWQgcHJvcGVydGllcy5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nLCBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZSk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nIG5ldyAke3RoaXMuY2xhc3MubmFtZX0gaW4gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIGN0eCk7XG4gICAgcmVjb3JkID0gYXdhaXQgdGhpcy5hZGFwdGVyLmNyZWF0ZSh0aGlzLmNsYXNzLCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydDxNPihyZWNvcmQsIHRoaXMuY2xhc3MsIGlkLCB0cmFuc2llbnQsIGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgbXVsdGlwbGUgbW9kZWxzIGluIHRoZSBkYXRhYmFzZS5cbiAgICogQHN1bW1hcnkgUGVyc2lzdHMgbXVsdGlwbGUgbW9kZWwgaW5zdGFuY2VzIHRvIHRoZSBkYXRhYmFzZSBpbiBhIGJhdGNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtNW119IG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gVGhlIGNyZWF0ZWQgbW9kZWxzIHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsKFxuICAgIG1vZGVsczogTVtdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgaWYgKCFtb2RlbHMubGVuZ3RoKSByZXR1cm4gbW9kZWxzO1xuICAgIGNvbnN0IHsgY3R4LCBsb2csIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlQWxsKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgQ3JlYXRpbmcgJHttb2RlbHMubGVuZ3RofSBuZXcgJHt0aGlzLmNsYXNzLm5hbWV9IGluIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfWBcbiAgICApO1xuXG4gICAgY29uc3QgcHJlcGFyZWQgPSBtb2RlbHMubWFwKChtKSA9PiB0aGlzLmFkYXB0ZXIucHJlcGFyZShtLCBjdHgpKTtcbiAgICBjb25zdCBpZHMgPSBwcmVwYXJlZC5tYXAoKHApID0+IHAuaWQpO1xuICAgIGxldCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgaWRzIGFzIFByaW1hcnlLZXlUeXBlW10sXG4gICAgICByZWNvcmRzLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHJlY29yZHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChcbiAgICAgICAgcixcbiAgICAgICAgdGhpcy5jbGFzcyxcbiAgICAgICAgaWRzW2ldLFxuICAgICAgICBjdHguZ2V0KFwicmVidWlsZFdpdGhUcmFuc2llbnRcIikgPyBwcmVwYXJlZFtpXS50cmFuc2llbnQgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0eFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIG1vZGVscyBmb3IgY3JlYXRpb24uXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyBtdWx0aXBsZSBtb2RlbHMgYW5kIHByZXBhcmVzIHRoZW0gZm9yIGNyZWF0aW9uIGluIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtNW119IG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIHByZXBhcmVkIG1vZGVscyBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgYW55IG1vZGVsIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsUHJlZml4KFxuICAgIG1vZGVsczogTVtdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8W01bXSwgLi4uYW55W10sIENvbnRleHRPZjxBPl0+IHtcbiAgICBjb25zdCB7IGN0eCwgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmNyZWF0ZUFsbFByZWZpeCk7XG5cbiAgICBjb25zdCBpZ25vcmVIYW5kbGVycyA9IGN0eC5nZXQoXCJpZ25vcmVIYW5kbGVyc1wiKTtcbiAgICBjb25zdCBpZ25vcmVWYWxpZGF0ZSA9IGN0eC5nZXQoXCJpZ25vcmVWYWxpZGF0aW9uXCIpO1xuICAgIGxvZy5zaWxseShcbiAgICAgIGBoYW5kbGVyU2V0dGluZzogJHtpZ25vcmVIYW5kbGVyc30sIHZhbGlkYXRpb25TZXR0aW5nOiAke2lnbm9yZVZhbGlkYXRlfWBcbiAgICApO1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIFttb2RlbHMsIC4uLmN0eEFyZ3NdO1xuICAgIGNvbnN0IG9wdHMgPSBNb2RlbC5zZXF1ZW5jZUZvcihtb2RlbHNbMF0pO1xuICAgIGxldCBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgICBpZiAoTW9kZWwuZ2VuZXJhdGVkQnlTZXF1ZW5jZSh0aGlzLmNsYXNzKSkge1xuICAgICAgaWYgKCFvcHRzLm5hbWUpIG9wdHMubmFtZSA9IE1vZGVsLnNlcXVlbmNlTmFtZShtb2RlbHNbMF0sIFwicGtcIik7XG4gICAgICBpZHMgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IHRoaXMuYWRhcHRlci5TZXF1ZW5jZShvcHRzLCB0aGlzLl9vdmVycmlkZXMpXG4gICAgICApLnJhbmdlKG1vZGVscy5sZW5ndGgsIC4uLmN0eEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoIU1vZGVsLmdlbmVyYXRlZCh0aGlzLmNsYXNzLCB0aGlzLnBrKSkge1xuICAgICAgaWRzID0gbW9kZWxzLm1hcCgobSwgaSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG1bdGhpcy5wa10gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgUHJpbWFyeSBrZXkgaXMgbm90IGRlZmluZWQgZm9yIG1vZGVsIGluIHBvc2l0aW9uICR7aX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1bdGhpcy5wa10gYXMgc3RyaW5nO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcuIFRoZSBwayBpcyB0YWdnZWQgYXMgZ2VuZXJhdGVkLCBzbyBpdCdsbCBiZSBoYW5kbGVkIGJ5IHNvbWUgb3RoZXIgZGVjb3JhdG9yXG4gICAgfVxuXG4gICAgbW9kZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtb2RlbHMubWFwKGFzeW5jIChtLCBpKSA9PiB7XG4gICAgICAgIG0gPSBuZXcgdGhpcy5jbGFzcyhtKTtcbiAgICAgICAgaWYgKG9wdHMudHlwZSkge1xuICAgICAgICAgIG1bdGhpcy5wa10gPSAoXG4gICAgICAgICAgICBvcHRzLnR5cGUgIT09IFwiU3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBpZHNbaV1cbiAgICAgICAgICAgICAgOiBvcHRzLmdlbmVyYXRlZFxuICAgICAgICAgICAgICAgID8gaWRzW2ldXG4gICAgICAgICAgICAgICAgOiBgJHttW3RoaXMucGtdfWAudG9TdHJpbmcoKVxuICAgICAgICAgICkgYXMgTVtrZXlvZiBNXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWdub3JlSGFuZGxlcnMpXG4gICAgICAgICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9yczxNLCBSZXBvc2l0b3J5PE0sIEE+LCBhbnk+KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghaWdub3JlVmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IHByb3BzVG9JZ25vcmUgPSBjdHguZ2V0KFwiaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzXCIpIHx8IFtdO1xuICAgICAgbG9nLnNpbGx5KGBpZ25vcmVkIHZhbGlkYXRpb24gcHJvcGVydGllczogJHtwcm9wc1RvSWdub3JlfWApO1xuICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG1vZGVscy5tYXAoKG0pID0+IFByb21pc2UucmVzb2x2ZShtLmhhc0Vycm9ycyguLi5wcm9wc1RvSWdub3JlKSkpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVkdWNlRXJyb3JzVG9QcmludChlcnJvcnMpO1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlcykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBmb3IgcmVhZGluZyBhIG1vZGVsIGJ5IElELlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgcmVhZGluZyBhIG1vZGVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleSBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZFByZWZpeChcbiAgICBrZXk6IFByaW1hcnlLZXlUeXBlLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8W1ByaW1hcnlLZXlUeXBlLCAuLi5hbnlbXSwgQ29udGV4dE9mPEE+XT4ge1xuICAgIGNvbnN0IHsgY3R4LCBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIE9wZXJhdGlvbktleXMuUkVBRCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnJlYWRQcmVmaXgpO1xuXG4gICAgY29uc3QgaWdub3JlSGFuZGxlcnMgPSBjdHguZ2V0KFwiaWdub3JlSGFuZGxlcnNcIik7XG4gICAgbG9nLnNpbGx5KGBoYW5kbGVyU2V0dGluZzogJHtpZ25vcmVIYW5kbGVyc31gKTtcbiAgICBjb25zdCBtb2RlbDogTSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgbW9kZWxbdGhpcy5wa10gPSBrZXkgYXMgTVtrZXlvZiBNXTtcbiAgICBpZiAoIWlnbm9yZUhhbmRsZXJzKVxuICAgICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9yczxNLCBSZXBvc2l0b3J5PE0sIEE+LCBhbnk+KFxuICAgICAgICB0aGlzLFxuICAgICAgICBjdHgsXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICk7XG4gICAgcmV0dXJuIFtrZXksIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIG1vZGVsIGZyb20gdGhlIGRhdGFiYXNlIGJ5IElELlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBpdHMgcHJpbWFyeSBrZXkuXG4gICAqIEBwYXJhbSB7UHJpbWFyeUtleVR5cGV9IGlkIC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TT59IFRoZSByZXRyaWV2ZWQgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBhc3luYyByZWFkKFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nLCBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJlYWQpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGByZWFkaW5nICR7dGhpcy5jbGFzcy5uYW1lfSBmcm9tIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSB3aXRoIHBrICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICk7XG5cbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWQodGhpcy5jbGFzcywgaWQsIC4uLmN0eEFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIGlkLCB1bmRlZmluZWQsIGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGZvciByZWFkaW5nIG11bHRpcGxlIG1vZGVscyBieSBJRHMuXG4gICAqIEBzdW1tYXJ5IFByZXBhcmVzIHRoZSBjb250ZXh0IGFuZCBlbmZvcmNlcyBkZWNvcmF0b3JzIGJlZm9yZSByZWFkaW5nIG11bHRpcGxlIG1vZGVscy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0ga2V5cyAtIFRoZSBwcmltYXJ5IGtleXMgb2YgdGhlIG1vZGVscyB0byByZWFkLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleXMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHJlYWRBbGxQcmVmaXgoXG4gICAga2V5czogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPFtQcmltYXJ5S2V5VHlwZVtdLCAuLi5hbnlbXSwgQ29udGV4dE9mPEE+XT4ge1xuICAgIGNvbnN0IHsgY3R4LCBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnJlYWRBbGxQcmVmaXgpO1xuXG4gICAgY29uc3QgaWdub3JlSGFuZGxlcnMgPSBjdHguZ2V0KFwiaWdub3JlSGFuZGxlcnNcIik7XG4gICAgbG9nLnNpbGx5KGBoYW5kbGVyU2V0dGluZzogJHtpZ25vcmVIYW5kbGVyc31gKTtcbiAgICBpZiAoIWlnbm9yZUhhbmRsZXJzKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGtleXMubWFwKGFzeW5jIChrKSA9PiB7XG4gICAgICAgICAgY29uc3QgbSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgICAgICAgbVt0aGlzLnBrXSA9IGsgYXMgTVtrZXlvZiBNXTtcbiAgICAgICAgICByZXR1cm4gZW5mb3JjZURCRGVjb3JhdG9yczxNLCBSZXBvc2l0b3J5PE0sIEE+LCBhbnk+KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIGRhdGFiYXNlIGJ5IElEcy5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyB0aGVpciBwcmltYXJ5IGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gcmVhZC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSByZXRyaWV2ZWQgbW9kZWwgaW5zdGFuY2VzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbChcbiAgICBrZXlzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZywgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWFkQWxsKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcmVhZGluZyAke2tleXMubGVuZ3RofSAke3RoaXMuY2xhc3MubmFtZX0gaW4gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9YFxuICAgICk7XG5cbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWRBbGwodGhpcy5jbGFzcywga2V5cywgLi4uY3R4QXJncyk7XG4gICAgcmV0dXJuIHJlY29yZHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCBrZXlzW2ldLCB1bmRlZmluZWQsIGN0eClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIGEgbW9kZWwgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAc3VtbWFyeSBQZXJzaXN0cyBjaGFuZ2VzIHRvIGFuIGV4aXN0aW5nIG1vZGVsIGluc3RhbmNlIGluIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIHVwZGF0ZWQgbW9kZWwgd2l0aCByZWZyZXNoZWQgcHJvcGVydGllcy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIGN0eCk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHVwZGF0aW5nICR7dGhpcy5jbGFzcy5uYW1lfSBpbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gd2l0aCBpZCAke2lkfWBcbiAgICApO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy5jbGFzcywgaWQsIHJlY29yZCwgLi4uY3R4QXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQ8TT4ocmVjb3JkLCB0aGlzLmNsYXNzLCBpZCwgdHJhbnNpZW50LCBjdHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIG1vZGVsIGZvciB1cGRhdGUuXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgbW9kZWwgYW5kIHByZXBhcmVzIGl0IGZvciB1cGRhdGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbCBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIHRoZSBtb2RlbCBoYXMgbm8gcHJpbWFyeSBrZXkgdmFsdWUuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgdGhlIG1vZGVsIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8W00sIC4uLmFyZ3M6IGFueVtdLCBDb250ZXh0T2Y8QT4sIE0gfCB1bmRlZmluZWRdPiB7XG4gICAgY29uc3QgeyBjdHgsIGN0eEFyZ3MsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgT3BlcmF0aW9uS2V5cy5VUERBVEUsIHRydWUpXG4gICAgKS5mb3IodGhpcy51cGRhdGVQcmVmaXgpO1xuXG4gICAgY29uc3QgaWdub3JlSGFuZGxlcnMgPSBjdHguZ2V0KFwiaWdub3JlSGFuZGxlcnNcIik7XG4gICAgY29uc3QgaWdub3JlVmFsaWRhdGUgPSBjdHguZ2V0KFwiaWdub3JlVmFsaWRhdGlvblwiKTtcbiAgICBsb2cuc2lsbHkoXG4gICAgICBgaGFuZGxlclNldHRpbmc6ICR7aWdub3JlSGFuZGxlcnN9LCB2YWxpZGF0aW9uU2V0dGluZzogJHtpZ25vcmVWYWxpZGF0ZX1gXG4gICAgKTtcbiAgICBjb25zdCBwayA9IG1vZGVsW3RoaXMucGtdIGFzIHN0cmluZztcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICAgKTtcbiAgICBsZXQgb2xkTW9kZWw6IE0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGN0eC5nZXQoXCJhcHBseVVwZGF0ZVZhbGlkYXRpb25cIikpIHtcbiAgICAgIG9sZE1vZGVsID0gYXdhaXQgdGhpcy5yZWFkKHBrIGFzIHN0cmluZywgY3R4KTtcbiAgICAgIGlmIChjdHguZ2V0KFwibWVyZ2VGb3JVcGRhdGVcIikpXG4gICAgICAgIG1vZGVsID0gTW9kZWwubWVyZ2Uob2xkTW9kZWwsIG1vZGVsLCB0aGlzLmNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAoIWlnbm9yZUhhbmRsZXJzKVxuICAgICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgY3R4IGFzIGFueSxcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgICAgICBPcGVyYXRpb25LZXlzLk9OLFxuICAgICAgICBvbGRNb2RlbFxuICAgICAgKTtcblxuICAgIGlmICghaWdub3JlVmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IHByb3BzVG9JZ25vcmUgPSBjdHguZ2V0KFwiaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzXCIpIHx8IFtdO1xuICAgICAgbG9nLnNpbGx5KGBpZ25vcmVkIHZhbGlkYXRpb24gcHJvcGVydGllczogJHtwcm9wc1RvSWdub3JlfWApO1xuICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBtb2RlbC5oYXNFcnJvcnMob2xkTW9kZWwsIC4uLnByb3BzVG9JZ25vcmUpXG4gICAgICApO1xuICAgICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBbbW9kZWwsIC4uLmN0eEFyZ3MsIG9sZE1vZGVsXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBtdWx0aXBsZSBtb2RlbHMgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAc3VtbWFyeSBQZXJzaXN0cyBjaGFuZ2VzIHRvIG11bHRpcGxlIGV4aXN0aW5nIG1vZGVsIGluc3RhbmNlcyBpbiB0aGUgZGF0YWJhc2UgaW4gYSBiYXRjaCBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSB1cGRhdGVkIG1vZGVscyB3aXRoIHJlZnJlc2hlZCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlQWxsKFxuICAgIG1vZGVsczogTVtdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZywgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVBbGwpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYFVwZGF0aW5nICR7bW9kZWxzLmxlbmd0aH0gbmV3ICR7dGhpcy5jbGFzcy5uYW1lfSBpbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSBtb2RlbHMubWFwKChtKSA9PiB0aGlzLmFkYXB0ZXIucHJlcGFyZShtLCBjdHgpKTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdGhpcy5hZGFwdGVyLnVwZGF0ZUFsbChcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5pZCksXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5yZWNvcmQpLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHVwZGF0ZWQubWFwKCh1LCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChcbiAgICAgICAgdSxcbiAgICAgICAgdGhpcy5jbGFzcyxcbiAgICAgICAgcmVjb3Jkc1tpXS5pZCxcbiAgICAgICAgY3R4LmdldChcInJlYnVpbGRXaXRoVHJhbnNpZW50XCIpID8gcmVjb3Jkc1tpXS50cmFuc2llbnQgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0eFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIG1vZGVscyBmb3IgdXBkYXRlLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgbXVsdGlwbGUgbW9kZWxzIGFuZCBwcmVwYXJlcyB0aGVtIGZvciB1cGRhdGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnlbXT59IFRoZSBwcmVwYXJlZCBtb2RlbHMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBhbnkgbW9kZWwgaGFzIG5vIHByaW1hcnkga2V5IHZhbHVlLlxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZUFsbFByZWZpeChcbiAgICBtb2RlbHM6IE1bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPFtNW10sIC4uLmFyZ3M6IGFueVtdLCBDb250ZXh0T2Y8QT4sIE1bXSB8IHVuZGVmaW5lZF0+IHtcbiAgICBjb25zdCB7IGN0eCwgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnVwZGF0ZUFsbFByZWZpeCk7XG5cbiAgICBjb25zdCBpZ25vcmVIYW5kbGVycyA9IGN0eC5nZXQoXCJpZ25vcmVIYW5kbGVyc1wiKTtcbiAgICBjb25zdCBpZ25vcmVWYWxpZGF0ZSA9IGN0eC5nZXQoXCJpZ25vcmVWYWxpZGF0aW9uXCIpO1xuICAgIGxvZy5zaWxseShcbiAgICAgIGBoYW5kbGVyU2V0dGluZzogJHtpZ25vcmVIYW5kbGVyc30sIGlnbm9yZWRWYWxpZGF0aW9uOiAke2lnbm9yZVZhbGlkYXRlfWBcbiAgICApO1xuICAgIGNvbnN0IGlkcyA9IG1vZGVscy5tYXAoKG0pID0+IHtcbiAgICAgIGNvbnN0IGlkID0gbVt0aGlzLnBrXSBhcyBzdHJpbmc7XG4gICAgICBpZiAoIWlkKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIm1pc3NpbmcgaWQgb24gdXBkYXRlIG9wZXJhdGlvblwiKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9KTtcbiAgICBsZXQgb2xkTW9kZWxzOiBNW10gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGN0eC5nZXQoXCJhcHBseVVwZGF0ZVZhbGlkYXRpb25cIikpIHtcbiAgICAgIG9sZE1vZGVscyA9IGF3YWl0IHRoaXMucmVhZEFsbChpZHMgYXMgc3RyaW5nW10sIGN0eCk7XG4gICAgICBpZiAoY3R4LmdldChcIm1lcmdlRm9yVXBkYXRlXCIpKVxuICAgICAgICBtb2RlbHMgPSBtb2RlbHMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIE1vZGVsLm1lcmdlKChvbGRNb2RlbHMgYXMgYW55KVtpXSwgbSwgdGhpcy5jbGFzcylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlnbm9yZUhhbmRsZXJzKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG1vZGVscy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgZW5mb3JjZURCRGVjb3JhdG9yczxNLCBSZXBvc2l0b3J5PE0sIEE+LCBhbnk+KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICAgICAgICBvbGRNb2RlbHMgPyBvbGRNb2RlbHNbaV0gOiB1bmRlZmluZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICBpZiAoIWlnbm9yZVZhbGlkYXRlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkUHJvcHMgPSBjdHguZ2V0KFwiaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzXCIpIHx8IFtdO1xuICAgICAgbG9nLnNpbGx5KGBpZ25vcmVkIHZhbGlkYXRpb24gcHJvcGVydGllczogJHtpZ25vcmVkUHJvcHN9YCk7XG4gICAgICBsZXQgbW9kZWxzVmFsaWRhdGlvbjogYW55O1xuICAgICAgaWYgKCFjdHguZ2V0KFwiYXBwbHlVcGRhdGVWYWxpZGF0aW9uXCIpKSB7XG4gICAgICAgIG1vZGVsc1ZhbGlkYXRpb24gPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSkgPT4gbS5oYXNFcnJvcnMoLi4uaWdub3JlZFByb3BzKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZGVsc1ZhbGlkYXRpb24gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBtb2RlbHMubWFwKChtLCBpKSA9PlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICBtLmhhc0Vycm9ycygob2xkTW9kZWxzIGFzIGFueSlbaV0gYXMgYW55LCAuLi5pZ25vcmVkUHJvcHMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVkdWNlRXJyb3JzVG9QcmludChtb2RlbHNWYWxpZGF0aW9uKTtcblxuICAgICAgaWYgKGVycm9yTWVzc2FnZXMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gICAgfVxuICAgIHJldHVybiBbbW9kZWxzLCAuLi5jdHhBcmdzLCBvbGRNb2RlbHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBmb3IgZGVsZXRpbmcgYSBtb2RlbCBieSBJRC5cbiAgICogQHN1bW1hcnkgUHJlcGFyZXMgdGhlIGNvbnRleHQgYW5kIGVuZm9yY2VzIGRlY29yYXRvcnMgYmVmb3JlIGRlbGV0aW5nIGEgbW9kZWwuXG4gICAqIEBwYXJhbSB7YW55fSBrZXkgLSBUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIG1vZGVsIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBrZXkgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZVByZWZpeChcbiAgICBrZXk6IFByaW1hcnlLZXlUeXBlLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8W1ByaW1hcnlLZXlUeXBlLCAuLi5hbnlbXSwgQ29udGV4dE9mPEE+XT4ge1xuICAgIGNvbnN0IHsgY3R4LCBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIE9wZXJhdGlvbktleXMuREVMRVRFLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuZGVsZXRlUHJlZml4KTtcblxuICAgIGNvbnN0IGlnbm9yZUhhbmRsZXJzID0gY3R4LmdldChcImlnbm9yZUhhbmRsZXJzXCIpO1xuICAgIGxvZy5zaWxseShgaGFuZGxlclNldHRpbmc6ICR7aWdub3JlSGFuZGxlcnN9YCk7XG4gICAgaWYgKCFpZ25vcmVIYW5kbGVycykge1xuICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLnJlYWQoa2V5LCAuLi5jdHhBcmdzKTtcbiAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnM8TSwgUmVwb3NpdG9yeTxNLCBBPiwgYW55PihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgY3R4LFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtrZXksIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIGEgbW9kZWwgZnJvbSB0aGUgZGF0YWJhc2UgYnkgSUQuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBpdHMgcHJpbWFyeSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIGRlbGV0ZWQgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBhc3luYyBkZWxldGUoXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2csIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuZGVsZXRlKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgZGVsZXRpbmcgbmV3ICR7dGhpcy5jbGFzcy5uYW1lfSBpbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gd2l0aCBwayAke2lkfWBcbiAgICApO1xuXG4gICAgY29uc3QgbSA9IGF3YWl0IHRoaXMuYWRhcHRlci5kZWxldGUodGhpcy5jbGFzcywgaWQsIC4uLmN0eEFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIGlkLCB1bmRlZmluZWQsIGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGZvciBkZWxldGluZyBtdWx0aXBsZSBtb2RlbHMgYnkgSURzLlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgZGVsZXRpbmcgbXVsdGlwbGUgbW9kZWxzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBrZXlzIC0gVGhlIHByaW1hcnkga2V5cyBvZiB0aGUgbW9kZWxzIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBrZXlzIGFuZCBjb250ZXh0IGFyZ3VtZW50cy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBkZWxldGVBbGxQcmVmaXgoXG4gICAga2V5czogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPFtQcmltYXJ5S2V5VHlwZVtdLCAuLi5hbnlbXSwgQ29udGV4dE9mPEE+XT4ge1xuICAgIGNvbnN0IHsgY3R4LCBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuZGVsZXRlQWxsUHJlZml4KTtcblxuICAgIGNvbnN0IGlnbm9yZUhhbmRsZXJzID0gY3R4LmdldChcImlnbm9yZUhhbmRsZXJzXCIpO1xuICAgIGxvZy5zaWxseShgaGFuZGxlclNldHRpbmc6ICR7aWdub3JlSGFuZGxlcnN9YCk7XG4gICAgaWYgKCFpZ25vcmVIYW5kbGVycykge1xuICAgICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy5yZWFkQWxsKGtleXMsIC4uLmN0eEFyZ3MpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG1vZGVscy5tYXAoYXN5bmMgKG0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZW5mb3JjZURCRGVjb3JhdG9yczxNLCBSZXBvc2l0b3J5PE0sIEE+LCBhbnk+KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICAgICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2tleXMsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIG11bHRpcGxlIG1vZGVscyBmcm9tIHRoZSBkYXRhYmFzZSBieSBJRHMuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgbXVsdGlwbGUgbW9kZWwgaW5zdGFuY2VzIGZyb20gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZWlyIHByaW1hcnkga2V5cy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0ga2V5cyAtIFRoZSBwcmltYXJ5IGtleXMgb2YgdGhlIG1vZGVscyB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNW10+fSBUaGUgZGVsZXRlZCBtb2RlbCBpbnN0YW5jZXMuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBkZWxldGVBbGwoXG4gICAga2V5czogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPE1bXT4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2csIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgZGVsZXRpbmcgJHtrZXlzLmxlbmd0aH0gJHt0aGlzLmNsYXNzLm5hbWV9IGluIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfWBcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuYWRhcHRlci5kZWxldGVBbGwodGhpcy5jbGFzcywga2V5cywgLi4uY3R4QXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCBrZXlzW2ldLCB1bmRlZmluZWQsIGN0eClcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHNlbGVjdCBxdWVyeSB3aXRob3V0IHNwZWNpZnlpbmcgZmllbGRzLlxuICAgKiBAc3VtbWFyeSBTdGFydHMgYnVpbGRpbmcgYSBxdWVyeSB0aGF0IHdpbGwgcmV0dXJuIGFsbCBmaWVsZHMgb2YgdGhlIG1vZGVsLlxuICAgKiBAdGVtcGxhdGUgUyAtIFRoZSBhcnJheSB0eXBlIG9mIHNlbGVjdCBzZWxlY3RvcnMuXG4gICAqIEByZXR1cm4gQSBxdWVyeSBidWlsZGVyIGZvciB0aGUgbW9kZWwuXG4gICAqL1xuICBzZWxlY3Q8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdLFxuICA+KCk6IFdoZXJlT3B0aW9uPE0sIE1bXT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc2VsZWN0IHF1ZXJ5IHdpdGggc3BlY2lmaWMgZmllbGRzLlxuICAgKiBAc3VtbWFyeSBTdGFydHMgYnVpbGRpbmcgYSBxdWVyeSB0aGF0IHdpbGwgcmV0dXJuIG9ubHkgdGhlIHNwZWNpZmllZCBmaWVsZHMgb2YgdGhlIG1vZGVsLlxuICAgKiBAdGVtcGxhdGUgUyAtIFRoZSBhcnJheSB0eXBlIG9mIHNlbGVjdCBzZWxlY3RvcnMuXG4gICAqIEBwYXJhbSBzZWxlY3RvciAtIFRoZSBmaWVsZHMgdG8gc2VsZWN0LlxuICAgKiBAcmV0dXJuIEEgcXVlcnkgYnVpbGRlciBmb3IgdGhlIHNlbGVjdGVkIGZpZWxkcy5cbiAgICovXG4gIHNlbGVjdDxTIGV4dGVuZHMgcmVhZG9ubHkgU2VsZWN0U2VsZWN0b3I8TT5bXT4oXG4gICAgc2VsZWN0b3I6IHJlYWRvbmx5IFsuLi5TXVxuICApOiBXaGVyZU9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VsZWN0IG1ldGhvZC5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIHF1ZXJ5IGJ1aWxkZXIgZm9yIHRoZSBtb2RlbCB3aXRoIG9wdGlvbmFsIGZpZWxkIHNlbGVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFMgLSBUaGUgYXJyYXkgdHlwZSBvZiBzZWxlY3Qgc2VsZWN0b3JzLlxuICAgKiBAcGFyYW0gW3NlbGVjdG9yXSAtIE9wdGlvbmFsIGZpZWxkcyB0byBzZWxlY3QuXG4gICAqIEByZXR1cm4gQSBxdWVyeSBidWlsZGVyLlxuICAgKi9cbiAgc2VsZWN0PFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdPihcbiAgICBzZWxlY3Rvcj86IHJlYWRvbmx5IFsuLi5TXVxuICApOiBXaGVyZU9wdGlvbjxNLCBNW10+IHwgV2hlcmVPcHRpb248TSwgUGljazxNLCBTW251bWJlcl0+W10+IHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyXG4gICAgICAuU3RhdGVtZW50PE0+KHRoaXMuX292ZXJyaWRlcylcbiAgICAgIC5zZWxlY3Qoc2VsZWN0b3IgYXMgcmVhZG9ubHkgWy4uLlNdKVxuICAgICAgLmZyb20odGhpcy5jbGFzcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBjb3VudCBxdWVyeVxuICAgKiBAc3VtbWFyeSBTdGFydHMgYnVpbGRpbmcgYSBxdWVyeSB0aGF0IHdpbGwgY291bnQgcmVjb3Jkc1xuICAgKiBAdGVtcGxhdGUgUyAtIFRoZSBzZWxlY3Qgc2VsZWN0b3IgdHlwZVxuICAgKiBAcGFyYW0ge1N9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBmaWVsZCB0byBjb3VudCAoY291bnRzIGFsbCBpZiBub3Qgc3BlY2lmaWVkKVxuICAgKiBAcmV0dXJuIEEgY291bnQgcXVlcnkgYnVpbGRlciB3aXRoIGRpc3RpbmN0KCkgYXZhaWxhYmxlXG4gICAqL1xuICBjb3VudDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yPzogUyk6IENvdW50V2hlcmVPcHRpb248TT4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4odGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLmNvdW50KHNlbGVjdG9yKVxuICAgICAgLmZyb20odGhpcy5jbGFzcykgYXMgdW5rbm93biBhcyBDb3VudFdoZXJlT3B0aW9uPE0+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbWluIHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCBmaW5kIHRoZSBtaW5pbXVtIHZhbHVlXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIHNlbGVjdCBzZWxlY3RvciB0eXBlXG4gICAqIEBwYXJhbSB7U30gc2VsZWN0b3IgLSBGaWVsZCB0byBmaW5kIG1pbmltdW0gdmFsdWUgb2ZcbiAgICogQHJldHVybiBBIG1pbiBxdWVyeSBidWlsZGVyXG4gICAqL1xuICBtaW48UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUykge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4odGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLm1pbihzZWxlY3RvcilcbiAgICAgIC5mcm9tKHRoaXMuY2xhc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbWF4IHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCBmaW5kIHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIHNlbGVjdCBzZWxlY3RvciB0eXBlXG4gICAqIEBwYXJhbSB7U30gc2VsZWN0b3IgLSBGaWVsZCB0byBmaW5kIG1heGltdW0gdmFsdWUgb2ZcbiAgICogQHJldHVybiBBIG1heCBxdWVyeSBidWlsZGVyXG4gICAqL1xuICBtYXg8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUykge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4odGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLm1heChzZWxlY3RvcilcbiAgICAgIC5mcm9tKHRoaXMuY2xhc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc3VtIHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCBzdW0gdmFsdWVzXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIHNlbGVjdCBzZWxlY3RvciB0eXBlXG4gICAqIEBwYXJhbSB7U30gc2VsZWN0b3IgLSBGaWVsZCB0byBzdW1cbiAgICogQHJldHVybiBBIHN1bSBxdWVyeSBidWlsZGVyXG4gICAqL1xuICBzdW08UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUykge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4odGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLnN1bShzZWxlY3RvcilcbiAgICAgIC5mcm9tKHRoaXMuY2xhc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIGF2ZXJhZ2UgcXVlcnlcbiAgICogQHN1bW1hcnkgU3RhcnRzIGJ1aWxkaW5nIGEgcXVlcnkgdGhhdCB3aWxsIGNvbXB1dGUgdGhlIGF2ZXJhZ2UgdmFsdWVcbiAgICogQHRlbXBsYXRlIFMgLSBUaGUgc2VsZWN0IHNlbGVjdG9yIHR5cGVcbiAgICogQHBhcmFtIHtTfSBzZWxlY3RvciAtIEZpZWxkIHRvIGF2ZXJhZ2VcbiAgICogQHJldHVybiBBbiBhdmVyYWdlIHF1ZXJ5IGJ1aWxkZXJcbiAgICovXG4gIGF2ZzxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yOiBTKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlclxuICAgICAgLlN0YXRlbWVudDxNPih0aGlzLl9vdmVycmlkZXMpXG4gICAgICAuYXZnKHNlbGVjdG9yKVxuICAgICAgLmZyb20odGhpcy5jbGFzcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBkaXN0aW5jdCBxdWVyeVxuICAgKiBAc3VtbWFyeSBTdGFydHMgYnVpbGRpbmcgYSBxdWVyeSB0aGF0IHdpbGwgZmluZCBkaXN0aW5jdCB2YWx1ZXNcbiAgICogQHRlbXBsYXRlIFMgLSBUaGUgc2VsZWN0IHNlbGVjdG9yIHR5cGVcbiAgICogQHBhcmFtIHtTfSBzZWxlY3RvciAtIEZpZWxkIHRvIGZpbmQgZGlzdGluY3QgdmFsdWVzIG9mXG4gICAqIEByZXR1cm4gQSBkaXN0aW5jdCBxdWVyeSBidWlsZGVyXG4gICAqL1xuICBkaXN0aW5jdDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yOiBTKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlclxuICAgICAgLlN0YXRlbWVudDxNPih0aGlzLl9vdmVycmlkZXMpXG4gICAgICAuZGlzdGluY3Qoc2VsZWN0b3IpXG4gICAgICAuZnJvbSh0aGlzLmNsYXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBxdWVyeSB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBhbmQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzaW1wbGlmaWVkIHdheSB0byBxdWVyeSB0aGUgZGF0YWJhc2Ugd2l0aCBjb21tb24gcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gZmlsdGVyIHJlY29yZHMuXG4gICAqIEBwYXJhbSBvcmRlckJ5IC0gVGhlIGZpZWxkIHRvIG9yZGVyIHJlc3VsdHMgYnkuXG4gICAqIEBwYXJhbSB7T3JkZXJEaXJlY3Rpb259IFtvcmRlcj1PcmRlckRpcmVjdGlvbi5BU0NdIC0gVGhlIHNvcnQgZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSAtIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2tpcC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNW10+fSBUaGUgcXVlcnkgcmVzdWx0cyBhcyBtb2RlbCBpbnN0YW5jZXMuXG4gICAqL1xuICBhc3luYyBxdWVyeShcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjxNPixcbiAgICBvcmRlckJ5OiBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkFTQyxcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBza2lwPzogbnVtYmVyLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQZXJzaXN0ZW5jZUtleXMuUVVFUlksIHRydWUpXG4gICAgKS5mb3IodGhpcy5xdWVyeSk7XG4gICAgY29uc3Qgc29ydDogT3JkZXJCeVNlbGVjdG9yPE0+ID0gW29yZGVyQnksIG9yZGVyIGFzIE9yZGVyRGlyZWN0aW9uXTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0KCkud2hlcmUoY29uZGl0aW9uKS5vcmRlckJ5KHNvcnQpO1xuICAgIGlmIChsaW1pdCkgcXVlcnkubGltaXQobGltaXQpO1xuICAgIGlmIChza2lwKSBxdWVyeS5vZmZzZXQoc2tpcCk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoLi4uY3R4QXJncyk7XG4gIH1cblxuICBAcHJlcGFyZWQoKVxuICBhc3luYyBsaXN0QnkoXG4gICAga2V5OiBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApIHtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlksIHRydWUpXG4gICAgKS5mb3IodGhpcy5saXN0QnkpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYGxpc3RpbmcgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9IGJ5ICR7a2V5IGFzIHN0cmluZ30gJHtvcmRlcn1gXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKVxuICAgICAgLm9yZGVyQnkoW2tleSwgb3JkZXJdKVxuICAgICAgLmV4ZWN1dGUoLi4uY3R4QXJncyk7XG4gIH1cblxuICBAcHJlcGFyZWQoKVxuICBhc3luYyBwYWdpbmF0ZUJ5KFxuICAgIGtleToga2V5b2YgTSxcbiAgICBvcmRlcjogT3JkZXJEaXJlY3Rpb24sXG4gICAgcmVmOiBPbWl0PERpcmVjdGlvbkxpbWl0T2Zmc2V0LCBcImRpcmVjdGlvblwiPiA9IHtcbiAgICAgIG9mZnNldDogMSxcbiAgICAgIGxpbWl0OiAxMCxcbiAgICB9LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8U2VyaWFsaXplZFBhZ2U8TT4+IHtcbiAgICByZWYub2Zmc2V0ID0gcmVmLm9mZnNldCB8fCAxO1xuICAgIHJlZi5saW1pdCA9IHJlZi5saW1pdCB8fCAxMDtcbiAgICBjb25zdCB7IG9mZnNldCwgYm9va21hcmssIGxpbWl0IH0gPSByZWY7XG4gICAgaWYgKCFvZmZzZXQgJiYgIWJvb2ttYXJrKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYFBhZ2luYXRlQnkgbmVlZHMgYSBwYWdlIG9yIGEgYm9va21hcmtgKTtcbiAgICBjb25zdCB7IGxvZywgY3R4LCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnBhZ2luYXRlQnkpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYHBhZ2luYXRpbmcgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9IHdpdGggcGFnZSBzaXplICR7bGltaXR9YFxuICAgICk7XG5cbiAgICBsZXQgcGFnaW5hdG9yOiBQYWdpbmF0b3I8TT47XG4gICAgaWYgKGJvb2ttYXJrICYmIGN0eC5nZXQoXCJwYWdpbmF0ZUJ5Qm9va21hcmtcIikpIHtcbiAgICAgIHBhZ2luYXRvciA9IGF3YWl0IHRoaXMub3ZlcnJpZGUoe1xuICAgICAgICBmb3JjZVByZXBhcmVDb21wbGV4UXVlcmllczogZmFsc2UsXG4gICAgICAgIGZvcmNlUHJlcGFyZVNpbXBsZVF1ZXJpZXM6IGZhbHNlLFxuICAgICAgfSBhcyBhbnkpXG4gICAgICAgIC5zZWxlY3QoKVxuICAgICAgICAud2hlcmUoXG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcmRlciA9PT0gT3JkZXJEaXJlY3Rpb24uQVNDXG4gICAgICAgICAgICAgID8gdGhpcy5hdHRyKE1vZGVsLnBrKHRoaXMuY2xhc3MpKS5ndChib29rbWFyaylcbiAgICAgICAgICAgICAgOiB0aGlzLmF0dHIoTW9kZWwucGsodGhpcy5jbGFzcykpLmx0KGJvb2ttYXJrKTtcbiAgICAgICAgICB9KSgpXG4gICAgICAgIClcbiAgICAgICAgLm9yZGVyQnkoW2tleSwgb3JkZXJdKVxuICAgICAgICAucGFnaW5hdGUobGltaXQgYXMgbnVtYmVyLCAuLi5jdHhBcmdzKTtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCkge1xuICAgICAgcGFnaW5hdG9yID0gYXdhaXQgdGhpcy5vdmVycmlkZSh7XG4gICAgICAgIGZvcmNlUHJlcGFyZUNvbXBsZXhRdWVyaWVzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VQcmVwYXJlU2ltcGxlUXVlcmllczogZmFsc2UsXG4gICAgICB9IGFzIGFueSlcbiAgICAgICAgLnNlbGVjdCgpXG4gICAgICAgIC5vcmRlckJ5KFtrZXksIG9yZGVyXSlcbiAgICAgICAgLnBhZ2luYXRlKGxpbWl0IGFzIG51bWJlciwgLi4uY3R4QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGBQYWdpbmF0ZUJ5IG5lZWRzIGEgcGFnZSBvciBhIGJvb2ttYXJrYCk7XG4gICAgfVxuICAgIGNvbnN0IHBhZ2VkID0gYXdhaXQgcGFnaW5hdG9yLnBhZ2Uob2Zmc2V0LCBib29rbWFyaywgLi4uY3R4QXJncyk7XG4gICAgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHBhZ2luYXRvci5zZXJpYWxpemUocGFnZWQpIGFzIFNlcmlhbGl6ZWRQYWdlPE0+O1xuICAgIC8vIGlmIChib29rbWFyaykgc2VyaWFsaXphdGlvbi5jdXJyZW50ID0gcmVxdWVzdGVkUGFnZTtcbiAgICByZXR1cm4gc2VyaWFsaXphdGlvbjtcbiAgfVxuXG4gIEBwcmVwYXJlZCgpXG4gIGFzeW5jIGZpbmQoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcmRlcjogT3JkZXJEaXJlY3Rpb24gPSBPcmRlckRpcmVjdGlvbi5BU0MsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxNW10+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXCJGaW5kIHZhbHVlIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgY29uc3QgYXR0cnMgPSB0aGlzLmdldERlZmF1bHRRdWVyeUF0dHJpYnV0ZXMoKTtcbiAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmJ1aWxkRGVmYXVsdFN0YXJ0c1dpdGhDb25kaXRpb24odmFsdWUsIGF0dHJzKTtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsIHRydWUpXG4gICAgKS5mb3IodGhpcy5maW5kKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBmaW5kaW5nICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSBieSBkZWZhdWx0IGF0dHJpYnV0ZXMgJHthdHRycy5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICl9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KClcbiAgICAgIC53aGVyZShjb25kaXRpb24pXG4gICAgICAub3JkZXJCeShbYXR0cnNbMF0sIG9yZGVyXSlcbiAgICAgIC5leGVjdXRlKC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgcGFnZShcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gPSBPcmRlckRpcmVjdGlvbi5BU0MsXG4gICAgcmVmOiBPbWl0PERpcmVjdGlvbkxpbWl0T2Zmc2V0LCBcImRpcmVjdGlvblwiPiA9IHtcbiAgICAgIG9mZnNldDogMSxcbiAgICAgIGxpbWl0OiAxMCxcbiAgICB9LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8U2VyaWFsaXplZFBhZ2U8TT4+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXCJQYWdlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgY29uc3QgcmVxdWVzdGVkUGFnZSA9IHJlZi5vZmZzZXQgfHwgMTtcbiAgICBjb25zdCB7IG9mZnNldCwgYm9va21hcmssIGxpbWl0IH0gPSByZWY7XG4gICAgaWYgKCFvZmZzZXQgJiYgIWJvb2ttYXJrKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYFBhZ2luYXRlQnkgbmVlZHMgYSBwYWdlIG9yIGEgYm9va21hcmtgKTtcbiAgICBjb25zdCBhdHRycyA9IHRoaXMuZ2V0RGVmYXVsdFF1ZXJ5QXR0cmlidXRlcygpO1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuYnVpbGREZWZhdWx0U3RhcnRzV2l0aENvbmRpdGlvbih2YWx1ZSwgYXR0cnMpO1xuICAgIGNvbnN0IHsgbG9nLCBjdHgsIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFLCB0cnVlKVxuICAgICkuZm9yKHRoaXMucGFnZSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgcGFnaW5nICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSBieSBkZWZhdWx0IGF0dHJpYnV0ZXMgJHthdHRycy5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICl9YFxuICAgICk7XG4gICAgY29uc3QgbGltaXRWYWx1ZSA9IGxpbWl0ID8/IDEwO1xuICAgIGNvbnN0IG9yZGVyS2V5ID0gYXR0cnNbMF07XG4gICAgY29uc3Qgb3ZlcnJpZGVDb250cm9scyA9IHRoaXMub3ZlcnJpZGUoe1xuICAgICAgZm9yY2VQcmVwYXJlQ29tcGxleFF1ZXJpZXM6IGZhbHNlLFxuICAgICAgZm9yY2VQcmVwYXJlU2ltcGxlUXVlcmllczogZmFsc2UsXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgbGV0IHBhZ2luYXRvcjogUGFnaW5hdG9yPE0+O1xuICAgIGlmIChib29rbWFyayAmJiBjdHguZ2V0KFwicGFnaW5hdGVCeUJvb2ttYXJrXCIpKSB7XG4gICAgICBjb25zdCBwayA9IE1vZGVsLnBrKHRoaXMuY2xhc3MpIGFzIGtleW9mIE07XG4gICAgICBjb25zdCBib29rbWFya0NvbmRpdGlvbiA9XG4gICAgICAgIGRpcmVjdGlvbiA9PT0gT3JkZXJEaXJlY3Rpb24uQVNDXG4gICAgICAgICAgPyB0aGlzLmF0dHIocGspLmd0KGJvb2ttYXJrKVxuICAgICAgICAgIDogdGhpcy5hdHRyKHBrKS5sdChib29rbWFyayk7XG4gICAgICBwYWdpbmF0b3IgPSBhd2FpdCBvdmVycmlkZUNvbnRyb2xzXG4gICAgICAgIC5zZWxlY3QoKVxuICAgICAgICAud2hlcmUoY29uZGl0aW9uLmFuZChib29rbWFya0NvbmRpdGlvbikpXG4gICAgICAgIC5vcmRlckJ5KFtvcmRlcktleSwgZGlyZWN0aW9uXSlcbiAgICAgICAgLnBhZ2luYXRlKGxpbWl0VmFsdWUsIC4uLmN0eEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7XG4gICAgICBwYWdpbmF0b3IgPSBhd2FpdCBvdmVycmlkZUNvbnRyb2xzXG4gICAgICAgIC5zZWxlY3QoKVxuICAgICAgICAud2hlcmUoY29uZGl0aW9uKVxuICAgICAgICAub3JkZXJCeShbb3JkZXJLZXksIGRpcmVjdGlvbl0pXG4gICAgICAgIC5wYWdpbmF0ZShsaW1pdFZhbHVlLCAuLi5jdHhBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYFBhZ2luYXRlQnkgbmVlZHMgYSBwYWdlIG9yIGEgYm9va21hcmtgKTtcbiAgICB9XG4gICAgY29uc3QgcGFnZWQgPSBhd2FpdCBwYWdpbmF0b3IucGFnZShyZXF1ZXN0ZWRQYWdlLCBib29rbWFyaywgLi4uY3R4QXJncyk7XG4gICAgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHBhZ2luYXRvci5zZXJpYWxpemUocGFnZWQpIGFzIFNlcmlhbGl6ZWRQYWdlPE0+O1xuICAgIHJldHVybiBzZXJpYWxpemF0aW9uO1xuICB9XG5cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgZmluZE9uZUJ5KFxuICAgIGtleToga2V5b2YgTSxcbiAgICB2YWx1ZTogYW55LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICkge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9PTkVfQlksIHRydWUpXG4gICAgKS5mb3IodGhpcy5maW5kT25lQnkpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYGZpbmRpbmcgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9IHdpdGggJHtrZXkgYXMgc3RyaW5nfSAke3ZhbHVlfWBcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VsZWN0KClcbiAgICAgIC53aGVyZSh0aGlzLmF0dHIoa2V5KS5lcSh2YWx1ZSkpXG4gICAgICAubGltaXQoMSlcbiAgICAgIC5leGVjdXRlKC4uLmN0eEFyZ3MpO1xuICAgIGlmICghcmVzdWx0Lmxlbmd0aCkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYE5vIHJlc3VsdHMgZm91bmRgKTtcbiAgICByZXR1cm4gcmVzdWx0WzBdO1xuICB9XG5cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgZmluZEJ5KFxuICAgIGtleToga2V5b2YgTSxcbiAgICB2YWx1ZTogYW55LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICkge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9CWSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmZpbmRCeSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgZmluZGluZyAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gd2l0aCAke2tleSBhcyBzdHJpbmd9ICR7dmFsdWV9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KClcbiAgICAgIC53aGVyZSh0aGlzLmF0dHIoa2V5KS5lcSh2YWx1ZSkpXG4gICAgICAuZXhlY3V0ZSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ291bnRzIHJlY29yZHMsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBrZXkgdmFsdWVcbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY291bnQgb2YgcmVjb3JkcyBtYXRjaGluZyB0aGUgb3B0aW9uYWwga2V5IGNvbmRpdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGZpZWxkIHRvIGNvdW50IChvcHRpb25hbCwgY291bnRzIGFsbCBpZiBub3Qgc3BlY2lmaWVkKVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgaW5jbHVkaW5nIGNvbnRleHRcbiAgICogQHJldHVybiB7UHJvbWlzZTxudW1iZXI+fSBUaGUgY291bnQgb2YgbWF0Y2hpbmcgcmVjb3Jkc1xuICAgKi9cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgY291bnRPZihcbiAgICBrZXk/OiBrZXlvZiBNLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmNvdW50T2YpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYGNvdW50aW5nICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSR7a2V5ID8gYCBieSAke2tleSBhcyBzdHJpbmd9YCA6IFwiXCJ9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuY291bnQoa2V5IGFzIGFueSkuZXhlY3V0ZSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmluZHMgdGhlIG1heGltdW0gdmFsdWUgb2YgYSBmaWVsZFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkIGFjcm9zcyBhbGwgcmVjb3Jkc1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGZpZWxkIHRvIGZpbmQgdGhlIG1heGltdW0gdmFsdWUgb2ZcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGluY2x1ZGluZyBjb250ZXh0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gVGhlIG1heGltdW0gdmFsdWVcbiAgICovXG4gIEBwcmVwYXJlZCgpXG4gIGFzeW5jIG1heE9mPEsgZXh0ZW5kcyBrZXlvZiBNPihcbiAgICBrZXk6IEssXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxNW0tdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFByZXBhcmVkU3RhdGVtZW50S2V5cy5NQVhfT0YsIHRydWUpXG4gICAgKS5mb3IodGhpcy5tYXhPZik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgZmluZGluZyBtYXggb2YgJHtrZXkgYXMgc3RyaW5nfSBpbiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5tYXgoa2V5IGFzIGFueSkuZXhlY3V0ZSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmluZHMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYSBmaWVsZFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkIGFjcm9zcyBhbGwgcmVjb3Jkc1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGZpZWxkIHRvIGZpbmQgdGhlIG1pbmltdW0gdmFsdWUgb2ZcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGluY2x1ZGluZyBjb250ZXh0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gVGhlIG1pbmltdW0gdmFsdWVcbiAgICovXG4gIEBwcmVwYXJlZCgpXG4gIGFzeW5jIG1pbk9mPEsgZXh0ZW5kcyBrZXlvZiBNPihcbiAgICBrZXk6IEssXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxNW0tdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFByZXBhcmVkU3RhdGVtZW50S2V5cy5NSU5fT0YsIHRydWUpXG4gICAgKS5mb3IodGhpcy5taW5PZik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgZmluZGluZyBtaW4gb2YgJHtrZXkgYXMgc3RyaW5nfSBpbiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5taW4oa2V5IGFzIGFueSkuZXhlY3V0ZSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2FsY3VsYXRlcyB0aGUgYXZlcmFnZSB2YWx1ZSBvZiBhIGZpZWxkXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGF2ZXJhZ2UgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbnVtZXJpYyBmaWVsZCBhY3Jvc3MgYWxsIHJlY29yZHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBmaWVsZCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2Ugb2ZcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGluY2x1ZGluZyBjb250ZXh0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8bnVtYmVyPn0gVGhlIGF2ZXJhZ2UgdmFsdWVcbiAgICovXG4gIEBwcmVwYXJlZCgpXG4gIGFzeW5jIGF2Z09mPEsgZXh0ZW5kcyBrZXlvZiBNPihcbiAgICBrZXk6IEssXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmF2Z09mKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBjYWxjdWxhdGluZyBhdmVyYWdlIG9mICR7a2V5IGFzIHN0cmluZ30gaW4gJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYXZnKGtleSBhcyBhbnkpLmV4ZWN1dGUoLi4uY3R4QXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiBhIGZpZWxkXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHN1bSBvZiB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgbnVtZXJpYyBmaWVsZCBhY3Jvc3MgYWxsIHJlY29yZHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBmaWVsZCB0byBzdW1cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGluY2x1ZGluZyBjb250ZXh0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8bnVtYmVyPn0gVGhlIHN1bVxuICAgKi9cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgc3VtT2Y8SyBleHRlbmRzIGtleW9mIE0+KFxuICAgIGtleTogSyxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuc3VtT2YpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYGNhbGN1bGF0aW5nIHN1bSBvZiAke2tleSBhcyBzdHJpbmd9IGluICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfWBcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnN1bShrZXkgYXMgYW55KS5leGVjdXRlKC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaW5kcyBkaXN0aW5jdCB2YWx1ZXMgb2YgYSBmaWVsZFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBmaWVsZCB0byBnZXQgZGlzdGluY3QgdmFsdWVzIG9mXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBpbmNsdWRpbmcgY29udGV4dFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueVtdPn0gQW4gYXJyYXkgb2YgZGlzdGluY3QgdmFsdWVzXG4gICAqL1xuICBAcHJlcGFyZWQoKVxuICBhc3luYyBkaXN0aW5jdE9mPEsgZXh0ZW5kcyBrZXlvZiBNPihcbiAgICBrZXk6IEssXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxNW0tdW10+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuZGlzdGluY3RPZik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgZmluZGluZyBkaXN0aW5jdCB2YWx1ZXMgb2YgJHtrZXkgYXMgc3RyaW5nfSBpbiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5kaXN0aW5jdChrZXkgYXMgYW55KS5leGVjdXRlKC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHcm91cHMgcmVjb3JkcyBieSBhIGZpZWxkXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgcmVjb3JkcyBncm91cGVkIGJ5IHRoZSBzcGVjaWZpZWQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBmaWVsZCB0byBncm91cCBieVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgaW5jbHVkaW5nIGNvbnRleHRcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBNW10+Pn0gUmVjb3JkcyBncm91cGVkIGJ5IHRoZSBmaWVsZCB2YWx1ZVxuICAgKi9cbiAgQHByZXBhcmVkKClcbiAgYXN5bmMgZ3JvdXBPZjxLIGV4dGVuZHMga2V5b2YgTT4oXG4gICAga2V5OiBLLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgTVtdPj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0YsIHRydWUpXG4gICAgKS5mb3IodGhpcy5ncm91cE9mKTtcbiAgICBsb2cudmVyYm9zZShgZ3JvdXBpbmcgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9IGJ5ICR7a2V5IGFzIHN0cmluZ31gKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKVxuICAgICAgLmdyb3VwQnkoa2V5IGFzIGFueSlcbiAgICAgIC5leGVjdXRlKC4uLmN0eEFyZ3MpIGFzIFByb21pc2U8UmVjb3JkPHN0cmluZywgTVtdPj47XG4gIH1cblxuICBhc3luYyBzdGF0ZW1lbnQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dE9mPEE+Pikge1xuICAgIGlmICghUmVwb3NpdG9yeS5zdGF0ZW1lbnRzKHRoaXMsIG5hbWUgYXMga2V5b2YgdHlwZW9mIHRoaXMpKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYEludmFsaWQgcHJlcGFyZWQgc3RhdGVtZW50IHJlcXVlc3RlZCAke25hbWV9YCk7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFBlcnNpc3RlbmNlS2V5cy5TVEFURU1FTlQsIHRydWUpXG4gICAgKS5mb3IodGhpcy5zdGF0ZW1lbnQpO1xuICAgIGxvZy52ZXJib3NlKGBFeGVjdXRpbmcgcHJlcGFyZWQgc3RhdGVtZW50ICR7bmFtZX1gKTtcbiAgICByZXR1cm4gKHRoaXMgYXMgYW55KVtuYW1lXSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFF1ZXJ5QXR0cmlidXRlcygpOiAoa2V5b2YgTSlbXSB7XG4gICAgY29uc3QgYXR0cnMgPSBNb2RlbC5kZWZhdWx0UXVlcnlBdHRyaWJ1dGVzKHRoaXMuY2xhc3MpO1xuICAgIGlmICghYXR0cnMgfHwgIWF0dHJzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBgTm8gZGVmYXVsdCBxdWVyeSBhdHRyaWJ1dGVzIGRlZmluZWQgZm9yICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIGF0dHJzIGFzIChrZXlvZiBNKVtdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERlZmF1bHRTdGFydHNXaXRoQ29uZGl0aW9uKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgYXR0cnM6IChrZXlvZiBNKVtdXG4gICk6IENvbmRpdGlvbjxNPiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIilcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFwiRGVmYXVsdCBxdWVyeSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgIGxldCBjb25kaXRpb246IENvbmRpdGlvbjxNPiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cnMpIHtcbiAgICAgIGNvbnN0IGF0dHJDb25kaXRpb24gPSB0aGlzLmF0dHIoYXR0cikuc3RhcnRzV2l0aCh2YWx1ZSk7XG4gICAgICBjb25kaXRpb24gPSBjb25kaXRpb24gPyBjb25kaXRpb24ub3IoYXR0ckNvbmRpdGlvbikgOiBhdHRyQ29uZGl0aW9uO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBgTm8gZGVmYXVsdCBxdWVyeSBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBmb3IgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9YFxuICAgICAgKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgYXR0cihwcm9wOiBrZXlvZiBNKSB7XG4gICAgcmV0dXJuIENvbmRpdGlvbi5hdHRyPE0+KHByb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYW4gb2JzZXJ2ZXIgZm9yIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHN1bW1hcnkgQWRkcyBhbiBvYnNlcnZlciB0aGF0IHdpbGwgYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB0byBtb2RlbHMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlciAtIFRoZSBvYnNlcnZlciB0byByZWdpc3Rlci5cbiAgICogQHBhcmFtIHtPYnNlcnZlckZpbHRlcn0gW2ZpbHRlcl0gLSBPcHRpb25hbCBmaWx0ZXIgdG8gbGltaXQgd2hpY2ggZXZlbnRzIHRoZSBvYnNlcnZlciByZWNlaXZlcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQHNlZSB7T2JzZXJ2YWJsZSNvYnNlcnZlfVxuICAgKi9cbiAgQGZpbmFsKClcbiAgb2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIsIGZpbHRlcj86IE9ic2VydmVyRmlsdGVyKTogKCkgPT4gdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVySGFuZGxlcilcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9ic2VydmVySGFuZGxlclwiLCB7XG4gICAgICAgIHZhbHVlOiB0aGlzLk9ic2VydmVySGFuZGxlcigpLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5vYnNlcnZlKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLmNsYXNzLm5hbWU7IC8vIE1vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKTtcblxuICAgIGlmICghdGhpcy5vYnNlcnZlckhhbmRsZXI/LmNvdW50KCkpIHtcbiAgICAgIHRoaXMuYWRhcHRlci5vYnNlcnZlKFxuICAgICAgICB0aGlzLFxuICAgICAgICAoXG4gICAgICAgICAgdGFibGU6IENvbnN0cnVjdG9yIHwgc3RyaW5nLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBldmVudDogc3RyaW5nLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBpZDogRXZlbnRJZHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgIC4uLmFyZ3M6IFsuLi5hbnlbXSwgQ29udGV4dE9mPGFueT5dXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGFibGUgPT09IFwic3RyaW5nXCIpIHJldHVybiB0YWJsZSA9PT0gdGFibGVOYW1lO1xuICAgICAgICAgIHJldHVybiBNZXRhZGF0YS5jb25zdHIodGFibGUpID09PSBNZXRhZGF0YS5jb25zdHIodGhpcy5jbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYG5vdyBvYnNlcnZpbmcgJHt0aGlzLmFkYXB0ZXJ9IGZpbHRlcmluZyBvbiB0YWJsZSA9PT0gJHt0YWJsZU5hbWV9YFxuICAgICk7XG4gICAgdGhpcy5vYnNlcnZlckhhbmRsZXIhLm9ic2VydmUob2JzZXJ2ZXIsIGZpbHRlcik7XG4gICAgbG9nLnZlcmJvc2UoYFJlZ2lzdGVyZWQgbmV3IG9ic2VydmVyICR7b2JzZXJ2ZXIudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy51bk9ic2VydmUob2JzZXJ2ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyBhbiBvYnNlcnZlciBmcm9tIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbiBvYnNlcnZlciBzbyBpdCB3aWxsIG5vIGxvbmdlciByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgb2JzZXJ2ZXIgdG8gdW5yZWdpc3Rlci5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIG9ic2VydmVyIGhhbmRsZXIgaXMgbm90IGluaXRpYWxpemVkLlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIEBmaW5hbCgpXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiT2JzZXJ2ZXJIYW5kbGVyIG5vdCBpbml0aWFsaXplZC4gRGlkIHlvdSByZWdpc3RlciBhbnkgb2JzZXJ2YWJsZXM/XCJcbiAgICAgICk7XG4gICAgdGhpcy5vYnNlcnZlckhhbmRsZXIudW5PYnNlcnZlKG9ic2VydmVyKTtcbiAgICB0aGlzLmxvZ1xuICAgICAgLmZvcih0aGlzLnVuT2JzZXJ2ZSlcbiAgICAgIC52ZXJib3NlKGBPYnNlcnZlciAke29ic2VydmVyLnRvU3RyaW5nKCl9IHJlbW92ZWRgKTtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCkpIHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoXG4gICAgICAgIGBObyBtb3JlIG9ic2VydmVycyByZWdpc3RlcmVkIGZvciAke3RoaXMuYWRhcHRlcn0sIHVuc3Vic2NyaWJpbmdgXG4gICAgICApO1xuICAgICAgdGhpcy5hZGFwdGVyLnVuT2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYE5vIGxvbmdlciBvYnNlcnZpbmcgYWRhcHRlciAke3RoaXMuYWRhcHRlci5mbGF2b3VyfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTm90aWZpZXMgYWxsIG9ic2VydmVycyBvZiBhbiBldmVudC5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyBhbGwgcmVnaXN0ZXJlZCBvYnNlcnZlcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGFiYXNlIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgdGFibGUgbmFtZSB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c3xCdWxrQ3J1ZE9wZXJhdGlvbktleXN8c3RyaW5nfSBldmVudCAtIFRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7RXZlbnRJZHN9IGlkIC0gVGhlIElEIG9yIElEcyBvZiB0aGUgYWZmZWN0ZWQgcmVjb3Jkcy5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBvYnNlcnZlcnMgaGF2ZSBiZWVuIG5vdGlmaWVkLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGUgb2JzZXJ2ZXIgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoXG4gICAgdGFibGU6IENvbnN0cnVjdG9yPE0+IHwgc3RyaW5nLFxuICAgIGV2ZW50OiBBbGxPcGVyYXRpb25LZXlzLFxuICAgIGlkOiBFdmVudElkcyxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5vYnNlcnZlckhhbmRsZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgXCJPYnNlcnZlckhhbmRsZXIgbm90IGluaXRpYWxpemVkLiBEaWQgeW91IHJlZ2lzdGVyIGFueSBvYnNlcnZhYmxlcz9cIlxuICAgICAgKTtcbiAgICBjb25zdCB7IGxvZywgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVPYnNlcnZlcnMpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYFVwZGF0aW5nICR7dGhpcy5vYnNlcnZlckhhbmRsZXIuY291bnQoKX0gb2JzZXJ2ZXJzIGZvciAke3RoaXN9YFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5vYnNlcnZlckhhbmRsZXIudXBkYXRlT2JzZXJ2ZXJzKFxuICAgICAgdGFibGUsXG4gICAgICBldmVudCxcbiAgICAgIEFycmF5LmlzQXJyYXkoaWQpXG4gICAgICAgID8gaWQubWFwKFxuICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgIChBZGFwdGVyW1wiX2Jhc2VTZXF1ZW5jZVwiXSBhcyBhbnkpLnBhcnNlVmFsdWUoXG4gICAgICAgICAgICAgICAgTW9kZWwuc2VxdWVuY2VGb3IodGhpcy5jbGFzcykudHlwZSxcbiAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICAgICkgYXMgc3RyaW5nXG4gICAgICAgICAgKVxuICAgICAgICA6ICgoQWRhcHRlcltcIl9iYXNlU2VxdWVuY2VcIl0gYXMgYW55KS5wYXJzZVZhbHVlKFxuICAgICAgICAgICAgTW9kZWwuc2VxdWVuY2VGb3IodGhpcy5jbGFzcykudHlwZSxcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgKSBhcyBzdHJpbmcpLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFsaWFzIGZvciB1cGRhdGVPYnNlcnZlcnMuXG4gICAqIEBzdW1tYXJ5IE5vdGlmaWVzIGFsbCBvYnNlcnZlcnMgb2YgYW4gZXZlbnQgKGFsaWFzIGZvciB1cGRhdGVPYnNlcnZlcnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgdGFibGUgbmFtZSB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c3xCdWxrQ3J1ZE9wZXJhdGlvbktleXN8c3RyaW5nfSBldmVudCAtIFRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7RXZlbnRJZHN9IGlkIC0gVGhlIElEIG9yIElEcyBvZiB0aGUgYWZmZWN0ZWQgcmVjb3Jkcy5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBvYnNlcnZlcnMgaGF2ZSBiZWVuIG5vdGlmaWVkLlxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaChcbiAgICB0YWJsZTogQ29uc3RydWN0b3I8TT4gfCBzdHJpbmcsXG4gICAgZXZlbnQ6IEFsbE9wZXJhdGlvbktleXMsXG4gICAgaWQ6IEV2ZW50SWRzLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT2JzZXJ2ZXJzKHRhYmxlLCBldmVudCwgaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG9yIHJldHJpZXZlcyBhIHJlcG9zaXRvcnkgZm9yIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IEZhY3RvcnkgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgbW9kZWwuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgdGhhdCBleHRlbmRzIFJlcG88TT4uXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIE9wdGlvbmFsIGRlZmF1bHQgYWRhcHRlciBmbGF2b3VyIGlmIG5vdCBzcGVjaWZpZWQgb24gdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJuIHtSfSBBIHJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIHRoZSBtb2RlbC5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gYWRhcHRlciBpcyByZWdpc3RlcmVkIGZvciB0aGUgZmxhdm91ci5cbiAgICovXG4gIHN0YXRpYyBmb3JNb2RlbDxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgYWxpYXM/OiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUiB7XG4gICAgbGV0IHJlcG86IFIgfCBDb25zdHJ1Y3RvcjxSPiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IF9hbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIGFsaWFzIHx8IE1ldGFkYXRhLmZsYXZvdXJPZihtb2RlbCkgfHwgQWRhcHRlci5jdXJyZW50Rmxhdm91cjtcbiAgICB0cnkge1xuICAgICAgcmVwbyA9IHRoaXMuZ2V0KG1vZGVsLCBfYWxpYXMpIGFzIENvbnN0cnVjdG9yPFI+IHwgUjtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJlcG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwb0NvbnN0cnVjdG9yID1cbiAgICAgIHR5cGVvZiByZXBvID09PSBcImZ1bmN0aW9uXCIgPyAocmVwbyBhcyBDb25zdHJ1Y3RvcjxSPikgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmxhdm91cjogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIGFsaWFzIHx8XG4gICAgICBNZXRhZGF0YS5mbGF2b3VyT2YobW9kZWwpIHx8XG4gICAgICAocmVwb0NvbnN0cnVjdG9yICYmXG4gICAgICAgIE1ldGFkYXRhLmdldChyZXBvQ29uc3RydWN0b3IsIFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSkgfHxcbiAgICAgIEFkYXB0ZXIuY3VycmVudEZsYXZvdXI7XG4gICAgY29uc3QgYWRhcHRlcjogQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+IHwgdW5kZWZpbmVkID0gZmxhdm91clxuICAgICAgPyBBZGFwdGVyLmdldChmbGF2b3VyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWFkYXB0ZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIHJlZ2lzdGVyZWQgcGVyc2lzdGVuY2UgYWRhcHRlciBmb3VuZCBmbGF2b3VyICR7Zmxhdm91cn1gXG4gICAgICApO1xuXG4gICAgaWYgKHJlcG8gaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSByZXR1cm4gcmVwbyBhcyBSO1xuXG4gICAgY29uc3QgcmVnaXN0cnlOYW1lID0gW01vZGVsLnRhYmxlTmFtZShtb2RlbCksIGFkYXB0ZXIuYWxpYXNdLmpvaW4oXG4gICAgICBEZWZhdWx0U2VwYXJhdG9yXG4gICAgKTtcbiAgICBjb25zdCByZXBvQ3RvcjogQ29uc3RydWN0b3I8Uj4gPVxuICAgICAgcmVwb0NvbnN0cnVjdG9yIHx8IChhZGFwdGVyLnJlcG9zaXRvcnkoKSBhcyBDb25zdHJ1Y3RvcjxSPik7XG5cbiAgICBkZWxldGUgdGhpcy5fY2FjaGVbcmVnaXN0cnlOYW1lXTtcbiAgICByZXR1cm4gbmV3IHJlcG9DdG9yKGFkYXB0ZXIsIG1vZGVsLCAuLi5hcmdzKSBhcyBSO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIGZyb20gdGhlIGNhY2hlLlxuICAgKiBAc3VtbWFyeSBHZXRzIGEgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBtb2RlbCBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIFRoZSBhZGFwdGVyIGFsaWFzLlxuICAgKiBAcmV0dXJuIHtDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT59IFRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyByZXBvc2l0b3J5IGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBhbGlhcz86IHN0cmluZ1xuICApOiBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT4ge1xuICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IE1vZGVsLnRhYmxlTmFtZShtb2RlbCk7XG4gICAgbGV0IHJlZ2lzdHJ5TmFtZTogc3RyaW5nID0gbmFtZTtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJlZ2lzdHJ5TmFtZSA9IFtuYW1lLCBhbGlhc10uam9pbihEZWZhdWx0U2VwYXJhdG9yKTtcbiAgICB9XG4gICAgaWYgKHJlZ2lzdHJ5TmFtZSBpbiB0aGlzLl9jYWNoZSlcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtyZWdpc3RyeU5hbWVdIGFzIHVua25vd24gYXNcbiAgICAgICAgfCBDb25zdHJ1Y3RvcjxSZXBvPE0+PlxuICAgICAgICB8IFJlcG88TT47XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY2FjaGUpXG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVbbmFtZV0gYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT47XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgcmVwb3NpdG9yeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgcmVwb3NpdG9yeSBmb3IgYSBtb2RlbC5cbiAgICogQHN1bW1hcnkgQXNzb2NpYXRlcyBhIHJlcG9zaXRvcnkgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCBhIG1vZGVsIGluIHRoZSBpbnRlcm5hbCBjYWNoZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFJlcG88TT4+IHwgUmVwbzxNPn0gcmVwbyAtIFRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSB0aGUgYWRhcHRlciBhbGlhcy9mbGF2b3VyLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBhIHJlcG9zaXRvcnkgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciB0aGUgbW9kZWwuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgcmVwbzogQ29uc3RydWN0b3I8UmVwbzxNPj4gfCBSZXBvPE0+LFxuICAgIGFsaWFzPzogc3RyaW5nLFxuICAgIGZvcmNlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IG5hbWUgPSBNb2RlbC50YWJsZU5hbWUobW9kZWwpO1xuICAgIGlmIChhbGlhcykge1xuICAgICAgbmFtZSA9IFtuYW1lLCBhbGlhc10uam9pbihEZWZhdWx0U2VwYXJhdG9yKTtcbiAgICB9XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY2FjaGUpIHtcbiAgICAgIGlmICh0aGlzLl9jYWNoZVtuYW1lXSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkgJiYgIWZvcmNlKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgJHtuYW1lfSBhbHJlYWR5IGhhcyBhIHJlZ2lzdGVyZWQgaW5zdGFuY2VgKTtcbiAgICB9XG4gICAgdGhpcy5fY2FjaGVbbmFtZV0gPSByZXBvIGFzIGFueTtcbiAgfVxuXG4gIHN0YXRpYyBzdGF0ZW1lbnRzPFIgZXh0ZW5kcyBSZXBvc2l0b3J5PGFueSwgYW55PiwgSyBleHRlbmRzIGtleW9mIFI+KFxuICAgIHJlcG86IENvbnN0cnVjdG9yPFI+IHwgUixcbiAgICBtZXRob2Q/OiBLXG4gICk6IHVuZGVmaW5lZCB8IChLIGV4dGVuZHMga2V5b2YgUiA/IGJvb2xlYW4gOiAoa2V5b2YgUilbXSkge1xuICAgIGNvbnN0IGNvbnRyOiBDb25zdHJ1Y3RvcjxSPiA9XG4gICAgICByZXBvIGluc3RhbmNlb2YgUmVwb3NpdG9yeSA/IChyZXBvLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPFI+KSA6IHJlcG87XG4gICAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldChcbiAgICAgIGNvbnRyLFxuICAgICAgbWV0aG9kXG4gICAgICAgID8gTWV0YWRhdGEua2V5KFBlcnNpc3RlbmNlS2V5cy5TVEFURU1FTlQsIG1ldGhvZCBhcyBzdHJpbmcpXG4gICAgICAgIDogUGVyc2lzdGVuY2VLZXlzLlNUQVRFTUVOVFxuICAgICk7XG4gICAgcmV0dXJuIChtZXRob2QgPyBtZXRhIDogT2JqZWN0LmtleXMobWV0YSkpIHx8IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIHF1ZXJpZXM8UiBleHRlbmRzIFJlcG9zaXRvcnk8YW55LCBhbnk+LCBLIGV4dGVuZHMga2V5b2YgUj4oXG4gICAgcmVwbzogQ29uc3RydWN0b3I8Uj4gfCBSLFxuICAgIG1ldGhvZD86IEtcbiAgKTpcbiAgICB8IHVuZGVmaW5lZFxuICAgIHwgKEsgZXh0ZW5kcyBrZXlvZiBSID8gUXVlcnlPcHRpb25zIDogUmVjb3JkPGtleW9mIFIsIFF1ZXJ5T3B0aW9ucz4pIHtcbiAgICBjb25zdCBjb250cjogQ29uc3RydWN0b3I8Uj4gPVxuICAgICAgcmVwbyBpbnN0YW5jZW9mIFJlcG9zaXRvcnkgPyAocmVwby5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RvcjxSPikgOiByZXBvO1xuICAgIHJldHVybiBNZXRhZGF0YS5nZXQoXG4gICAgICBjb250cixcbiAgICAgIG1ldGhvZFxuICAgICAgICA/IE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuUVVFUlksIG1ldGhvZCBhcyBzdHJpbmcpXG4gICAgICAgIDogUGVyc2lzdGVuY2VLZXlzLlFVRVJZXG4gICAgKTtcbiAgfVxufVxuXG5pZiAoQWRhcHRlcikgQWRhcHRlcltcIl9iYXNlUmVwb3NpdG9yeVwiXSA9IFJlcG9zaXRvcnk7XG4iXX0=
|
|
@@ -38,4 +38,4 @@ export const DefaultCascade = {
|
|
|
38
38
|
update: Cascade.CASCADE,
|
|
39
39
|
delete: Cascade.NONE,
|
|
40
40
|
};
|
|
41
|
-
//# sourceMappingURL=
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBTVg7QUFORCxXQUFZLGNBQWM7SUFDeEIsdUNBQXVDO0lBQ3ZDLDZCQUFXLENBQUE7SUFFWCx3Q0FBd0M7SUFDeEMsOEJBQVksQ0FBQTtBQUNkLENBQUMsRUFOVyxjQUFjLEtBQWQsY0FBYyxRQU16QjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBTixJQUFZLE9BS1g7QUFMRCxXQUFZLE9BQU87SUFDakIsb0RBQW9EO0lBQ3BELDhCQUFtQixDQUFBO0lBQ25CLDJEQUEyRDtJQUMzRCx3QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLE9BQU8sS0FBUCxPQUFPLFFBS2xCO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBb0I7SUFDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0lBQ3ZCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSTtDQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FzY2FkZU1ldGFkYXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bWVyYXRpb24gb2YgcG9zc2libGUgc29ydCBkaXJlY3Rpb25zLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYXZhaWxhYmxlIHNvcnQgZGlyZWN0aW9ucyBmb3Igb3JkZXJpbmcgcXVlcnkgcmVzdWx0cy5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgZW51bSBPcmRlckRpcmVjdGlvbiB7XG4gIC8qKiBBc2NlbmRpbmcgb3JkZXIgKEEgdG8gWiwgMCB0byA5KSAqL1xuICBBU0MgPSBcImFzY1wiLFxuXG4gIC8qKiBEZXNjZW5kaW5nIG9yZGVyIChaIHRvIEEsIDkgdG8gMCkgKi9cbiAgRFNDID0gXCJkZXNjXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW1lcmF0aW9uIG9mIGNhc2NhZGUgb3BlcmF0aW9uIHR5cGVzLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYXZhaWxhYmxlIGNhc2NhZGUgYmVoYXZpb3JzIGZvciBlbnRpdHkgcmVsYXRpb25zaGlwcy5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgZW51bSBDYXNjYWRlIHtcbiAgLyoqIFBlcmZvcm0gY2FzY2FkZSBvcGVyYXRpb24gb24gcmVsYXRlZCBlbnRpdGllcyAqL1xuICBDQVNDQURFID0gXCJjYXNjYWRlXCIsXG4gIC8qKiBEbyBub3QgcGVyZm9ybSBjYXNjYWRlIG9wZXJhdGlvbiBvbiByZWxhdGVkIGVudGl0aWVzICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2hhcGUgb2YgdGhlIGRlZmF1bHQgY2FzY2FkZSBjb25maWd1cmF0aW9uIG9iamVjdCB1c2VkIGluIHJlcG9zaXRvcmllcy5cbiAqIEBzdW1tYXJ5IERvY3VtZW50cyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjYXNjYWRlIGNvbmZpZ3VyYXRpb24gd2l0aCBleHBsaWNpdCB1cGRhdGUgYW5kIGRlbGV0ZSBiZWhhdmlvcnMuXG4gKiBAcHJvcGVydHkgeydjYXNjYWRlJ3wnbm9uZSd9IHVwZGF0ZSAtIERldGVybWluZXMgd2hldGhlciB1cGRhdGVzIGNhc2NhZGUgdG8gcmVsYXRlZCBlbnRpdGllcy5cbiAqIEBwcm9wZXJ0eSB7J2Nhc2NhZGUnfCdub25lJ30gZGVsZXRlIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIGRlbGV0ZXMgY2FzY2FkZSB0byByZWxhdGVkIGVudGl0aWVzLlxuICogQHR5cGVEZWYgRGVmYXVsdENhc2NhZGVDb25maWdcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENhc2NhZGU6IENhc2NhZGVNZXRhZGF0YSA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxufTtcbiJdfQ==
|
|
@@ -41,7 +41,7 @@ export function repository(model, flavour) {
|
|
|
41
41
|
metadata(DBKeys.REPOSITORY, original.name)(model);
|
|
42
42
|
flavour =
|
|
43
43
|
flavour || Metadata.get(original.constructor, PersistenceKeys.ADAPTER);
|
|
44
|
-
Repository.register(model, original
|
|
44
|
+
Repository.register(model, original);
|
|
45
45
|
return injectable(Metadata.constr(model), {
|
|
46
46
|
callback: (instance) => {
|
|
47
47
|
Object.defineProperty(instance, DBKeys.CLASS, {
|
|
@@ -55,4 +55,4 @@ export function repository(model, flavour) {
|
|
|
55
55
|
})(original);
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
|
-
//# sourceMappingURL=
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFlLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsd0JBQXFCO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0NBQWlDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsb0NBQStCO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFFdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBcUIsRUFDckIsT0FBZ0I7SUFFaEIsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMzQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELFFBQVEsQ0FBQyxHQUFHLENBQ1YsTUFBTSxDQUFDLFVBQVUsRUFDakIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZFLFFBQVEsQ0FDVCxDQUFDO1FBRUYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE9BQU87WUFDTCxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxDQUFDLFFBQXdCLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDNUMsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxLQUFLO29CQUNuQixRQUFRLEVBQUUsS0FBSztvQkFDZixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztTQUNGLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBUSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBEQktleXMsIElSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IE1ldGFkYXRhLCBtZXRhZGF0YSwgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBkZWNvcmF0b3IgZm9yIG1vZGVsIGNsYXNzZXMuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGFuZCByZWdpc3RlcnMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIGNsYXNzLiBDYW4gYmUgdXNlZCBhcyBib3RoIGEgcHJvcGVydHkgZGVjb3JhdG9yIGFuZCBhIGNsYXNzIGRlY29yYXRvci5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUPn0gbW9kZWwgLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGF2b3VyXSAtIHRoZSByZXF1aXJlZCBhZGFwdGVyJ3MgZmxhdm91ci9hbGlhcy4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBtb2RlbCBtZXRhZGF0YS4uXG4gKiBAcmV0dXJuIHthbnl9IC0gVGhlIGRlY29yYXRvciBmdW5jdGlvbi5cbiAqIEBmdW5jdGlvbiByZXBvc2l0b3J5XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50IENvZGVcbiAqICAgcGFydGljaXBhbnQgRCBhcyBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgUiBhcyBSZXBvc2l0b3J5XG4gKiAgIHBhcnRpY2lwYW50IE0gYXMgTWV0YWRhdGFcbiAqXG4gKiAgIEMtPj5EOiBBcHBseSBAcmVwb3NpdG9yeShNb2RlbClcbiAqICAgYWx0IFByb3BlcnR5IERlY29yYXRvclxuICogICAgIEQtPj5EOiBDaGVjayBpZiBwcm9wZXJ0eUtleSBleGlzdHNcbiAqICAgICBELT4+K0M6IFJldHVybiBpbmplY3QobmFtZSkgZGVjb3JhdG9yXG4gKiAgIGVsc2UgQ2xhc3MgRGVjb3JhdG9yXG4gKiAgICAgRC0+Pk06IFNldCByZXBvc2l0b3J5IG1ldGFkYXRhIG9uIG1vZGVsXG4gKiAgICAgRC0+PlI6IFJlZ2lzdGVyIG1vZGVsIHdpdGggUmVwb3NpdG9yeVxuICogICAgIEQtPj4rQzogUmV0dXJuIGluamVjdGFibGUgZGVjb3JhdG9yIHdpdGggY29uZmlnXG4gKiAgICAgQy0+PkM6IERlZmluZSBEQktleXMuQ0xBU1MgcHJvcGVydHlcbiAqICAgZW5kXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3NpdG9yeTxUIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogQ29uc3RydWN0b3I8VD4sXG4gIGZsYXZvdXI/OiBzdHJpbmdcbik6IGFueSB7XG4gIHJldHVybiAoKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5S2V5KSB7XG4gICAgICByZXR1cm4gaW5qZWN0KE1ldGFkYXRhLmNvbnN0cihtb2RlbCkpKG9yaWdpbmFsLCBwcm9wZXJ0eUtleSk7XG4gICAgfVxuXG4gICAgTWV0YWRhdGEuc2V0KFxuICAgICAgREJLZXlzLlJFUE9TSVRPUlksXG4gICAgICBNZXRhZGF0YS5rZXkoZmxhdm91ciB8fCBBZGFwdGVyLmN1cnJlbnRGbGF2b3VyLCBNb2RlbC50YWJsZU5hbWUobW9kZWwpKSxcbiAgICAgIG9yaWdpbmFsXG4gICAgKTtcblxuICAgIG1ldGFkYXRhKERCS2V5cy5SRVBPU0lUT1JZLCBvcmlnaW5hbC5uYW1lKShtb2RlbCk7XG4gICAgZmxhdm91ciA9XG4gICAgICBmbGF2b3VyIHx8IE1ldGFkYXRhLmdldChvcmlnaW5hbC5jb25zdHJ1Y3RvciwgUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpO1xuICAgIFJlcG9zaXRvcnkucmVnaXN0ZXIobW9kZWwsIG9yaWdpbmFsKTtcbiAgICByZXR1cm4gaW5qZWN0YWJsZShNZXRhZGF0YS5jb25zdHIobW9kZWwpLCB7XG4gICAgICBjYWxsYmFjazogKGluc3RhbmNlOiBJUmVwb3NpdG9yeTxUPikgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdGFuY2UsIERCS2V5cy5DTEFTUywge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBtb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgIH0sXG4gICAgfSkob3JpZ2luYWwpO1xuICB9KSBhcyBhbnk7XG59XG4iXX0=
|
|
@@ -19,4 +19,4 @@ export class ObserverError extends InternalError {
|
|
|
19
19
|
super(msg, ObserverError.name, 500);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBYTtJQUM5QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVycm9yIHRocm93biB3aGVuIG9ic2VydmVyIGNvbW11bmljYXRpb24gZmFpbHMuXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgZmFpbHVyZSBpbiBvYnNlcnZlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcmVwb3NpdG9yaWVzLlxuICogQHBhcmFtIHtzdHJpbmd8RXJyb3J9IG1zZyAtIFRoZSBlcnJvciBtZXNzYWdlIG9yIEVycm9yIG9iamVjdC5cbiAqIEBjbGFzcyBPYnNlcnZlckVycm9yXG4gKiBAY2F0ZWdvcnkgRXJyb3JzXG4gKiBAZXhhbXBsZVxuICogdHJ5IHtcbiAqICAgLy8gU29tZSByZXBvc2l0b3J5IG9ic2VydmVyIG9wZXJhdGlvblxuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgT2JzZXJ2ZXJFcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoJ09ic2VydmVyIGNvbW11bmljYXRpb24gZmFpbGVkOicsIGVycm9yLm1lc3NhZ2UpO1xuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZlckVycm9yIGV4dGVuZHMgSW50ZXJuYWxFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihtc2csIE9ic2VydmVyRXJyb3IubmFtZSwgNTAwKTtcbiAgfVxufVxuIl19
|
|
@@ -10,4 +10,4 @@ export * from "./injectables.js";
|
|
|
10
10
|
export * from "./Repository.js";
|
|
11
11
|
export * from "./types.js";
|
|
12
12
|
export * from "./utils.js";
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsK0JBQTRCO0FBQzVCLGdDQUE2QjtBQUM3Qiw0QkFBeUI7QUFDekIsaUNBQThCO0FBQzlCLGdDQUE2QjtBQUM3QiwyQkFBd0I7QUFDeEIsMkJBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhwb3J0cyBmb3IgdGhlIHJlcG9zaXRvcnkgbW9kdWxlLlxuICogQHN1bW1hcnkgVGhpcyBmaWxlIGV4cG9ydHMgYWxsIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhlIHJlcG9zaXRvcnkgZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIGNvbnN0YW50cywgZGVjb3JhdG9ycywgYW5kIG1vcmUuXG4gKiBAbW9kdWxlIGNvcmUvcmVwb3NpdG9yeVxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW5qZWN0YWJsZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1JlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
|