@decaf-ts/core 0.8.85 → 0.9.1-9.tasks
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/core.cjs +6705 -2
- package/dist/core.js +6932 -2
- package/lib/auth/constants.cjs +1 -1
- package/lib/auth/decorators.cjs +1 -1
- package/lib/auth/index.cjs +1 -1
- package/lib/esm/auth/constants.js +1 -1
- package/lib/esm/auth/decorators.js +1 -1
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/esm/fs/FilesystemAdapter.js +3 -2
- package/lib/esm/fs/FsDispatch.js +1 -1
- package/lib/esm/fs/helpers.js +1 -1
- package/lib/esm/fs/index.js +1 -1
- package/lib/esm/fs/indexStore.js +1 -1
- package/lib/esm/fs/locks/FilesystemLock.js +1 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
- package/lib/esm/fs/types.d.ts +6 -0
- package/lib/esm/fs/types.js +1 -1
- package/lib/esm/identity/decorators.js +1 -1
- package/lib/esm/identity/index.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
- package/lib/esm/interfaces/ErrorParser.js +1 -1
- package/lib/esm/interfaces/Executor.js +1 -1
- package/lib/esm/interfaces/Observable.js +1 -1
- package/lib/esm/interfaces/Observer.js +1 -1
- package/lib/esm/interfaces/Paginatable.js +1 -1
- package/lib/esm/interfaces/Queriable.js +1 -1
- package/lib/esm/interfaces/RawExecutor.js +1 -1
- package/lib/esm/interfaces/SequenceOptions.js +1 -1
- package/lib/esm/interfaces/index.js +1 -1
- package/lib/esm/migrations/Migration.js +1 -1
- package/lib/esm/migrations/MigrationService.js +1 -1
- package/lib/esm/migrations/MigrationTasks.js +1 -1
- package/lib/esm/migrations/constants.js +1 -1
- package/lib/esm/migrations/decorators.js +1 -1
- package/lib/esm/migrations/index.js +1 -1
- package/lib/esm/migrations/types.js +1 -1
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/model/SequenceModel.js +1 -1
- package/lib/esm/model/construction.d.ts +1 -1
- package/lib/esm/model/construction.js +25 -3
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/index.js +1 -1
- package/lib/esm/model/indexing.js +1 -1
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/overrides/Metadata.js +1 -1
- package/lib/esm/overrides/Model.js +1 -1
- package/lib/esm/overrides/ModelBuilder.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/injectables.js +1 -1
- package/lib/esm/overrides/overrides.js +29 -1
- package/lib/esm/persistence/Adapter.js +14 -2
- package/lib/esm/persistence/Context.js +1 -1
- package/lib/esm/persistence/ContextLock.js +1 -1
- package/lib/esm/persistence/Dispatch.d.ts +7 -0
- package/lib/esm/persistence/Dispatch.js +20 -3
- package/lib/esm/persistence/ObserverHandler.js +1 -1
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/constants.js +2 -1
- package/lib/esm/persistence/decorators.js +1 -1
- package/lib/esm/persistence/errors.js +1 -1
- package/lib/esm/persistence/event-filters.js +1 -1
- package/lib/esm/persistence/generators.js +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/transactions.js +1 -1
- package/lib/esm/persistence/types.d.ts +1 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/query/Condition.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/Paginator.js +1 -1
- package/lib/esm/query/Statement.js +1 -1
- package/lib/esm/query/constants.js +1 -1
- package/lib/esm/query/decorators.js +1 -1
- package/lib/esm/query/errors.js +1 -1
- package/lib/esm/query/index.js +1 -1
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/query/selectors.js +1 -1
- package/lib/esm/query/types.js +1 -1
- package/lib/esm/query/utils.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamStatement.js +1 -1
- package/lib/esm/ram/constants.js +1 -1
- package/lib/esm/ram/handlers.js +1 -1
- package/lib/esm/ram/index.js +1 -1
- package/lib/esm/ram/types.js +1 -1
- package/lib/esm/repository/Repository.d.ts +2 -2
- package/lib/esm/repository/Repository.js +19 -16
- package/lib/esm/repository/constants.js +1 -1
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/errors.js +1 -1
- package/lib/esm/repository/index.js +1 -1
- package/lib/esm/repository/injectables.js +4 -2
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.js +1 -1
- package/lib/esm/services/ModelService.d.ts +4 -5
- package/lib/esm/services/ModelService.js +4 -2
- package/lib/esm/services/PersistenceService.js +1 -1
- package/lib/esm/services/index.js +1 -1
- package/lib/esm/services/services.js +1 -1
- package/lib/esm/tasks/CleanUpTask.js +1 -1
- package/lib/esm/tasks/TaskContext.d.ts +3 -1
- package/lib/esm/tasks/TaskContext.js +9 -2
- package/lib/esm/tasks/TaskEngine.d.ts +2 -0
- package/lib/esm/tasks/TaskEngine.js +84 -20
- package/lib/esm/tasks/TaskErrors.js +1 -1
- package/lib/esm/tasks/TaskEventBus.js +1 -1
- package/lib/esm/tasks/TaskEventService.d.ts +7 -0
- package/lib/esm/tasks/TaskEventService.js +16 -0
- package/lib/esm/tasks/TaskHandler.js +1 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
- package/lib/esm/tasks/TaskService.d.ts +5 -1
- package/lib/esm/tasks/TaskService.js +11 -37
- package/lib/esm/tasks/TaskStateChangeError.js +1 -1
- package/lib/esm/tasks/TaskTracker.js +1 -1
- package/lib/esm/tasks/builder.js +1 -1
- package/lib/esm/tasks/constants.js +1 -1
- package/lib/esm/tasks/decorators.js +1 -1
- package/lib/esm/tasks/index.d.ts +1 -0
- package/lib/esm/tasks/index.js +2 -1
- package/lib/esm/tasks/logging.js +4 -7
- package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
- package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
- package/lib/esm/tasks/models/TaskEventModel.js +1 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
- package/lib/esm/tasks/models/TaskModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
- package/lib/esm/tasks/models/index.js +1 -1
- package/lib/esm/tasks/types.d.ts +8 -3
- package/lib/esm/tasks/types.js +1 -1
- package/lib/esm/tasks/utils.js +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +1 -1
- package/lib/esm/utils/decorators.js +1 -1
- package/lib/esm/utils/errors.js +1 -1
- package/lib/esm/utils/index.js +1 -1
- package/lib/esm/utils/throttling.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.d.ts +2 -1
- package/lib/esm/utils/utils.js +23 -6
- package/lib/esm/workers/TaskEngine.js +15 -4
- package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
- package/lib/esm/workers/index.js +1 -1
- package/lib/esm/workers/messages.js +1 -1
- package/lib/esm/workers/types.js +1 -1
- package/lib/esm/workers/workerThread.js +36 -8
- package/lib/fs/FilesystemAdapter.cjs +3 -2
- package/lib/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/fs/FsDispatch.cjs +1 -1
- package/lib/fs/helpers.cjs +1 -1
- package/lib/fs/index.cjs +1 -1
- package/lib/fs/indexStore.cjs +1 -1
- package/lib/fs/locks/FilesystemLock.cjs +1 -1
- package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
- package/lib/fs/types.cjs +1 -1
- package/lib/fs/types.d.ts +6 -0
- package/lib/identity/decorators.cjs +1 -1
- package/lib/identity/index.cjs +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.cjs +1 -1
- package/lib/interfaces/ErrorParser.cjs +1 -1
- package/lib/interfaces/Executor.cjs +1 -1
- package/lib/interfaces/Observable.cjs +1 -1
- package/lib/interfaces/Observer.cjs +1 -1
- package/lib/interfaces/Paginatable.cjs +1 -1
- package/lib/interfaces/Queriable.cjs +1 -1
- package/lib/interfaces/RawExecutor.cjs +1 -1
- package/lib/interfaces/SequenceOptions.cjs +1 -1
- package/lib/interfaces/index.cjs +1 -1
- package/lib/migrations/Migration.cjs +1 -1
- package/lib/migrations/MigrationService.cjs +1 -1
- package/lib/migrations/MigrationTasks.cjs +1 -1
- package/lib/migrations/constants.cjs +1 -1
- package/lib/migrations/decorators.cjs +1 -1
- package/lib/migrations/index.cjs +1 -1
- package/lib/migrations/types.cjs +1 -1
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/model/SequenceModel.cjs +1 -1
- package/lib/model/construction.cjs +25 -3
- package/lib/model/construction.d.ts +1 -1
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/index.cjs +1 -1
- package/lib/model/indexing.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/overrides/Metadata.cjs +1 -1
- package/lib/overrides/Model.cjs +1 -1
- package/lib/overrides/ModelBuilder.cjs +1 -1
- package/lib/overrides/index.cjs +1 -1
- package/lib/overrides/injectables.cjs +1 -1
- package/lib/overrides/overrides.cjs +29 -1
- package/lib/persistence/Adapter.cjs +14 -2
- package/lib/persistence/Context.cjs +1 -1
- package/lib/persistence/ContextLock.cjs +1 -1
- package/lib/persistence/Dispatch.cjs +20 -3
- package/lib/persistence/Dispatch.d.ts +7 -0
- package/lib/persistence/ObserverHandler.cjs +1 -1
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/constants.cjs +2 -1
- package/lib/persistence/decorators.cjs +1 -1
- package/lib/persistence/errors.cjs +1 -1
- package/lib/persistence/event-filters.cjs +1 -1
- package/lib/persistence/generators.cjs +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/transactions.cjs +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +1 -0
- package/lib/query/Condition.cjs +1 -1
- package/lib/query/MethodQueryBuilder.cjs +1 -1
- package/lib/query/Paginator.cjs +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/constants.cjs +1 -1
- package/lib/query/decorators.cjs +1 -1
- package/lib/query/errors.cjs +1 -1
- package/lib/query/index.cjs +1 -1
- package/lib/query/options.cjs +1 -1
- package/lib/query/selectors.cjs +1 -1
- package/lib/query/types.cjs +1 -1
- package/lib/query/utils.cjs +1 -1
- package/lib/ram/RamAdapter.cjs +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamStatement.cjs +1 -1
- package/lib/ram/constants.cjs +1 -1
- package/lib/ram/handlers.cjs +1 -1
- package/lib/ram/index.cjs +1 -1
- package/lib/ram/types.cjs +1 -1
- package/lib/repository/Repository.cjs +19 -16
- package/lib/repository/Repository.d.ts +2 -2
- package/lib/repository/constants.cjs +1 -1
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/errors.cjs +1 -1
- package/lib/repository/index.cjs +1 -1
- package/lib/repository/injectables.cjs +4 -2
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/utils.cjs +1 -1
- package/lib/services/ModelService.cjs +4 -2
- package/lib/services/ModelService.d.ts +4 -5
- package/lib/services/PersistenceService.cjs +1 -1
- package/lib/services/index.cjs +1 -1
- package/lib/services/services.cjs +1 -1
- package/lib/tasks/CleanUpTask.cjs +1 -1
- package/lib/tasks/TaskContext.cjs +9 -2
- package/lib/tasks/TaskContext.d.ts +3 -1
- package/lib/tasks/TaskEngine.cjs +84 -20
- package/lib/tasks/TaskEngine.d.ts +2 -0
- package/lib/tasks/TaskErrors.cjs +1 -1
- package/lib/tasks/TaskEventBus.cjs +1 -1
- package/lib/tasks/TaskEventService.cjs +20 -0
- package/lib/tasks/TaskEventService.d.ts +7 -0
- package/lib/tasks/TaskHandler.cjs +1 -1
- package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
- package/lib/tasks/TaskService.cjs +10 -36
- package/lib/tasks/TaskService.d.ts +5 -1
- package/lib/tasks/TaskStateChangeError.cjs +1 -1
- package/lib/tasks/TaskTracker.cjs +1 -1
- package/lib/tasks/builder.cjs +1 -1
- package/lib/tasks/constants.cjs +1 -1
- package/lib/tasks/decorators.cjs +1 -1
- package/lib/tasks/index.cjs +2 -1
- package/lib/tasks/index.d.ts +1 -0
- package/lib/tasks/logging.cjs +4 -7
- package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
- package/lib/tasks/models/TaskErrorModel.cjs +1 -1
- package/lib/tasks/models/TaskEventModel.cjs +1 -1
- package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
- package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
- package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/tasks/models/TaskModel.cjs +1 -1
- package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
- package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
- package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/tasks/models/index.cjs +1 -1
- package/lib/tasks/types.cjs +1 -1
- package/lib/tasks/types.d.ts +8 -3
- package/lib/tasks/utils.cjs +1 -1
- package/lib/utils/ContextualLoggedClass.cjs +1 -1
- package/lib/utils/decorators.cjs +1 -1
- package/lib/utils/errors.cjs +1 -1
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/throttling.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +22 -5
- package/lib/utils/utils.d.ts +2 -1
- package/lib/workers/TaskEngine.cjs +15 -4
- package/lib/workers/WorkThreadEnvironment.cjs +1 -1
- package/lib/workers/index.cjs +1 -1
- package/lib/workers/messages.cjs +1 -1
- package/lib/workers/types.cjs +1 -1
- package/lib/workers/workerThread.cjs +35 -7
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/lib/auth/constants.js.map +0 -1
- package/lib/auth/decorators.js.map +0 -1
- package/lib/auth/index.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
- package/lib/esm/fs/FsDispatch.js.map +0 -1
- package/lib/esm/fs/helpers.js.map +0 -1
- package/lib/esm/fs/index.js.map +0 -1
- package/lib/esm/fs/indexStore.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/esm/fs/types.js.map +0 -1
- package/lib/esm/identity/decorators.js.map +0 -1
- package/lib/esm/identity/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/esm/interfaces/ErrorParser.js.map +0 -1
- package/lib/esm/interfaces/Executor.js.map +0 -1
- package/lib/esm/interfaces/Observable.js.map +0 -1
- package/lib/esm/interfaces/Observer.js.map +0 -1
- package/lib/esm/interfaces/Paginatable.js.map +0 -1
- package/lib/esm/interfaces/Queriable.js.map +0 -1
- package/lib/esm/interfaces/RawExecutor.js.map +0 -1
- package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
- package/lib/esm/interfaces/index.js.map +0 -1
- package/lib/esm/migrations/Migration.js.map +0 -1
- package/lib/esm/migrations/MigrationService.js.map +0 -1
- package/lib/esm/migrations/MigrationTasks.js.map +0 -1
- package/lib/esm/migrations/constants.js.map +0 -1
- package/lib/esm/migrations/decorators.js.map +0 -1
- package/lib/esm/migrations/index.js.map +0 -1
- package/lib/esm/migrations/types.js.map +0 -1
- package/lib/esm/model/BaseModel.js.map +0 -1
- package/lib/esm/model/SequenceModel.js.map +0 -1
- package/lib/esm/model/construction.js.map +0 -1
- package/lib/esm/model/decorators.js.map +0 -1
- package/lib/esm/model/index.js.map +0 -1
- package/lib/esm/model/indexing.js.map +0 -1
- package/lib/esm/model/types.js.map +0 -1
- package/lib/esm/overrides/Metadata.js.map +0 -1
- package/lib/esm/overrides/Model.js.map +0 -1
- package/lib/esm/overrides/ModelBuilder.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/injectables.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/persistence/Adapter.js.map +0 -1
- package/lib/esm/persistence/Context.js.map +0 -1
- package/lib/esm/persistence/ContextLock.js.map +0 -1
- package/lib/esm/persistence/Dispatch.js.map +0 -1
- package/lib/esm/persistence/ObserverHandler.js.map +0 -1
- package/lib/esm/persistence/Sequence.js.map +0 -1
- package/lib/esm/persistence/constants.js.map +0 -1
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/esm/persistence/errors.js.map +0 -1
- package/lib/esm/persistence/event-filters.js.map +0 -1
- package/lib/esm/persistence/generators.js.map +0 -1
- package/lib/esm/persistence/index.js.map +0 -1
- package/lib/esm/persistence/transactions.js.map +0 -1
- package/lib/esm/persistence/types.js.map +0 -1
- package/lib/esm/query/Condition.js.map +0 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
- package/lib/esm/query/Paginator.js.map +0 -1
- package/lib/esm/query/Statement.js.map +0 -1
- package/lib/esm/query/constants.js.map +0 -1
- package/lib/esm/query/decorators.js.map +0 -1
- package/lib/esm/query/errors.js.map +0 -1
- package/lib/esm/query/index.js.map +0 -1
- package/lib/esm/query/options.js.map +0 -1
- package/lib/esm/query/selectors.js.map +0 -1
- package/lib/esm/query/types.js.map +0 -1
- package/lib/esm/query/utils.js.map +0 -1
- package/lib/esm/ram/RamAdapter.js.map +0 -1
- package/lib/esm/ram/RamPaginator.js.map +0 -1
- package/lib/esm/ram/RamStatement.js.map +0 -1
- package/lib/esm/ram/constants.js.map +0 -1
- package/lib/esm/ram/handlers.js.map +0 -1
- package/lib/esm/ram/index.js.map +0 -1
- package/lib/esm/ram/types.js.map +0 -1
- package/lib/esm/repository/Repository.js.map +0 -1
- package/lib/esm/repository/constants.js.map +0 -1
- package/lib/esm/repository/decorators.js.map +0 -1
- package/lib/esm/repository/errors.js.map +0 -1
- package/lib/esm/repository/index.js.map +0 -1
- package/lib/esm/repository/injectables.js.map +0 -1
- package/lib/esm/repository/types.js.map +0 -1
- package/lib/esm/repository/utils.js.map +0 -1
- package/lib/esm/services/ModelService.js.map +0 -1
- package/lib/esm/services/PersistenceService.js.map +0 -1
- package/lib/esm/services/index.js.map +0 -1
- package/lib/esm/services/services.js.map +0 -1
- package/lib/esm/tasks/CleanUpTask.js.map +0 -1
- package/lib/esm/tasks/TaskContext.js.map +0 -1
- package/lib/esm/tasks/TaskEngine.js.map +0 -1
- package/lib/esm/tasks/TaskErrors.js.map +0 -1
- package/lib/esm/tasks/TaskEventBus.js.map +0 -1
- package/lib/esm/tasks/TaskHandler.js.map +0 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/esm/tasks/TaskService.js.map +0 -1
- package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/esm/tasks/TaskTracker.js.map +0 -1
- package/lib/esm/tasks/builder.js.map +0 -1
- package/lib/esm/tasks/constants.js.map +0 -1
- package/lib/esm/tasks/decorators.js.map +0 -1
- package/lib/esm/tasks/index.js.map +0 -1
- package/lib/esm/tasks/logging.js.map +0 -1
- package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/esm/tasks/models/index.js.map +0 -1
- package/lib/esm/tasks/types.js.map +0 -1
- package/lib/esm/tasks/utils.js.map +0 -1
- package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/esm/utils/errors.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/throttling.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/workers/TaskEngine.js.map +0 -1
- package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/esm/workers/index.js.map +0 -1
- package/lib/esm/workers/messages.js.map +0 -1
- package/lib/esm/workers/types.js.map +0 -1
- package/lib/esm/workers/workerThread.js.map +0 -1
- package/lib/fs/FilesystemAdapter.js.map +0 -1
- package/lib/fs/FsDispatch.js.map +0 -1
- package/lib/fs/helpers.js.map +0 -1
- package/lib/fs/index.js.map +0 -1
- package/lib/fs/indexStore.js.map +0 -1
- package/lib/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/fs/types.js.map +0 -1
- package/lib/identity/decorators.js.map +0 -1
- package/lib/identity/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/interfaces/ErrorParser.js.map +0 -1
- package/lib/interfaces/Executor.js.map +0 -1
- package/lib/interfaces/Observable.js.map +0 -1
- package/lib/interfaces/Observer.js.map +0 -1
- package/lib/interfaces/Paginatable.js.map +0 -1
- package/lib/interfaces/Queriable.js.map +0 -1
- package/lib/interfaces/RawExecutor.js.map +0 -1
- package/lib/interfaces/SequenceOptions.js.map +0 -1
- package/lib/interfaces/index.js.map +0 -1
- package/lib/migrations/Migration.js.map +0 -1
- package/lib/migrations/MigrationService.js.map +0 -1
- package/lib/migrations/MigrationTasks.js.map +0 -1
- package/lib/migrations/constants.js.map +0 -1
- package/lib/migrations/decorators.js.map +0 -1
- package/lib/migrations/index.js.map +0 -1
- package/lib/migrations/types.js.map +0 -1
- package/lib/model/BaseModel.js.map +0 -1
- package/lib/model/SequenceModel.js.map +0 -1
- package/lib/model/construction.js.map +0 -1
- package/lib/model/decorators.js.map +0 -1
- package/lib/model/index.js.map +0 -1
- package/lib/model/indexing.js.map +0 -1
- package/lib/model/types.js.map +0 -1
- package/lib/overrides/Metadata.js.map +0 -1
- package/lib/overrides/Model.js.map +0 -1
- package/lib/overrides/ModelBuilder.js.map +0 -1
- package/lib/overrides/index.js.map +0 -1
- package/lib/overrides/injectables.js.map +0 -1
- package/lib/overrides/overrides.js.map +0 -1
- package/lib/persistence/Adapter.js.map +0 -1
- package/lib/persistence/Context.js.map +0 -1
- package/lib/persistence/ContextLock.js.map +0 -1
- package/lib/persistence/Dispatch.js.map +0 -1
- package/lib/persistence/ObserverHandler.js.map +0 -1
- package/lib/persistence/Sequence.js.map +0 -1
- package/lib/persistence/constants.js.map +0 -1
- package/lib/persistence/decorators.js.map +0 -1
- package/lib/persistence/errors.js.map +0 -1
- package/lib/persistence/event-filters.js.map +0 -1
- package/lib/persistence/generators.js.map +0 -1
- package/lib/persistence/index.js.map +0 -1
- package/lib/persistence/transactions.js.map +0 -1
- package/lib/persistence/types.js.map +0 -1
- package/lib/query/Condition.js.map +0 -1
- package/lib/query/MethodQueryBuilder.js.map +0 -1
- package/lib/query/Paginator.js.map +0 -1
- package/lib/query/Statement.js.map +0 -1
- package/lib/query/constants.js.map +0 -1
- package/lib/query/decorators.js.map +0 -1
- package/lib/query/errors.js.map +0 -1
- package/lib/query/index.js.map +0 -1
- package/lib/query/options.js.map +0 -1
- package/lib/query/selectors.js.map +0 -1
- package/lib/query/types.js.map +0 -1
- package/lib/query/utils.js.map +0 -1
- package/lib/ram/RamAdapter.js.map +0 -1
- package/lib/ram/RamPaginator.js.map +0 -1
- package/lib/ram/RamStatement.js.map +0 -1
- package/lib/ram/constants.js.map +0 -1
- package/lib/ram/handlers.js.map +0 -1
- package/lib/ram/index.js.map +0 -1
- package/lib/ram/types.js.map +0 -1
- package/lib/repository/Repository.js.map +0 -1
- package/lib/repository/constants.js.map +0 -1
- package/lib/repository/decorators.js.map +0 -1
- package/lib/repository/errors.js.map +0 -1
- package/lib/repository/index.js.map +0 -1
- package/lib/repository/injectables.js.map +0 -1
- package/lib/repository/types.js.map +0 -1
- package/lib/repository/utils.js.map +0 -1
- package/lib/services/ModelService.js.map +0 -1
- package/lib/services/PersistenceService.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/services/services.js.map +0 -1
- package/lib/tasks/CleanUpTask.js.map +0 -1
- package/lib/tasks/TaskContext.js.map +0 -1
- package/lib/tasks/TaskEngine.js.map +0 -1
- package/lib/tasks/TaskErrors.js.map +0 -1
- package/lib/tasks/TaskEventBus.js.map +0 -1
- package/lib/tasks/TaskHandler.js.map +0 -1
- package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/tasks/TaskService.js.map +0 -1
- package/lib/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/tasks/TaskTracker.js.map +0 -1
- package/lib/tasks/builder.js.map +0 -1
- package/lib/tasks/constants.js.map +0 -1
- package/lib/tasks/decorators.js.map +0 -1
- package/lib/tasks/index.js.map +0 -1
- package/lib/tasks/logging.js.map +0 -1
- package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/tasks/models/TaskModel.js.map +0 -1
- package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/tasks/models/index.js.map +0 -1
- package/lib/tasks/types.js.map +0 -1
- package/lib/tasks/utils.js.map +0 -1
- package/lib/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/utils/decorators.js.map +0 -1
- package/lib/utils/errors.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/throttling.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/workers/TaskEngine.js.map +0 -1
- package/lib/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/workers/index.js.map +0 -1
- package/lib/workers/messages.js.map +0 -1
- package/lib/workers/types.js.map +0 -1
- package/lib/workers/workerThread.js.map +0 -1
package/lib/ram/RamStatement.cjs
CHANGED
|
@@ -340,4 +340,4 @@ class RamStatement extends Statement_1.Statement {
|
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
exports.RamStatement = RamStatement;
|
|
343
|
-
//# sourceMappingURL=RamStatement.js.map
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9SYW1TdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTBFO0FBSTFFLDJEQUF3RDtBQUN4RCx3REFBK0M7QUFHL0MsNkRBQXlEO0FBQ3pELHFEQUE2RDtBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFhLFlBSVgsU0FBUSxxQkFBb0M7SUFDNUMsWUFBWSxPQUFVLEVBQUUsU0FBaUM7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxPQUFPO1FBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxHQUFVLEVBQUUsR0FBVSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO2dCQUNqQyxNQUFNLElBQUksNkJBQWEsQ0FDckIsZ0RBQWdELENBQ2pELENBQUM7WUFDSixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLGVBQWUsR0FDbkIsbUJBQW1CLEtBQUssMEJBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFrQixDQUFDLENBQUM7Z0JBQ25FLElBQUksVUFBVSxLQUFLLENBQUM7b0JBQUUsT0FBTyxlQUFlLEdBQUcsVUFBVSxDQUFDO1lBQzVELENB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QU0sSUFBSSxrQkFBVSxDQUNsQixHQUFHLE9BQU8sdUJBQXVCLFFBQVEsd0JBQXdCLENBQ2xFLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLGtCQUFVLENBQ2xCLEdBQUcsT0FBTywwQkFBMEIsUUFBUSwwQkFBMEIsQ0FDdkUsQ0FBQztnQkFDSixDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLElBQUksa0JBQVUsQ0FDbEIsR0FBRyxPQUFPLHlCQUF5QixRQUFRLDJCQUEyQixDQUN2RSxDQUFDO1lBQ0o7Z0JBQ0UsTUFBTSxJQUFJLGtCQUFVLENBQ2xCLEdBQUcsT0FBTyxzQkFBc0IsUUFBUSxvQkFBb0IsUUFBUSxHQUFHLENBQ3hFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM2JELG9DQTJiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmRpdGlvbiwgR3JvdXBPcGVyYXRvciwgT3BlcmF0b3IsIFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IFNlbGVjdFNlbGVjdG9yIH0gZnJvbSBcIi4uL3F1ZXJ5L3NlbGVjdG9yc1wiO1xuaW1wb3J0IHsgUmFtQ29udGV4dCwgUmF3UmFtUXVlcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcXVlcnkvU3RhdGVtZW50XCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IEFkYXB0ZXJGbGFncyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24gfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSQU0tc3BlY2lmaWMgcXVlcnkgc3RhdGVtZW50IGJ1aWxkZXJcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgU3RhdGVtZW50IGNsYXNzIHRvIHByb3ZpZGUgcXVlcnkgYnVpbGRpbmcgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIFJBTSBhZGFwdGVyLlxuICogVGhpcyBjbGFzcyB0cmFuc2xhdGVzIGhpZ2gtbGV2ZWwgcXVlcnkgb3BlcmF0aW9ucyBpbnRvIHByZWRpY2F0ZXMgdGhhdCBjYW4gZmlsdGVyIGFuZCBzb3J0XG4gKiBpbi1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBiZWluZyBxdWVyaWVkXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZSByZXR1cm5lZCBieSB0aGUgcXVlcnlcbiAqIEBwYXJhbSB7UmFtQWRhcHRlcn0gYWRhcHRlciAtIFRoZSBSQU0gYWRhcHRlciBpbnN0YW5jZSB0byB1c2UgZm9yIGV4ZWN1dGluZyBxdWVyaWVzXG4gKiBAY2xhc3MgUmFtU3RhdGVtZW50XG4gKiBAY2F0ZWdvcnkgUmFtXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgc3RhdGVtZW50IGZvciBxdWVyeWluZyBVc2VyIG1vZGVsc1xuICogY29uc3Qgc3RhdGVtZW50ID0gbmV3IFJhbVN0YXRlbWVudDxVc2VyLCBVc2VyPihyYW1BZGFwdGVyKTtcbiAqXG4gKiAvLyBCdWlsZCBhIHF1ZXJ5IHRvIGZpbmQgYWN0aXZlIHVzZXJzIHdpdGggYWdlID4gMThcbiAqIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBzdGF0ZW1lbnRcbiAqICAgLmZyb20oVXNlcilcbiAqICAgLndoZXJlKENvbmRpdGlvbi5hbmQoXG4gKiAgICAgQ29uZGl0aW9uLmVxKCdhY3RpdmUnLCB0cnVlKSxcbiAqICAgICBDb25kaXRpb24uZ3QoJ2FnZScsIDE4KVxuICogICApKVxuICogICAub3JkZXJCeSgnbGFzdE5hbWUnLCAnYXNjJylcbiAqICAgLmxpbWl0KDEwKVxuICogICAuZXhlY3V0ZSgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW1TdGF0ZW1lbnQ8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUixcbiAgQSBleHRlbmRzIEFkYXB0ZXI8TSwgYW55LCBSYXdSYW1RdWVyeTxhbnk+LCBSYW1Db250ZXh0Pixcbj4gZXh0ZW5kcyBTdGF0ZW1lbnQ8TSwgQSwgUiwgUmF3UmFtUXVlcnk8YW55Pj4ge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBBLCBvdmVycmlkZXM/OiBQYXJ0aWFsPEFkYXB0ZXJGbGFncz4pIHtcbiAgICBzdXBlcihhZGFwdGVyLCBvdmVycmlkZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc29ydCBjb21wYXJhdG9yIGZ1bmN0aW9uXG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY29tcGFyZXMgdHdvIG1vZGVsIGluc3RhbmNlcyBiYXNlZCBvbiB0aGUgb3JkZXJCeSBjcml0ZXJpYS5cbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBkaWZmZXJlbnQgZGF0YSB0eXBlcyAoc3RyaW5nLCBudW1iZXIsIGRhdGUpIGFuZCBzb3J0IGRpcmVjdGlvbnMgKGFzYywgZGVzYykuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uKE1vZGVsLCBNb2RlbCk6IG51bWJlcn0gQSBjb21wYXJhdG9yIGZ1bmN0aW9uIGZvciBzb3J0aW5nIG1vZGVsIGluc3RhbmNlc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb3J0KCkge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMub3JkZXJCeVNlbGVjdG9ycztcbiAgICByZXR1cm4gKGVsMTogTW9kZWwsIGVsMjogTW9kZWwpID0+IHtcbiAgICAgIGlmICghc2VsZWN0b3JzIHx8ICFzZWxlY3RvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBcIm9yZGVyQnlTZWxlY3RvcnMgbm90IHNldC4gU2hvdWxkIGJlIGltcG9zc2libGVcIlxuICAgICAgICApO1xuICAgICAgZm9yIChjb25zdCBba2V5LCBkaXJlY3Rpb25dIG9mIHNlbGVjdG9ycykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRGlyZWN0aW9uID0gU3RyaW5nKGRpcmVjdGlvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uRmFjdG9yID1cbiAgICAgICAgICBub3JtYWxpemVkRGlyZWN0aW9uID09PSBPcmRlckRpcmVjdGlvbi5BU0MgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGNvbXBhcmlzb24gPSB0aGlzLmNvbXBhcmVCeUtleShlbDEsIGVsMiwga2V5IGFzIGtleW9mIE1vZGVsKTtcbiAgICAgICAgaWYgKGNvbXBhcmlzb24gIT09IDApIHJldHVybiBkaXJlY3Rpb25GYWN0b3IgKiBjb21wYXJpc29uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZUJ5S2V5KGVsMTogTW9kZWwsIGVsMjogTW9kZWwsIGtleToga2V5b2YgTW9kZWwpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlMSA9IGVsMVtrZXldO1xuICAgIGNvbnN0IHZhbHVlMiA9IGVsMltrZXldO1xuXG4gICAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSByZXR1cm4gMDtcblxuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCB8fCB2YWx1ZTIgPT0gbnVsbCkgcmV0dXJuIHZhbHVlMSA9PSBudWxsID8gMSA6IC0xO1xuXG4gICAgY29uc3QgeyBkZXNpZ25UeXBlOiB0eXBlIH0gPSBNZXRhZGF0YS5nZXRQcm9wRGVzaWduVHlwZXMoXG4gICAgICBlbDEuY29uc3RydWN0b3IgYXMgYW55LFxuICAgICAga2V5IGFzIHN0cmluZ1xuICAgICk7XG4gICAgY29uc3QgcmVzb2x2ZWRUeXBlID1cbiAgICAgICh0eXBlICYmIHR5cGUubmFtZSAmJiB0eXBlLm5hbWUudG9Mb3dlckNhc2UoKSkgfHwgdHlwZW9mIHZhbHVlMTtcblxuICAgIHN3aXRjaCAocmVzb2x2ZWRUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVTdHJpbmdzKFxuICAgICAgICAgIHZhbHVlMSBhcyB1bmtub3duIGFzIHN0cmluZyxcbiAgICAgICAgICB2YWx1ZTIgYXMgdW5rbm93biBhcyBzdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZU51bWJlcnMoXG4gICAgICAgICAgdmFsdWUxIGFzIHVua25vd24gYXMgbnVtYmVyLFxuICAgICAgICAgIHZhbHVlMiBhcyB1bmtub3duIGFzIG51bWJlclxuICAgICAgICApO1xuICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlQmlnSW50cyhcbiAgICAgICAgICB2YWx1ZTEgYXMgdW5rbm93biBhcyBiaWdpbnQsXG4gICAgICAgICAgdmFsdWUyIGFzIHVua25vd24gYXMgYmlnaW50XG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlQm9vbGVhbnMoXG4gICAgICAgICAgdmFsdWUxIGFzIHVua25vd24gYXMgYm9vbGVhbixcbiAgICAgICAgICB2YWx1ZTIgYXMgdW5rbm93biBhcyBib29sZWFuXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBpZiAodmFsdWUxIGluc3RhbmNlb2YgRGF0ZSAmJiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGVzKHZhbHVlMSBhcyBEYXRlLCB2YWx1ZTIgYXMgRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihgc29ydGluZyBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICR7cmVzb2x2ZWRUeXBlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlQm9vbGVhbnMoYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGEgPT09IGIgPyAwIDogYSA/IDEgOiAtMTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZU51bWJlcnMoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZUJpZ0ludHMoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBudW1iZXIge1xuICAgIGlmIChhID09PSBiKSByZXR1cm4gMDtcbiAgICByZXR1cm4gYSA+IGIgPyAxIDogLTE7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVTdHJpbmdzKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlRGF0ZXMoYTogRGF0ZSwgYjogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJ1aWxkcyBhIFJBTSBxdWVyeSBmcm9tIHRoZSBzdGF0ZW1lbnRcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIHN0YXRlbWVudCdzIHNlbGVjdG9ycyBhbmQgY29uZGl0aW9ucyBpbnRvIGEgUmF3UmFtUXVlcnkgb2JqZWN0XG4gICAqIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGJ5IHRoZSBSQU0gYWRhcHRlci4gVGhpcyBtZXRob2QgYXNzZW1ibGVzIGFsbCBxdWVyeSBjb21wb25lbnRzXG4gICAqIChzZWxlY3QsIGZyb20sIHdoZXJlLCBsaW1pdCwgb2Zmc2V0LCBzb3J0KSBpbnRvIHRoZSBmaW5hbCBxdWVyeSBzdHJ1Y3R1cmUuXG4gICAqIEByZXR1cm4ge1Jhd1JhbVF1ZXJ5PE0+fSBUaGUgY29uc3RydWN0ZWQgUkFNIHF1ZXJ5IG9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkKCk6IFJhd1JhbVF1ZXJ5PGFueT4ge1xuICAgIGlmICh0aGlzLm1pblNlbGVjdG9yKVxuICAgICAgdGhpcy5lbnN1cmVOdW1iZXJPckRhdGVTZWxlY3Rvcih0aGlzLm1pblNlbGVjdG9yLCBcIk1JTiBvcGVyYXRpb25cIik7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0b3IpXG4gICAgICB0aGlzLmVuc3VyZU51bWJlck9yRGF0ZVNlbGVjdG9yKHRoaXMubWF4U2VsZWN0b3IsIFwiTUFYIG9wZXJhdGlvblwiKTtcbiAgICBpZiAodGhpcy5zdW1TZWxlY3RvcilcbiAgICAgIHRoaXMuZW5zdXJlTnVtZXJpY1NlbGVjdG9yKHRoaXMuc3VtU2VsZWN0b3IsIFwiU1VNIG9wZXJhdGlvblwiKTtcbiAgICBpZiAodGhpcy5hdmdTZWxlY3RvcilcbiAgICAgIHRoaXMuZW5zdXJlTnVtYmVyT3JEYXRlU2VsZWN0b3IodGhpcy5hdmdTZWxlY3RvciwgXCJBVkcgb3BlcmF0aW9uXCIpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBSYXdSYW1RdWVyeTxNPiA9IHtcbiAgICAgIHNlbGVjdDogdGhpcy5zZWxlY3RTZWxlY3RvcixcbiAgICAgIGZyb206IHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgd2hlcmU6IHRoaXMud2hlcmVDb25kaXRpb25cbiAgICAgICAgPyB0aGlzLnBhcnNlQ29uZGl0aW9uKHRoaXMud2hlcmVDb25kaXRpb24pLndoZXJlXG4gICAgICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgIChlbDogTSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgIGxpbWl0OiB0aGlzLmxpbWl0U2VsZWN0b3IsXG4gICAgICBza2lwOiB0aGlzLm9mZnNldFNlbGVjdG9yLFxuICAgICAgZ3JvdXBCeTogdGhpcy5ncm91cEJ5U2VsZWN0b3JzLFxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuY291bnRTZWxlY3RvciAhPT0gXCJ1bmRlZmluZWRcIikgcmVzdWx0LmNvdW50ID0gdGhpcy5jb3VudFNlbGVjdG9yO1xuICAgIGlmICh0aGlzLmNvdW50RGlzdGluY3RTZWxlY3RvcikgcmVzdWx0LmNvdW50RGlzdGluY3QgPSB0aGlzLmNvdW50RGlzdGluY3RTZWxlY3RvcjtcbiAgICBpZiAodGhpcy5taW5TZWxlY3RvcikgcmVzdWx0Lm1pbiA9IHRoaXMubWluU2VsZWN0b3I7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0b3IpIHJlc3VsdC5tYXggPSB0aGlzLm1heFNlbGVjdG9yO1xuICAgIGlmICh0aGlzLnN1bVNlbGVjdG9yKSByZXN1bHQuc3VtID0gdGhpcy5zdW1TZWxlY3RvcjtcbiAgICBpZiAodGhpcy5hdmdTZWxlY3RvcikgcmVzdWx0LmF2ZyA9IHRoaXMuYXZnU2VsZWN0b3I7XG4gICAgaWYgKHRoaXMuZGlzdGluY3RTZWxlY3RvcikgcmVzdWx0LmRpc3RpbmN0ID0gdGhpcy5kaXN0aW5jdFNlbGVjdG9yO1xuICAgIGlmICh0aGlzLm9yZGVyQnlTZWxlY3RvcnM/Lmxlbmd0aCkgcmVzdWx0LnNvcnQgPSB0aGlzLmdldFNvcnQoKTtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJhd1JhbVF1ZXJ5PGFueT47XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhIGNvbmRpdGlvbiBpbnRvIGEgUkFNIHF1ZXJ5IHByZWRpY2F0ZVxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhIENvbmRpdGlvbiBvYmplY3QgaW50byBhIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkXG4gICAqIHRvIGZpbHRlciBtb2RlbCBpbnN0YW5jZXMgaW4gbWVtb3J5LiBUaGlzIG1ldGhvZCBoYW5kbGVzIGJvdGggc2ltcGxlIGNvbmRpdGlvbnNcbiAgICogKGVxdWFscywgZ3JlYXRlciB0aGFuLCBldGMuKSBhbmQgY29tcGxleCBjb25kaXRpb25zIHdpdGggbG9naWNhbCBvcGVyYXRvcnMgKEFORCwgT1IpLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGZvciB0aGUgY29uZGl0aW9uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9uPE0+fSBjb25kaXRpb24gLSBUaGUgY29uZGl0aW9uIHRvIHBhcnNlXG4gICAqIEByZXR1cm4ge1Jhd1JhbVF1ZXJ5PE0+fSBBIFJBTSBxdWVyeSBvYmplY3Qgd2l0aCBhIHdoZXJlIHByZWRpY2F0ZSBmdW5jdGlvblxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBSYW1TdGF0ZW1lbnRcbiAgICogICBwYXJ0aWNpcGFudCBTaW1wbGVDb25kaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBDb21wbGV4Q29uZGl0aW9uXG4gICAqXG4gICAqICAgQ2FsbGVyLT4+UmFtU3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihjb25kaXRpb24pXG4gICAqICAgYWx0IFNpbXBsZSBjb25kaXRpb24gKGVxLCBndCwgbHQsIGV0Yy4pXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5TaW1wbGVDb25kaXRpb246IEV4dHJhY3QgYXR0cjEsIG9wZXJhdG9yLCBjb21wYXJpc29uXG4gICAqICAgICBTaW1wbGVDb25kaXRpb24tLT4+UmFtU3RhdGVtZW50OiBSZXR1cm4gcHJlZGljYXRlIGZ1bmN0aW9uXG4gICAqICAgZWxzZSBMb2dpY2FsIG9wZXJhdG9yIChBTkQsIE9SKVxuICAgKiAgICAgUmFtU3RhdGVtZW50LT4+Q29tcGxleENvbmRpdGlvbjogRXh0cmFjdCBuZXN0ZWQgY29uZGl0aW9uc1xuICAgKiAgICAgUmFtU3RhdGVtZW50LT4+UmFtU3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihsZWZ0Q29uZGl0aW9uKVxuICAgKiAgICAgUmFtU3RhdGVtZW50LT4+UmFtU3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihyaWdodENvbmRpdGlvbilcbiAgICogICAgIENvbXBsZXhDb25kaXRpb24tLT4+UmFtU3RhdGVtZW50OiBDb21iaW5lIHByZWRpY2F0ZXMgd2l0aCBsb2dpY2FsIG9wZXJhdG9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtU3RhdGVtZW50LS0+PkNhbGxlcjogUmV0dXJuIHF1ZXJ5IHdpdGggd2hlcmUgcHJlZGljYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBSYXdSYW1RdWVyeTxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlcmU6IChtOiBNb2RlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGF0dHIxOiBzdHJpbmcgfCBDb25kaXRpb248TT47XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yIHwgR3JvdXBPcGVyYXRvcjtcbiAgICAgICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIFtHcm91cE9wZXJhdG9yLkFORCwgR3JvdXBPcGVyYXRvci5PUiwgT3BlcmF0b3IuTk9UXS5pbmRleE9mKFxuICAgICAgICAgICAgb3BlcmF0b3IgYXMgR3JvdXBPcGVyYXRvclxuICAgICAgICAgICkgPT09IC0xXG4gICAgICAgICkge1xuICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuQklHR0VSOlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gPiBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5CSUdHRVJfRVE6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA+PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ESUZGRVJFTlQ6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSAhPT0gY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA9PT0gY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuUkVHRVhQOlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdICE9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEludmFsaWQgcmVnZXhwIGNvbXBhcmlzb24gb24gYSBub24gc3RyaW5nIGF0dHJpYnV0ZTogJHttW2F0dHIxIGFzIGtleW9mIE1vZGVsXX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuICEhKG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgc3RyaW5nKS5tYXRjaChcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKGNvbXBhcmlzb24sIFwiZ1wiKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5TVEFSVFNfV0lUSDoge1xuICAgICAgICAgICAgICBjb25zdCBhdHRyID0gYXR0cjEgYXMga2V5b2YgTW9kZWw7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0ciBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IG1bYXR0cl0gYXMgdW5rbm93bjtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyVmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgICAgICAgIGBJbnZhbGlkIHN0YXJ0c1dpdGggY29tcGFyaXNvbiBvbiBhIG5vbiBzdHJpbmcgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cImBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tcGFyaXNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFNUQVJUU19XSVRIIG9wZXJhdG9yIHJlcXVpcmVzIGEgc3RyaW5nIGNvbXBhcmlzb24sIGdvdCAke3R5cGVvZiBjb21wYXJpc29ufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAoYXR0clZhbHVlIGFzIHN0cmluZykuc3RhcnRzV2l0aChjb21wYXJpc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuRU5EU19XSVRIOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyMSBhcyBrZXlvZiBNb2RlbDtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlID0gbVthdHRyXSBhcyB1bmtub3duO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGF0dHJWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEludmFsaWQgZW5kc1dpdGggY29tcGFyaXNvbiBvbiBhIG5vbiBzdHJpbmcgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cImBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tcGFyaXNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEVORFNfV0lUSCBvcGVyYXRvciByZXF1aXJlcyBhIHN0cmluZyBjb21wYXJpc29uLCBnb3QgJHt0eXBlb2YgY29tcGFyaXNvbn1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gKGF0dHJWYWx1ZSBhcyBzdHJpbmcpLmVuZHNXaXRoKGNvbXBhcmlzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5TTUFMTEVSOlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gPCBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5TTUFMTEVSX0VROlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gPD0gY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuSU46XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wYXJpc29uKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgICAgICAgIGBJTiBvcGVyYXRvciByZXF1aXJlcyBhbiBhcnJheSwgZ290OiAke3R5cGVvZiBjb21wYXJpc29ufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyaXNvbi5pbmNsdWRlcyhtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSk7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkJFVFdFRU46IHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBhcmlzb24pIHx8IGNvbXBhcmlzb24ubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEJFVFdFRU4gb3BlcmF0b3IgcmVxdWlyZXMgYW4gYXJyYXkgd2l0aCAyIHZhbHVlcyBbbWluLCBtYXhdLCBnb3Q6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25cbiAgICAgICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyMSBhcyBrZXlvZiBNb2RlbDtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0clR5cGUgPSB0aGlzLmRldGVybWluZUF0dHJpYnV0ZVR5cGUoXG4gICAgICAgICAgICAgICAgbS5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RvcjxNb2RlbD4sXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgXCJCRVRXRUVOXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTnVtZXJpY1R5cGUoYXR0clR5cGUpICYmIGF0dHJUeXBlICE9PSBcImRhdGVcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgICAgICAgICAgYEJFVFdFRU4gb3BlcmF0b3IgcmVxdWlyZXMgbnVtZXJpYyBvciBkYXRlIGF0dHJpYnV0ZXMsIGJ1dCBcIiR7YXR0ck5hbWV9XCIgaXMgJHthdHRyVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICBcInVua25vd25cIn1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gY29tcGFyaXNvbjtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtW2F0dHJdO1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJhYmxlVmFsdWUgPSB0aGlzLnRvQ29tcGFyYWJsZVZhbHVlKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGF0dHJUeXBlLFxuICAgICAgICAgICAgICAgIGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgIFwiQkVUV0VFTlwiLFxuICAgICAgICAgICAgICAgIHsgYWxsb3dOdWxsOiB0cnVlIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmFibGVWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBtaW5Db21wYXJhYmxlID0gdGhpcy50b0NvbXBhcmFibGVWYWx1ZShcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgYXR0clR5cGUsXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgXCJCRVRXRUVOIG1pblwiXG4gICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICBjb25zdCBtYXhDb21wYXJhYmxlID0gdGhpcy50b0NvbXBhcmFibGVWYWx1ZShcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgYXR0clR5cGUsXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgXCJCRVRXRUVOIG1heFwiXG4gICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGNvbXBhcmFibGVWYWx1ZSA+PSBtaW5Db21wYXJhYmxlICYmIGNvbXBhcmFibGVWYWx1ZSA8PSBtYXhDb21wYXJhYmxlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICAgICBgSW52YWxpZCBvcGVyYXRvciBmb3Igc3RhbmRhcmQgY29tcGFyaXNvbnM6ICR7b3BlcmF0b3J9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuTk9UKSB7XG4gICAgICAgICAgaWYgKCEoYXR0cjEgaW5zdGFuY2VvZiBDb25kaXRpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICAgXCJOT1Qgb3BlcmF0b3IgcmVxdWlyZXMgYSBuZXN0ZWQgY29uZGl0aW9uIHRvIG5lZ2F0ZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbjxNPik7XG4gICAgICAgICAgcmV0dXJuICFuZXN0ZWQud2hlcmUobSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3AxOiBSYXdSYW1RdWVyeTxhbnk+ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgICAgIGF0dHIxIGFzIENvbmRpdGlvbjxNPlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb3AyOiBSYXdSYW1RdWVyeTxhbnk+ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgICAgIGNvbXBhcmlzb24gYXMgQ29uZGl0aW9uPE0+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIEdyb3VwT3BlcmF0b3IuQU5EOlxuICAgICAgICAgICAgICByZXR1cm4gb3AxLndoZXJlKG0pICYmIG9wMi53aGVyZShtKTtcbiAgICAgICAgICAgIGNhc2UgR3JvdXBPcGVyYXRvci5PUjpcbiAgICAgICAgICAgICAgcmV0dXJuIG9wMS53aGVyZShtKSB8fCBvcDIud2hlcmUobSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICAgICBgSW52YWxpZCBvcGVyYXRvciBmb3IgQW5kL09yIGNvbXBhcmlzb25zOiAke29wZXJhdG9yfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSBhcyBSYXdSYW1RdWVyeTxhbnk+O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVOdW1lcmljU2VsZWN0b3IoXG4gICAgc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yPE0+LFxuICAgIGNvbnRleHQ6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVNlbGVjdG9yVHlwZShcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgY29udGV4dCxcbiAgICAgICh0eXBlKSA9PiB0aGlzLmlzTnVtZXJpY1R5cGUodHlwZSksXG4gICAgICBcIm51bWVyaWNcIlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZU51bWJlck9yRGF0ZVNlbGVjdG9yKFxuICAgIHNlbGVjdG9yOiBTZWxlY3RTZWxlY3RvcjxNPixcbiAgICBjb250ZXh0OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVTZWxlY3RvclR5cGUoXG4gICAgICBzZWxlY3RvcixcbiAgICAgIGNvbnRleHQsXG4gICAgICAodHlwZSkgPT4gdGhpcy5pc051bWVyaWNUeXBlKHR5cGUpIHx8IHR5cGUgPT09IFwiZGF0ZVwiLFxuICAgICAgXCJudW1lcmljIG9yIGRhdGVcIlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNlbGVjdG9yVHlwZShcbiAgICBzZWxlY3RvcjogU2VsZWN0U2VsZWN0b3I8TT4sXG4gICAgY29udGV4dDogc3RyaW5nLFxuICAgIHByZWRpY2F0ZTogKHR5cGU6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGlmICghdGhpcy5mcm9tU2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgJHtjb250ZXh0fSByZXF1aXJlcyBhIHRhcmdldCBtb2RlbC4gQ2FsbCBmcm9tKCkgYmVmb3JlIGFnZ3JlZ2F0aW5nLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGF0dHIgPSBzZWxlY3RvciBhcyBzdHJpbmc7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZGV0ZXJtaW5lQXR0cmlidXRlVHlwZShcbiAgICAgIHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgYXR0ciBhcyBrZXlvZiBNb2RlbDxmYWxzZT4sXG4gICAgICBjb250ZXh0XG4gICAgKTtcblxuICAgIGlmICghcHJlZGljYXRlKHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgYCR7Y29udGV4dH0gcmVxdWlyZXMgYSAke2Rlc2NyaXB0aW9ufSBhdHRyaWJ1dGUsIGJ1dCBcIiR7YXR0cn1cIiBpcyAke3R5cGUgfHwgXCJ1bmtub3duXCJ9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUF0dHJpYnV0ZVR5cGUoXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE1vZGVsPixcbiAgICBhdHRyOiBzdHJpbmcsXG4gICAgY29udGV4dDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvcEtleSA9IGF0dHIgYXMga2V5b2YgTW9kZWw8ZmFsc2U+O1xuICAgIGNvbnN0IG1ldGFUeXBlID1cbiAgICAgIE1ldGFkYXRhLnR5cGUoY2xhenosIHByb3BLZXkpID8/XG4gICAgICBNZXRhZGF0YS5nZXRQcm9wRGVzaWduVHlwZXMoY2xhenosIHByb3BLZXkpPy5kZXNpZ25UeXBlO1xuICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5ub3JtYWxpemVNZXRhVHlwZShtZXRhVHlwZSk7XG4gICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgIGAke2NvbnRleHR9IGNvdWxkIG5vdCByZXNvbHZlIHByb3BlcnR5IHR5cGUgZm9yIFwiJHthdHRyfVwiYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNZXRhVHlwZShtZXRhVHlwZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIW1ldGFUeXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgbWV0YVR5cGUgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXRhVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlb2YgbWV0YVR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJiBtZXRhVHlwZS5uYW1lKVxuICAgICAgcmV0dXJuIG1ldGFUeXBlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWVyaWNUeXBlKHR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcImJpZ2ludFwiO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0NvbXBhcmFibGVWYWx1ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIGF0dHJUeXBlOiBzdHJpbmcsXG4gICAgYXR0ck5hbWU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgYWxsb3dOdWxsPzogYm9vbGVhbiB9XG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucz8uYWxsb3dOdWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGAke2NvbnRleHR9IHJlcXVpcmVzIGEgdmFsdWUgZm9yIFwiJHthdHRyTmFtZX1cImApO1xuICAgIH1cbiAgICBzd2l0Y2ggKGF0dHJUeXBlKSB7XG4gICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICBgJHtjb250ZXh0fSBvbiBkYXRlIGF0dHJpYnV0ZSBcIiR7YXR0ck5hbWV9XCIgcmVxdWlyZXMgRGF0ZSB2YWx1ZXNgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICBgJHtjb250ZXh0fSBvbiBudW1lcmljIGF0dHJpYnV0ZSBcIiR7YXR0ck5hbWV9XCIgcmVxdWlyZXMgbnVtYmVyIHZhbHVlc2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgYCR7Y29udGV4dH0gb24gYmlnaW50IGF0dHJpYnV0ZSBcIiR7YXR0ck5hbWV9XCIgcmVxdWlyZXMgbnVtZXJpYyB2YWx1ZXNgXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICBgJHtjb250ZXh0fSB1bnN1cHBvcnRlZCB0eXBlIFwiJHthdHRyVHlwZX1cIiBmb3IgYXR0cmlidXRlIFwiJHthdHRyTmFtZX1cImBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/lib/ram/constants.cjs
CHANGED
|
@@ -9,4 +9,4 @@ exports.RamFlavour = void 0;
|
|
|
9
9
|
* @category Ram
|
|
10
10
|
*/
|
|
11
11
|
exports.RamFlavour = "ram";
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7OztHQU1HO0FBQ1UsUUFBQSxVQUFVLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gSWRlbnRpZmllciBmb3IgdGhlIFJBTSBhZGFwdGVyXG4gKiBAc3VtbWFyeSBBIGNvbnN0YW50IHN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIFJBTSBhZGFwdGVyIGluIHRoZSBzeXN0ZW0uIFVzZWQgZm9yIGFkYXB0ZXIgdHlwZSBpZGVudGlmaWNhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBhY3Jvc3MgdGhlIGNvcmUgbW9kdWxlLlxuICogQGNvbnN0IFJhbUZsYXZvdXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQGNhdGVnb3J5IFJhbVxuICovXG5leHBvcnQgY29uc3QgUmFtRmxhdm91ciA9IFwicmFtXCI7XG4iXX0=
|
package/lib/ram/handlers.cjs
CHANGED
|
@@ -27,4 +27,4 @@ async function createdByOnRamCreateUpdate(context, data, key, model) {
|
|
|
27
27
|
throw new persistence_1.UnsupportedError("This adapter does not support user identification");
|
|
28
28
|
model[key] = uuid;
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0JBLGdFQWdCQztBQXJDRCw0REFBNkQ7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNJLEtBQUssVUFBVSwwQkFBMEIsQ0FLOUMsT0FBcUIsRUFDckIsSUFBdUIsRUFDdkIsR0FBWSxFQUNaLEtBQVE7SUFFUixNQUFNLElBQUksR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxJQUFJO1FBQ1AsTUFBTSxJQUFJLDhCQUFnQixDQUN4QixtREFBbUQsQ0FDcEQsQ0FBQztJQUNKLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFrQixDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBSYW1SZXBvc2l0b3J5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENvbnRleHRPZiwgVW5zdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjcmVhdGVkIGJ5IGZpZWxkIG9uIGEgbW9kZWwgZHVyaW5nIFJBTSBjcmVhdGUvdXBkYXRlIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IEF1dG9tYXRpY2FsbHkgcG9wdWxhdGVzIGEgbW9kZWwgZmllbGQgd2l0aCB0aGUgVVVJRCBmcm9tIHRoZSBjb250ZXh0IGR1cmluZyBjcmVhdGUgb3IgdXBkYXRlIG9wZXJhdGlvbnMuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBoYW5kbGVyIGZvciBSQU0gb3BlcmF0aW9ucyB0byB0cmFjayBlbnRpdHkgY3JlYXRpb24uXG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgb2YgdGhlIG1vZGVsIGJlaW5nIGNyZWF0ZWQvdXBkYXRlZFxuICogQHRlbXBsYXRlIFIgLSBUeXBlIG9mIHRoZSByZXBvc2l0b3J5IGhhbmRsaW5nIHRoZSBtb2RlbFxuICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVHlwZSBvZiB0aGUgUkFNIGZsYWdzXG4gKiBAdGVtcGxhdGUgQyAtIFR5cGUgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0NvbnRleHQ8Rj59IGNvbnRleHQgLSBUaGUgb3BlcmF0aW9uIGNvbnRleHQgY29udGFpbmluZyB1c2VyIGlkZW50aWZpY2F0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byBzZXQgd2l0aCB0aGUgVVVJRFxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBiZWluZyBjcmVhdGVkL3VwZGF0ZWRcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpZWxkIGhhcyBiZWVuIHNldFxuICogQGZ1bmN0aW9uIGNyZWF0ZWRCeU9uUmFtQ3JlYXRlVXBkYXRlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBjYXRlZ29yeSBSYW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZWRCeU9uUmFtQ3JlYXRlVXBkYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSYW1SZXBvc2l0b3J5PE0+LFxuPihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHV1aWQ6IHN0cmluZyA9IGNvbnRleHQuZ2V0KFwiVVVJRFwiKTtcbiAgaWYgKCF1dWlkKVxuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJUaGlzIGFkYXB0ZXIgZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGlkZW50aWZpY2F0aW9uXCJcbiAgICApO1xuICBtb2RlbFtrZXldID0gdXVpZCBhcyBNW2tleW9mIE1dO1xufVxuIl19
|
package/lib/ram/index.cjs
CHANGED
|
@@ -29,4 +29,4 @@ __exportStar(require("./RamStatement.cjs"), exports);
|
|
|
29
29
|
__exportStar(require("./types.cjs"), exports);
|
|
30
30
|
// left to last on purpose
|
|
31
31
|
__exportStar(require("./RamAdapter.cjs"), exports);
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztHQUlHO0FBQ0gsaURBQTBDO0FBRTFDLDhDQUE4QztBQUM5Qyx1QkFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRXhCLGtEQUE0QjtBQUM1QixpREFBMkI7QUFDM0IscURBQStCO0FBQy9CLHFEQUErQjtBQUMvQiw4Q0FBd0I7QUFDeEIsMEJBQTBCO0FBQzFCLG1EQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEV4cG9ydHMgZm9yIHRoZSByYW0gbW9kdWxlLlxuICogQHN1bW1hcnkgVGhpcyBmaWxlIGV4cG9ydHMgYWxsIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhlIHJhbSBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgdGhlIFJhbUFkYXB0ZXIsIGNvbnN0YW50cywgaGFuZGxlcnMsIGFuZCBtb3JlLlxuICogQG1vZHVsZSBjb3JlL3JhbVxuICovXG5pbXBvcnQgeyBSYW1BZGFwdGVyIH0gZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuXG4vLyBJbnZva2VkIHRoZXJlIHRvIGVuc3VyZSBkZWNvcmF0aW9uIG92ZXJyaWRlXG5SYW1BZGFwdGVyLmRlY29yYXRpb24oKTtcblxuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oYW5kbGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmFtUGFnaW5hdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SYW1TdGF0ZW1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4vLyBsZWZ0IHRvIGxhc3Qgb24gcHVycG9zZVxuZXhwb3J0ICogZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuIl19
|
package/lib/ram/types.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEFkYXB0ZXIsIEFkYXB0ZXJGbGFncyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBNdWx0aUxvY2sgfSBmcm9tIFwiQGRlY2FmLXRzL3RyYW5zYWN0aW9uYWwtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUHJpbWFyeUtleVR5cGUgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW4tbWVtb3J5IHN0b3JhZ2Ugc3RydWN0dXJlIGZvciB0aGUgUkFNIGFkYXB0ZXJcbiAqIEBzdW1tYXJ5IEEgbmVzdGVkIE1hcCBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIGVudGl0aWVzIGJ5IHRoZWlyIHRhYmxlIG5hbWUgYW5kIHByaW1hcnkga2V5LlxuICogVGhlIG91dGVyIE1hcCB1c2VzIHRhYmxlIG5hbWVzIGFzIGtleXMsIHdoaWxlIHRoZSBpbm5lciBNYXAgdXNlcyBlbnRpdHkgSURzIGFzIGtleXMgYW5kIGVudGl0eSBpbnN0YW5jZXMgYXMgdmFsdWVzLlxuICogQHR5cGVkZWYge01hcDxzdHJpbmcsIE1hcDxzdHJpbmcgfCBudW1iZXIsIGFueT4+fSBSYW1TdG9yYWdlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBjYXRlZ29yeSBSYW1cbiAqL1xuZXhwb3J0IHR5cGUgUmFtU3RvcmFnZSA9IE1hcDxzdHJpbmcsIE1hcDxQcmltYXJ5S2V5VHlwZSwgYW55Pj47XG5cbmV4cG9ydCB0eXBlIFJhd1JhbVF1ZXJ5PE0gZXh0ZW5kcyBNb2RlbCA9IGFueT4gPSB7XG4gIHNlbGVjdDogdW5kZWZpbmVkIHwgKGtleW9mIE0pW107XG4gIGZyb206IENvbnN0cnVjdG9yPE0+O1xuICB3aGVyZTogKGVsOiBNKSA9PiBib29sZWFuO1xuICBzb3J0PzogKGVsOiBNLCBlbDI6IE0pID0+IG51bWJlcjtcbiAgZ3JvdXBCeT86IChrZXlvZiBNKVtdO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgY291bnQ/OiBrZXlvZiBNIHwgbnVsbDtcbiAgY291bnREaXN0aW5jdD86IGtleW9mIE07XG4gIG1pbj86IGtleW9mIE07XG4gIG1heD86IGtleW9mIE07XG4gIHN1bT86IGtleW9mIE07XG4gIGF2Zz86IGtleW9mIE07XG4gIGRpc3RpbmN0Pzoga2V5b2YgTTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZsYWdzIGZvciBSQU0gYWRhcHRlciBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgdGhhdCBleHRlbmRzIHRoZSBiYXNlIHJlcG9zaXRvcnkgZmxhZ3Mgd2l0aCBSQU0tc3BlY2lmaWMgZmxhZ3MuXG4gKiBDb250YWlucyB1c2VyIGlkZW50aWZpY2F0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdHJhY2tpbmcgZW50aXR5IGNyZWF0aW9uIGFuZCB1cGRhdGVzLlxuICogQGludGVyZmFjZSBSYW1GbGFnc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFVVSUQgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgdXNlclxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFtRmxhZ3MgZXh0ZW5kcyBBZGFwdGVyRmxhZ3Mge1xuICBVVUlEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJhbVJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PiA9IFJlcG9zaXRvcnk8XG4gIE0sXG4gIEFkYXB0ZXI8UmFtQ29uZmlnLCBSYW1TdG9yYWdlLCBSYXdSYW1RdWVyeTxhbnk+LCBSYW1Db250ZXh0PlxuPjtcblxuZXhwb3J0IHR5cGUgUmFtQ29udGV4dCA9IENvbnRleHQ8UmFtRmxhZ3M+O1xuXG5leHBvcnQgdHlwZSBSYW1Db25maWcgPSB7XG4gIHVzZXI6IHN0cmluZztcbiAgbG9jaz86IE11bHRpTG9jaztcbn07XG4iXX0=
|
|
@@ -123,8 +123,9 @@ class Repository extends db_decorators_1.Repository {
|
|
|
123
123
|
get filters() {
|
|
124
124
|
return (0, event_filters_1.getFilters)(this);
|
|
125
125
|
}
|
|
126
|
+
constructor(adapter, clazz, force = false,
|
|
126
127
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
127
|
-
|
|
128
|
+
...args) {
|
|
128
129
|
super(clazz);
|
|
129
130
|
this.observers = [];
|
|
130
131
|
this._overrides = {
|
|
@@ -142,7 +143,7 @@ class Repository extends db_decorators_1.Repository {
|
|
|
142
143
|
if (adapter)
|
|
143
144
|
this._adapter = adapter;
|
|
144
145
|
if (clazz) {
|
|
145
|
-
Repository.register(clazz, this, this.adapter.alias);
|
|
146
|
+
Repository.register(clazz, this, this.adapter.alias, force);
|
|
146
147
|
if (adapter) {
|
|
147
148
|
const flavour = decoration_1.Metadata.get(clazz, decoration_1.DecorationKeys.FLAVOUR);
|
|
148
149
|
if (flavour === decoration_1.DefaultFlavour) {
|
|
@@ -927,17 +928,19 @@ class Repository extends db_decorators_1.Repository {
|
|
|
927
928
|
});
|
|
928
929
|
const log = this.log.for(this.observe);
|
|
929
930
|
const tableName = this.class.name; // Model.tableName(this.class);
|
|
930
|
-
this.
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
931
|
+
if (!this.observerHandler?.count()) {
|
|
932
|
+
this.adapter.observe(this, (table,
|
|
933
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
934
|
+
event,
|
|
935
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
936
|
+
id,
|
|
937
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
938
|
+
...args) => {
|
|
939
|
+
if (typeof table === "string")
|
|
940
|
+
return table === tableName;
|
|
941
|
+
return decoration_1.Metadata.constr(table) === decoration_1.Metadata.constr(this.class);
|
|
942
|
+
});
|
|
943
|
+
}
|
|
941
944
|
log.verbose(`now observing ${this.adapter} filtering on table === ${tableName}`);
|
|
942
945
|
this.observerHandler.observe(observer, filter);
|
|
943
946
|
log.verbose(`Registered new observer ${observer.toString()}`);
|
|
@@ -1064,13 +1067,13 @@ class Repository extends db_decorators_1.Repository {
|
|
|
1064
1067
|
* @param {string} [alias] the adapter alias/flavour.
|
|
1065
1068
|
* @throws {InternalError} If a repository is already registered for the model.
|
|
1066
1069
|
*/
|
|
1067
|
-
static register(model, repo, alias) {
|
|
1070
|
+
static register(model, repo, alias, force = false) {
|
|
1068
1071
|
let name = decorator_validation_1.Model.tableName(model);
|
|
1069
1072
|
if (alias) {
|
|
1070
1073
|
name = [name, alias].join(db_decorators_1.DefaultSeparator);
|
|
1071
1074
|
}
|
|
1072
1075
|
if (name in this._cache) {
|
|
1073
|
-
if (this._cache[name] instanceof Repository)
|
|
1076
|
+
if (this._cache[name] instanceof Repository && !force)
|
|
1074
1077
|
throw new db_decorators_1.InternalError(`${name} already has a registered instance`);
|
|
1075
1078
|
}
|
|
1076
1079
|
this._cache[name] = repo;
|
|
@@ -1182,4 +1185,4 @@ __decorate([
|
|
|
1182
1185
|
], Repository.prototype, "unObserve", null);
|
|
1183
1186
|
if (Adapter_1.Adapter)
|
|
1184
1187
|
Adapter_1.Adapter["_baseRepository"] = Repository;
|
|
1185
|
-
//# sourceMappingURL=Repository.js.map
|
|
1188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJEQWNpQztBQUNqQywrQ0FBa0Q7QUFPbEQsMERBQWlEO0FBQ2pELDhEQUEyRDtBQUMzRCwwRUFBaUU7QUFDakUsa0RBQTZDO0FBSTdDLHdEQUErQztBQUcvQywrQ0FBNkM7QUFZN0MscURBTThCO0FBQzlCLHlFQUF1RDtBQUN2RCwwREFBK0M7QUFDL0Msd0RBQTJEO0FBRzNELHNFQUEwRDtBQWUxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9ERztBQUNILE1BQWEsVUFJWCxTQUFRLDBCQUFvQjthQU9iLFdBQU0sR0FHakIsRUFBRSxBQUhlLENBR2Q7SUF3QlA7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNkLElBQUksQ0FBQyxNQUFNLEdBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFrQyxDQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQWMsT0FBTztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDaEIsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLHNHQUFzRyxDQUN2RyxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYyxTQUFTO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FB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Q1A7QUFXRDtJQURDLElBQUEsZUFBSyxHQUFFOzs7OzJDQWlCUDtBQThNSCxJQUFJLGlCQUFPO0lBQUUsaUJBQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgRGVmYXVsdFNlcGFyYXRvcixcbiAgZW5mb3JjZURCRGVjb3JhdG9ycyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICBJUmVwb3NpdG9yeSxcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUmVwb3NpdG9yeSBhcyBSZXAsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dCxcbiAgcmVkdWNlRXJyb3JzVG9QcmludCxcbiAgUHJpbWFyeUtleVR5cGUsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dEZvclVwZGF0ZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBmaW5hbCwgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQge1xuICBDb250ZXh0dWFsQXJncyxcbiAgQ29udGV4dHVhbGl6ZWRBcmdzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIE1ldGhvZE9yT3BlcmF0aW9uLFxufSBmcm9tIFwiLi4vdXRpbHMvQ29udGV4dHVhbExvZ2dlZENsYXNzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9ic2VydmVySGFuZGxlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi4vcXVlcnkvZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IERpcmVjdGlvbkxpbWl0T2Zmc2V0LCBRdWVyeU9wdGlvbnMgfSBmcm9tIFwiLi4vcXVlcnkvdHlwZXNcIjtcbmltcG9ydCB7IE9yZGVyQnlTZWxlY3RvciwgU2VsZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vcXVlcnkvc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBDb3VudFdoZXJlT3B0aW9uLCBXaGVyZU9wdGlvbiB9IGZyb20gXCIuLi9xdWVyeS9vcHRpb25zXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi4vcXVlcnkvQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBRdWVyaWFibGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9RdWVyaWFibGVcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWxsT3BlcmF0aW9uS2V5cyxcbiAgQ29udGV4dE9mLFxuICBFdmVudElkcyxcbiAgRmxhZ3NPZixcbiAgSW5mZXJyZWRBZGFwdGVyQ29uZmlnLFxuICBPYnNlcnZlckZpbHRlcixcbiAgUGVyc2lzdGVuY2VPYnNlcnZhYmxlLFxuICBQZXJzaXN0ZW5jZU9ic2VydmVyLFxufSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIERlY29yYXRpb25LZXlzLFxuICBEZWZhdWx0Rmxhdm91cixcbiAgTWV0YWRhdGEsXG4gIHVzZXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBwcmVwYXJlZCB9IGZyb20gXCIuLi9xdWVyeS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQcmVwYXJlZFN0YXRlbWVudEtleXMgfSBmcm9tIFwiLi4vcXVlcnkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBQYWdpbmF0b3IgfSBmcm9tIFwiLi4vcXVlcnkvUGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVkUGFnZSB9IGZyb20gXCIuLi9xdWVyeS9QYWdpbmF0b3JcIjtcbmltcG9ydCB7IGdldEZpbHRlcnMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvZXZlbnQtZmlsdGVyc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGFsaWFzIGZvciBSZXBvc2l0b3J5IGNsYXNzIHdpdGggc2ltcGxpZmllZCBnZW5lcmljIHBhcmFtZXRlcnMuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIG1vcmUgY29uY2lzZSB3YXkgdG8gcmVmZXJlbmNlIHRoZSBSZXBvc2l0b3J5IGNsYXNzIHdpdGggaXRzIGdlbmVyaWMgcGFyYW1ldGVycy5cbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlLlxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlLlxuICogQHRlbXBsYXRlIFEgLSBUaGUgcXVlcnkgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBBIC0gVGhlIGFkYXB0ZXIgdHlwZS5cbiAqIEB0eXBlZGVmIFJlcG9cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgdHlwZSBSZXBvPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4gPSBSZXBvc2l0b3J5PE0sIGFueT47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcmUgcmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YWJhc2Ugb3BlcmF0aW9ucyBvbiBtb2RlbHMgb24gYSB0YWJsZSBieSB0YWJsZSB3YXkuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgYW5kIG9ic2VydmVyIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gZm9yIG1vZGVsIHBlcnNpc3RlbmNlLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gKiBAdGVtcGxhdGUgUSAtIFRoZSBxdWVyeSB0eXBlIHVzZWQgYnkgdGhlIGFkYXB0ZXIuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUuXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZm9yIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0F9IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+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=
|
|
@@ -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
|
}
|
|
@@ -41,4 +41,4 @@ exports.DefaultCascade = {
|
|
|
41
41
|
update: Cascade.CASCADE,
|
|
42
42
|
delete: Cascade.NONE,
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9zaXRvcnkvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7Ozs7R0FNRztBQUNILElBQVksY0FNWDtBQU5ELFdBQVksY0FBYztJQUN4Qix1Q0FBdUM7SUFDdkMsNkJBQVcsQ0FBQTtJQUVYLHdDQUF3QztJQUN4Qyw4QkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQU5XLGNBQWMsOEJBQWQsY0FBYyxRQU16QjtBQUVEOzs7Ozs7R0FNRztBQUNILElBQVksT0FLWDtBQUxELFdBQVksT0FBTztJQUNqQixvREFBb0Q7SUFDcEQsOEJBQW1CLENBQUE7SUFDbkIsMkRBQTJEO0lBQzNELHdCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsT0FBTyx1QkFBUCxPQUFPLFFBS2xCO0FBRUQ7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsY0FBYyxHQUFvQjtJQUM3QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDdkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXNjYWRlTWV0YWRhdGEgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBzb3J0IGRpcmVjdGlvbnMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBhdmFpbGFibGUgc29ydCBkaXJlY3Rpb25zIGZvciBvcmRlcmluZyBxdWVyeSByZXN1bHRzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBlbnVtIE9yZGVyRGlyZWN0aW9uIHtcbiAgLyoqIEFzY2VuZGluZyBvcmRlciAoQSB0byBaLCAwIHRvIDkpICovXG4gIEFTQyA9IFwiYXNjXCIsXG5cbiAgLyoqIERlc2NlbmRpbmcgb3JkZXIgKFogdG8gQSwgOSB0byAwKSAqL1xuICBEU0MgPSBcImRlc2NcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bWVyYXRpb24gb2YgY2FzY2FkZSBvcGVyYXRpb24gdHlwZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBhdmFpbGFibGUgY2FzY2FkZSBiZWhhdmlvcnMgZm9yIGVudGl0eSByZWxhdGlvbnNoaXBzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBlbnVtIENhc2NhZGUge1xuICAvKiogUGVyZm9ybSBjYXNjYWRlIG9wZXJhdGlvbiBvbiByZWxhdGVkIGVudGl0aWVzICovXG4gIENBU0NBREUgPSBcImNhc2NhZGVcIixcbiAgLyoqIERvIG5vdCBwZXJmb3JtIGNhc2NhZGUgb3BlcmF0aW9uIG9uIHJlbGF0ZWQgZW50aXRpZXMgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTaGFwZSBvZiB0aGUgZGVmYXVsdCBjYXNjYWRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHVzZWQgaW4gcmVwb3NpdG9yaWVzLlxuICogQHN1bW1hcnkgRG9jdW1lbnRzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNhc2NhZGUgY29uZmlndXJhdGlvbiB3aXRoIGV4cGxpY2l0IHVwZGF0ZSBhbmQgZGVsZXRlIGJlaGF2aW9ycy5cbiAqIEBwcm9wZXJ0eSB7J2Nhc2NhZGUnfCdub25lJ30gdXBkYXRlIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIHVwZGF0ZXMgY2FzY2FkZSB0byByZWxhdGVkIGVudGl0aWVzLlxuICogQHByb3BlcnR5IHsnY2FzY2FkZSd8J25vbmUnfSBkZWxldGUgLSBEZXRlcm1pbmVzIHdoZXRoZXIgZGVsZXRlcyBjYXNjYWRlIHRvIHJlbGF0ZWQgZW50aXRpZXMuXG4gKiBAdHlwZURlZiBEZWZhdWx0Q2FzY2FkZUNvbmZpZ1xuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q2FzY2FkZTogQ2FzY2FkZU1ldGFkYXRhID0ge1xuICB1cGRhdGU6IENhc2NhZGUuQ0FTQ0FERSxcbiAgZGVsZXRlOiBDYXNjYWRlLk5PTkUsXG59O1xuIl19
|
|
@@ -44,7 +44,7 @@ function repository(model, flavour) {
|
|
|
44
44
|
(0, decoration_1.metadata)(db_decorators_1.DBKeys.REPOSITORY, original.name)(model);
|
|
45
45
|
flavour =
|
|
46
46
|
flavour || decoration_1.Metadata.get(original.constructor, constants_1.PersistenceKeys.ADAPTER);
|
|
47
|
-
Repository_1.Repository.register(model, original
|
|
47
|
+
Repository_1.Repository.register(model, original);
|
|
48
48
|
return (0, injectable_decorators_1.injectable)(decoration_1.Metadata.constr(model), {
|
|
49
49
|
callback: (instance) => {
|
|
50
50
|
Object.defineProperty(instance, db_decorators_1.DBKeys.CLASS, {
|
|
@@ -58,4 +58,4 @@ function repository(model, flavour) {
|
|
|
58
58
|
})(original);
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
//# sourceMappingURL=
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQ0EsZ0NBK0JDO0FBbEVELDJFQUFxRTtBQUNyRSwyREFBOEQ7QUFDOUQseUVBQXVEO0FBQ3ZELGlEQUEwQztBQUMxQyw4REFBMkQ7QUFDM0QsMERBQWlEO0FBQ2pELHFEQUF1RTtBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLEtBQXFCLEVBQ3JCLE9BQWdCO0lBRWhCLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxXQUFpQixFQUFFLEVBQUU7UUFDM0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUEsOEJBQU0sRUFBQyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQscUJBQVEsQ0FBQyxHQUFHLENBQ1Ysc0JBQU0sQ0FBQyxVQUFVLEVBQ2pCLHFCQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxpQkFBTyxDQUFDLGNBQWMsRUFBRSw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN2RSxRQUFRLENBQ1QsQ0FBQztRQUVGLElBQUEscUJBQVEsRUFBQyxzQkFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsT0FBTztZQUNMLE9BQU8sSUFBSSxxQkFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDJCQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekUsdUJBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBQSxrQ0FBVSxFQUFDLHFCQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxDQUFDLFFBQXdCLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsc0JBQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQzVDLFVBQVUsRUFBRSxLQUFLO29CQUNqQixZQUFZLEVBQUUsS0FBSztvQkFDbkIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxDQUFDO2dCQUNILE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7U0FDRixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDZixDQUFDLENBQVEsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tIFwiQGRlY2FmLXRzL2luamVjdGFibGUtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgREJLZXlzLCBJUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4vUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBNZXRhZGF0YSwgbWV0YWRhdGEsIENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcG9zaXRvcnkgZGVjb3JhdG9yIGZvciBtb2RlbCBjbGFzc2VzLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgcmVwb3NpdG9yeSBmb3IgYSBtb2RlbCBjbGFzcy4gQ2FuIGJlIHVzZWQgYXMgYm90aCBhIHByb3BlcnR5IGRlY29yYXRvciBhbmQgYSBjbGFzcyBkZWNvcmF0b3IuXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VD59IG1vZGVsIC0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhdm91cl0gLSB0aGUgcmVxdWlyZWQgYWRhcHRlcidzIGZsYXZvdXIvYWxpYXMuIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbW9kZWwgbWV0YWRhdGEuLlxuICogQHJldHVybiB7YW55fSAtIFRoZSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gKiBAZnVuY3Rpb24gcmVwb3NpdG9yeVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudCBDb2RlXG4gKiAgIHBhcnRpY2lwYW50IEQgYXMgRGVjb3JhdG9yXG4gKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBNIGFzIE1ldGFkYXRhXG4gKlxuICogICBDLT4+RDogQXBwbHkgQHJlcG9zaXRvcnkoTW9kZWwpXG4gKiAgIGFsdCBQcm9wZXJ0eSBEZWNvcmF0b3JcbiAqICAgICBELT4+RDogQ2hlY2sgaWYgcHJvcGVydHlLZXkgZXhpc3RzXG4gKiAgICAgRC0+PitDOiBSZXR1cm4gaW5qZWN0KG5hbWUpIGRlY29yYXRvclxuICogICBlbHNlIENsYXNzIERlY29yYXRvclxuICogICAgIEQtPj5NOiBTZXQgcmVwb3NpdG9yeSBtZXRhZGF0YSBvbiBtb2RlbFxuICogICAgIEQtPj5SOiBSZWdpc3RlciBtb2RlbCB3aXRoIFJlcG9zaXRvcnlcbiAqICAgICBELT4+K0M6IFJldHVybiBpbmplY3RhYmxlIGRlY29yYXRvciB3aXRoIGNvbmZpZ1xuICogICAgIEMtPj5DOiBEZWZpbmUgREJLZXlzLkNMQVNTIHByb3BlcnR5XG4gKiAgIGVuZFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnk8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IENvbnN0cnVjdG9yPFQ+LFxuICBmbGF2b3VyPzogc3RyaW5nXG4pOiBhbnkge1xuICByZXR1cm4gKChvcmlnaW5hbDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGlmIChwcm9wZXJ0eUtleSkge1xuICAgICAgcmV0dXJuIGluamVjdChNZXRhZGF0YS5jb25zdHIobW9kZWwpKShvcmlnaW5hbCwgcHJvcGVydHlLZXkpO1xuICAgIH1cblxuICAgIE1ldGFkYXRhLnNldChcbiAgICAgIERCS2V5cy5SRVBPU0lUT1JZLFxuICAgICAgTWV0YWRhdGEua2V5KGZsYXZvdXIgfHwgQWRhcHRlci5jdXJyZW50Rmxhdm91ciwgTW9kZWwudGFibGVOYW1lKG1vZGVsKSksXG4gICAgICBvcmlnaW5hbFxuICAgICk7XG5cbiAgICBtZXRhZGF0YShEQktleXMuUkVQT1NJVE9SWSwgb3JpZ2luYWwubmFtZSkobW9kZWwpO1xuICAgIGZsYXZvdXIgPVxuICAgICAgZmxhdm91ciB8fCBNZXRhZGF0YS5nZXQob3JpZ2luYWwuY29uc3RydWN0b3IsIFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKTtcbiAgICBSZXBvc2l0b3J5LnJlZ2lzdGVyKG1vZGVsLCBvcmlnaW5hbCk7XG4gICAgcmV0dXJuIGluamVjdGFibGUoTWV0YWRhdGEuY29uc3RyKG1vZGVsKSwge1xuICAgICAgY2FsbGJhY2s6IChpbnN0YW5jZTogSVJlcG9zaXRvcnk8VD4pID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3RhbmNlLCBEQktleXMuQ0xBU1MsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogbW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICB9LFxuICAgIH0pKG9yaWdpbmFsKTtcbiAgfSkgYXMgYW55O1xufVxuIl19
|
|
@@ -23,4 +23,4 @@ class ObserverError extends db_decorators_1.InternalError {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
exports.ObserverError = ObserverError;
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9zaXRvcnkvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF3RDtBQUV4RDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsYUFBYyxTQUFRLDZCQUFhO0lBQzlDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUpELHNDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gd2hlbiBvYnNlcnZlciBjb21tdW5pY2F0aW9uIGZhaWxzLlxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGZhaWx1cmUgaW4gb2JzZXJ2ZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHJlcG9zaXRvcmllcy5cbiAqIEBwYXJhbSB7c3RyaW5nfEVycm9yfSBtc2cgLSBUaGUgZXJyb3IgbWVzc2FnZSBvciBFcnJvciBvYmplY3QuXG4gKiBAY2xhc3MgT2JzZXJ2ZXJFcnJvclxuICogQGNhdGVnb3J5IEVycm9yc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgIC8vIFNvbWUgcmVwb3NpdG9yeSBvYnNlcnZlciBvcGVyYXRpb25cbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE9ic2VydmVyRXJyb3IpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKCdPYnNlcnZlciBjb21tdW5pY2F0aW9uIGZhaWxlZDonLCBlcnJvci5tZXNzYWdlKTtcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXJFcnJvciBleHRlbmRzIEludGVybmFsRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZyB8IEVycm9yKSB7XG4gICAgc3VwZXIobXNnLCBPYnNlcnZlckVycm9yLm5hbWUsIDUwMCk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/repository/index.cjs
CHANGED
|
@@ -26,4 +26,4 @@ __exportStar(require("./injectables.cjs"), exports);
|
|
|
26
26
|
__exportStar(require("./Repository.cjs"), exports);
|
|
27
27
|
__exportStar(require("./types.cjs"), exports);
|
|
28
28
|
__exportStar(require("./utils.cjs"), exports);
|
|
29
|
-
//# sourceMappingURL=
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0IsK0NBQXlCO0FBQ3pCLG9EQUE4QjtBQUM5QixtREFBNkI7QUFDN0IsOENBQXdCO0FBQ3hCLDhDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEV4cG9ydHMgZm9yIHRoZSByZXBvc2l0b3J5IG1vZHVsZS5cbiAqIEBzdW1tYXJ5IFRoaXMgZmlsZSBleHBvcnRzIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgZm9yIHRoZSByZXBvc2l0b3J5IGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBjb25zdGFudHMsIGRlY29yYXRvcnMsIGFuZCBtb3JlLlxuICogQG1vZHVsZSBjb3JlL3JlcG9zaXRvcnlcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luamVjdGFibGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbiJdfQ==
|