@decaf-ts/core 0.9.0 → 0.9.1-9.tasks

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/README.md +1 -1
  2. package/dist/core.cjs +6705 -2
  3. package/dist/core.js +6932 -2
  4. package/lib/auth/constants.cjs +1 -1
  5. package/lib/auth/decorators.cjs +1 -1
  6. package/lib/auth/index.cjs +1 -1
  7. package/lib/esm/auth/constants.js +1 -1
  8. package/lib/esm/auth/decorators.js +1 -1
  9. package/lib/esm/auth/index.js +1 -1
  10. package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
  11. package/lib/esm/fs/FilesystemAdapter.js +3 -2
  12. package/lib/esm/fs/FsDispatch.js +1 -1
  13. package/lib/esm/fs/helpers.js +1 -1
  14. package/lib/esm/fs/index.js +1 -1
  15. package/lib/esm/fs/indexStore.js +1 -1
  16. package/lib/esm/fs/locks/FilesystemLock.js +1 -1
  17. package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
  18. package/lib/esm/fs/types.d.ts +6 -0
  19. package/lib/esm/fs/types.js +1 -1
  20. package/lib/esm/identity/decorators.js +1 -1
  21. package/lib/esm/identity/index.js +1 -1
  22. package/lib/esm/index.d.ts +1 -1
  23. package/lib/esm/index.js +2 -2
  24. package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
  25. package/lib/esm/interfaces/ErrorParser.js +1 -1
  26. package/lib/esm/interfaces/Executor.js +1 -1
  27. package/lib/esm/interfaces/Observable.js +1 -1
  28. package/lib/esm/interfaces/Observer.js +1 -1
  29. package/lib/esm/interfaces/Paginatable.js +1 -1
  30. package/lib/esm/interfaces/Queriable.js +1 -1
  31. package/lib/esm/interfaces/RawExecutor.js +1 -1
  32. package/lib/esm/interfaces/SequenceOptions.js +1 -1
  33. package/lib/esm/interfaces/index.js +1 -1
  34. package/lib/esm/migrations/Migration.js +1 -1
  35. package/lib/esm/migrations/MigrationService.js +1 -1
  36. package/lib/esm/migrations/MigrationTasks.js +1 -1
  37. package/lib/esm/migrations/constants.js +1 -1
  38. package/lib/esm/migrations/decorators.js +1 -1
  39. package/lib/esm/migrations/index.js +1 -1
  40. package/lib/esm/migrations/types.js +1 -1
  41. package/lib/esm/model/BaseModel.js +1 -1
  42. package/lib/esm/model/SequenceModel.js +1 -1
  43. package/lib/esm/model/construction.d.ts +1 -1
  44. package/lib/esm/model/construction.js +25 -3
  45. package/lib/esm/model/decorators.js +1 -1
  46. package/lib/esm/model/index.js +1 -1
  47. package/lib/esm/model/indexing.js +1 -1
  48. package/lib/esm/model/types.js +1 -1
  49. package/lib/esm/overrides/Metadata.js +1 -1
  50. package/lib/esm/overrides/Model.js +1 -1
  51. package/lib/esm/overrides/ModelBuilder.js +1 -1
  52. package/lib/esm/overrides/index.js +1 -1
  53. package/lib/esm/overrides/injectables.js +1 -1
  54. package/lib/esm/overrides/overrides.js +29 -1
  55. package/lib/esm/persistence/Adapter.js +14 -2
  56. package/lib/esm/persistence/Context.js +1 -1
  57. package/lib/esm/persistence/ContextLock.js +1 -1
  58. package/lib/esm/persistence/Dispatch.d.ts +7 -0
  59. package/lib/esm/persistence/Dispatch.js +20 -3
  60. package/lib/esm/persistence/ObserverHandler.js +1 -1
  61. package/lib/esm/persistence/Sequence.js +1 -1
  62. package/lib/esm/persistence/constants.js +2 -1
  63. package/lib/esm/persistence/decorators.js +1 -1
  64. package/lib/esm/persistence/errors.js +1 -1
  65. package/lib/esm/persistence/event-filters.js +1 -1
  66. package/lib/esm/persistence/generators.js +1 -1
  67. package/lib/esm/persistence/index.js +1 -1
  68. package/lib/esm/persistence/transactions.js +1 -1
  69. package/lib/esm/persistence/types.d.ts +1 -0
  70. package/lib/esm/persistence/types.js +1 -1
  71. package/lib/esm/query/Condition.js +1 -1
  72. package/lib/esm/query/MethodQueryBuilder.js +1 -1
  73. package/lib/esm/query/Paginator.js +1 -1
  74. package/lib/esm/query/Statement.js +1 -1
  75. package/lib/esm/query/constants.js +1 -1
  76. package/lib/esm/query/decorators.js +1 -1
  77. package/lib/esm/query/errors.js +1 -1
  78. package/lib/esm/query/index.js +1 -1
  79. package/lib/esm/query/options.js +1 -1
  80. package/lib/esm/query/selectors.js +1 -1
  81. package/lib/esm/query/types.js +1 -1
  82. package/lib/esm/query/utils.js +1 -1
  83. package/lib/esm/ram/RamAdapter.js +1 -1
  84. package/lib/esm/ram/RamPaginator.js +1 -1
  85. package/lib/esm/ram/RamStatement.js +1 -1
  86. package/lib/esm/ram/constants.js +1 -1
  87. package/lib/esm/ram/handlers.js +1 -1
  88. package/lib/esm/ram/index.js +1 -1
  89. package/lib/esm/ram/types.js +1 -1
  90. package/lib/esm/repository/Repository.d.ts +2 -2
  91. package/lib/esm/repository/Repository.js +19 -16
  92. package/lib/esm/repository/constants.js +1 -1
  93. package/lib/esm/repository/decorators.js +2 -2
  94. package/lib/esm/repository/errors.js +1 -1
  95. package/lib/esm/repository/index.js +1 -1
  96. package/lib/esm/repository/injectables.js +4 -2
  97. package/lib/esm/repository/types.js +1 -1
  98. package/lib/esm/repository/utils.js +1 -1
  99. package/lib/esm/services/ModelService.d.ts +4 -5
  100. package/lib/esm/services/ModelService.js +4 -2
  101. package/lib/esm/services/PersistenceService.js +1 -1
  102. package/lib/esm/services/index.js +1 -1
  103. package/lib/esm/services/services.js +1 -1
  104. package/lib/esm/tasks/CleanUpTask.js +1 -1
  105. package/lib/esm/tasks/TaskContext.d.ts +3 -1
  106. package/lib/esm/tasks/TaskContext.js +9 -2
  107. package/lib/esm/tasks/TaskEngine.d.ts +2 -0
  108. package/lib/esm/tasks/TaskEngine.js +84 -20
  109. package/lib/esm/tasks/TaskErrors.js +1 -1
  110. package/lib/esm/tasks/TaskEventBus.js +1 -1
  111. package/lib/esm/tasks/TaskEventService.d.ts +7 -0
  112. package/lib/esm/tasks/TaskEventService.js +16 -0
  113. package/lib/esm/tasks/TaskHandler.js +1 -1
  114. package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
  115. package/lib/esm/tasks/TaskService.d.ts +5 -1
  116. package/lib/esm/tasks/TaskService.js +11 -37
  117. package/lib/esm/tasks/TaskStateChangeError.js +1 -1
  118. package/lib/esm/tasks/TaskTracker.js +1 -1
  119. package/lib/esm/tasks/builder.js +1 -1
  120. package/lib/esm/tasks/constants.js +1 -1
  121. package/lib/esm/tasks/decorators.js +1 -1
  122. package/lib/esm/tasks/index.d.ts +1 -0
  123. package/lib/esm/tasks/index.js +2 -1
  124. package/lib/esm/tasks/logging.js +4 -7
  125. package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
  126. package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
  127. package/lib/esm/tasks/models/TaskEventModel.js +1 -1
  128. package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
  129. package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
  130. package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
  131. package/lib/esm/tasks/models/TaskModel.js +1 -1
  132. package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
  133. package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
  134. package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
  135. package/lib/esm/tasks/models/index.js +1 -1
  136. package/lib/esm/tasks/types.d.ts +7 -3
  137. package/lib/esm/tasks/types.js +1 -1
  138. package/lib/esm/tasks/utils.js +1 -1
  139. package/lib/esm/utils/ContextualLoggedClass.js +1 -1
  140. package/lib/esm/utils/decorators.js +1 -1
  141. package/lib/esm/utils/errors.js +1 -1
  142. package/lib/esm/utils/index.js +1 -1
  143. package/lib/esm/utils/throttling.js +1 -1
  144. package/lib/esm/utils/types.js +1 -1
  145. package/lib/esm/utils/utils.d.ts +2 -1
  146. package/lib/esm/utils/utils.js +23 -6
  147. package/lib/esm/workers/TaskEngine.js +15 -4
  148. package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
  149. package/lib/esm/workers/index.js +1 -1
  150. package/lib/esm/workers/messages.js +1 -1
  151. package/lib/esm/workers/types.js +1 -1
  152. package/lib/esm/workers/workerThread.js +36 -8
  153. package/lib/fs/FilesystemAdapter.cjs +3 -2
  154. package/lib/fs/FilesystemAdapter.d.ts +1 -0
  155. package/lib/fs/FsDispatch.cjs +1 -1
  156. package/lib/fs/helpers.cjs +1 -1
  157. package/lib/fs/index.cjs +1 -1
  158. package/lib/fs/indexStore.cjs +1 -1
  159. package/lib/fs/locks/FilesystemLock.cjs +1 -1
  160. package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
  161. package/lib/fs/types.cjs +1 -1
  162. package/lib/fs/types.d.ts +6 -0
  163. package/lib/identity/decorators.cjs +1 -1
  164. package/lib/identity/index.cjs +1 -1
  165. package/lib/index.cjs +2 -2
  166. package/lib/index.d.ts +1 -1
  167. package/lib/interfaces/ContextuallyLogged.cjs +1 -1
  168. package/lib/interfaces/ErrorParser.cjs +1 -1
  169. package/lib/interfaces/Executor.cjs +1 -1
  170. package/lib/interfaces/Observable.cjs +1 -1
  171. package/lib/interfaces/Observer.cjs +1 -1
  172. package/lib/interfaces/Paginatable.cjs +1 -1
  173. package/lib/interfaces/Queriable.cjs +1 -1
  174. package/lib/interfaces/RawExecutor.cjs +1 -1
  175. package/lib/interfaces/SequenceOptions.cjs +1 -1
  176. package/lib/interfaces/index.cjs +1 -1
  177. package/lib/migrations/Migration.cjs +1 -1
  178. package/lib/migrations/MigrationService.cjs +1 -1
  179. package/lib/migrations/MigrationTasks.cjs +1 -1
  180. package/lib/migrations/constants.cjs +1 -1
  181. package/lib/migrations/decorators.cjs +1 -1
  182. package/lib/migrations/index.cjs +1 -1
  183. package/lib/migrations/types.cjs +1 -1
  184. package/lib/model/BaseModel.cjs +1 -1
  185. package/lib/model/SequenceModel.cjs +1 -1
  186. package/lib/model/construction.cjs +25 -3
  187. package/lib/model/construction.d.ts +1 -1
  188. package/lib/model/decorators.cjs +1 -1
  189. package/lib/model/index.cjs +1 -1
  190. package/lib/model/indexing.cjs +1 -1
  191. package/lib/model/types.cjs +1 -1
  192. package/lib/overrides/Metadata.cjs +1 -1
  193. package/lib/overrides/Model.cjs +1 -1
  194. package/lib/overrides/ModelBuilder.cjs +1 -1
  195. package/lib/overrides/index.cjs +1 -1
  196. package/lib/overrides/injectables.cjs +1 -1
  197. package/lib/overrides/overrides.cjs +29 -1
  198. package/lib/persistence/Adapter.cjs +14 -2
  199. package/lib/persistence/Context.cjs +1 -1
  200. package/lib/persistence/ContextLock.cjs +1 -1
  201. package/lib/persistence/Dispatch.cjs +20 -3
  202. package/lib/persistence/Dispatch.d.ts +7 -0
  203. package/lib/persistence/ObserverHandler.cjs +1 -1
  204. package/lib/persistence/Sequence.cjs +1 -1
  205. package/lib/persistence/constants.cjs +2 -1
  206. package/lib/persistence/decorators.cjs +1 -1
  207. package/lib/persistence/errors.cjs +1 -1
  208. package/lib/persistence/event-filters.cjs +1 -1
  209. package/lib/persistence/generators.cjs +1 -1
  210. package/lib/persistence/index.cjs +1 -1
  211. package/lib/persistence/transactions.cjs +1 -1
  212. package/lib/persistence/types.cjs +1 -1
  213. package/lib/persistence/types.d.ts +1 -0
  214. package/lib/query/Condition.cjs +1 -1
  215. package/lib/query/MethodQueryBuilder.cjs +1 -1
  216. package/lib/query/Paginator.cjs +1 -1
  217. package/lib/query/Statement.cjs +1 -1
  218. package/lib/query/constants.cjs +1 -1
  219. package/lib/query/decorators.cjs +1 -1
  220. package/lib/query/errors.cjs +1 -1
  221. package/lib/query/index.cjs +1 -1
  222. package/lib/query/options.cjs +1 -1
  223. package/lib/query/selectors.cjs +1 -1
  224. package/lib/query/types.cjs +1 -1
  225. package/lib/query/utils.cjs +1 -1
  226. package/lib/ram/RamAdapter.cjs +1 -1
  227. package/lib/ram/RamPaginator.cjs +1 -1
  228. package/lib/ram/RamStatement.cjs +1 -1
  229. package/lib/ram/constants.cjs +1 -1
  230. package/lib/ram/handlers.cjs +1 -1
  231. package/lib/ram/index.cjs +1 -1
  232. package/lib/ram/types.cjs +1 -1
  233. package/lib/repository/Repository.cjs +19 -16
  234. package/lib/repository/Repository.d.ts +2 -2
  235. package/lib/repository/constants.cjs +1 -1
  236. package/lib/repository/decorators.cjs +2 -2
  237. package/lib/repository/errors.cjs +1 -1
  238. package/lib/repository/index.cjs +1 -1
  239. package/lib/repository/injectables.cjs +4 -2
  240. package/lib/repository/types.cjs +1 -1
  241. package/lib/repository/utils.cjs +1 -1
  242. package/lib/services/ModelService.cjs +4 -2
  243. package/lib/services/ModelService.d.ts +4 -5
  244. package/lib/services/PersistenceService.cjs +1 -1
  245. package/lib/services/index.cjs +1 -1
  246. package/lib/services/services.cjs +1 -1
  247. package/lib/tasks/CleanUpTask.cjs +1 -1
  248. package/lib/tasks/TaskContext.cjs +9 -2
  249. package/lib/tasks/TaskContext.d.ts +3 -1
  250. package/lib/tasks/TaskEngine.cjs +84 -20
  251. package/lib/tasks/TaskEngine.d.ts +2 -0
  252. package/lib/tasks/TaskErrors.cjs +1 -1
  253. package/lib/tasks/TaskEventBus.cjs +1 -1
  254. package/lib/tasks/TaskEventService.cjs +20 -0
  255. package/lib/tasks/TaskEventService.d.ts +7 -0
  256. package/lib/tasks/TaskHandler.cjs +1 -1
  257. package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
  258. package/lib/tasks/TaskService.cjs +10 -36
  259. package/lib/tasks/TaskService.d.ts +5 -1
  260. package/lib/tasks/TaskStateChangeError.cjs +1 -1
  261. package/lib/tasks/TaskTracker.cjs +1 -1
  262. package/lib/tasks/builder.cjs +1 -1
  263. package/lib/tasks/constants.cjs +1 -1
  264. package/lib/tasks/decorators.cjs +1 -1
  265. package/lib/tasks/index.cjs +2 -1
  266. package/lib/tasks/index.d.ts +1 -0
  267. package/lib/tasks/logging.cjs +4 -7
  268. package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
  269. package/lib/tasks/models/TaskErrorModel.cjs +1 -1
  270. package/lib/tasks/models/TaskEventModel.cjs +1 -1
  271. package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
  272. package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
  273. package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
  274. package/lib/tasks/models/TaskModel.cjs +1 -1
  275. package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
  276. package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
  277. package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
  278. package/lib/tasks/models/index.cjs +1 -1
  279. package/lib/tasks/types.cjs +1 -1
  280. package/lib/tasks/types.d.ts +7 -3
  281. package/lib/tasks/utils.cjs +1 -1
  282. package/lib/utils/ContextualLoggedClass.cjs +1 -1
  283. package/lib/utils/decorators.cjs +1 -1
  284. package/lib/utils/errors.cjs +1 -1
  285. package/lib/utils/index.cjs +1 -1
  286. package/lib/utils/throttling.cjs +1 -1
  287. package/lib/utils/types.cjs +1 -1
  288. package/lib/utils/utils.cjs +22 -5
  289. package/lib/utils/utils.d.ts +2 -1
  290. package/lib/workers/TaskEngine.cjs +15 -4
  291. package/lib/workers/WorkThreadEnvironment.cjs +1 -1
  292. package/lib/workers/index.cjs +1 -1
  293. package/lib/workers/messages.cjs +1 -1
  294. package/lib/workers/types.cjs +1 -1
  295. package/lib/workers/workerThread.cjs +35 -7
  296. package/package.json +1 -1
  297. package/dist/core.cjs.map +0 -1
  298. package/dist/core.js.map +0 -1
  299. package/lib/auth/constants.js.map +0 -1
  300. package/lib/auth/decorators.js.map +0 -1
  301. package/lib/auth/index.js.map +0 -1
  302. package/lib/esm/auth/constants.js.map +0 -1
  303. package/lib/esm/auth/decorators.js.map +0 -1
  304. package/lib/esm/auth/index.js.map +0 -1
  305. package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
  306. package/lib/esm/fs/FsDispatch.js.map +0 -1
  307. package/lib/esm/fs/helpers.js.map +0 -1
  308. package/lib/esm/fs/index.js.map +0 -1
  309. package/lib/esm/fs/indexStore.js.map +0 -1
  310. package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
  311. package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
  312. package/lib/esm/fs/types.js.map +0 -1
  313. package/lib/esm/identity/decorators.js.map +0 -1
  314. package/lib/esm/identity/index.js.map +0 -1
  315. package/lib/esm/index.js.map +0 -1
  316. package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
  317. package/lib/esm/interfaces/ErrorParser.js.map +0 -1
  318. package/lib/esm/interfaces/Executor.js.map +0 -1
  319. package/lib/esm/interfaces/Observable.js.map +0 -1
  320. package/lib/esm/interfaces/Observer.js.map +0 -1
  321. package/lib/esm/interfaces/Paginatable.js.map +0 -1
  322. package/lib/esm/interfaces/Queriable.js.map +0 -1
  323. package/lib/esm/interfaces/RawExecutor.js.map +0 -1
  324. package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
  325. package/lib/esm/interfaces/index.js.map +0 -1
  326. package/lib/esm/migrations/Migration.js.map +0 -1
  327. package/lib/esm/migrations/MigrationService.js.map +0 -1
  328. package/lib/esm/migrations/MigrationTasks.js.map +0 -1
  329. package/lib/esm/migrations/constants.js.map +0 -1
  330. package/lib/esm/migrations/decorators.js.map +0 -1
  331. package/lib/esm/migrations/index.js.map +0 -1
  332. package/lib/esm/migrations/types.js.map +0 -1
  333. package/lib/esm/model/BaseModel.js.map +0 -1
  334. package/lib/esm/model/SequenceModel.js.map +0 -1
  335. package/lib/esm/model/construction.js.map +0 -1
  336. package/lib/esm/model/decorators.js.map +0 -1
  337. package/lib/esm/model/index.js.map +0 -1
  338. package/lib/esm/model/indexing.js.map +0 -1
  339. package/lib/esm/model/types.js.map +0 -1
  340. package/lib/esm/overrides/Metadata.js.map +0 -1
  341. package/lib/esm/overrides/Model.js.map +0 -1
  342. package/lib/esm/overrides/ModelBuilder.js.map +0 -1
  343. package/lib/esm/overrides/index.js.map +0 -1
  344. package/lib/esm/overrides/injectables.js.map +0 -1
  345. package/lib/esm/overrides/overrides.js.map +0 -1
  346. package/lib/esm/persistence/Adapter.js.map +0 -1
  347. package/lib/esm/persistence/Context.js.map +0 -1
  348. package/lib/esm/persistence/ContextLock.js.map +0 -1
  349. package/lib/esm/persistence/Dispatch.js.map +0 -1
  350. package/lib/esm/persistence/ObserverHandler.js.map +0 -1
  351. package/lib/esm/persistence/Sequence.js.map +0 -1
  352. package/lib/esm/persistence/constants.js.map +0 -1
  353. package/lib/esm/persistence/decorators.js.map +0 -1
  354. package/lib/esm/persistence/errors.js.map +0 -1
  355. package/lib/esm/persistence/event-filters.js.map +0 -1
  356. package/lib/esm/persistence/generators.js.map +0 -1
  357. package/lib/esm/persistence/index.js.map +0 -1
  358. package/lib/esm/persistence/transactions.js.map +0 -1
  359. package/lib/esm/persistence/types.js.map +0 -1
  360. package/lib/esm/query/Condition.js.map +0 -1
  361. package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
  362. package/lib/esm/query/Paginator.js.map +0 -1
  363. package/lib/esm/query/Statement.js.map +0 -1
  364. package/lib/esm/query/constants.js.map +0 -1
  365. package/lib/esm/query/decorators.js.map +0 -1
  366. package/lib/esm/query/errors.js.map +0 -1
  367. package/lib/esm/query/index.js.map +0 -1
  368. package/lib/esm/query/options.js.map +0 -1
  369. package/lib/esm/query/selectors.js.map +0 -1
  370. package/lib/esm/query/types.js.map +0 -1
  371. package/lib/esm/query/utils.js.map +0 -1
  372. package/lib/esm/ram/RamAdapter.js.map +0 -1
  373. package/lib/esm/ram/RamPaginator.js.map +0 -1
  374. package/lib/esm/ram/RamStatement.js.map +0 -1
  375. package/lib/esm/ram/constants.js.map +0 -1
  376. package/lib/esm/ram/handlers.js.map +0 -1
  377. package/lib/esm/ram/index.js.map +0 -1
  378. package/lib/esm/ram/types.js.map +0 -1
  379. package/lib/esm/repository/Repository.js.map +0 -1
  380. package/lib/esm/repository/constants.js.map +0 -1
  381. package/lib/esm/repository/decorators.js.map +0 -1
  382. package/lib/esm/repository/errors.js.map +0 -1
  383. package/lib/esm/repository/index.js.map +0 -1
  384. package/lib/esm/repository/injectables.js.map +0 -1
  385. package/lib/esm/repository/types.js.map +0 -1
  386. package/lib/esm/repository/utils.js.map +0 -1
  387. package/lib/esm/services/ModelService.js.map +0 -1
  388. package/lib/esm/services/PersistenceService.js.map +0 -1
  389. package/lib/esm/services/index.js.map +0 -1
  390. package/lib/esm/services/services.js.map +0 -1
  391. package/lib/esm/tasks/CleanUpTask.js.map +0 -1
  392. package/lib/esm/tasks/TaskContext.js.map +0 -1
  393. package/lib/esm/tasks/TaskEngine.js.map +0 -1
  394. package/lib/esm/tasks/TaskErrors.js.map +0 -1
  395. package/lib/esm/tasks/TaskEventBus.js.map +0 -1
  396. package/lib/esm/tasks/TaskHandler.js.map +0 -1
  397. package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
  398. package/lib/esm/tasks/TaskService.js.map +0 -1
  399. package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
  400. package/lib/esm/tasks/TaskTracker.js.map +0 -1
  401. package/lib/esm/tasks/builder.js.map +0 -1
  402. package/lib/esm/tasks/constants.js.map +0 -1
  403. package/lib/esm/tasks/decorators.js.map +0 -1
  404. package/lib/esm/tasks/index.js.map +0 -1
  405. package/lib/esm/tasks/logging.js.map +0 -1
  406. package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
  407. package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
  408. package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
  409. package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
  410. package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
  411. package/lib/esm/tasks/models/TaskModel.js.map +0 -1
  412. package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
  413. package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
  414. package/lib/esm/tasks/models/index.js.map +0 -1
  415. package/lib/esm/tasks/types.js.map +0 -1
  416. package/lib/esm/tasks/utils.js.map +0 -1
  417. package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
  418. package/lib/esm/utils/decorators.js.map +0 -1
  419. package/lib/esm/utils/errors.js.map +0 -1
  420. package/lib/esm/utils/index.js.map +0 -1
  421. package/lib/esm/utils/throttling.js.map +0 -1
  422. package/lib/esm/utils/types.js.map +0 -1
  423. package/lib/esm/utils/utils.js.map +0 -1
  424. package/lib/esm/workers/TaskEngine.js.map +0 -1
  425. package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
  426. package/lib/esm/workers/index.js.map +0 -1
  427. package/lib/esm/workers/messages.js.map +0 -1
  428. package/lib/esm/workers/types.js.map +0 -1
  429. package/lib/esm/workers/workerThread.js.map +0 -1
  430. package/lib/fs/FilesystemAdapter.js.map +0 -1
  431. package/lib/fs/FsDispatch.js.map +0 -1
  432. package/lib/fs/helpers.js.map +0 -1
  433. package/lib/fs/index.js.map +0 -1
  434. package/lib/fs/indexStore.js.map +0 -1
  435. package/lib/fs/locks/FilesystemLock.js.map +0 -1
  436. package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
  437. package/lib/fs/types.js.map +0 -1
  438. package/lib/identity/decorators.js.map +0 -1
  439. package/lib/identity/index.js.map +0 -1
  440. package/lib/index.js.map +0 -1
  441. package/lib/interfaces/ContextuallyLogged.js.map +0 -1
  442. package/lib/interfaces/ErrorParser.js.map +0 -1
  443. package/lib/interfaces/Executor.js.map +0 -1
  444. package/lib/interfaces/Observable.js.map +0 -1
  445. package/lib/interfaces/Observer.js.map +0 -1
  446. package/lib/interfaces/Paginatable.js.map +0 -1
  447. package/lib/interfaces/Queriable.js.map +0 -1
  448. package/lib/interfaces/RawExecutor.js.map +0 -1
  449. package/lib/interfaces/SequenceOptions.js.map +0 -1
  450. package/lib/interfaces/index.js.map +0 -1
  451. package/lib/migrations/Migration.js.map +0 -1
  452. package/lib/migrations/MigrationService.js.map +0 -1
  453. package/lib/migrations/MigrationTasks.js.map +0 -1
  454. package/lib/migrations/constants.js.map +0 -1
  455. package/lib/migrations/decorators.js.map +0 -1
  456. package/lib/migrations/index.js.map +0 -1
  457. package/lib/migrations/types.js.map +0 -1
  458. package/lib/model/BaseModel.js.map +0 -1
  459. package/lib/model/SequenceModel.js.map +0 -1
  460. package/lib/model/construction.js.map +0 -1
  461. package/lib/model/decorators.js.map +0 -1
  462. package/lib/model/index.js.map +0 -1
  463. package/lib/model/indexing.js.map +0 -1
  464. package/lib/model/types.js.map +0 -1
  465. package/lib/overrides/Metadata.js.map +0 -1
  466. package/lib/overrides/Model.js.map +0 -1
  467. package/lib/overrides/ModelBuilder.js.map +0 -1
  468. package/lib/overrides/index.js.map +0 -1
  469. package/lib/overrides/injectables.js.map +0 -1
  470. package/lib/overrides/overrides.js.map +0 -1
  471. package/lib/persistence/Adapter.js.map +0 -1
  472. package/lib/persistence/Context.js.map +0 -1
  473. package/lib/persistence/ContextLock.js.map +0 -1
  474. package/lib/persistence/Dispatch.js.map +0 -1
  475. package/lib/persistence/ObserverHandler.js.map +0 -1
  476. package/lib/persistence/Sequence.js.map +0 -1
  477. package/lib/persistence/constants.js.map +0 -1
  478. package/lib/persistence/decorators.js.map +0 -1
  479. package/lib/persistence/errors.js.map +0 -1
  480. package/lib/persistence/event-filters.js.map +0 -1
  481. package/lib/persistence/generators.js.map +0 -1
  482. package/lib/persistence/index.js.map +0 -1
  483. package/lib/persistence/transactions.js.map +0 -1
  484. package/lib/persistence/types.js.map +0 -1
  485. package/lib/query/Condition.js.map +0 -1
  486. package/lib/query/MethodQueryBuilder.js.map +0 -1
  487. package/lib/query/Paginator.js.map +0 -1
  488. package/lib/query/Statement.js.map +0 -1
  489. package/lib/query/constants.js.map +0 -1
  490. package/lib/query/decorators.js.map +0 -1
  491. package/lib/query/errors.js.map +0 -1
  492. package/lib/query/index.js.map +0 -1
  493. package/lib/query/options.js.map +0 -1
  494. package/lib/query/selectors.js.map +0 -1
  495. package/lib/query/types.js.map +0 -1
  496. package/lib/query/utils.js.map +0 -1
  497. package/lib/ram/RamAdapter.js.map +0 -1
  498. package/lib/ram/RamPaginator.js.map +0 -1
  499. package/lib/ram/RamStatement.js.map +0 -1
  500. package/lib/ram/constants.js.map +0 -1
  501. package/lib/ram/handlers.js.map +0 -1
  502. package/lib/ram/index.js.map +0 -1
  503. package/lib/ram/types.js.map +0 -1
  504. package/lib/repository/Repository.js.map +0 -1
  505. package/lib/repository/constants.js.map +0 -1
  506. package/lib/repository/decorators.js.map +0 -1
  507. package/lib/repository/errors.js.map +0 -1
  508. package/lib/repository/index.js.map +0 -1
  509. package/lib/repository/injectables.js.map +0 -1
  510. package/lib/repository/types.js.map +0 -1
  511. package/lib/repository/utils.js.map +0 -1
  512. package/lib/services/ModelService.js.map +0 -1
  513. package/lib/services/PersistenceService.js.map +0 -1
  514. package/lib/services/index.js.map +0 -1
  515. package/lib/services/services.js.map +0 -1
  516. package/lib/tasks/CleanUpTask.js.map +0 -1
  517. package/lib/tasks/TaskContext.js.map +0 -1
  518. package/lib/tasks/TaskEngine.js.map +0 -1
  519. package/lib/tasks/TaskErrors.js.map +0 -1
  520. package/lib/tasks/TaskEventBus.js.map +0 -1
  521. package/lib/tasks/TaskHandler.js.map +0 -1
  522. package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
  523. package/lib/tasks/TaskService.js.map +0 -1
  524. package/lib/tasks/TaskStateChangeError.js.map +0 -1
  525. package/lib/tasks/TaskTracker.js.map +0 -1
  526. package/lib/tasks/builder.js.map +0 -1
  527. package/lib/tasks/constants.js.map +0 -1
  528. package/lib/tasks/decorators.js.map +0 -1
  529. package/lib/tasks/index.js.map +0 -1
  530. package/lib/tasks/logging.js.map +0 -1
  531. package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
  532. package/lib/tasks/models/TaskErrorModel.js.map +0 -1
  533. package/lib/tasks/models/TaskEventModel.js.map +0 -1
  534. package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
  535. package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
  536. package/lib/tasks/models/TaskModel.js.map +0 -1
  537. package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
  538. package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
  539. package/lib/tasks/models/index.js.map +0 -1
  540. package/lib/tasks/types.js.map +0 -1
  541. package/lib/tasks/utils.js.map +0 -1
  542. package/lib/utils/ContextualLoggedClass.js.map +0 -1
  543. package/lib/utils/decorators.js.map +0 -1
  544. package/lib/utils/errors.js.map +0 -1
  545. package/lib/utils/index.js.map +0 -1
  546. package/lib/utils/throttling.js.map +0 -1
  547. package/lib/utils/types.js.map +0 -1
  548. package/lib/utils/utils.js.map +0 -1
  549. package/lib/workers/TaskEngine.js.map +0 -1
  550. package/lib/workers/WorkThreadEnvironment.js.map +0 -1
  551. package/lib/workers/index.js.map +0 -1
  552. package/lib/workers/messages.js.map +0 -1
  553. package/lib/workers/types.js.map +0 -1
  554. package/lib/workers/workerThread.js.map +0 -1
@@ -49,4 +49,4 @@ function migration(reference, precedence, flavour, rules) {
49
49
  })
50
50
  .apply();
51
51
  }
52
- //# sourceMappingURL=decorators.js.map
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb25zL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQ0EsOEJBK0VDO0FBL0dELHFEQU04QjtBQUU5Qiw4REFBMkQ7QUFDM0QsNkRBQXNEO0FBdUJ0RCxTQUFnQixTQUFTLENBQ3ZCLFNBQWlCLEVBQ2pCLFVBQTZELEVBQzdELE9BQWtDLEVBQ2xDLEtBQXVCO0lBRXZCLFNBQVMsY0FBYyxDQUNyQixVQUE2RCxFQUM3RCxPQUFrQyxFQUNsQyxLQUF1QjtRQUV2QixPQUFPLFVBQVUsUUFBZ0I7WUFDL0IsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUM7WUFDL0QsTUFBTSxxQkFBcUIsR0FDekIsQ0FBQyx1QkFBdUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLENBQUM7WUFFaEUsSUFBSSxnQkFBZ0IsR0FJSixVQUFVLENBQUM7WUFDM0IsSUFBSSxhQUFpQyxDQUFDO1lBQ3RDLElBQUksV0FBd0MsQ0FBQztZQUU3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1lBQy9CLENBQUM7WUFFRCxJQUFJLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJO2dCQUM3RCxnQkFBZ0IsR0FBRyxtQ0FBZ0IsQ0FBQztZQUV0QyxNQUFNLGVBQWUsR0FDbkIscUJBQVEsQ0FBQyxTQUFTLENBQUMsUUFBdUIsQ0FBQyxJQUFJLDJCQUFjLENBQUM7WUFDaEUsTUFBTSxzQkFBc0IsR0FDMUIscUJBQXFCO2dCQUNyQixnQkFBZ0IsS0FBSyxtQ0FBZ0I7Z0JBQ3JDLFNBQVM7Z0JBQ1QsU0FBUyxLQUFLLGFBQWEsQ0FBQztZQUM5QixNQUFNLFlBQVksR0FDaEIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxlQUFlLENBQUM7WUFFMUUsTUFBTSxPQUFPLEdBQ1gscUJBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FDUixDQUFDLDJCQUFlLENBQUMsU0FBUyxFQUFFLDJCQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUM5RCxFQUNELFlBQVksSUFBSSwyQkFBYyxDQUMvQixJQUFJLEVBQUUsQ0FBQztZQUNWLHFCQUFRLENBQUMsR0FBRyxDQUNWLENBQUMsMkJBQWUsQ0FBQyxTQUFTLEVBQUUsMkJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQzdELFlBQVksSUFBSSwyQkFBYyxFQUM5QixDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ2xDLENBQUM7WUFFRixxQkFBUSxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFN0QsT0FBTyxJQUFBLHFCQUFRLEVBQUMsMkJBQWUsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pDLFNBQVMsRUFBRSxTQUFTLElBQUssUUFBd0IsQ0FBQyxJQUFJO2dCQUN0RCxVQUFVLEVBQUUsZ0JBQWdCO2dCQUM1QixPQUFPLEVBQUUsWUFBWSxJQUFJLDJCQUFjO2dCQUN2QyxLQUFLLEVBQUUsV0FBVzthQUNuQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyx1QkFBVSxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLFNBQVMsQ0FBQztTQUM3QyxNQUFNLENBQUM7UUFDTixTQUFTLEVBQUUsY0FBYztRQUN6QixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQztLQUNuQyxDQUFDO1NBQ0QsS0FBSyxFQUFFLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIERlY29yYXRpb24sXG4gIERlZmF1bHRGbGF2b3VyLFxuICBtZXRhZGF0YSxcbiAgTWV0YWRhdGEsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgTWlncmF0aW9uLCBNaWdyYXRpb25SdWxlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1pZ3JhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9NaWdyYXRpb25TZXJ2aWNlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRpb24ocmVmZXJlbmNlOiBzdHJpbmcpOiAodGFyZ2V0OiBvYmplY3QpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRpb24oXG4gIHJlZmVyZW5jZTogc3RyaW5nLFxuICBwcmVjZWRlbmNlOiBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+PiB8IG51bGxcbik6ICh0YXJnZXQ6IG9iamVjdCkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gIGZsYXZvdXI6IHN0cmluZyxcbiAgcnVsZXM/OiBNaWdyYXRpb25SdWxlW11cbik6ICh0YXJnZXQ6IG9iamVjdCkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gIHByZWNlZGVuY2U6IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIGFueT4+LFxuICBmbGF2b3VyOiBzdHJpbmdcbik6ICh0YXJnZXQ6IG9iamVjdCkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gIHByZWNlZGVuY2U/OiBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+PiB8IHN0cmluZyB8IG51bGwsXG4gIGZsYXZvdXI/OiBzdHJpbmcgfCBNaWdyYXRpb25SdWxlW10sXG4gIHJ1bGVzPzogTWlncmF0aW9uUnVsZVtdXG4pOiAodGFyZ2V0OiBvYmplY3QpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRpb24oXG4gIHJlZmVyZW5jZTogc3RyaW5nLFxuICBwcmVjZWRlbmNlPzogQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj4gfCBzdHJpbmcgfCBudWxsLFxuICBmbGF2b3VyPzogc3RyaW5nIHwgTWlncmF0aW9uUnVsZVtdLFxuICBydWxlcz86IE1pZ3JhdGlvblJ1bGVbXVxuKTogKHRhcmdldDogb2JqZWN0KSA9PiBhbnkge1xuICBmdW5jdGlvbiBpbm5lck1pZ3JhdGlvbihcbiAgICBwcmVjZWRlbmNlPzogQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj4gfCBzdHJpbmcgfCBudWxsLFxuICAgIGZsYXZvdXI/OiBzdHJpbmcgfCBNaWdyYXRpb25SdWxlW10sXG4gICAgcnVsZXM/OiBNaWdyYXRpb25SdWxlW11cbiAgKTogKG9yaWdpbmFsOiBvYmplY3QpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbiAob3JpZ2luYWw6IG9iamVjdCkge1xuICAgICAgY29uc3QgdXNlZFByZWNlZGVuY2VBc0ZsYXZvdXIgPSB0eXBlb2YgcHJlY2VkZW5jZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0UHJlY2VkZW5jZSA9XG4gICAgICAgICF1c2VkUHJlY2VkZW5jZUFzRmxhdm91ciAmJiB0eXBlb2YgcHJlY2VkZW5jZSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgbGV0IHBhcnNlZFByZWNlZGVuY2U6XG4gICAgICAgIHwgQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj5cbiAgICAgICAgfCBzdHJpbmdcbiAgICAgICAgfCBudWxsXG4gICAgICAgIHwgdW5kZWZpbmVkID0gcHJlY2VkZW5jZTtcbiAgICAgIGxldCBwYXJzZWRGbGF2b3VyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcGFyc2VkUnVsZXM6IE1pZ3JhdGlvblJ1bGVbXSB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmxhdm91cikpIHtcbiAgICAgICAgcGFyc2VkUnVsZXMgPSBmbGF2b3VyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkRmxhdm91ciA9IGZsYXZvdXI7XG4gICAgICAgIHBhcnNlZFJ1bGVzID0gcnVsZXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcHJlY2VkZW5jZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBwYXJzZWRGbGF2b3VyID0gcHJlY2VkZW5jZTtcbiAgICAgICAgcGFyc2VkUHJlY2VkZW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlZFByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWRQcmVjZWRlbmNlICE9PSBudWxsKVxuICAgICAgICBwYXJzZWRQcmVjZWRlbmNlID0gTWlncmF0aW9uU2VydmljZTtcblxuICAgICAgY29uc3QgZmFsbGJhY2tGbGF2b3VyID1cbiAgICAgICAgTWV0YWRhdGEuZmxhdm91ck9mKG9yaWdpbmFsIGFzIENvbnN0cnVjdG9yKSB8fCBEZWZhdWx0Rmxhdm91cjtcbiAgICAgIGNvbnN0IHByZWZlclJlZmVyZW5jZUZsYXZvdXIgPVxuICAgICAgICBoYXNFeHBsaWNpdFByZWNlZGVuY2UgJiZcbiAgICAgICAgcGFyc2VkUHJlY2VkZW5jZSA9PT0gTWlncmF0aW9uU2VydmljZSAmJlxuICAgICAgICByZWZlcmVuY2UgJiZcbiAgICAgICAgcmVmZXJlbmNlICE9PSBwYXJzZWRGbGF2b3VyO1xuICAgICAgY29uc3QgZmluYWxGbGF2b3VyID1cbiAgICAgICAgKHByZWZlclJlZmVyZW5jZUZsYXZvdXIgPyByZWZlcmVuY2UgOiBwYXJzZWRGbGF2b3VyKSB8fCBmYWxsYmFja0ZsYXZvdXI7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgICBNZXRhZGF0YVtcImlubmVyR2V0XCJdKFxuICAgICAgICAgIFN5bWJvbC5mb3IoXG4gICAgICAgICAgICBbUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTiwgUGVyc2lzdGVuY2VLZXlzLkJZX0tFWV0uam9pbihcIi1cIilcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbmFsRmxhdm91ciB8fCBEZWZhdWx0Rmxhdm91clxuICAgICAgICApIHx8IFtdO1xuICAgICAgTWV0YWRhdGEuc2V0KFxuICAgICAgICBbUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTiwgUGVyc2lzdGVuY2VLZXlzLkJZX0tFWV0uam9pbihcIi1cIiksXG4gICAgICAgIGZpbmFsRmxhdm91ciB8fCBEZWZhdWx0Rmxhdm91cixcbiAgICAgICAgWy4uLmN1cnJlbnQsIHsgY2xhc3M6IG9yaWdpbmFsIH1dXG4gICAgICApO1xuXG4gICAgICBNZXRhZGF0YS5zZXQoUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTiwgcmVmZXJlbmNlLCBvcmlnaW5hbCk7XG5cbiAgICAgIHJldHVybiBtZXRhZGF0YShQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlIHx8IChvcmlnaW5hbCBhcyBDb25zdHJ1Y3RvcikubmFtZSxcbiAgICAgICAgcHJlY2VkZW5jZTogcGFyc2VkUHJlY2VkZW5jZSxcbiAgICAgICAgZmxhdm91cjogZmluYWxGbGF2b3VyIHx8IERlZmF1bHRGbGF2b3VyLFxuICAgICAgICBydWxlczogcGFyc2VkUnVsZXMsXG4gICAgICB9KShvcmlnaW5hbCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OKVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBpbm5lck1pZ3JhdGlvbixcbiAgICAgIGFyZ3M6IFtwcmVjZWRlbmNlLCBmbGF2b3VyLCBydWxlc10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cbiJdfQ==
@@ -25,4 +25,4 @@ __exportStar(require("./Migration.cjs"), exports);
25
25
  __exportStar(require("./MigrationService.cjs"), exports);
26
26
  __exportStar(require("./MigrationTasks.cjs"), exports);
27
27
  __exportStar(require("./types.cjs"), exports);
28
- //# sourceMappingURL=index.js.map
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0Isa0RBQTRCO0FBQzVCLHlEQUFtQztBQUNuQyx1REFBaUM7QUFDakMsOENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhwb3J0cyBmb3IgdGhlIG1pZ3JhdGlvbnMgbW9kdWxlLlxuICogQHN1bW1hcnkgVGhpcyBmaWxlIGV4cG9ydHMgYWxsIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhlIG1pZ3JhdGlvbnMgZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIGNvbnN0YW50cywgZGVjb3JhdG9ycywgYW5kIG1vcmUuXG4gKiBAbW9kdWxlIGNvcmUvbWlncmF0aW9uc1xuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01pZ3JhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTWlncmF0aW9uU2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTWlncmF0aW9uVGFza3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9ucy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5cbmltcG9ydCB7IEFkYXB0ZXJGbGFncywgQ29udGV4dE9mIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0dWFsQXJncyB9IGZyb20gXCIuLi91dGlscy9Db250ZXh0dWFsTG9nZ2VkQ2xhc3NcIjtcbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uPFxuICBRVUVSWVJVTk5FUixcbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PixcbiAgUiA9IHZvaWQsXG4+IHtcbiAgZmxhdm91cj86IHN0cmluZztcbiAgcHJlY2VkZW5jZTogTWlncmF0aW9uPGFueSwgYW55PiB8IE1pZ3JhdGlvbjxhbnksIGFueT5bXSB8IG51bGw7XG4gIHJlZmVyZW5jZTogc3RyaW5nO1xuICB0cmFuc2FjdGlvbjogYm9vbGVhbjtcbiAgdXAoXG4gICAgcXI6IFFVRVJZUlVOTkVSLFxuICAgIGFkYXB0ZXI6IEEsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPHZvaWQ+O1xuICBtaWdyYXRlKFxuICAgIHFyOiBRVUVSWVJVTk5FUixcbiAgICBhZGFwdGVyOiBBLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxSPjtcbiAgZG93bihcbiAgICBxcjogUVVFUllSVU5ORVIsXG4gICAgYWRhcHRlcjogQSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25Gb3JBZGFwdGVyPEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4+ID1cbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGluZmVyIENPTk4sIGFueT4gPyBDT05OIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvblJ1bGU8XG4gIEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4gPSBhbnksXG4gIFFVRVJZUlVOTkVSID0gQ29ubmVjdGlvbkZvckFkYXB0ZXI8QT4sXG4+ID0gKHFyOiBRVUVSWVJVTk5FUiwgYWRhcHRlcjogQSwgY3R4OiBDb250ZXh0T2Y8QT4pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbk1ldGFkYXRhID0ge1xuICBwcmVjZWRlbmNlPzogTWlncmF0aW9uPGFueSwgYW55PjtcbiAgZmxhdm91cjogc3RyaW5nO1xuICBydWxlcz86IE1pZ3JhdGlvblJ1bGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbmZpZzxQRVJTSVNUIGV4dGVuZHMgYm9vbGVhbj4gPSBBZGFwdGVyRmxhZ3M8YW55PiAmIHtcbiAgcGVyc2lzdE1pZ3JhdGlvblN0ZXBzOiBQRVJTSVNUO1xuICBwZXJzaXN0ZW5jZUZsYXZvdXI/OiBzdHJpbmc7XG59O1xuIl19
@@ -49,4 +49,4 @@ __decorate([
49
49
  (0, decorators_1.updatedAt)(),
50
50
  __metadata("design:type", Date)
51
51
  ], BaseModel.prototype, "updatedAt", void 0);
52
- //# sourceMappingURL=BaseModel.js.map
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZU1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL0Jhc2VNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx5RUFBaUU7QUFDakUsaURBQW9EO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLDRCQUFLO0lBZTNDLFlBQXNCLEdBQXlCO1FBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQWxCRCw4QkFrQkM7QUFaQztJQURDLElBQUEsc0JBQVMsR0FBRTs4QkFDQSxJQUFJOzRDQUFDO0FBT2pCO0lBREMsSUFBQSxzQkFBUyxHQUFFOzhCQUNBLElBQUk7NENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbEFyZywgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVkQXQsIHVwZGF0ZWRBdCB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBtb2RlbCBjbGFzcyBmb3IgYWxsIGRvbWFpbiBtb2RlbHNcbiAqIEBzdW1tYXJ5IEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBNb2RlbCBjbGFzcyBmcm9tIGRlY29yYXRvci12YWxpZGF0aW9uIGFuZCBhZGRzIHRpbWVzdGFtcCBmdW5jdGlvbmFsaXR5LlxuICogQWxsIGRvbWFpbiBtb2RlbHMgaW4gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBleHRlbmQgdGhpcyBjbGFzcyB0byBpbmhlcml0IGNvbW1vbiBwcm9wZXJ0aWVzIGFuZCBiZWhhdmlvcnMuXG4gKiBAcGFyYW0ge01vZGVsQXJnPEJhc2VNb2RlbD59IGFyZyAtIE9wdGlvbmFsIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yIHRoZSBtb2RlbFxuICogQGNsYXNzIEJhc2VNb2RlbFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICB1c2VybmFtZSE6IHN0cmluZztcbiAqXG4gKiAgIEBlbWFpbCgpXG4gKiAgIGVtYWlsITogc3RyaW5nO1xuICpcbiAqICAgY29uc3RydWN0b3IoZGF0YT86IE1vZGVsQXJnPFVzZXI+KSB7XG4gKiAgICAgc3VwZXIoZGF0YSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCB1c2VyID0gbmV3IFVzZXIoeyB1c2VybmFtZTogJ2pvaG4nLCBlbWFpbDogJ2pvaG5AZXhhbXBsZS5jb20nIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWwgZXh0ZW5kcyBNb2RlbCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRpb24gdGltZXN0YW1wIGZvciB0aGUgbW9kZWxcbiAgICogQHN1bW1hcnkgQXV0b21hdGljYWxseSBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBtb2RlbCBpcyBjcmVhdGVkXG4gICAqL1xuICBAY3JlYXRlZEF0KClcbiAgY3JlYXRlZEF0ITogRGF0ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExhc3QgdXBkYXRlIHRpbWVzdGFtcCBmb3IgdGhlIG1vZGVsXG4gICAqIEBzdW1tYXJ5IEF1dG9tYXRpY2FsbHkgdXBkYXRlZCB0byB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHdoZW5ldmVyIHRoZSBtb2RlbCBpcyBtb2RpZmllZFxuICAgKi9cbiAgQHVwZGF0ZWRBdCgpXG4gIHVwZGF0ZWRBdCE6IERhdGU7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPEJhc2VNb2RlbD4pIHtcbiAgICBzdXBlcihhcmcpO1xuICB9XG59XG4iXX0=
@@ -53,4 +53,4 @@ exports.SequenceModel = SequenceModel = __decorate([
53
53
  (0, decorator_validation_1.model)(),
54
54
  __metadata("design:paramtypes", [Object])
55
55
  ], SequenceModel);
56
- //# sourceMappingURL=SequenceModel.js.map
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9TZXF1ZW5jZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlFQUFpRTtBQUVqRSwrQ0FBd0M7QUFDeEMsaURBQXFDO0FBQ3JDLDZEQUE0QztBQUM1Qyw2Q0FBbUM7QUFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBR0ksSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYyxTQUFRLHFCQUFTO0lBZTFDLFlBQVksR0FBNkI7UUFDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFsQlksc0NBQWE7QUFLeEI7SUFEQyxJQUFBLGVBQUUsRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzt5Q0FDM0I7QUFRWjtJQUZDLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEsZ0JBQUssR0FBRTs7OENBQ2tCO3dCQWJmLGFBQWE7SUFGekIsSUFBQSxrQkFBSyxFQUFDLFlBQVksQ0FBQztJQUNuQixJQUFBLDRCQUFLLEdBQUU7O0dBQ0ssYUFBYSxDQWtCekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsQXJnIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQmFzZU1vZGVsIH0gZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5pbXBvcnQgeyB0YWJsZSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IHBrIH0gZnJvbSBcIi4uL2lkZW50aXR5L2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IGluZGV4IH0gZnJvbSBcIi4vaW5kZXhpbmdcIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFJBTSBzZXF1ZW5jZSBtb2RlbCBmb3IgYXV0by1pbmNyZW1lbnRpbmcgdmFsdWVzXG4gKiBAc3VtbWFyeSBBIG1vZGVsIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHNlcXVlbmNlIGluIHRoZSBSQU0gYWRhcHRlci4gSXQgc3RvcmVzIHRoZSBjdXJyZW50IHZhbHVlXG4gKiBvZiBhIHNlcXVlbmNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgc2VxdWVudGlhbCBpZGVudGlmaWVycyBmb3IgZW50aXRpZXMuXG4gKiBUaGUgc2VxdWVuY2UgaXMgaWRlbnRpZmllZCBieSBpdHMgSUQgYW5kIG1haW50YWlucyB0aGUgY3VycmVudCB2YWx1ZS5cbiAqIEBwYXJhbSB7TW9kZWxBcmc8U2VxdWVuY2U+fSBzZXEgLSBJbml0aWFsIHNlcXVlbmNlIGRhdGFcbiAqIEBjbGFzcyBTZXF1ZW5jZVxuICogQGNhdGVnb3J5IFJhbVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG5ldyBzZXF1ZW5jZVxuICogY29uc3Qgb3JkZXJTZXF1ZW5jZSA9IG5ldyBTZXF1ZW5jZSh7IGlkOiAnb3JkZXJfc2VxJywgY3VycmVudDogMSB9KTtcbiAqXG4gKiAvLyBVc2UgdGhlIHNlcXVlbmNlIHRvIGdldCB0aGUgbmV4dCB2YWx1ZVxuICogY29uc3QgbmV4dE9yZGVySWQgPSBwYXJzZUludChvcmRlclNlcXVlbmNlLmN1cnJlbnQudG9TdHJpbmcoKSkgKyAxO1xuICogb3JkZXJTZXF1ZW5jZS5jdXJyZW50ID0gbmV4dE9yZGVySWQ7XG4gKiBgYGBcbiAqL1xuQHRhYmxlKFwiPz9zZXF1ZW5jZVwiKVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBTZXF1ZW5jZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmltYXJ5IGtleSBpZGVudGlmaWVyIGZvciB0aGUgc2VxdWVuY2VcbiAgICovXG4gIEBwayh7IHR5cGU6IFN0cmluZywgZ2VuZXJhdGVkOiBmYWxzZSB9KVxuICBpZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIFVzZWQgdG8gZ2VuZXJhdGUgdGhlIG5leHQgc2VxdWVudGlhbCB2YWx1ZVxuICAgKi9cbiAgQHJlcXVpcmVkKClcbiAgQGluZGV4KClcbiAgY3VycmVudCE6IHN0cmluZyB8IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzZXE/OiBNb2RlbEFyZzxTZXF1ZW5jZU1vZGVsPikge1xuICAgIHN1cGVyKHNlcSk7XG4gIH1cbn1cbiJdfQ==
@@ -939,7 +939,9 @@ async function manyToManyOnDelete(context, data, key, model) {
939
939
  * @memberOf module:core
940
940
  */
941
941
  function getPopulateKey(tableName, fieldName, id) {
942
- return [constants_1.PersistenceKeys.POPULATE, tableName, fieldName, id].join(".");
942
+ if (fieldName)
943
+ return [constants_1.PersistenceKeys.POPULATE, tableName, fieldName, id].join(".");
944
+ return [constants_1.PersistenceKeys.POPULATE, tableName, id].join(".");
943
945
  }
944
946
  function getTagForDeleteKey(tableName, fieldName, id) {
945
947
  return [constants_1.PersistenceKeys.TAG_FOR_DELETION, tableName, id].join(".");
@@ -960,8 +962,28 @@ function getTagForDeleteKey(tableName, fieldName, id) {
960
962
  */
961
963
  async function cacheModelForPopulate(context, parentModel, propertyKey, pkValue, cacheValue) {
962
964
  const cacheKey = getPopulateKey(parentModel.constructor.name, propertyKey, pkValue);
965
+ const log = context.logger.for(cacheModelForPopulate);
963
966
  const cache = context.get("cacheForPopulate") || {};
964
- cache[cacheKey] = cacheValue;
967
+ let cached = cache[cacheKey];
968
+ let preferFromCache = context.getOrUndefined("preferFromCache");
969
+ if (!preferFromCache) {
970
+ try {
971
+ log.silly(`retrieving from children`);
972
+ preferFromCache = context.getFromChildren("preferFromCache") || false;
973
+ if (preferFromCache) {
974
+ cached = (context.getFromChildren("cacheForPopulate") || {})[cacheKey];
975
+ }
976
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
977
+ }
978
+ catch (e) {
979
+ preferFromCache = false;
980
+ }
981
+ }
982
+ if (preferFromCache) {
983
+ log.debug(`preferring previous cache: ${!!cache[cacheKey]}`);
984
+ }
985
+ cache[cacheKey] =
986
+ preferFromCache && cached ? cached : cacheValue;
965
987
  return context.accumulate({ cacheForPopulate: cache });
966
988
  }
967
989
  /**
@@ -1173,4 +1195,4 @@ function repositoryFromTypeMetadata(model, propertyKey, alias) {
1173
1195
  throw new db_decorators_1.InternalError(`Invalid repository class for ${propertyKey}`);
1174
1196
  return repo;
1175
1197
  }
1176
- //# sourceMappingURL=construction.js.map
1198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtFQSx3Q0E4Q0M7QUFrSEQsNENBc0NDO0FBaURELDRDQXlDQztBQTJDRCw0Q0E4QkM7QUF3REQsMERBc0hDO0FBa0NELDhDQWlCQztBQWtERCw4Q0F1REM7QUFFRCw4Q0FvREM7QUFFRCxnRUFrQ0M7QUFFRCw4Q0FlQztBQUVELDhDQXFCQztBQUVELGdEQXlGQztBQWlHRCxvRUEyREM7QUFFRCxnREFnQkM7QUFFRCxnREEwREM7QUFZRCx3Q0FRQztBQUNELGdEQU1DO0FBZ0JELHNEQXdDQztBQXdERCw0QkErREM7QUFFRCxzQ0FtREM7QUFzREQsZ0VBa0RDO0FBbmlERCx5RUFRd0M7QUFDeEMsK0RBQTREO0FBRTVELDJEQUtpQztBQUNqQyw4REFBMkQ7QUFDM0QsNkRBQWtEO0FBQ2xELHFEQUE2RDtBQUk3RCw2REFBNEM7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUNsQyxLQUFRLEVBQ1IsT0FBbUIsRUFDbkIsS0FBYSxFQUNiLFVBQW9CLEVBQ3BCLFNBQStCO0lBRS9CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLFdBQVcsR0FBRyw0QkFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO1lBQ2QsTUFBTSxJQUFJLDZCQUFhLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RSxVQUFVLEdBQUcsdUJBQVUsQ0FBQyxR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QUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsdUJBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBUSxDQUFDO0lBRXZELElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLO1FBQ3ZCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQixnQ0FBZ0MsV0FBcUIsRUFBRSxDQUN4RCxDQUFDO0lBRUosT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgbW9kZWwsXG4gIGlzRXF1YWwsXG4gIE1vZGVsLFxuICB0eXBlIE1vZGVsQXJnLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICByZXF1aXJlZCxcbiAgVmFsaWRhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlcG8sIFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxuICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ2FzY2FkZSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyRmxhZ3MsIENvbnRleHRPZiB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgcGsgfSBmcm9tIFwiLi4vaWRlbnRpdHkvZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG9yIHVwZGF0ZXMgYSBtb2RlbCBpbnN0YW5jZVxuICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0ZSBhIG5ldyBtb2RlbCBvciB1cGRhdGUgYW4gZXhpc3Rpbmcgb25lIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHByaW1hcnkga2V5XG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGNyZWF0ZSBvciB1cGRhdGVcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1JlcG88TSwgRiwgQ29udGV4dDxGPj59IFtyZXBvc2l0b3J5XSAtIE9wdGlvbmFsIHJlcG9zaXRvcnkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBvciB1cGRhdGVkIG1vZGVsXG4gKiBAZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgY3JlYXRlT3JVcGRhdGVcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICpcbiAqICAgQ2FsbGVyLT4+Y3JlYXRlT3JVcGRhdGU6IG1vZGVsLCBjb250ZXh0LCByZXBvc2l0b3J5P1xuICogICBhbHQgcmVwb3NpdG9yeSBub3QgcHJvdmlkZWRcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+Pk1vZGVsOiBnZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSlcbiAqICAgICBNb2RlbC0tPj5jcmVhdGVPclVwZGF0ZTogY29uc3RydWN0b3JcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+PlJlcG9zaXRvcnk6IGZvck1vZGVsKGNvbnN0cnVjdG9yKVxuICogICAgIFJlcG9zaXRvcnktLT4+Y3JlYXRlT3JVcGRhdGU6IHJlcG9zaXRvcnlcbiAqICAgZW5kXG4gKlxuICogICBhbHQgcHJpbWFyeSBrZXkgdW5kZWZpbmVkXG4gKiAgICAgY3JlYXRlT3JVcGRhdGUtPj5SZXBvc2l0b3J5OiBjcmVhdGUobW9kZWwsIGNvbnRleHQpXG4gKiAgICAgUmVwb3NpdG9yeS0tPj5jcmVhdGVPclVwZGF0ZTogY3JlYXRlZCBtb2RlbFxuICogICBlbHNlIHByaW1hcnkga2V5IGRlZmluZWRcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+PlJlcG9zaXRvcnk6IHVwZGF0ZShtb2RlbCwgY29udGV4dClcbiAqICAgICBhbHQgdXBkYXRlIHN1Y2Nlc3NmdWxcbiAqICAgICAgIFJlcG9zaXRvcnktLT4+Y3JlYXRlT3JVcGRhdGU6IHVwZGF0ZWQgbW9kZWxcbiAqICAgICBlbHNlIE5vdEZvdW5kRXJyb3JcbiAqICAgICAgIGNyZWF0ZU9yVXBkYXRlLT4+UmVwb3NpdG9yeTogY3JlYXRlKG1vZGVsLCBjb250ZXh0KVxuICogICAgICAgUmVwb3NpdG9yeS0tPj5jcmVhdGVPclVwZGF0ZTogY3JlYXRlZCBtb2RlbFxuICogICAgIGVuZFxuICogICBlbmRcbiAqXG4gKiAgIGNyZWF0ZU9yVXBkYXRlLS0+PkNhbGxlcjogbW9kZWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU9yVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgRiBleHRlbmRzIEFkYXB0ZXJGbGFncz4oXG4gIG1vZGVsOiBNLFxuICBjb250ZXh0OiBDb250ZXh0PEY+LFxuICBhbGlhczogc3RyaW5nLFxuICByZXBvc2l0b3J5PzogUmVwbzxNPixcbiAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYW55PlxuKTogUHJvbWlzZTxNPiB7XG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihjcmVhdGVPclVwZGF0ZSk7XG4gIGlmICghcmVwb3NpdG9yeSkge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGlmICghY29uc3RydWN0b3IpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHttb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIHJlcG9zaXRvcnkgPSBSZXBvc2l0b3J5LmZvck1vZGVsPE0sIFJlcG88TT4+KFxuICAgICAgY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBNb2RlbENvbnN0cnVjdG9yPE0+LFxuICAgICAgYWxpYXNcbiAgICApO1xuICAgIGxvZy5pbmZvKGBSZXRyaWV2ZWQgJHtyZXBvc2l0b3J5LnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICByZXBvc2l0b3J5ID0gb3ZlcnJpZGVzID8gcmVwb3NpdG9yeS5vdmVycmlkZShvdmVycmlkZXMpIDogcmVwb3NpdG9yeTtcblxuICBsZXQgcmVzdWx0OiBNO1xuXG4gIGlmICh0eXBlb2YgbW9kZWxbTW9kZWwucGsocmVwb3NpdG9yeS5jbGFzcyldID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbG9nLmluZm8oYE5vIHBrIGZvdW5kIGluICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfSAtIGNyZWF0aW5nYCk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcmVwb3NpdG9yeS5jcmVhdGUobW9kZWwsIGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFxuICAgICAgYHBrIGZvdW5kIGluICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfSAtIGF0dGVtcHRpbmcgdXBkYXRlYFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkudXBkYXRlKG1vZGVsLCBjb250ZXh0KTtcbiAgICAgIGxvZy5pbmZvKGBVcGRhdGVkICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfWApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYHVwZGF0ZSBGYWlsZWQgLSBjcmVhdGluZyBuZXcgJHtNb2RlbC50YWJsZU5hbWUocmVwb3NpdG9yeS5jbGFzcyl9YFxuICAgICAgKTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkuY3JlYXRlKG1vZGVsLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgQWZ0ZXIgY3JlYXRlIHVwZGF0ZTogJHtyZXN1bHR9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vXG4vLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGVCdWxrPFxuLy8gICBNIGV4dGVuZHMgTW9kZWwsXG4vLyAgIEYgZXh0ZW5kcyBBZGFwdGVyRmxhZ3MsXG4vLyA+KFxuLy8gICBtb2RlbHM6IE1bXSxcbi8vICAgY29udGV4dDogQ29udGV4dDxGPixcbi8vICAgYWxpYXM6IHN0cmluZyxcbi8vICAgcmVwb3NpdG9yeT86IFJlcG88TT5cbi8vICk6IFByb21pc2U8TT4ge1xuLy8gICBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3IoY3JlYXRlT3JVcGRhdGVCdWxrKTtcbi8vICAgaWYgKCFyZXBvc2l0b3J5KSB7XG4vLyAgICAgY29uc3QgY29uc3RydWN0b3IgPSBNb2RlbC5nZXQobW9kZWxzWzBdLmNvbnN0cnVjdG9yLm5hbWUpO1xuLy8gICAgIGlmICghY29uc3RydWN0b3IpXG4vLyAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbi8vICAgICAgICAgYENvdWxkIG5vdCBmaW5kIG1vZGVsICR7bW9kZWxzWzBdLmNvbnN0cnVjdG9yLm5hbWV9YFxuLy8gICAgICAgKTtcbi8vICAgICByZXBvc2l0b3J5ID0gUmVwb3NpdG9yeS5mb3JNb2RlbDxNLCBSZXBvPE0+Pihcbi8vICAgICAgIGNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPixcbi8vICAgICAgIGFsaWFzXG4vLyAgICAgKTtcbi8vICAgICBsb2cuaW5mbyhgUmV0cmlldmVkICR7cmVwb3NpdG9yeS50b1N0cmluZygpfWApO1xuLy8gICB9XG4vLyAgIGNvbnN0IHBrcyA9IG1vZGVscy5tYXAoKG0pID0+IG1bTW9kZWwucGsobSldKTtcbi8vXG4vLyAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHBrcy5tYXAoKHBrKSA9PiByZXBvc2l0b3J5LnJlYWQocGsgYXMgc3RyaW5nLCBjb250ZXh0KSkpO1xuLy9cbi8vICAgZXhpc3RpbmcuZm9yRWFjaCgoZXgsIGkpID0+IHtcbi8vICAgICBpZiAoZXguc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiKSB7XG4vL1xuLy8gICAgIH1cbi8vICAgfSlcbi8vXG4vLyAgIGZvciAobGV0IGV4IG9mIGV4aXN0aW5nKXtcbi8vICAgICBpZiAoZXguKVxuLy8gICB9XG4vLyAgIGxldCByZXN1bHQ6IE07XG4vL1xuLy8gICBpZiAodHlwZW9mIG1vZGVsW01vZGVsLnBrKHJlcG9zaXRvcnkuY2xhc3MpXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuLy8gICAgIGxvZy5pbmZvKGBObyBwayBmb3VuZCBpbiAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX0gLSBjcmVhdGluZ2ApO1xuLy8gICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkuY3JlYXRlKG1vZGVsLCBjb250ZXh0KTtcbi8vICAgfSBlbHNlIHtcbi8vICAgICBsb2cuaW5mbyhcbi8vICAgICAgIGBwayBmb3VuZCBpbiAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX0gLSBhdHRlbXB0aW5nIHVwZGF0ZWBcbi8vICAgICApO1xuLy8gICAgIHRyeSB7XG4vLyAgICAgICByZXN1bHQgPSBhd2FpdCByZXBvc2l0b3J5LnVwZGF0ZShtb2RlbCwgY29udGV4dCk7XG4vLyAgICAgICBsb2cuaW5mbyhgVXBkYXRlZCAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX1gKTtcbi8vICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbi8vICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSkge1xuLy8gICAgICAgICB0aHJvdyBlO1xuLy8gICAgICAgfVxuLy8gICAgICAgbG9nLmluZm8oXG4vLyAgICAgICAgIGB1cGRhdGUgRmFpbGVkIC0gY3JlYXRpbmcgbmV3ICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfWBcbi8vICAgICAgICk7XG4vLyAgICAgICByZXN1bHQgPSBhd2FpdCByZXBvc2l0b3J5LmNyZWF0ZShtb2RlbCwgY29udGV4dCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICBsb2cuaW5mbyhgQWZ0ZXIgY3JlYXRlIHVwZGF0ZTogJHtyZXN1bHR9YCk7XG4vLyAgIH1cbi8vICAgcmV0dXJuIHJlc3VsdDtcbi8vIH1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBvbmUtdG8tb25lIHJlbGF0aW9uc2hpcCBjcmVhdGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW9uZSByZWxhdGlvbnNoaXAgd2hlbiBjcmVhdGluZyBhIG1vZGVsLCBlaXRoZXIgYnkgcmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgbW9kZWwgb3IgY3JlYXRpbmcgYSBuZXcgb25lXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25DcmVhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPbkNyZWF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKiAgIHBhcnRpY2lwYW50IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZVxuICpcbiAqICAgQ2FsbGVyLT4+b25lVG9PbmVPbkNyZWF0ZTogdGhpcywgY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbFxuICogICBvbmVUb09uZU9uQ3JlYXRlLT4+b25lVG9PbmVPbkNyZWF0ZTogY2hlY2sgaWYgcHJvcGVydHlWYWx1ZSBleGlzdHNcbiAqXG4gKiAgIGFsdCBwcm9wZXJ0eVZhbHVlIGlzIG5vdCBhbiBvYmplY3RcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBrZXlcbiAqICAgICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0tPj5vbmVUb09uZU9uQ3JlYXRlOiBpbm5lclJlcG9cbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+aW5uZXJSZXBvOiByZWFkKHByb3BlcnR5VmFsdWUpXG4gKiAgICAgaW5uZXJSZXBvLS0+Pm9uZVRvT25lT25DcmVhdGU6IHJlYWRcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkXG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+Pm9uZVRvT25lT25DcmVhdGU6IHNldCBtb2RlbFtrZXldID0gcHJvcGVydHlWYWx1ZVxuICogICBlbHNlIHByb3BlcnR5VmFsdWUgaXMgYW4gb2JqZWN0XG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+Pk1vZGVsOiBnZXQoZGF0YS5jbGFzcylcbiAqICAgICBNb2RlbC0tPj5vbmVUb09uZU9uQ3JlYXRlOiBjb25zdHJ1Y3RvclxuICogICAgIG9uZVRvT25lT25DcmVhdGUtPj5SZXBvc2l0b3J5OiBmb3JNb2RlbChjb25zdHJ1Y3RvcilcbiAqICAgICBSZXBvc2l0b3J5LS0+Pm9uZVRvT25lT25DcmVhdGU6IHJlcG9cbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+cmVwbzogY3JlYXRlKHByb3BlcnR5VmFsdWUpXG4gKiAgICAgcmVwby0tPj5vbmVUb09uZU9uQ3JlYXRlOiBjcmVhdGVkXG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+PmZpbmRQcmltYXJ5S2V5OiBjcmVhdGVkXG4gKiAgICAgZmluZFByaW1hcnlLZXktLT4+b25lVG9PbmVPbkNyZWF0ZTogcGtcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCBjcmVhdGVkW3BrXSwgY3JlYXRlZFxuICogICAgIG9uZVRvT25lT25DcmVhdGUtPj5vbmVUb09uZU9uQ3JlYXRlOiBzZXQgbW9kZWxba2V5XSA9IGNyZWF0ZWRbcGtdXG4gKiAgIGVuZFxuICpcbiAqICAgb25lVG9PbmVPbkNyZWF0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvT25lT25DcmVhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWUpIHJldHVybjtcbiAgaWYgKCF2YWxpZEJpZGlyZWN0aW9uYWxSZWxhdGlvbihtb2RlbCwgZGF0YSkpIHJldHVybjtcbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgaW5uZXJSZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICAgICk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IGlubmVyUmVwb1xuICAgICAgLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcylcbiAgICAgIC5yZWFkKHByb3BlcnR5VmFsdWUsIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkKTtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yID0gKFxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyAoKSA9PiBDb25zdHJ1Y3RvcikoKVxuICAgICAgOiBkYXRhLmNsYXNzXG4gICkgYXMgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHtkYXRhLmNsYXNzfWApO1xuICBjb25zdCByZXBvOiBSZXBvPGFueT4gPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNvbnN0cnVjdG9yLCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuICBjb25zdCBjcmVhdGVkID0gYXdhaXQgcmVwb1xuICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gICAgLmNyZWF0ZShwcm9wZXJ0eVZhbHVlLCBjb250ZXh0KTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayhjcmVhdGVkKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIGNyZWF0ZWRbcGtdLCBjcmVhdGVkKTtcbiAgKG1vZGVsIGFzIGFueSlba2V5XSA9IGNyZWF0ZWRbcGtdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHVwZGF0ZXNcbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHdoZW4gdXBkYXRpbmcgYSBtb2RlbCwgZWl0aGVyIGJ5IHJlZmVyZW5jaW5nIGFuIGV4aXN0aW5nIG1vZGVsIG9yIHVwZGF0aW5nIHRoZSByZWxhdGVkIG1vZGVsXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25VcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPblVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjcmVhdGVPclVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBmaW5kUHJpbWFyeUtleVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvT25lT25VcGRhdGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9PbmVPblVwZGF0ZS0+Pm9uZVRvT25lT25VcGRhdGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWUgZXhpc3RzXG4gKiAgIG9uZVRvT25lT25VcGRhdGUtPj5vbmVUb09uZU9uVXBkYXRlOiBjaGVjayBpZiBjYXNjYWRlLnVwZGF0ZSBpcyBDQVNDQURFXG4gKlxuICogICBhbHQgcHJvcGVydHlWYWx1ZSBpcyBub3QgYW4gb2JqZWN0XG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9PbmVPblVwZGF0ZTogaW5uZXJSZXBvXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PmlubmVyUmVwbzogcmVhZChwcm9wZXJ0eVZhbHVlKVxuICogICAgIGlubmVyUmVwby0tPj5vbmVUb09uZU9uVXBkYXRlOiByZWFkXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PmNhY2hlTW9kZWxGb3JQb3B1bGF0ZTogY29udGV4dCwgbW9kZWwsIGtleSwgcHJvcGVydHlWYWx1ZSwgcmVhZFxuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5vbmVUb09uZU9uVXBkYXRlOiBzZXQgbW9kZWxba2V5XSA9IHByb3BlcnR5VmFsdWVcbiAqICAgZWxzZSBwcm9wZXJ0eVZhbHVlIGlzIGFuIG9iamVjdFxuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5jcmVhdGVPclVwZGF0ZTogbW9kZWxba2V5XSwgY29udGV4dFxuICogICAgIGNyZWF0ZU9yVXBkYXRlLS0+Pm9uZVRvT25lT25VcGRhdGU6IHVwZGF0ZWRcbiAqICAgICBvbmVUb09uZU9uVXBkYXRlLT4+ZmluZFByaW1hcnlLZXk6IHVwZGF0ZWRcbiAqICAgICBmaW5kUHJpbWFyeUtleS0tPj5vbmVUb09uZU9uVXBkYXRlOiBwa1xuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIHVwZGF0ZWRbcGtdLCB1cGRhdGVkXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+Pm9uZVRvT25lT25VcGRhdGU6IHNldCBtb2RlbFtrZXldID0gdXBkYXRlZFtwa11cbiAqICAgZW5kXG4gKlxuICogICBvbmVUb09uZU9uVXBkYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPblVwZGF0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWU6IGFueSA9IG1vZGVsW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZSkgcmV0dXJuO1xuICBpZiAoZGF0YS5jYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgaW5uZXJSZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICAgICk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IGlubmVyUmVwb1xuICAgICAgLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcylcbiAgICAgIC5yZWFkKHByb3BlcnR5VmFsdWUsIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkKTtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1cGRhdGVkID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gICAgbW9kZWxba2V5XSBhcyBNLFxuICAgIGNvbnRleHQsXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0aGlzLl9vdmVycmlkZXNcbiAgKTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayh1cGRhdGVkKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHVwZGF0ZWRbcGsgYXMga2V5b2YgTV0gYXMgc3RyaW5nLFxuICAgIHVwZGF0ZWRcbiAgKTtcbiAgbW9kZWxba2V5XSA9IHVwZGF0ZWRbcGsgYXMga2V5b2YgTV07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgb25lLXRvLW9uZSByZWxhdGlvbnNoaXAgZGVsZXRpb25cbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHdoZW4gZGVsZXRpbmcgYSBtb2RlbCwgZGVsZXRpbmcgdGhlIHJlbGF0ZWQgbW9kZWwgaWYgY2FzY2FkZSBpcyBlbmFibGVkXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25EZWxldGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPbkRlbGV0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvT25lT25EZWxldGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9PbmVPbkRlbGV0ZS0+Pm9uZVRvT25lT25EZWxldGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWUgZXhpc3RzXG4gKiAgIG9uZVRvT25lT25EZWxldGUtPj5vbmVUb09uZU9uRGVsZXRlOiBjaGVjayBpZiBjYXNjYWRlLmRlbGV0ZSBpcyBDQVNDQURFXG4gKlxuICogICBvbmVUb09uZU9uRGVsZXRlLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBrZXlcbiAqICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9PbmVPbkRlbGV0ZTogaW5uZXJSZXBvXG4gKlxuICogICBhbHQgcHJvcGVydHlWYWx1ZSBpcyBub3QgYSBNb2RlbCBpbnN0YW5jZVxuICogICAgIG9uZVRvT25lT25EZWxldGUtPj5pbm5lclJlcG86IGRlbGV0ZShtb2RlbFtrZXldLCBjb250ZXh0KVxuICogICAgIGlubmVyUmVwby0tPj5vbmVUb09uZU9uRGVsZXRlOiBkZWxldGVkXG4gKiAgIGVsc2UgcHJvcGVydHlWYWx1ZSBpcyBhIE1vZGVsIGluc3RhbmNlXG4gKiAgICAgb25lVG9PbmVPbkRlbGV0ZS0+PmlubmVyUmVwbzogZGVsZXRlKG1vZGVsW2tleV1baW5uZXJSZXBvLnBrXSwgY29udGV4dClcbiAqICAgICBpbm5lclJlcG8tLT4+b25lVG9PbmVPbkRlbGV0ZTogZGVsZXRlZFxuICogICBlbmRcbiAqXG4gKiAgIG9uZVRvT25lT25EZWxldGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGRlbGV0ZWRbaW5uZXJSZXBvLnBrXSwgZGVsZXRlZFxuICogICBvbmVUb09uZU9uRGVsZXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPbkRlbGV0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWU6IGFueSA9IG1vZGVsW2tleV07XG4gIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBwcm9wZXJ0eVZhbHVlID09PSBudWxsKSByZXR1cm47XG4gIGlmIChkYXRhLmNhc2NhZGUuZGVsZXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgY29uc3QgaW5uZXJSZXBvOiBSZXBvPE0+ID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICApO1xuICBsZXQgZGVsZXRlZDogTTtcbiAgaWYgKCEocHJvcGVydHlWYWx1ZSBpbnN0YW5jZW9mIE1vZGVsKSlcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShtb2RlbFtrZXldIGFzIHN0cmluZywgY29udGV4dCk7XG4gIGVsc2VcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShcbiAgICAgIChtb2RlbFtrZXldIGFzIE0pW2lubmVyUmVwby5wayBhcyBrZXlvZiBNXSBhcyBzdHJpbmcsXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIGRlbGV0ZWRbaW5uZXJSZXBvLnBrXSBhcyBzdHJpbmcsXG4gICAgZGVsZXRlZFxuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBjcmVhdGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHdoZW4gY3JlYXRpbmcgYSBtb2RlbCwgZWl0aGVyIGJ5IHJlZmVyZW5jaW5nIGV4aXN0aW5nIG1vZGVscyBvciBjcmVhdGluZyBuZXcgb25lc1xuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgUmVwbzxNLCBGLCBDPlxuICogQHRlbXBsYXRlIFYgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhIHR5cGUgZXh0ZW5kaW5nIFJlbGF0aW9uc01ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAqIEBmdW5jdGlvbiBvbmVUb01hbnlPbkNyZWF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPbkNyZWF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjcmVhdGVPclVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBmaW5kUHJpbWFyeUtleVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvTWFueU9uQ3JlYXRlOiB0aGlzLCBjb250ZXh0LCBkYXRhLCBrZXksIG1vZGVsXG4gKiAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+b25lVG9NYW55T25DcmVhdGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWVzIGV4aXN0cyBhbmQgaGFzIGxlbmd0aFxuICogICBvbmVUb01hbnlPbkNyZWF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBjaGVjayBpZiBhbGwgZWxlbWVudHMgaGF2ZSBzYW1lIHR5cGVcbiAqICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogY3JlYXRlIHVuaXF1ZVZhbHVlcyBzZXRcbiAqXG4gKiAgIGFsdCBhcnJheVR5cGUgaXMgbm90IFwib2JqZWN0XCJcbiAqICAgICBvbmVUb01hbnlPbkNyZWF0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9NYW55T25DcmVhdGU6IHJlcG9cbiAqICAgICBsb29wIGZvciBlYWNoIGlkIGluIHVuaXF1ZVZhbHVlc1xuICogICAgICAgb25lVG9NYW55T25DcmVhdGUtPj5yZXBvOiByZWFkKGlkKVxuICogICAgICAgcmVwby0tPj5vbmVUb01hbnlPbkNyZWF0ZTogcmVhZFxuICogICAgICAgb25lVG9NYW55T25DcmVhdGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlkLCByZWFkXG4gKiAgICAgZW5kXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4udW5pcXVlVmFsdWVzXVxuICogICBlbHNlIGFycmF5VHlwZSBpcyBcIm9iamVjdFwiXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5maW5kUHJpbWFyeUtleTogcHJvcGVydHlWYWx1ZXNbMF1cbiAqICAgICBmaW5kUHJpbWFyeUtleS0tPj5vbmVUb01hbnlPbkNyZWF0ZTogcGtOYW1lXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogY3JlYXRlIHJlc3VsdCBzZXRcbiAqICAgICBsb29wIGZvciBlYWNoIG0gaW4gcHJvcGVydHlWYWx1ZXNcbiAqICAgICAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+Y3JlYXRlT3JVcGRhdGU6IG0sIGNvbnRleHRcbiAqICAgICAgIGNyZWF0ZU9yVXBkYXRlLS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiByZWNvcmRcbiAqICAgICAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCByZWNvcmRbcGtOYW1lXSwgcmVjb3JkXG4gKiAgICAgICBvbmVUb01hbnlPbkNyZWF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBhZGQgcmVjb3JkW3BrTmFtZV0gdG8gcmVzdWx0XG4gKiAgICAgZW5kXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4ucmVzdWx0XVxuICogICBlbmRcbiAqXG4gKiAgIG9uZVRvTWFueU9uQ3JlYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9NYW55T25DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TT4sXG4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIG9sZE1vZGVsPzogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWVzIHx8ICFwcm9wZXJ0eVZhbHVlcy5sZW5ndGgpIHJldHVybjtcblxuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsLCBkYXRhKSkgcmV0dXJuO1xuXG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihvbmVUb01hbnlPbkNyZWF0ZVVwZGF0ZSk7XG5cbiAgY29uc3QgcmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gIGNvbnN0IHBrTmFtZSA9IE1vZGVsLnBrKFxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgIDogZGF0YS5jbGFzc1xuICApO1xuICBjb25zdCByZXN1bHQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydHlWYWx1ZXMpIHtcbiAgICBsZXQgbTogTTtcbiAgICBpZiAodHlwZW9mIHByb3BlcnR5ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICBtID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLnJlYWQocHJvcGVydHksIGNvbnRleHQpO1xuICAgICAgbG9nLmRlYnVnKGByZWFkOiAke21bcGtOYW1lIGFzIGtleW9mIHR5cGVvZiBtXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBvbmUtdG8tbWFueSBtb2RlbDogJHtwcm9wZXJ0eVtwa05hbWUgYXMga2V5b2YgdHlwZW9mIHByb3BlcnR5XX1gXG4gICAgICApO1xuICAgICAgbSA9IGF3YWl0IGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuX292ZXJyaWRlc1xuICAgICAgKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYGNhY2hpbmcgZm9yIHBvcHVsYXRlOiAke0pTT04uc3RyaW5naWZ5KG0pfSB1bmRlciAke21bcGtOYW1lIGFzIGtleW9mIHR5cGVvZiBtXX1gXG4gICAgKTtcbiAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoXG4gICAgICBjb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBrZXksXG4gICAgICBtW3BrTmFtZSBhcyBrZXlvZiB0eXBlb2YgbV0gYXMgc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgbVxuICAgICk7XG4gICAgcmVzdWx0LmFkZChtW3BrTmFtZSBhcyBrZXlvZiB0eXBlb2YgbV0gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vIGNvbnN0IGFycmF5VHlwZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1swXTtcbiAgLy8gaWYgKCFwcm9wZXJ0eVZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gYXJyYXlUeXBlKSlcbiAgLy8gICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgLy8gICAgIGBJbnZhbGlkIG9wZXJhdGlvbi4gQWxsIGVsZW1lbnRzIG9mIHByb3BlcnR5ICR7a2V5IGFzIHN0cmluZ30gbXVzdCBtYXRjaCB0aGUgc2FtZSB0eXBlLmBcbiAgLy8gICApO1xuICAvLyBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3Iob25lVG9NYW55T25DcmVhdGVVcGRhdGUpO1xuICAvLyBjb25zdCB1bmlxdWVWYWx1ZXMgPSBuZXcgU2V0KFsuLi5wcm9wZXJ0eVZhbHVlc10pO1xuICAvLyBpZiAoYXJyYXlUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gIC8vICAgY29uc3QgcmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gIC8vICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlcG9cbiAgLy8gICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gIC8vICAgICAucmVhZEFsbChbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXSwgY29udGV4dCk7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWFkLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBjb25zdCBtb2RlbCA9IHJlYWRbaV07XG4gIC8vICAgICBsb2cuaW5mbyhgRk9VTkQgT05FIFRPIE1BTlkgVkFMVUU6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWwpfWApO1xuICAvLyAgICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAvLyAgICAgICBjb250ZXh0LFxuICAvLyAgICAgICBtb2RlbCxcbiAgLy8gICAgICAga2V5LFxuICAvLyAgICAgICBbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXVtpXSxcbiAgLy8gICAgICAgcmVhZFxuICAvLyAgICAgKTtcbiAgLy8gICB9XG4gIC8vICAgLy8gZm9yIChjb25zdCBtb2RlbCBvZiByZWFkKSB7XG4gIC8vICAgLy8gICAvLyBjb25zdCByZWFkID0gYXdhaXQgcmVwby5yZWFkKGlkLCBjb250ZXh0KTtcbiAgLy8gICAvL1xuICAvLyAgIC8vIH1cbiAgLy8gICAobW9kZWwgYXMgYW55KVtrZXldID0gWy4uLnVuaXF1ZVZhbHVlc107XG4gIC8vICAgbG9nLmluZm8oYFNFVCBPTkUgVE8gTUFOWSBJRFM6ICR7KG1vZGVsIGFzIGFueSlba2V5XX1gKTtcbiAgLy8gICByZXR1cm47XG4gIC8vIH1cbiAgLy9cbiAgLy8gY29uc3QgcGtOYW1lID0gTW9kZWwucGsocHJvcGVydHlWYWx1ZXNbMF0uY29uc3RydWN0b3IpO1xuICAvL1xuICAvLyBjb25zdCByZXN1bHQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAvL1xuICAvLyBmb3IgKGNvbnN0IG0gb2YgcHJvcGVydHlWYWx1ZXMpIHtcbiAgLy8gICBsb2cuaW5mbyhgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgb25lLXRvLW1hbnkgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkobSl9YCk7XG4gIC8vICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gIC8vICAgICBtLFxuICAvLyAgICAgY29udGV4dCxcbiAgLy8gICAgIHRoaXMuYWRhcHRlci5hbGlhcyxcbiAgLy8gICAgIHVuZGVmaW5lZCxcbiAgLy8gICAgIHRoaXMuX292ZXJyaWRlc1xuICAvLyAgICk7XG4gIC8vICAgbG9nLmluZm8oYGNhY2hpbmc6ICR7SlNPTi5zdHJpbmdpZnkocmVjb3JkKX0gdW5kZXIgJHtyZWNvcmRbcGtOYW1lXX1gKTtcbiAgLy9cbiAgLy8gICBpZiAoIXJlY29yZFtwa05hbWVdKSB7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHBrIGZvciByZWxhdGlvbiAke1N0cmluZyhrZXkpfTpgLCB7XG4gIC8vICAgICAgIHBrTmFtZSxcbiAgLy8gICAgICAgcmVjb3JkLFxuICAvLyAgICAgICBwa1ZhbHVlOiByZWNvcmRbcGtOYW1lXSxcbiAgLy8gICAgICAgcGtDb21wdXRlZDogTW9kZWwucGsocmVjb3JkLCB0cnVlKSxcbiAgLy8gICAgIH0pO1xuICAvLyAgIH1cbiAgLy8gICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcmVjb3JkW3BrTmFtZV0sIHJlY29yZCk7XG4gIC8vIGxvZy5pbmZvKGBDcmVhdGluZyBvciB1cGRhdGluZyBvbmUtdG8tbWFueSBtb2RlbDogJHtKU09OLnN0cmluZ2lmeShtKX1gKTtcbiAgLy8gcmVzdWx0LmFkZChyZWNvcmRbcGtOYW1lXSk7XG4gIC8vIH1cblxuICAobW9kZWwgYXMgYW55KVtrZXldID0gWy4uLnJlc3VsdF07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHVwZGF0ZXNcbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCB3aGVuIHVwZGF0aW5nIGEgbW9kZWwsIGRlbGVnYXRpbmcgdG8gb25lVG9NYW55T25DcmVhdGUgaWYgY2FzY2FkZSB1cGRhdGUgaXMgZW5hYmxlZFxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgUmVwbzxNLCBGLCBDPlxuICogQHRlbXBsYXRlIFYgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhIHR5cGUgZXh0ZW5kaW5nIFJlbGF0aW9uc01ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAqIEBmdW5jdGlvbiBvbmVUb01hbnlPblVwZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPblVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPbkNyZWF0ZVxuICpcbiAqICAgQ2FsbGVyLT4+b25lVG9NYW55T25VcGRhdGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9NYW55T25VcGRhdGUtPj5vbmVUb01hbnlPblVwZGF0ZTogY2hlY2sgaWYgY2FzY2FkZS51cGRhdGUgaXMgQ0FTQ0FERVxuICpcbiAqICAgYWx0IGNhc2NhZGUudXBkYXRlIGlzIENBU0NBREVcbiAqICAgICBvbmVUb01hbnlPblVwZGF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBhcHBseSh0aGlzLCBbY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbF0pXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtLT4+b25lVG9NYW55T25VcGRhdGU6IHZvaWRcbiAqICAgZW5kXG4gKlxuICogICBvbmVUb01hbnlPblVwZGF0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvTWFueU9uVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNLFxuICBvbGRNb2RlbD86IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNhc2NhZGUgfSA9IGRhdGE7XG4gIGlmIChjYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIHJldHVybiBvbmVUb01hbnlPbkNyZWF0ZVVwZGF0ZS5hcHBseSh0aGlzIGFzIGFueSwgW1xuICAgIGNvbnRleHQsXG4gICAgZGF0YSxcbiAgICBrZXkgYXMga2V5b2YgTW9kZWwsXG4gICAgbW9kZWwsXG4gICAgb2xkTW9kZWwsXG4gIF0pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBkZWxldGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHdoZW4gZGVsZXRpbmcgYSBtb2RlbCwgZGVsZXRpbmcgYWxsIHJlbGF0ZWQgbW9kZWxzIGlmIGNhc2NhZGUgZGVsZXRlIGlzIGVuYWJsZWRcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgZXh0ZW5kaW5nIFJlcG88TSwgRiwgQz5cbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YSB0eXBlIGV4dGVuZGluZyBSZWxhdGlvbnNNZXRhZGF0YVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0NvbnRleHQ8Rj59IGNvbnRleHQgLSBUaGUgY29udGV4dCBmb3IgdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtWfSBkYXRhIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gKiBAZnVuY3Rpb24gb25lVG9NYW55T25EZWxldGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9NYW55T25EZWxldGVcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvTWFueU9uRGVsZXRlOiB0aGlzLCBjb250ZXh0LCBkYXRhLCBrZXksIG1vZGVsXG4gKiAgIG9uZVRvTWFueU9uRGVsZXRlLT4+b25lVG9NYW55T25EZWxldGU6IGNoZWNrIGlmIGNhc2NhZGUuZGVsZXRlIGlzIENBU0NBREVcbiAqICAgb25lVG9NYW55T25EZWxldGUtPj5vbmVUb01hbnlPbkRlbGV0ZTogY2hlY2sgaWYgdmFsdWVzIGV4aXN0cyBhbmQgaGFzIGxlbmd0aFxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBjaGVjayBpZiBhbGwgZWxlbWVudHMgaGF2ZSBzYW1lIHR5cGVcbiAqXG4gKiAgIGFsdCBpc0luc3RhbnRpYXRlZCAoYXJyYXlUeXBlIGlzIFwib2JqZWN0XCIpXG4gKiAgICAgb25lVG9NYW55T25EZWxldGUtPj5SZXBvc2l0b3J5OiBmb3JNb2RlbCh2YWx1ZXNbMF0pXG4gKiAgICAgUmVwb3NpdG9yeS0tPj5vbmVUb01hbnlPbkRlbGV0ZTogcmVwb1xuICogICBlbHNlIG5vdCBpbnN0YW50aWF0ZWRcbiAqICAgICBvbmVUb01hbnlPbkRlbGV0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9NYW55T25EZWxldGU6IHJlcG9cbiAqICAgZW5kXG4gKlxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBjcmVhdGUgdW5pcXVlVmFsdWVzIHNldFxuICpcbiAqICAgbG9vcCBmb3IgZWFjaCBpZCBpbiB1bmlxdWVWYWx1ZXNcbiAqICAgICBvbmVUb01hbnlPbkRlbGV0ZS0+PnJlcG86IGRlbGV0ZShpZCwgY29udGV4dClcbiAqICAgICByZXBvLS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBkZWxldGVkXG4gKiAgICAgb25lVG9NYW55T25EZWxldGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlkLCBkZWxldGVkXG4gKiAgIGVuZFxuICpcbiAqICAgb25lVG9NYW55T25EZWxldGUtPj5vbmVUb01hbnlPbkRlbGV0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4udW5pcXVlVmFsdWVzXVxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvTWFueU9uRGVsZXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGRhdGEuY2FzY2FkZS5kZWxldGUgIT09IENhc2NhZGUuQ0FTQ0FERSkgcmV0dXJuO1xuICBjb25zdCB2YWx1ZXMgPSBtb2RlbFtrZXldIGFzIGFueTtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybjtcbiAgY29uc3QgYXJyYXlUeXBlID0gdHlwZW9mIHZhbHVlc1swXTtcbiAgY29uc3QgYXJlQWxsU2FtZVR5cGUgPSB2YWx1ZXMuZXZlcnkoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gPT09IGFycmF5VHlwZSk7XG4gIGlmICghYXJlQWxsU2FtZVR5cGUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgSW52YWxpZCBvcGVyYXRpb24uIEFsbCBlbGVtZW50cyBvZiBwcm9wZXJ0eSAke2tleSBhcyBzdHJpbmd9IG11c3QgbWF0Y2ggdGhlIHNhbWUgdHlwZS5gXG4gICAgKTtcbiAgY29uc3QgY2xhenogPVxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgIDogZGF0YS5jbGFzcztcblxuICBjb25zdCBpc0luc3RhbnRpYXRlZCA9IGFycmF5VHlwZSA9PT0gXCJvYmplY3RcIjtcbiAgY29uc3QgcmVwbyA9IGlzSW5zdGFudGlhdGVkXG4gICAgPyBSZXBvc2l0b3J5LmZvck1vZGVsKGNsYXp6LCB0aGlzLmFkYXB0ZXIuYWxpYXMpXG4gICAgOiByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShtb2RlbCwga2V5LCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuXG4gIGNvbnN0IHVuaXF1ZVZhbHVlcyA9IG5ldyBTZXQoW1xuICAgIC4uLihpc0luc3RhbnRpYXRlZFxuICAgICAgPyB2YWx1ZXMubWFwKCh2OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2W3JlcG9bXCJwa1wiXSBhcyBzdHJpbmddKVxuICAgICAgOiB2YWx1ZXMpLFxuICBdKTtcblxuICBjb25zdCBpZHMgPSBbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXTtcbiAgbGV0IGRlbGV0ZWQ6IE1vZGVsW107XG4gIHRyeSB7XG4gICAgZGVsZXRlZCA9IGF3YWl0IHJlcG8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKS5kZWxldGVBbGwoaWRzLCBjb250ZXh0KTtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIGFsbCByZWNvcmRzYCwgZSk7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIGxldCBkZWw6IGFueTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVsID0gZGVsZXRlZFtpXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIGlkc1tpXSwgZGVsKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjb250ZXh0LmxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjYWNoZSByZWNvcmQgJHtpZHNbaV19IHdpdGgga2V5ICR7a2V5IGFzIHN0cmluZ30gYW5kIG1vZGVsICR7SlNPTi5zdHJpbmdpZnkobW9kZWwsIHVuZGVmaW5lZCwgMil9IGAsXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICAobW9kZWwgYXMgYW55KVtrZXldID0gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvT25lT25DcmVhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWUpIHJldHVybjtcblxuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsLCBkYXRhKSkgcmV0dXJuO1xuICBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3IobWFueVRvT25lT25DcmVhdGUpO1xuICAvLyBJZiBpdCdzIGEgcHJpbWl0aXZlIHZhbHVlIChJRCksIHJlYWQgdGhlIGV4aXN0aW5nIHJlY29yZFxuICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBpbm5lclJlcG8gPSByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShcbiAgICAgIG1vZGVsLFxuICAgICAga2V5LFxuICAgICAgdGhpcy5hZGFwdGVyLmFsaWFzXG4gICAgKTtcbiAgICBjb25zdCByZWFkID0gYXdhaXQgaW5uZXJSZXBvXG4gICAgICAub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLnJlYWQocHJvcGVydHlWYWx1ZSwgY29udGV4dCk7XG4gICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIHByb3BlcnR5VmFsdWUsIHJlYWQpO1xuICAgIChtb2RlbCBhcyBhbnkpW2tleV0gPSBwcm9wZXJ0eVZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID1cbiAgICBkYXRhLmNsYXNzIGluc3RhbmNlb2YgTW9kZWwgPyBkYXRhLmNsYXNzLmNvbnN0cnVjdG9yIDogKGRhdGEuY2xhc3MgYXMgYW55KTtcbiAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHtkYXRhLmNsYXNzfWApO1xuICBsb2cuaW5mbyhcbiAgICBgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgbWFueS10by1vbmUgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSl9YFxuICApO1xuICBjb25zdCByZWNvcmQgPSBhd2FpdCBjcmVhdGVPclVwZGF0ZShcbiAgICBwcm9wZXJ0eVZhbHVlLFxuICAgIGNvbnRleHQsXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0aGlzLl9vdmVycmlkZXNcbiAgKTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayhyZWNvcmQpO1xuXG4gIGxvZy5pbmZvKGBjYWNoaW5nOiAke0pTT04uc3RyaW5naWZ5KHJlY29yZCl9IHVuZGVyICR7cmVjb3JkW3BrXX1gKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHJlY29yZFtwa10gYXMgc3RyaW5nLFxuICAgIHJlY29yZFxuICApO1xuICAobW9kZWwgYXMgYW55KVtrZXldID0gcmVjb3JkW3BrXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNLFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogYm9vbGVhbiB7XG4gIGxldCBtZXRhUmV2ZXJzZVJlbGF0aW9uOiBhbnk7XG4gIGNvbnN0IHJlbGF0aW9uQ29uc3RydWN0b3IgPVxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgZGF0YS5jbGFzcy5uYW1lXG4gICAgICA/IGRhdGEuY2xhc3NcbiAgICAgIDogKGRhdGEuY2xhc3MgYXMgYW55KSgpO1xuXG4gIC8vIGdldCB0aGUgaW52ZXJzZSByZWxhdGlvbiBtZXRhZGF0YVxuICBjb25zdCBtZXRhUmV2ZXJzZVJlbGF0aW9uTWV0YSA9IE1ldGFkYXRhLmdldChcbiAgICByZWxhdGlvbkNvbnN0cnVjdG9yLFxuICAgIFBlcnNpc3RlbmNlS2V5cy5SRUxBVElPTlNcbiAgKTtcblxuICBpZiAobWV0YVJldmVyc2VSZWxhdGlvbk1ldGEpXG4gICAgbWV0YVJldmVyc2VSZWxhdGlvbiA9IE9iamVjdC52YWx1ZXMobWV0YVJldmVyc2VSZWxhdGlvbk1ldGEpPy5maW5kKFxuICAgICAgKHJlbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uQ29uc3RydWN0b3IgPVxuICAgICAgICAgIHR5cGVvZiByZWwuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiByZWwuY2xhc3MubmFtZVxuICAgICAgICAgICAgPyByZWwuY2xhc3NcbiAgICAgICAgICAgIDogKHJlbC5jbGFzcyBhcyBhbnkpKCk7XG4gICAgICAgIHJldHVybiBtb2RlbCBpbnN0YW5jZW9mIHJlbGF0aW9uQ29uc3RydWN0b3I7XG4gICAgICB9XG4gICAgKTtcblxuICAvLyBJZiBwb3B1bGF0ZSBpcyBzZXQgdG8gdHJ1ZSBvbiBib3RoIHNpZGVzLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3IuXG4gIGlmIChtZXRhUmV2ZXJzZVJlbGF0aW9uPy5wb3B1bGF0ZSA9PT0gdHJ1ZSAmJiBkYXRhPy5wb3B1bGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgXCJCaWRpcmVjdGlvbmFsIHBvcHVsYXRlIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc2V0IHBvcHVsYXRlIHRvIGZhbHNlIG9uIG9uZSBzaWRlIG9mIHRoZSByZWxhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYW55VG9PbmVPblVwZGF0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY2FzY2FkZSB9ID0gZGF0YTtcbiAgaWYgKGNhc2NhZGUudXBkYXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgcmV0dXJuIG1hbnlUb09uZU9uQ3JlYXRlLmFwcGx5KHRoaXMgYXMgYW55LCBbXG4gICAgY29udGV4dCxcbiAgICBkYXRhLFxuICAgIGtleSBhcyBrZXlvZiBNb2RlbCxcbiAgICBtb2RlbCxcbiAgXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYW55VG9PbmVPbkRlbGV0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChkYXRhLmNhc2NhZGUuZGVsZXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldIGFzIGFueTtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICBjb25zdCBpc0luc3RhbnRpYXRlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbiAgY29uc3QgcmVwbyA9IGlzSW5zdGFudGlhdGVkXG4gICAgPyBSZXBvc2l0b3J5LmZvck1vZGVsKHZhbHVlLCB0aGlzLmFkYXB0ZXIuYWxpYXMpXG4gICAgOiByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShtb2RlbCwga2V5LCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuXG4gIGNvbnN0IHJlcG9JZCA9IGlzSW5zdGFudGlhdGVkID8gdmFsdWVbcmVwb1tcInBrXCJdIGFzIHN0cmluZ10gOiB2YWx1ZTtcblxuICBjb25zdCBkZWxldGVkID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLmRlbGV0ZShyZXBvSWQpO1xuICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcmVwb0lkLCBkZWxldGVkKTtcblxuICAobW9kZWwgYXMgYW55KVtrZXldID0gcmVwb0lkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uQ3JlYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsQTogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUud2FybihcIkRFQ09SQVRPUiBtYW55VG9NYW55IFVOREVSIERFVkVMT1BNRU5UXCIpO1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55ID0gbW9kZWxBW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZXMgfHwgIXByb3BlcnR5VmFsdWVzLmxlbmd0aCkgcmV0dXJuO1xuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsQSwgZGF0YSkpIHJldHVybjtcblxuICBjb25zdCBhcnJheVR5cGUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZXNbMF07XG4gIGlmICghcHJvcGVydHlWYWx1ZXMuZXZlcnkoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gPT09IGFycmF5VHlwZSkpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgSW52YWxpZCBvcGVyYXRpb24uIEFsbCBlbGVtZW50cyBvZiBwcm9wZXJ0eSAke2tleSBhcyBzdHJpbmd9IG11c3QgbWF0Y2ggdGhlIHNhbWUgdHlwZS5gXG4gICAgKTtcbiAgY29uc3QgbG9nID0gY29udGV4dC5sb2dnZXIuZm9yKG1hbnlUb01hbnlPbkNyZWF0ZSk7XG4gIGNvbnN0IHVuaXF1ZVZhbHVlcyA9IG5ldyBTZXQoWy4uLnByb3BlcnR5VmFsdWVzXSk7XG4gIC8vIElmIGl0J3MgYSBwcmltaXRpdmUgdmFsdWUgKElEKSwgcmVhZCB0aGUgZXhpc3RpbmcgcmVjb3JkXG4gIGlmIChhcnJheVR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEobW9kZWxBLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlcG9cbiAgICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gICAgICAucmVhZEFsbChbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXSwgY29udGV4dCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWFkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb2RlbCA9IHJlYWRbaV07XG4gICAgICBsb2cuaW5mbyhgRk9VTkQgTUFOWSBUTyBNQU5ZIFZBTFVFOiAke0pTT04uc3RyaW5naWZ5KG1vZGVsKX1gKTtcbiAgICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIGtleSxcbiAgICAgICAgWy4uLnVuaXF1ZVZhbHVlcy52YWx1ZXMoKV1baV0sXG4gICAgICAgIHJlYWRcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBqdW5jdGlvbiB0YWJsZSBlbnRyaWVzXG4gICAgYXdhaXQgZ2V0T3JDcmVhdGVKdW5jdGlvbk1vZGVsLmFwcGx5KHRoaXMgYXMgUmVwbzxNb2RlbD4sIFtcbiAgICAgIG1vZGVsQSxcbiAgICAgIFsuLi5wcm9wZXJ0eVZhbHVlc10gYXMgYW55W10sXG4gICAgICBsb2csXG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICBdKTtcblxuICAgIChtb2RlbEEgYXMgYW55KVtrZXldID0gWy4uLnVuaXF1ZVZhbHVlc107XG4gICAgbG9nLmluZm8oYFNFVCBNQU5ZIFRPIE1BTlkgSURTOiAkeyhtb2RlbEEgYXMgYW55KVtrZXldfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBrTmFtZSA9IE1vZGVsLnBrKHByb3BlcnR5VmFsdWVzWzBdLmNvbnN0cnVjdG9yKTtcbiAgY29uc3QgcmVzdWx0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eVZhbHVlIG9mIHByb3BlcnR5VmFsdWVzKSB7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgbWFueS10by1tYW55IG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpfWBcbiAgICApO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgcHJvcGVydHlWYWx1ZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0aGlzLmFkYXB0ZXIuYWxpYXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLl9vdmVycmlkZXNcbiAgICApO1xuICAgIGxvZy5pbmZvKGBjYWNoaW5nOiAke0pTT04uc3RyaW5naWZ5KHJlY29yZCl9IHVuZGVyICR7cmVjb3JkW3BrTmFtZV19YCk7XG4gICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsQSwga2V5LCByZWNvcmRbcGtOYW1lXSwgcmVjb3JkKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBtYW55LXRvLW1hbnkgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSl9YFxuICAgICk7XG4gICAgcHJvcGVydHlWYWx1ZS5pZCA9IHJlY29yZC5pZDtcbiAgICByZXN1bHQuYWRkKHJlY29yZFtwa05hbWVdKTtcbiAgfVxuXG4gIC8vIEdldCBvciBnZW5lcmF0ZSB0aGUgSUQgZm9yIG1vZGVsQSBiZWZvcmUgcGVyc2lzdGluZyBqdW5jdGlvbiByZWNvcmRzXG4gIGNvbnN0IG1vZGVsUGtOYW1lID0gTW9kZWwucGsobW9kZWxBLmNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TT4pO1xuICBpZiAodHlwZW9mIG1vZGVsQVttb2RlbFBrTmFtZV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCBuZXh0SWQgPSBhd2FpdCBnZXROZXh0SWQodGhpcywgbW9kZWxBLCBjb250ZXh0KTtcbiAgICAobW9kZWxBIGFzIGFueSlbbW9kZWxQa05hbWVdID0gbmV4dElkO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGp1bmN0aW9uIHRhYmxlIGVudHJpZXNcbiAgY29uc3QgSnVuY3Rpb25Nb2RlbCA9IGF3YWl0IGdldE9yQ3JlYXRlSnVuY3Rpb25Nb2RlbC5hcHBseShcbiAgICB0aGlzIGFzIFJlcG88TW9kZWw+LFxuICAgIFttb2RlbEEsIHByb3BlcnR5VmFsdWVzIGFzIE1vZGVsW10sIGxvZywgY29udGV4dCwgZGF0YV1cbiAgKTtcblxuICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBjcmVhdGluZyBqdW5jdGlvbiByZXBvc2l0b3J5IGFuZCBzdG9yaW5nIHRoZSByZWxhdGlvbnNoaXBzXG4gIGxvZy5pbmZvKGBKdW5jdGlvbiBtb2RlbCBjcmVhdGVkOiAke0p1bmN0aW9uTW9kZWwubmFtZX1gKTtcblxuICAobW9kZWxBIGFzIGFueSlba2V5XSA9IFsuLi5yZXN1bHRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROZXh0SWQ8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHJlcG86IFIsXG4gIG1vZGVsQTogTSxcbiAgY29udGV4dDogQ29udGV4dE9mPFI+XG4pOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD4ge1xuICAvLyBHZXQgdGhlIG5leHQgaWQgZm9yIHRoZSBtb2RlbCBiZWZvcmUgaXQgaXMgcGVyc2lzdGVkIHNvIHdlIGNhbiBwdXQgaXQgaW4gdGhlIGp1bmN0aW9uIHRhYmxlXG4gIGNvbnN0IG1vZGVsUGtOYW1lID0gTW9kZWwucGsobW9kZWxBLmNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TT4pO1xuXG4gIGNvbnN0IG1vZGVsQUlkOiBhbnkgPSBtb2RlbEFbbW9kZWxQa05hbWVdO1xuICBpZiAobW9kZWxBSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBtb2RlbEFJZDtcbiAgfVxuXG4gIGNvbnN0IHBrUHJvcHMgPSBNb2RlbC5zZXF1ZW5jZUZvcihtb2RlbEEuY29uc3RydWN0b3IgYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPik7XG4gIGlmICghcGtQcm9wcz8ubmFtZSkge1xuICAgIHBrUHJvcHMubmFtZSA9IE1vZGVsLnNlcXVlbmNlTmFtZShtb2RlbEEsIFwicGtcIik7XG4gIH1cbiAgbGV0IHNlcXVlbmNlOiBTZXF1ZW5jZTtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3MgYWRhcHRlciB0aHJvdWdoIHRoZSBwdWJsaWMgcHJvcGVydHkgJ2RiJyBvciB1c2UgdHlwZSBhc3NlcnRpb25cbiAgICBzZXF1ZW5jZSA9IGF3YWl0IChyZXBvIGFzIGFueSkuYWRhcHRlci5TZXF1ZW5jZShcbiAgICAgIHBrUHJvcHMsXG4gICAgICByZXBvW1wiX292ZXJyaWRlc1wiXVxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHNlcXVlbmNlLm5leHQoY29udGV4dCk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBpbnN0YW50aWF0ZSBTZXF1ZW5jZSAke3BrUHJvcHMubmFtZX06ICR7ZX1gXG4gICAgKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUp1bmN0aW9uTW9kZWw8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIG1vZGVsQTogTW9kZWwsXG4gIG1vZGVsc0I6IE1vZGVsW10gfCBhbnlbXSxcbiAgbG9nOiBhbnksXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgbWV0YWRhdGE/OiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogUHJvbWlzZTxDb25zdHJ1Y3RvcjxNb2RlbDxmYWxzZT4+PiB7XG4gIGNvbnN0IHsgSnVuY3Rpb25Nb2RlbCwgZmtBLCBma0IgfSA9IGdldEFuZENvbnN0cnVjdEp1bmN0aW9uVGFibGUoXG4gICAgbW9kZWxBLFxuICAgIG1vZGVsc0JbMF0sXG4gICAgbWV0YWRhdGFcbiAgKTtcblxuICBjb25zdCByZWNvcmRJZHM6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgbW9kZWxCIG9mIG1vZGVsc0IpIHtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBtYW55LXRvLW1hbnkganVuY3Rpb24gbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWxCKX1gXG4gICAgKTtcbiAgICAvLyBJZiBpdCBpcyBhIG1vZGVsLCBmaW5kIGFuZCBzdG9yZSBmayBjb250ZW50LCBlbHNlIGl0IGlzIGZrIHZhbHVlIGRpcmVjdGx5XG4gICAgY29uc3QganVuY3Rpb25SZWdpc3RlciA9IHtcbiAgICAgIFtma0FdOlxuICAgICAgICBtb2RlbEEgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICAgID8gbW9kZWxBW1xuICAgICAgICAgICAgICBNb2RlbC5wayhtb2RlbEEuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IpIGFzIGtleW9mIHR5cGVvZiBtb2RlbEFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IG1vZGVsQSxcbiAgICAgIFtma0JdOlxuICAgICAgICBtb2RlbEIgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICAgID8gbW9kZWxCW1xuICAgICAgICAgICAgICBNb2RlbC5wayhtb2RlbEIuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IpIGFzIGtleW9mIHR5cGVvZiBtb2RlbEJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IG1vZGVsQixcbiAgICB9O1xuICAgIGNvbnN0IHJlY29yZDogYW55ID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gICAgICBuZXcgSnVuY3Rpb25Nb2RlbChqdW5jdGlvblJlZ2lzdGVyKSxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0aGlzLmFkYXB0ZXIuYWxpYXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLl9vdmVycmlkZXNcbiAgICApO1xuICAgIGlmIChyZWNvcmQ/LmlkKSByZWNvcmRJZHMucHVzaChyZWNvcmQuaWQpO1xuICB9XG5cbiAgaWYgKHJlY29yZElkcy5sZW5ndGggPT09IG1vZGVsc0I/Lmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEFsbCBqdW5jdGlvbiByZWNvcmRzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciB0YWJsZSAke0p1bmN0aW9uTW9kZWw/Lm5hbWV9YFxuICAgICk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWw8TSwgUmVwbzxNPj4oXG4gICAgICBKdW5jdGlvbk1vZGVsIGFzIHVua25vd24gYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPlxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlcG9zaXRvcnlcbiAgICAgID8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLnJlYWRBbGwocmVjb3JkSWRzKTtcbiAgICBjb25zb2xlLmxvZyhcInJlc3VsdHM6XCIsIHJlc3VsdHMpO1xuICB9IGVsc2VcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYFNvbWUganVuY3Rpb24gcmVjb3JkcyBmYWlsZWQgdG8gYmUgY3JlYXRlZCBmb3IgdGFibGUgJHtKdW5jdGlvbk1vZGVsPy5uYW1lfWBcbiAgICApO1xuXG4gIHJldHVybiBKdW5jdGlvbk1vZGVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5kQ29uc3RydWN0SnVuY3Rpb25UYWJsZShcbiAgbW9kZWxBOiBNb2RlbCxcbiAgbW9kZWxCOiBNb2RlbCB8IGFueSxcbiAgbWV0YWRhdGE/OiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogeyBma0E6IHN0cmluZzsgZmtCOiBzdHJpbmc7IEp1bmN0aW9uTW9kZWw6IENvbnN0cnVjdG9yPE1vZGVsPGZhbHNlPj4gfSB7XG4gIC8vIEdldCB0aGUgbmFtZSBvZiB0aGUgdGFibGUgYW5kIGZrc1xuICBjb25zdCBtb2RlbEFOYW1lID0gTW9kZWwudGFibGVOYW1lKG1vZGVsQSk7XG4gIGxldCBtb2RlbEJOYW1lO1xuICBpZiAobW9kZWxCIGluc3RhbmNlb2YgTW9kZWwpIG1vZGVsQk5hbWUgPSBNb2RlbC50YWJsZU5hbWUobW9kZWxCKTtcbiAgZWxzZSBpZiAoXG4gICAgTW9kZWwuaXNNb2RlbChtb2RlbEIgYXMgUmVjb3JkPHN0cmluZywgYW55PikgJiZcbiAgICB0eXBlb2YgbW9kZWxCID09PSBcImZ1bmN0aW9uXCJcbiAgKSB7XG4gICAgbW9kZWxCTmFtZSA9IG1vZGVsQi5uYW1lID8gbW9kZWxCLm5hbWUgOiAobW9kZWxCIGFzIGFueSkoKT8ubmFtZTtcbiAgfSBlbHNlIGlmIChtZXRhZGF0YT8uY2xhc3MpIHtcbiAgICBjb25zdCBjbGF6eiA9XG4gICAgICB0eXBlb2YgbWV0YWRhdGEuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiAhbWV0YWRhdGEuY2xhc3MubmFtZVxuICAgICAgICA/IChtZXRhZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgICAgOiBtZXRhZGF0YS5jbGFzcztcbiAgICBtb2RlbEJOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgfVxuICBpZiAoIW1vZGVsQU5hbWUgfHwgIW1vZGVsQk5hbWUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJNaXNzaW5nIHRhYmxlbmFtZXMgdG8gY3JlYXRlIGp1bmN0aW9uIHRhYmxlXCIpO1xuXG4gIGNvbnN0IGp1bmN0aW9uVGFibGVOYW1lID0gbWV0YWRhdGE/LmpvaW5UYWJsZT8ubmFtZVxuICAgID8gbWV0YWRhdGE/LmpvaW5UYWJsZT8ubmFtZVxuICAgIDogYCR7bW9kZWxBTmFtZX1fJHttb2RlbEJOYW1lfWA7XG4gIGNvbnN0IGZrQSA9IGAke21vZGVsQU5hbWU/LnRvTG93ZXJDYXNlKCl9X2ZrYDtcbiAgY29uc3QgZmtCID0gYCR7bW9kZWxCTmFtZT8udG9Mb3dlckNhc2UoKX1fZmtgO1xuXG4gIC8vIEFub255bW91cyBjbGFzcyB0byBiZSBhYmxlIHRvIGNoYW5nZSBuYW1lXG4gIGNvbnN0IER5bmFtaWNKdW5jdGlvbk1vZGVsID0gY2xhc3MgZXh0ZW5kcyBNb2RlbCB7XG4gICAgaWQhOiBudW1iZXI7XG4gICAgW2ZrQV0hOiBudW1iZXI7XG4gICAgW2ZrQl0hOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoYXJnPzogTW9kZWxBcmc8YW55Pikge1xuICAgICAgc3VwZXIoYXJnKTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER5bmFtaWNKdW5jdGlvbk1vZGVsLCBcIm5hbWVcIiwge1xuICAgIHZhbHVlOiBqdW5jdGlvblRhYmxlTmFtZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIEFwcGx5IHRoZSBkZWNvcmF0b3JzXG4gIHBrKHsgdHlwZTogTnVtYmVyIH0pKER5bmFtaWNKdW5jdGlvbk1vZGVsLnByb3RvdHlwZSwgXCJpZFwiKTtcbiAgcmVxdWlyZWQoKShEeW5hbWljSnVuY3Rpb25Nb2RlbC5wcm90b3R5cGUsIGZrQSBhcyBhbnkpO1xuICByZXF1aXJlZCgpKER5bmFtaWNKdW5jdGlvbk1vZGVsLnByb3RvdHlwZSwgZmtCIGFzIGFueSk7XG5cbiAgLy8gQXBwbHkgQG1vZGVsKCkgZGVjb3JhdG9yIHRvIHRoZSBjbGFzc1xuICBjb25zdCBEZWNvcmF0ZWRNb2RlbCA9IG1vZGVsKCkoRHluYW1pY0p1bmN0aW9uTW9kZWwpO1xuXG4gIE1ldGFkYXRhLnNldChEeW5hbWljSnVuY3Rpb25Nb2RlbCwgUGVyc2lzdGVuY2VLZXlzLlRBQkxFLCBqdW5jdGlvblRhYmxlTmFtZSk7XG4gIHJldHVybiB7XG4gICAgZmtBLFxuICAgIGZrQixcbiAgICBKdW5jdGlvbk1vZGVsOiBEZWNvcmF0ZWRNb2RlbCBhcyBDb25zdHJ1Y3RvcjxNb2RlbDxmYWxzZT4+LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS53YXJuKFwibWV0aG9kIG5vdCB5ZXQgaW1wbGVtZW50ZWRcIik7XG4gIGNvbnN0IHsgY2FzY2FkZSB9ID0gZGF0YTtcbiAgaWYgKGNhc2NhZGUudXBkYXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgcmV0dXJuIG1hbnlUb01hbnlPbkNyZWF0ZS5hcHBseSh0aGlzIGFzIGFueSwgW1xuICAgIGNvbnRleHQsXG4gICAgZGF0YSxcbiAgICBrZXkgYXMga2V5b2YgTW9kZWwsXG4gICAgbW9kZWwsXG4gIF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uRGVsZXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS53YXJuKFwiTWV0aG9kIHVuZGVyIGRldmVsb3BtZW50XCIpO1xuICBpZiAoZGF0YS5jYXNjYWRlLmRlbGV0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIGNvbnN0IHZhbHVlcyA9IG1vZGVsW2tleV0gYXMgYW55O1xuICBpZiAoIXZhbHVlcyB8fCAhdmFsdWVzLmxlbmd0aCkgcmV0dXJuO1xuICBjb25zdCBhcnJheVR5cGUgPSB0eXBlb2YgdmFsdWVzWzBdO1xuICBjb25zdCBhcmVBbGxTYW1lVHlwZSA9IHZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gYXJyYXlUeXBlKTtcbiAgaWYgKCFhcmVBbGxTYW1lVHlwZSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBJbnZhbGlkIG9wZXJhdGlvbi4gQWxsIGVsZW1lbnRzIG9mIHByb3BlcnR5ICR7a2V5IGFzIHN0cmluZ30gbXVzdCBtYXRjaCB0aGUgc2FtZSB0eXBlLmBcbiAgICApO1xuXG4gIC8vIERlbGV0ZSB0aGUgdmFsdWVzIGFuZCB0aGUganVuY3Rpb24gdGFibGUgZW50cmllc1xuICBjb25zdCBjbGF6eiA9XG4gICAgdHlwZW9mIGRhdGEuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiAhZGF0YS5jbGFzcy5uYW1lXG4gICAgICA/IChkYXRhLmNsYXNzIGFzIGFueSkoKVxuICAgICAgOiBkYXRhLmNsYXNzO1xuXG4gIGNvbnN0IGlzSW5zdGFudGlhdGVkID0gYXJyYXlUeXBlID09PSBcIm9iamVjdFwiO1xuICBjb25zdCByZXBvID0gaXNJbnN0YW50aWF0ZWRcbiAgICA/IFJlcG9zaXRvcnkuZm9yTW9kZWwoY2xhenosIHRoaXMuYWRhcHRlci5hbGlhcylcbiAgICA6IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG5cbiAgY29uc3QgdW5pcXVlVmFsdWVzID0gbmV3IFNldChbXG4gICAgLi4uKGlzSW5zdGFudGlhdGVkXG4gICAgICA/IHZhbHVlcy5tYXAoKHY6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZbcmVwb1tcInBrXCJdIGFzIHN0cmluZ10pXG4gICAgICA6IHZhbHVlcyksXG4gIF0pO1xuXG4gIGNvbnN0IGlkcyA9IFsuLi51bmlxdWVWYWx1ZXMudmFsdWVzKCldO1xuICBsZXQgZGVsZXRlZDogTW9kZWxbXTtcbiAgdHJ5IHtcbiAgICBkZWxldGVkID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLmRlbGV0ZUFsbChpZHMsIGNvbnRleHQpO1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgY29udGV4dC5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgYWxsIHJlY29yZHNgLCBlKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgbGV0IGRlbDogYW55O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbGV0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBkZWwgPSBkZWxldGVkW2ldO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgaWRzW2ldLCBkZWwpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNhY2hlIHJlY29yZCAke2lkc1tpXX0gd2l0aCBrZXkgJHtrZXkgYXMgc3RyaW5nfSBhbmQgbW9kZWwgJHtKU09OLnN0cmluZ2lmeShtb2RlbCwgdW5kZWZpbmVkLCAyKX0gYCxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBpZHM7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgY2FjaGluZyBwb3B1bGF0ZWQgbW9kZWwgcmVsYXRpb25zaGlwc1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHVuaXF1ZSBrZXkgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgcG9wdWxhdGVkIG1vZGVsIHJlbGF0aW9uc2hpcHMgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIG1vZGVsXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZpZWxkIG9yIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlbGF0ZWQgbW9kZWxcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBkb3Qtc2VwYXJhdGVkIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlbGF0aW9uc2hpcFxuICogQGZ1bmN0aW9uIGdldFBvcHVsYXRlS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcHVsYXRlS2V5KFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgZmllbGROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbikge1xuICBpZiAoZmllbGROYW1lKVxuICAgIHJldHVybiBbUGVyc2lzdGVuY2VLZXlzLlBPUFVMQVRFLCB0YWJsZU5hbWUsIGZpZWxkTmFtZSwgaWRdLmpvaW4oXCIuXCIpO1xuICByZXR1cm4gW1BlcnNpc3RlbmNlS2V5cy5QT1BVTEFURSwgdGFibGVOYW1lLCBpZF0uam9pbihcIi5cIik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnRm9yRGVsZXRlS2V5KFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbikge1xuICByZXR1cm4gW1BlcnNpc3RlbmNlS2V5cy5UQUdfRk9SX0RFTEVUSU9OLCB0YWJsZU5hbWUsIGlkXS5qb2luKFwiLlwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2FjaGVzIGEgbW9kZWwgZm9yIGxhdGVyIHBvcHVsYXRpb25cbiAqIEBzdW1tYXJ5IFN0b3JlcyBhIG1vZGVsIGluIHRoZSBjb250ZXh0IGNhY2hlIGZvciBlZmZpY2llbnQgcmV0cmlldmFsIGR1cmluZyByZWxhdGlvbnNoaXAgcG9wdWxhdGlvblxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7TX0gcGFyZW50TW9kZWwgLSBUaGUgcGFyZW50IG1vZGVsIHRoYXQgY29udGFpbnMgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gcGtWYWx1ZSAtIFRoZSBwcmltYXJ5IGtleSB2YWx1ZSBvZiB0aGUgcmVsYXRlZCBtb2RlbFxuICogQHBhcmFtIHthbnl9IGNhY2hlVmFsdWUgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gY2FjaGVcbiAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjYWNoZSBvcGVyYXRpb25cbiAqIEBmdW5jdGlvbiBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FjaGVNb2RlbEZvclBvcHVsYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIEYgZXh0ZW5kcyBBZGFwdGVyRmxhZ3MsXG4+KFxuICBjb250ZXh0OiBDb250ZXh0PEY+LFxuICBwYXJlbnRNb2RlbDogTSxcbiAgcHJvcGVydHlLZXk6IGtleW9mIE0gfCBzdHJpbmcsXG4gIHBrVmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgY2FjaGVWYWx1ZTogYW55XG4pIHtcbiAgY29uc3QgY2FjaGVLZXkgPSBnZXRQb3B1bGF0ZUtleShcbiAgICBwYXJlbnRNb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIHByb3BlcnR5S2V5IGFzIHN0cmluZyxcbiAgICBwa1ZhbHVlXG4gICk7XG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihjYWNoZU1vZGVsRm9yUG9wdWxhdGUpO1xuICBjb25zdCBjYWNoZSA9IGNvbnRleHQuZ2V0KFwiY2FjaGVGb3JQb3B1bGF0ZVwiKSB8fCB7fTtcbiAgbGV0IGNhY2hlZDogYW55ID0gY2FjaGVbY2FjaGVLZXldO1xuICBsZXQgcHJlZmVyRnJvbUNhY2hlID0gY29udGV4dC5nZXRPclVuZGVmaW5lZChcInByZWZlckZyb21DYWNoZVwiKTtcbiAgaWYgKCFwcmVmZXJGcm9tQ2FjaGUpIHtcbiAgICB0cnkge1xuICAgICAgbG9nLnNpbGx5KGByZXRyaWV2aW5nIGZyb20gY2hpbGRyZW5gKTtcbiAgICAgIHByZWZlckZyb21DYWNoZSA9IGNvbnRleHQuZ2V0RnJvbUNoaWxkcmVuKFwicHJlZmVyRnJvbUNhY2hlXCIpIHx8IGZhbHNlO1xuICAgICAgaWYgKHByZWZlckZyb21DYWNoZSkge1xuICAgICAgICBjYWNoZWQgPSAoKGNvbnRleHQuZ2V0RnJvbUNoaWxkcmVuKFwiY2FjaGVGb3JQb3B1bGF0ZVwiKSB8fCB7fSkgYXMgYW55KVtcbiAgICAgICAgICBjYWNoZUtleVxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHByZWZlckZyb21DYWNoZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmVmZXJGcm9tQ2FjaGUpIHtcbiAgICBsb2cuZGVidWcoYHByZWZlcnJpbmcgcHJldmlvdXMgY2FjaGU6ICR7ISFjYWNoZVtjYWNoZUtleV19YCk7XG4gIH1cbiAgKGNhY2hlW2NhY2hlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9XG4gICAgcHJlZmVyRnJvbUNhY2hlICYmIGNhY2hlZCA/IGNhY2hlZCA6IGNhY2hlVmFsdWU7XG4gIHJldHVybiBjb250ZXh0LmFjY3VtdWxhdGUoeyBjYWNoZUZvclBvcHVsYXRlOiBjYWNoZSB9IGFzIGFueSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBvcHVsYXRlcyBhIG1vZGVsJ3MgcmVsYXRpb25zaGlwXG4gKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW5kIGF0dGFjaGVzIHJlbGF0ZWQgbW9kZWxzIHRvIGEgbW9kZWwncyByZWxhdGlvbnNoaXAgcHJvcGVydHlcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgZXh0ZW5kaW5nIFJlcG88TSwgRiwgQz5cbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YSB0eXBlIGV4dGVuZGluZyBSZWxhdGlvbnNNZXRhZGF0YVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0NvbnRleHQ8Rj59IGNvbnRleHQgLSBUaGUgY29udGV4dCBmb3IgdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtWfSBkYXRhIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gKiBAZnVuY3Rpb24gcG9wdWxhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcG9wdWxhdGVcbiAqICAgcGFydGljaXBhbnQgZmV0Y2hQb3B1bGF0ZVZhbHVlc1xuICogICBwYXJ0aWNpcGFudCBnZXRQb3B1bGF0ZUtleVxuICogICBwYXJ0aWNpcGFudCBDb250ZXh0XG4gKiAgIHBhcnRpY2lwYW50IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKlxuICogICBDYWxsZXItPj5wb3B1bGF0ZTogdGhpcywgY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbFxuICogICBwb3B1bGF0ZS0+PnBvcHVsYXRlOiBjaGVjayBpZiBkYXRhLnBvcHVsYXRlIGlzIHRydWVcbiAqICAgcG9wdWxhdGUtPj5wb3B1bGF0ZTogZ2V0IG5lc3RlZCB2YWx1ZSBhbmQgY2hlY2sgaWYgaXQgZXhpc3RzXG4gKlxuICogICBwb3B1bGF0ZS0+PmZldGNoUG9wdWxhdGVWYWx1ZXM6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlzQXJyID8gbmVzdGVkIDogW25lc3RlZF1cbiAqXG4gKiAgIGZldGNoUG9wdWxhdGVWYWx1ZXMtPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiBpbml0aWFsaXplIHZhcmlhYmxlc1xuICpcbiAqICAgbG9vcCBmb3IgZWFjaCBwcm9LZXlWYWx1ZSBpbiBwcm9wS2V5VmFsdWVzXG4gKiAgICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0+PmdldFBvcHVsYXRlS2V5OiBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLCBwcm9wTmFtZSwgcHJvS2V5VmFsdWVcbiAqICAgICBnZXRQb3B1bGF0ZUtleS0tPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiBjYWNoZUtleVxuICpcbiAqICAgICBhbHQgdHJ5IHRvIGdldCBmcm9tIGNhY2hlXG4gKiAgICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+Q29udGV4dDogZ2V0KGNhY2hlS2V5KVxuICogICAgICAgQ29udGV4dC0tPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiB2YWxcbiAqICAgICBlbHNlIGNhdGNoIGVycm9yXG4gKiAgICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBwcm9wTmFtZVxuICogICAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+ZmV0Y2hQb3B1bGF0ZVZhbHVlczogcmVwb1xuICogICAgICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0+PnJlcG86IHJlYWQocHJvS2V5VmFsdWUpXG4gKiAgICAgICByZXBvLS0+PmZldGNoUG9wdWxhdGVWYWx1ZXM6IHZhbFxuICogICAgIGVuZFxuICpcbiAqICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+ZmV0Y2hQb3B1bGF0ZVZhbHVlczogYWRkIHZhbCB0byByZXN1bHRzXG4gKiAgIGVuZFxuICpcbiAqICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0tPj5wb3B1bGF0ZTogcmVzdWx0c1xuICogICBwb3B1bGF0ZS0+PnBvcHVsYXRlOiBzZXQgbW9kZWxba2V5XSA9IGlzQXJyID8gcmVzIDogcmVzWzBdXG4gKiAgIHBvcHVsYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWRhdGEucG9wdWxhdGUpIHJldHVybjtcbiAgY29uc3QgbmVzdGVkOiBhbnkgPSBtb2RlbFtrZXldO1xuICBjb25zdCBpc0FyciA9IEFycmF5LmlzQXJyYXkobmVzdGVkKTtcbiAgaWYgKHR5cGVvZiBuZXN0ZWQgPT09IFwidW5kZWZpbmVkXCIgfHwgKGlzQXJyICYmIG5lc3RlZC5sZW5ndGggPT09IDApKSByZXR1cm47XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoUG9wdWxhdGVWYWx1ZXMoXG4gICAgYzogQ29udGV4dE9mPFI+LFxuICAgIG1vZGVsOiBNLFxuICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICAgcHJvcEtleVZhbHVlczogYW55W11cbiAgKSB7XG4gICAgbGV0IGNhY2hlS2V5OiBzdHJpbmc7XG4gICAgbGV0IHZhbDogYW55O1xuICAgIGNvbnN0IHJlc3VsdHM6IE1bXSA9IFtdO1xuICAgIGxldCBvcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgb3BlcmF0aW9uID0gYy5nZXQoXCJvcGVyYXRpb25cIiBhcyBhbnkpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgb3BlcmF0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpc1JlYWQgPVxuICAgICAgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgfHxcbiAgICAgIG9wZXJhdGlvbiA9PT0gQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMO1xuICAgIGNvbnN0IGNhY2hlID0gaXNSZWFkID8ge30gOiBjLmdldChcImNhY2hlRm9yUG9wdWxhdGVcIikgfHwge307XG4gICAgZm9yIChjb25zdCBwcm9LZXlWYWx1ZSBvZiBwcm9wS2V5VmFsdWVzKSB7XG4gICAgICBjYWNoZUtleSA9IGdldFBvcHVsYXRlS2V5KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUsIHByb3BOYW1lLCBwcm9LZXlWYWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICB2YWwgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICAgIGlmICghdmFsKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgZm91bmQgaW4gY2FjaGVcIik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgcHJvcE5hbWUgYXMga2V5b2YgTSxcbiAgICAgICAgICAoc2VsZiBhcyBhbnkpLmFkYXB0ZXIuYWxpYXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXBvKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHJlcG9cIik7XG4gICAgICAgIHZhbCA9IGF3YWl0IHJlcG9cbiAgICAgICAgICAub3ZlcnJpZGUoKHNlbGYgYXMgYW55KS5fb3ZlcnJpZGVzKVxuICAgICAgICAgIC5yZWFkKHByb0tleVZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdHMucHVzaCh2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaFBvcHVsYXRlVmFsdWVzKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5IGFzIHN0cmluZyxcbiAgICBpc0FyciA/IG5lc3RlZCA6IFtuZXN0ZWRdXG4gICk7XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBpc0FyciA/IHJlcyA6IHJlc1swXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhc2NhZGVEZWxldGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE0sXG4gIG9sZE1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGRhdGEuY2FzY2FkZS51cGRhdGUgIT09IENhc2NhZGUuQ0FTQ0FERSkgcmV0dXJuO1xuICBpZiAoIW9sZE1vZGVsKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgXCJObyB3YXkgdG8gY29tcGFyZSBvbGQgbW9kZWwuIGRvIHlvdSBoYXZlIHVwZGF0ZVZhbGlkYXRpb24gYW5kIG1lcmdlTW9kZWxzIGVuYWJsZWQ/XCJcbiAgICApO1xuXG4gIGZ1bmN0aW9uIHJlZHVjZVRvUGsob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubWFwKHJlZHVjZVRvUGspO1xuICAgIHJldHVybiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiID8gb2JqIDogb2JqW01vZGVsLnBrKG9iaildO1xuICB9XG5cbiAgY29uc3QgbmV3VmFsID0gcmVkdWNlVG9Qayhtb2RlbFtrZXldKTtcbiAgY29uc3Qgb2xkVmFsID0gcmVkdWNlVG9QayhvbGRNb2RlbFtrZXldKTtcbiAgaWYgKHR5cGVvZiBvbGRWYWwgPT09IFwidW5kZWZpbmVkXCIgfHwgaXNFcXVhbChuZXdWYWwsIG9sZFZhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsKSAhPT0gQXJyYXkuaXNBcnJheShvbGRWYWwpKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDYW5ub3QgY2FzY2FkZSB1cGRhdGUgZm9yIGRpZmZlcmVudCBhcnJheSB0eXBlc2ApO1xuICBjb25zdCBuZXdUb0NvbXBhcmUgPSAoQXJyYXkuaXNBcnJheShuZXdWYWwpID8gbmV3VmFsIDogW25ld1ZhbF0pLmZpbHRlcihcbiAgICBCb29sZWFuXG4gICkgYXMgYW55W107XG4gIGNvbnN0IG9sZFRvQ29tcGFyZSA9IChBcnJheS5pc0FycmF5KG9sZFZhbCkgPyBvbGRWYWwgOiBbb2xkVmFsXSkuZmlsdGVyKFxuICAgIEJvb2xlYW5cbiAgKSBhcyBhbnlbXTtcbiAgY29uc3QgdG9EZWxldGUgPSAob2xkVG9Db21wYXJlIGFzIGFueVtdKS5maWx0ZXIoXG4gICAgKHYpID0+ICEobmV3VG9Db21wYXJlIGFzIGFueVtdKS5pbmNsdWRlcyh2KVxuICApO1xuICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgbW9kZWwsXG4gICAga2V5IGFzIGtleW9mIE0sXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzXG4gICk7XG4gIGlmICghcmVwbykgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJDb3VsZCBub3QgZmluZCByZXBvXCIpO1xuICB0cnkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCByZXBvXG4gICAgICAub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLmRlbGV0ZUFsbCh0b0RlbGV0ZSwgY29udGV4dCk7XG4gICAgY29udGV4dC5sb2dnZXIuZGVidWcoXG4gICAgICBgRGVsZXRlZCAke2RlbGV0ZWQubGVuZ3RofSBlbnRyaWVzIGZyb20gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUocmVwby5jbGFzcyl9IGR1ZSB0byBjYXNjYWRlIHJ1bGVzIHdpdGggYFxuICAgICk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRXJyb3IgZGVsZXRpbmcgY2FzY2FkZSBlbnRyaWVzOiAke2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBjb21tb24gSmF2YVNjcmlwdCB0eXBlc1xuICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgY29tbW9uIEphdmFTY3JpcHQgdHlwZXMgdGhhdCBhcmUgbm90IGN1c3RvbSBtb2RlbCB0eXBlc1xuICogQGNvbnN0IGNvbW1vbVR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuY29uc3QgY29tbW9tVHlwZXMgPSBbXG4gIFwiYXJyYXlcIixcbiAgXCJzdHJpbmdcIixcbiAgXCJudW1iZXJcIixcbiAgXCJib29sZWFuXCIsXG4gIFwic3ltYm9sXCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJvYmplY3RcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJudWxsXCIsXG4gIFwiYmlnaW50XCIsXG5dO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIHByb3BlcnR5IGJhc2VkIG9uIGl0cyB0eXBlIG1ldGFkYXRhXG4gKiBAc3VtbWFyeSBFeGFtaW5lcyBhIG1vZGVsIHByb3BlcnR5J3MgdHlwZSBtZXRhZGF0YSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgbW9kZWxzXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHthbnl9IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIGV4YW1pbmVcbiAqIEByZXR1cm4ge1JlcG88TT59IEEgcmVwb3NpdG9yeSBmb3IgdGhlIG1vZGVsIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKiAgIHBhcnRpY2lwYW50IFJlZmxlY3RcbiAqICAgcGFydGljaXBhbnQgVmFsaWRhdGlvblxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKlxuICogICBDYWxsZXItPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogbW9kZWwsIHByb3BlcnR5S2V5XG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBHZXQgYWxsb3dlZFR5cGVzIGFycmF5XG4gKiAgIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IGZpbmQgY29uc3RydWN0b3JOYW1lIG5vdCBpbiBjb21tb21UeXBlc1xuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBjaGVjayBpZiBjb25zdHJ1Y3Rvck5hbWUgZXhpc3RzXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+Pk1vZGVsOiBnZXQoY29uc3RydWN0b3JOYW1lKVxuICogICBNb2RlbC0tPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogY29uc3RydWN0b3JcbiAqICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogY2hlY2sgaWYgY29uc3RydWN0b3IgZXhpc3RzXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PlJlcG9zaXRvcnk6IGZvck1vZGVsKGNvbnN0cnVjdG9yKVxuICogICBSZXBvc2l0b3J5LS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiByZXBvXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0tPj5DYWxsZXI6IHJlcG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNLFxuICBwcm9wZXJ0eUtleToga2V5b2YgTSxcbiAgYWxpYXM/OiBzdHJpbmdcbik6IFJlcG88TT4ge1xuICBpZiAoIW1vZGVsKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBtb2RlbCB3YXMgcHJvdmlkZWQgdG8gZ2V0IHJlcG9zaXRvcnlcIik7XG4gIGxldCBhbGxvd2VkVHlwZXM7XG5cbiAgbGV0IGNvbnN0ciA9IG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3RvciA6IChtb2RlbCBhcyBhbnkpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5S2V5XSkgfHwgbW9kZWxbcHJvcGVydHlLZXldIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgY29uc3QgY3VzdG9tVHlwZXMgPSBNZXRhZGF0YS5nZXQoXG4gICAgICBjb25zdHIsXG4gICAgICBNZXRhZGF0YS5rZXkoXG4gICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICAgIHByb3BlcnR5S2V5IGFzIHN0cmluZyxcbiAgICAgICAgVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgKVxuICAgICk/LmNsYXp6O1xuXG4gICAgaWYgKCFjdXN0b21UeXBlcylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZpbmQgdHlwZXMgZGVjb3JhdG9ycyBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eUtleSBhcyBzdHJpbmd9YFxuICAgICAgKTtcblxuICAgIGFsbG93ZWRUeXBlcyA9IChcbiAgICAgIEFycmF5LmlzQXJyYXkoY3VzdG9tVHlwZXMpID8gWy4uLmN1c3RvbVR5cGVzXSA6IFtjdXN0b21UeXBlc11cbiAgICApLm1hcCgodCkgPT4gKHR5cGVvZiB0ID09PSBcImZ1bmN0aW9uXCIgJiYgISh0IGFzIGFueSkubmFtZSA/IHQoKSA6IHQpKTtcbiAgfSBlbHNlIGlmIChNb2RlbC5yZWxhdGlvbnMoY29uc3RyKS5pbmNsdWRlcyhwcm9wZXJ0eUtleSBhcyBzdHJpbmcpKSB7XG4gICAgLy8gb25lVG9PbmVcbiAgICBhbGxvd2VkVHlwZXMgPSBNZXRhZGF0YS5hbGxvd2VkVHlwZXMoY29uc3RyLCBwcm9wZXJ0eUtleSBhcyBzdHJpbmcpO1xuICB9IGVsc2Uge1xuICAgIGFsbG93ZWRUeXBlcyA9IE1ldGFkYXRhLmdldFByb3BEZXNpZ25UeXBlcyhcbiAgICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3RvciA6IChtb2RlbCBhcyBhbnkpLFxuICAgICAgcHJvcGVydHlLZXkgYXMgc3RyaW5nXG4gICAgKT8uZGVzaWduVHlwZXM7XG4gIH1cblxuICBjb25zdHIgPSBhbGxvd2VkVHlwZXM/LmZpbmQoXG4gICAgKHQpID0+ICFjb21tb21UeXBlcy5pbmNsdWRlcyhgJHt0Lm5hbWV9YC50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNvbnN0ciwgYWxpYXMpIGFzIGFueTtcblxuICBpZiAoY29uc3RyICE9PSByZXBvLmNsYXNzKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYEludmFsaWQgcmVwb3NpdG9yeSBjbGFzcyBmb3IgJHtwcm9wZXJ0eUtleSBhcyBzdHJpbmd9YFxuICAgICk7XG5cbiAgcmV0dXJuIHJlcG87XG59XG4iXX0=
@@ -346,7 +346,7 @@ export declare function manyToManyOnDelete<M extends Model, R extends Repo<M>>(t
346
346
  * @function getPopulateKey
347
347
  * @memberOf module:core
348
348
  */
349
- export declare function getPopulateKey(tableName: string, fieldName: string, id: string | number): string;
349
+ export declare function getPopulateKey(tableName: string, fieldName: string | undefined, id: string | number): string;
350
350
  export declare function getTagForDeleteKey(tableName: string, fieldName: string, id: string | number): string;
351
351
  /**
352
352
  * @description Caches a model for later population
@@ -491,4 +491,4 @@ function relation(relationKey, meta) {
491
491
  })
492
492
  .apply();
493
493
  }
494
- //# sourceMappingURL=decorators.js.map
494
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkRBLHNCQW1CQztBQVVELHdCQWNDO0FBbUJELG9EQWVDO0FBaUJELHdCQVNDO0FBbUJELDBEQWlCQztBQWdCRCw4QkFpQkM7QUFnQkQsOEJBZ0JDO0FBRUQsOEJBRUM7QUFFRCw4QkFFQztBQUVELGdDQWVDO0FBMkJELDRCQTBDQztBQThCRCw4QkEyQ0M7QUE4QkQsOEJBMkNDO0FBOEJELGdDQTBDQztBQUVELG9DQWVDO0FBRUQsZ0RBRUM7QUFFRCxnREFFQztBQUVELDREQUVDO0FBU0QsNEJBbUJDO0FBeG5CRCwyREFVaUM7QUFDakMscURBVThCO0FBQzlCLDhEQUEyRDtBQUUzRCw2REFBeUQ7QUFDekQseUVBQTBFO0FBRTFFLHdEQUErQztBQU8vQyxxREFhd0I7QUFDeEIsa0RBQXFEO0FBR3JEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixLQUFLLENBQWdCLElBQVc7SUFDOUMsT0FBTyx1QkFBVSxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLEtBQUssQ0FBQztTQUN6QyxNQUFNLENBQUM7UUFDTixTQUFTLEVBQUUsU0FBUyxLQUFLLENBQUMsSUFBVTtZQUNsQyxPQUFPLFNBQVMsS0FBSyxDQUFDLE1BQVc7Z0JBQy9CLHFCQUFRLENBQUMsR0FBRyxDQUNWLDJCQUFlLENBQUMsS0FBSyxFQUNyQixJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFDakMsTUFBTSxDQUNQLENBQUM7Z0JBQ0YsT0FBTyxJQUFBLHFCQUFRLEVBQ2IsMkJBQWUsQ0FBQyxLQUFLLEVBQ3JCLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNsQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1osQ0FBQyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksRUFBRSxD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QUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixRQUFRLENBQUMsV0FBbUIsRUFBRSxJQUF1QjtJQUNuRSxTQUFTLFFBQVEsQ0FBQyxXQUFtQixFQUFFLElBQXVCO1FBQzVELE9BQU8sU0FBUyxRQUFRLENBQUMsR0FBUSxFQUFFLElBQVM7WUFDMUMsSUFBQSx5QkFBWSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsT0FBTyxJQUFBLHlCQUFZLEVBQ2pCLHFCQUFRLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7Z0JBQ3RCLEdBQUcsRUFBRSxXQUFXO2FBQ2pCLENBQUMsQ0FDSCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLHVCQUFVLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsU0FBUyxDQUFDO1NBQzdDLE1BQU0sQ0FBQztRQUNOLFNBQVMsRUFBRSxRQUFRO1FBQ25CLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7S0FDMUIsQ0FBQztTQUNELEtBQUssRUFBRSxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFmdGVyQW55LFxuICBDb25mbGljdEVycm9yLFxuICBvbkNyZWF0ZSxcbiAgb25DcmVhdGVVcGRhdGUsXG4gIG9uRGVsZXRlLFxuICBvblVwZGF0ZSxcbiAgZ2VuZXJhdGVkLFxuICBPcGVyYXRpb25LZXlzLFxuICB0aW1lc3RhbXAsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgYXBwbHkgYXMgbmV3QXBwbHksXG4gIE1ldGFkYXRhLFxuICBtZXRhZGF0YSBhcyBuZXdNZXRhZGF0YSxcbiAgRGVjb3JhdGlvbixcbiAgcHJvcE1ldGFkYXRhLFxuICBDb25zdHJ1Y3RvcixcbiAgcHJvcCxcbiAgbWV0YWRhdGEsXG4gIGFwcGx5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IENhc2NhZGVNZXRhZGF0YSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Q2FzY2FkZSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXN5bmMsIGxpc3QsIE1vZGVsLCB0eXBlIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuaW1wb3J0IHtcbiAgSm9pbkNvbHVtbk9wdGlvbnMsXG4gIEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gIEpvaW5UYWJsZU9wdGlvbnMsXG4gIFJlbGF0aW9uc01ldGFkYXRhLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgbWFueVRvTWFueU9uQ3JlYXRlLFxuICBtYW55VG9PbmVPbkNyZWF0ZSxcbiAgbWFueVRvT25lT25EZWxldGUsXG4gIG1hbnlUb09uZU9uVXBkYXRlLFxuICBjYXNjYWRlRGVsZXRlLFxuICBvbmVUb01hbnlPbkNyZWF0ZVVwZGF0ZSxcbiAgb25lVG9NYW55T25EZWxldGUsXG4gIG9uZVRvTWFueU9uVXBkYXRlLFxuICBvbmVUb09uZU9uQ3JlYXRlLFxuICBvbmVUb09uZU9uRGVsZXRlLFxuICBvbmVUb09uZU9uVXBkYXRlLFxuICBwb3B1bGF0ZSBhcyBwb3AsXG59IGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvbkVycm9yIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiO1xuaW1wb3J0IHsgQ29udGV4dE9mIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgZGF0YWJhc2UgdGFibGUgbmFtZSBmb3IgYSBtb2RlbFxuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgc2V0cyB0aGUgdGFibGUgbmFtZSBmb3IgYSBtb2RlbCBjbGFzcyBpbiB0aGUgZGF0YWJhc2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGluIHRoZSBkYXRhYmFzZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzc1xuICogQGZ1bmN0aW9uIHRhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGU8T1BUUyA9IHN0cmluZz4ob3B0cz86IE9QVFMpIHtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKFBlcnNpc3RlbmNlS2V5cy5UQUJMRSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogZnVuY3Rpb24gdGFibGUob3B0czogT1BUUykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGFibGUodGFyZ2V0OiBhbnkpIHtcbiAgICAgICAgICBNZXRhZGF0YS5zZXQoXG4gICAgICAgICAgICBQZXJzaXN0ZW5jZUtleXMuVEFCTEUsXG4gICAgICAgICAgICBvcHRzIHx8IHRhcmdldC5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtZXRhZGF0YShcbiAgICAgICAgICAgIFBlcnNpc3RlbmNlS2V5cy5UQUJMRSxcbiAgICAgICAgICAgIG9wdHMgfHwgdGFyZ2V0Lm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICkodGFyZ2V0KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBhcmdzOiBbb3B0c10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBkYXRhYmFzZSBjb2x1bW4gbmFtZSBmb3IgYSBtb2RlbCBwcm9wZXJ0eVxuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgbWFwcyBhIG1vZGVsIHByb3BlcnR5IHRvIGEgc3BlY2lmaWMgY29sdW1uIG5hbWUgaW4gdGhlIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaW4gdGhlIGRhdGFiYXNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gY29sdW1uXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uPE9QVFMgPSBzdHJpbmc+KGNvbHVtbk5hbWU/OiBPUFRTKSB7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuQ09MVU1OKVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBmdW5jdGlvbiBjb2x1bW4oYykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29sdW1uKG9iajogYW55LCBhdHRyOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFxuICAgICAgICAgICAgTWV0YWRhdGEua2V5KFBlcnNpc3RlbmNlS2V5cy5DT0xVTU4sIGF0dHIpLFxuICAgICAgICAgICAgYyB8fCBhdHRyXG4gICAgICAgICAgKShvYmosIGF0dHIpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtjb2x1bW5OYW1lXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbmZvcmNlcyB1bmlxdWVuZXNzIGNvbnN0cmFpbnQgZHVyaW5nIG1vZGVsIGNyZWF0aW9uIGFuZCB1cGRhdGVcbiAqIEBzdW1tYXJ5IEludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIHVuaXF1ZSBkZWNvcmF0b3IgdG8gY2hlY2sgaWYgYSBwcm9wZXJ0eSB2YWx1ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGF0YWJhc2VcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgZXh0ZW5kaW5nIFJlcG88TSwgRiwgQz5cbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIG1ldGFkYXRhIHR5cGVcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSBtZXRhZGF0YSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byBjaGVjayBmb3IgdW5pcXVlbmVzc1xuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBiZWluZyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoZWNrIGlzIGNvbXBsZXRlIG9yIHJlamVjdHMgd2l0aCBhIENvbmZsaWN0RXJyb3JcbiAqIEBmdW5jdGlvbiB1bmlxdWVPbkNyZWF0ZVVwZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmlxdWVPbkNyZWF0ZVVwZGF0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBvYmplY3QsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShtb2RlbCBhcyBhbnkpW2tleV0pIHJldHVybjtcbiAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnNlbGVjdCgpXG4gICAgLndoZXJlKENvbmRpdGlvbi5hdHRyaWJ1dGUoa2V5KS5lcShtb2RlbFtrZXldKSlcbiAgICAuZXhlY3V0ZSgpO1xuICBpZiAoZXhpc3RpbmcubGVuZ3RoKVxuICAgIHRocm93IG5ldyBDb25mbGljdEVycm9yKFxuICAgICAgYG1vZGVsIGFscmVhZHkgZXhpc3RzIHdpdGggcHJvcGVydHkgJHtrZXkgYXMgc3RyaW5nfSBlcXVhbCB0byAke0pTT04uc3RyaW5naWZ5KChtb2RlbCBhcyBhbnkpW2tleV0sIHVuZGVmaW5lZCwgMil9YFxuICAgICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRhZ3MgYSBwcm9wZXJ0eSBhcyB1bmlxdWVcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IGVuc3VyZXMgYSBwcm9wZXJ0eSB2YWx1ZSBpcyB1bmlxdWUgYWNyb3NzIGFsbCBpbnN0YW5jZXMgb2YgYSBtb2RlbCBpbiB0aGUgZGF0YWJhc2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiB1bmlxdWVcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEB1bmlxdWUoKVxuICogICBAcmVxdWlyZWQoKVxuICogICB1c2VybmFtZSE6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlKCkge1xuICBjb25zdCBrZXkgPSBQZXJzaXN0ZW5jZUtleXMuVU5JUVVFO1xuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoXG4gICAgICBhc3luYygpLFxuICAgICAgb25DcmVhdGVVcGRhdGUodW5pcXVlT25DcmVhdGVVcGRhdGUpLFxuICAgICAgcHJvcE1ldGFkYXRhKGtleSwge30pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHVzZXIgaWRlbnRpZmljYXRpb24gZm9yIG93bmVyc2hpcCB0cmFja2luZ1xuICogQHN1bW1hcnkgSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSB0aGUgY3JlYXRlZEJ5IGFuZCB1cGRhdGVkQnkgZGVjb3JhdG9ycyB0byBzZXQgb3duZXJzaGlwIGluZm9ybWF0aW9uXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSBtZXRhZGF0YSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byBzdG9yZSB0aGUgdXNlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aXRoIGFuIEF1dGhvcml6YXRpb25FcnJvciBpZiB1c2VyIGlkZW50aWZpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiAqIEBmdW5jdGlvbiBjcmVhdGVkQnlPbkNyZWF0ZVVwZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVkQnlPbkNyZWF0ZVVwZGF0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwbzxNPixcbj4oXG4gIHRoaXM6IFIsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGtleToga2V5b2YgTSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXG4gICAgXCJUaGlzIGFkYXB0ZXIgZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGlkZW50aWZpY2F0aW9uXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHJhY2tzIHRoZSBjcmVhdG9yIG9mIGEgbW9kZWwgaW5zdGFuY2VcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IG1hcmtzIGEgcHJvcGVydHkgdG8gc3RvcmUgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIgd2hvIGNyZWF0ZWQgdGhlIG1vZGVsIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gY3JlYXRlZEJ5XG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIERvY3VtZW50IGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAqICAgQGNyZWF0ZWRCeSgpXG4gKiAgIGNyZWF0b3IhOiBzdHJpbmc7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZWRCeSgpIHtcbiAgZnVuY3Rpb24gY3JlYXRlZEJ5KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVkQnkodGFyZ2V0OiBvYmplY3QsIHByb3A/OiBhbnkpIHtcbiAgICAgIHJldHVybiBhcHBseShcbiAgICAgICAgb25DcmVhdGUoY3JlYXRlZEJ5T25DcmVhdGVVcGRhdGUpLFxuICAgICAgICBwcm9wTWV0YWRhdGEoUGVyc2lzdGVuY2VLZXlzLkNSRUFURURfQlksIHByb3ApLFxuICAgICAgICBnZW5lcmF0ZWQoUGVyc2lzdGVuY2VLZXlzLkNSRUFURURfQlkpXG4gICAgICApKHRhcmdldCwgcHJvcCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogY3JlYXRlZEJ5LFxuICAgICAgYXJnczogW10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHJhY2tzIHRoZSBsYXN0IHVwZGF0ZXIgb2YgYSBtb2RlbCBpbnN0YW5jZVxuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBwcm9wZXJ0eSB0byBzdG9yZSB0aGUgaWRlbnRpZmllciBvZiB0aGUgdXNlciB3aG8gbGFzdCB1cGRhdGVkIHRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIHVwZGF0ZWRCeVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBEb2N1bWVudCBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEB1cGRhdGVkQnkoKVxuICogICBsYXN0RWRpdG9yITogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVkQnkoKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZWRCeSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlZEJ5KHRhcmdldDogb2JqZWN0LCBwcm9wPzogYW55KSB7XG4gICAgICByZXR1cm4gYXBwbHkoXG4gICAgICAgIG9uVXBkYXRlKGNyZWF0ZWRCeU9uQ3JlYXRlVXBkYXRlKSxcbiAgICAgICAgcHJvcE1ldGFkYXRhKFBlcnNpc3RlbmNlS2V5cy5VUERBVEVEX0JZLCBwcm9wKSxcbiAgICAgICAgZ2VuZXJhdGVkKFBlcnNpc3RlbmNlS2V5cy5VUERBVEVEX0JZKVxuICAgICAgKSh0YXJnZXQsIHByb3ApO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKFBlcnNpc3RlbmNlS2V5cy5VUERBVEVEX0JZKVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiB1cGRhdGVkQnksXG4gICAgICBhcmdzOiBbXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlZEF0KCkge1xuICByZXR1cm4gdGltZXN0YW1wKFtPcGVyYXRpb25LZXlzLkNSRUFURV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlZEF0KCkge1xuICByZXR1cm4gdGltZXN0YW1wKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQa1R5cGVzKG1vZGVsOiBDb25zdHJ1Y3RvciB8ICgoKSA9PiBDb25zdHJ1Y3RvcikpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyB0aGlzIG5lZWRzIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRvIGtlZXAgY3Jvc3MgcmVmZXJlbmNlcyBwb3NzaWJsZSBldmVuIGlmIGN1cnJlbnRseSB3ZSBvbmx5IGhhdmUgYWNjZXNzIHRvIGZpcnN0IGRlZmluZWQgdHlwZVxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQ2xhenogPVxuICAgICAgICB0eXBlb2YgbW9kZWwgPT09IFwiZnVuY3Rpb25cIiAmJiBtb2RlbC5uYW1lXG4gICAgICAgICAgPyAobW9kZWwgYXMgQ29uc3RydWN0b3IpXG4gICAgICAgICAgOiAobW9kZWwgYXMgKCkgPT4gQ29uc3RydWN0b3IpKCk7XG4gICAgICBjb25zdCBwayA9IE1vZGVsLnBrKHJlc29sdmVkQ2xhenogYXMgQ29uc3RydWN0b3IpO1xuICAgICAgcmV0dXJuIChNZXRhZGF0YS5hbGxvd2VkVHlwZXMoXG4gICAgICAgIHJlc29sdmVkQ2xhenogYXMgQ29uc3RydWN0b3IsXG4gICAgICAgIHBrIGFzIHN0cmluZ1xuICAgICAgKSB8fCBbXSlbMF07XG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbW9kZWxzXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBlc3RhYmxpc2hlcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGN1cnJlbnQgbW9kZWwgYW5kIGFub3RoZXIgbW9kZWxcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIHJlbGF0ZWQgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSByZWxhdGVkIG1vZGVsIGNsYXNzXG4gKiBAcGFyYW0ge0Nhc2NhZGVNZXRhZGF0YX0gW2Nhc2NhZGVPcHRpb25zPURlZmF1bHRDYXNjYWRlXSAtIE9wdGlvbnMgZm9yIGNhc2NhZGluZyBvcGVyYXRpb25zIChjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtib29sZWFufSBbcG9wdWxhdGU9dHJ1ZV0gLSBJZiB0cnVlLCBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlcyB0aGUgcmVsYXRpb25zaGlwIHdoZW4gdGhlIG1vZGVsIGlzIHJldHJpZXZlZFxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIG9uZVRvT25lXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAb25lVG9PbmUoUHJvZmlsZSlcbiAqICAgcHJvZmlsZSE6IHN0cmluZyB8IFByb2ZpbGU7XG4gKiB9XG4gKlxuICogY2xhc3MgUHJvZmlsZSBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIGJpbyE6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICogQHNlZSBvbmVUb01hbnlcbiAqIEBzZWUgbWFueVRvT25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbmVUb09uZTxNIGV4dGVuZHMgTW9kZWw+KFxuICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4gIHBvcHVsYXRlOiBib29sZWFuID0gdHJ1ZSxcbiAgam9pbkNvbHVtbk9wdHM/OiBKb2luQ29sdW1uT3B0aW9ucyxcbiAgZms/OiBzdHJpbmdcbikge1xuICBjb25zdCBrZXkgPSBQZXJzaXN0ZW5jZUtleXMuT05FX1RPX09ORTtcbiAgZnVuY3Rpb24gb25lVG9PbmVEZWMoXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+IHwgKCgpID0+IENvbnN0cnVjdG9yPE0+KSxcbiAgICBjYXNjYWRlOiBDYXNjYWRlTWV0YWRhdGEsXG4gICAgcG9wdWxhdGU6IGJvb2xlYW4sXG4gICAgam9pbkNvbHVtbk9wdHM/OiBKb2luQ29sdW1uT3B0aW9ucyxcbiAgICBmaz86IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBtZXRhOiBSZWxhdGlvbnNNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBjbGF6eixcbiAgICAgIGNhc2NhZGU6IGNhc2NhZGUsXG4gICAgICBwb3B1bGF0ZTogcG9wdWxhdGUsXG4gICAgfTtcbiAgICBpZiAoam9pbkNvbHVtbk9wdHMpIG1ldGEuam9pblRhYmxlID0gam9pbkNvbHVtbk9wdHM7XG4gICAgaWYgKGZrKSBtZXRhLm5hbWUgPSBmaztcbiAgICBjb25zdCBwa1R5cGVzID0gZ2V0UGtUeXBlcyhjbGF6eik7XG4gICAgY29uc3QgZGVjcyA9IFtcbiAgICAgIHByb3AoKSxcbiAgICAgIHJlbGF0aW9uKGtleSwgbWV0YSksXG4gICAgICB0eXBlKFtjbGF6eiwgLi4ucGtUeXBlc10pLFxuICAgICAgb25DcmVhdGUob25lVG9PbmVPbkNyZWF0ZSwgbWV0YSwgeyBwcmlvcml0eTogNzAgfSksXG4gICAgICBvblVwZGF0ZShvbmVUb09uZU9uVXBkYXRlLCBtZXRhLCB7IHByaW9yaXR5OiA3MCB9KSxcbiAgICAgIG9uRGVsZXRlKG9uZVRvT25lT25EZWxldGUsIG1ldGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgICAgb25VcGRhdGUoY2FzY2FkZURlbGV0ZSwgbWV0YSwgeyBwcmlvcml0eTogODAgfSksXG4gICAgICBhZnRlckFueShwb3AsIG1ldGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgIF07XG4gICAgcmV0dXJuIGFwcGx5KC4uLmRlY3MpO1xuICB9XG5cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogb25lVG9PbmVEZWMsXG4gICAgICBhcmdzOiBbY2xhenosIGNhc2NhZGVPcHRpb25zLCBwb3B1bGF0ZSwgam9pbkNvbHVtbk9wdHMsIGZrXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIGJldHdlZW4gbW9kZWxzXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBlc3RhYmxpc2hlcyBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjdXJyZW50IG1vZGVsIGFuZCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgYW5vdGhlciBtb2RlbFxuICogQHRlbXBsYXRlIE0gLSBUaGUgcmVsYXRlZCBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHJlbGF0ZWQgbW9kZWwgY2xhc3NcbiAqIEBwYXJhbSB7Q2FzY2FkZU1ldGFkYXRhfSBbY2FzY2FkZU9wdGlvbnM9RGVmYXVsdENhc2NhZGVdIC0gT3B0aW9ucyBmb3IgY2FzY2FkaW5nIG9wZXJhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwb3B1bGF0ZT10cnVlXSAtIElmIHRydWUsIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGVzIHRoZSByZWxhdGlvbnNoaXAgd2hlbiB0aGUgbW9kZWwgaXMgcmV0cmlldmVkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gb25lVG9NYW55XG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIEF1dGhvciBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIG5hbWUhOiBzdHJpbmc7XG4gKlxuICogICBAb25lVG9NYW55KEJvb2spXG4gKiAgIGJvb2tzITogc3RyaW5nW10gfCBCb29rW107XG4gKiB9XG4gKlxuICogY2xhc3MgQm9vayBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIHRpdGxlITogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKiBAc2VlIG9uZVRvT25lXG4gKiBAc2VlIG1hbnlUb09uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25lVG9NYW55PE0gZXh0ZW5kcyBNb2RlbD4oXG4gIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbiAgcG9wdWxhdGU6IGJvb2xlYW4gPSB0cnVlLFxuICBqb2luVGFibGVPcHRzPzogSm9pblRhYmxlT3B0aW9ucyB8IEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gIGZrPzogc3RyaW5nXG4pIHtcbiAgY29uc3Qga2V5ID0gUGVyc2lzdGVuY2VLZXlzLk9ORV9UT19NQU5ZO1xuXG4gIGZ1bmN0aW9uIG9uZVRvTWFueURlYyhcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICAgIGNhc2NhZGU6IENhc2NhZGVNZXRhZGF0YSxcbiAgICBwb3B1bGF0ZTogYm9vbGVhbixcbiAgICBqb2luVGFibGVPcHRzPzogSm9pblRhYmxlT3B0aW9ucyB8IEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gICAgZms/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFJlbGF0aW9uc01ldGFkYXRhID0ge1xuICAgICAgY2xhc3M6IGNsYXp6LFxuICAgICAgY2FzY2FkZTogY2FzY2FkZSxcbiAgICAgIHBvcHVsYXRlOiBwb3B1bGF0ZSxcbiAgICB9O1xuICAgIGlmIChqb2luVGFibGVPcHRzKSBtZXRhZGF0YS5qb2luVGFibGUgPSBqb2luVGFibGVPcHRzO1xuICAgIGlmIChmaykgbWV0YWRhdGEubmFtZSA9IGZrO1xuICAgIGNvbnN0IHBrVHlwZXMgPSBnZXRQa1R5cGVzKGNsYXp6KTtcbiAgICBjb25zdCBkZWNzID0gW1xuICAgICAgcHJvcCgpLFxuICAgICAgcmVsYXRpb24oa2V5LCBtZXRhZGF0YSksXG4gICAgICBsaXN0KFtjbGF6eiwgLi4ucGtUeXBlc10pLFxuICAgICAgb25DcmVhdGUob25lVG9NYW55T25DcmVhdGVVcGRhdGUsIG1ldGFkYXRhLCB7IHByaW9yaXR5OiA3MCB9KSxcbiAgICAgIG9uVXBkYXRlKG9uZVRvTWFueU9uVXBkYXRlLCBtZXRhZGF0YSwgeyBwcmlvcml0eTogNzAgfSksXG4gICAgICBvbkRlbGV0ZShvbmVUb01hbnlPbkRlbGV0ZSwgbWV0YWRhdGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgICAgb25VcGRhdGUoY2FzY2FkZURlbGV0ZSwgbWV0YWRhdGEsIHsgcHJpb3JpdHk6IDgwIH0pLFxuICAgICAgYWZ0ZXJBbnkocG9wLCBtZXRhZGF0YSwgeyBwcmlvcml0eTogNzAgfSksXG4gICAgXTtcbiAgICByZXR1cm4gYXBwbHkoLi4uZGVjcyk7XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBvbmVUb01hbnlEZWMsXG4gICAgICBhcmdzOiBbY2xhenosIGNhc2NhZGVPcHRpb25zLCBwb3B1bGF0ZSwgam9pblRhYmxlT3B0cywgZmtdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgYSBtYW55LXRvLW9uZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtb2RlbHNcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IGVzdGFibGlzaGVzIGEgbWFueS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjdXJyZW50IG1vZGVsIGFuZCBhbm90aGVyIG1vZGVsXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSByZWxhdGVkIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgcmVsYXRlZCBtb2RlbCBjbGFzc1xuICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9ucz1EZWZhdWx0Q2FzY2FkZV0gLSBPcHRpb25zIGZvciBjYXNjYWRpbmcgb3BlcmF0aW9ucyAoY3JlYXRlLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BvcHVsYXRlPXRydWVdIC0gSWYgdHJ1ZSwgYXV0b21hdGljYWxseSBwb3B1bGF0ZXMgdGhlIHJlbGF0aW9uc2hpcCB3aGVuIHRoZSBtb2RlbCBpcyByZXRyaWV2ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiBtYW55VG9PbmVcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgQm9vayBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIHRpdGxlITogc3RyaW5nO1xuICpcbiAqICAgQG1hbnlUb09uZShBdXRob3IpXG4gKiAgIGF1dGhvciE6IHN0cmluZyB8IEF1dGhvcjtcbiAqIH1cbiAqXG4gKiBjbGFzcyBBdXRob3IgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICBuYW1lITogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKiBAc2VlIG9uZVRvTWFueVxuICogQHNlZSBvbmVUb09uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFueVRvT25lPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbiAgcG9wdWxhdGUgPSB0cnVlLFxuICBqb2luVGFibGVPcHRzPzogSm9pblRhYmxlT3B0aW9ucyB8IEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gIGZrPzogc3RyaW5nXG4pIHtcbiAgLy8gTW9kZWwucmVnaXN0ZXIoY2xhenogYXMgQ29uc3RydWN0b3I8TT4pO1xuICBjb25zdCBrZXkgPSBQZXJzaXN0ZW5jZUtleXMuTUFOWV9UT19PTkU7XG5cbiAgZnVuY3Rpb24gbWFueVRvT25lRGVjKFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gICAgY2FzY2FkZTogQ2FzY2FkZU1ldGFkYXRhLFxuICAgIHBvcHVsYXRlOiBib29sZWFuLFxuICAgIGpvaW5UYWJsZU9wdHM/OiBKb2luVGFibGVPcHRpb25zIHwgSm9pblRhYmxlTXVsdGlwbGVDb2x1bW5zT3B0aW9ucyxcbiAgICBmaz86IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBtZXRhZGF0YTogUmVsYXRpb25zTWV0YWRhdGEgPSB7XG4gICAgICBjbGFzczogY2xhenosXG4gICAgICBjYXNjYWRlOiBjYXNjYWRlLFxuICAgICAgcG9wdWxhdGU6IHBvcHVsYXRlLFxuICAgIH07XG4gICAgaWYgKGpvaW5UYWJsZU9wdHMpIG1ldGFkYXRhLmpvaW5UYWJsZSA9IGpvaW5UYWJsZU9wdHM7XG4gICAgaWYgKGZrKSBtZXRhZGF0YS5uYW1lID0gZms7XG4gICAgY29uc3QgcGtUeXBlcyA9IGdldFBrVHlwZXMoY2xhenopO1xuICAgIGNvbnN0IGRlY3MgPSBbXG4gICAgICBwcm9wKCksXG4gICAgICByZWxhdGlvbihrZXksIG1ldGFkYXRhKSxcbiAgICAgIHR5cGUoW2NsYXp6LCAuLi5wa1R5cGVzXSksXG4gICAgICBvbkNyZWF0ZShtYW55VG9PbmVPbkNyZWF0ZSwgbWV0YWRhdGEpLFxuICAgICAgb25VcGRhdGUobWFueVRvT25lT25VcGRhdGUsIG1ldGFkYXRhKSxcbiAgICAgIG9uRGVsZXRlKG1hbnlUb09uZU9uRGVsZXRlLCBtZXRhZGF0YSksXG4gICAgICBhZnRlckFueShwb3AsIG1ldGFkYXRhKSxcbiAgICBdO1xuICAgIHJldHVybiBhcHBseSguLi5kZWNzKTtcbiAgfVxuXG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZSh7XG4gICAgICBkZWNvcmF0b3I6IG1hbnlUb09uZURlYyxcbiAgICAgIGFyZ3M6IFtjbGF6eiwgY2FzY2FkZU9wdGlvbnMsIHBvcHVsYXRlLCBqb2luVGFibGVPcHRzLCBma10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIG1hbnktdG8tb25lIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1vZGVsc1xuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgZXN0YWJsaXNoZXMgYSBtYW55LXRvLW9uZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGN1cnJlbnQgbW9kZWwgYW5kIGFub3RoZXIgbW9kZWxcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIHJlbGF0ZWQgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSByZWxhdGVkIG1vZGVsIGNsYXNzXG4gKiBAcGFyYW0ge0Nhc2NhZGVNZXRhZGF0YX0gW2Nhc2NhZGVPcHRpb25zPURlZmF1bHRDYXNjYWRlXSAtIE9wdGlvbnMgZm9yIGNhc2NhZGluZyBvcGVyYXRpb25zIChjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtib29sZWFufSBbcG9wdWxhdGU9dHJ1ZV0gLSBJZiB0cnVlLCBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlcyB0aGUgcmVsYXRpb25zaGlwIHdoZW4gdGhlIG1vZGVsIGlzIHJldHJpZXZlZFxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIG1hbnlUb09uZVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBCb29rIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAqICAgQHJlcXVpcmVkKClcbiAqICAgdGl0bGUhOiBzdHJpbmc7XG4gKlxuICogICBAbWFueVRvT25lKEF1dGhvcilcbiAqICAgYXV0aG9yITogc3RyaW5nIHwgQXV0aG9yO1xuICogfVxuICpcbiAqIGNsYXNzIEF1dGhvciBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIG5hbWUhOiBzdHJpbmc7XG4gKiB9XG4gKiBgYGBcbiAqIEBzZWUgb25lVG9NYW55XG4gKiBAc2VlIG9uZVRvT25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW55VG9NYW55PE0gZXh0ZW5kcyBNb2RlbD4oXG4gIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbiAgcG9wdWxhdGUgPSB0cnVlLFxuICBqb2luVGFibGVPcHRzPzogSm9pblRhYmxlT3B0aW9ucyB8IEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gIGZrPzogc3RyaW5nXG4pIHtcbiAgLy8gTW9kZWwucmVnaXN0ZXIoY2xhenogYXMgQ29uc3RydWN0b3I8TT4pO1xuICBjb25zdCBrZXkgPSBQZXJzaXN0ZW5jZUtleXMuTUFOWV9UT19NQU5ZO1xuXG4gIGZ1bmN0aW9uIG1hbnlUb01hbnlEZWMoXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+IHwgKCgpID0+IENvbnN0cnVjdG9yPE0+KSxcbiAgICBjYXNjYWRlOiBDYXNjYWRlTWV0YWRhdGEsXG4gICAgcG9wdWxhdGU6IGJvb2xlYW4sXG4gICAgam9pblRhYmxlT3B0cz86IEpvaW5UYWJsZU9wdGlvbnMgfCBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICAgIGZrPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBjbGF6eixcbiAgICAgIGNhc2NhZGU6IGNhc2NhZGUsXG4gICAgICBwb3B1bGF0ZTogcG9wdWxhdGUsXG4gICAgfTtcbiAgICBpZiAoam9pblRhYmxlT3B0cykgbWV0YWRhdGEuam9pblRhYmxlID0gam9pblRhYmxlT3B0cztcbiAgICBpZiAoZmspIG1ldGFkYXRhLm5hbWUgPSBmaztcbiAgICBjb25zdCBwa1R5cGVzID0gZ2V0UGtUeXBlcyhjbGF6eik7XG4gICAgY29uc3QgZGVjcyA9IFtcbiAgICAgIHByb3AoKSxcbiAgICAgIHJlbGF0aW9uKGtleSwgbWV0YWRhdGEpLFxuICAgICAgbGlzdChbY2xhenosIC4uLnBrVHlwZXNdKSxcbiAgICAgIG9uQ3JlYXRlKG1hbnlUb01hbnlPbkNyZWF0ZSwgbWV0YWRhdGEpLFxuICAgICAgb25VcGRhdGUob25lVG9NYW55T25VcGRhdGUsIG1ldGFkYXRhKSxcbiAgICAgIC8vIG9uRGVsZXRlKG9uZVRvTWFueU9uRGVsZXRlLCBtZXRhZGF0YSksXG4gICAgICBhZnRlckFueShwb3AsIG1ldGFkYXRhKSxcbiAgICBdO1xuICAgIHJldHVybiBhcHBseSguLi5kZWNzKTtcbiAgfVxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBtYW55VG9NYW55RGVjLFxuICAgICAgYXJnczogW2NsYXp6LCBjYXNjYWRlT3B0aW9ucywgcG9wdWxhdGUsIGpvaW5UYWJsZU9wdHMsIGZrXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9WYWxpZGF0ZU9uKC4uLm9wczogT3BlcmF0aW9uS2V5c1tdKSB7XG4gIHJldHVybiBmdW5jdGlvbiBub1ZhbGlkYXRlT24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55KSB7XG4gICAgY29uc3QgY3VycmVudE1ldGEgPVxuICAgICAgTWV0YWRhdGEuZ2V0KFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuTk9fVkFMSURBVEUsIHByb3BlcnR5S2V5KVxuICAgICAgKSB8fCBbXTtcbiAgICBjb25zdCBuZXdNZXRhID0gWy4uLm5ldyBTZXQoWy4uLmN1cnJlbnRNZXRhLCAuLi5vcHNdKV07XG4gICAgcmV0dXJuIG5ld0FwcGx5KFxuICAgICAgbmV3TWV0YWRhdGEoXG4gICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuTk9fVkFMSURBVEUsIHByb3BlcnR5S2V5KSxcbiAgICAgICAgbmV3TWV0YVxuICAgICAgKVxuICAgICkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1ZhbGlkYXRlT25DcmVhdGUoKSB7XG4gIHJldHVybiBub1ZhbGlkYXRlT24oT3BlcmF0aW9uS2V5cy5DUkVBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9WYWxpZGF0ZU9uVXBkYXRlKCkge1xuICByZXR1cm4gbm9WYWxpZGF0ZU9uKE9wZXJhdGlvbktleXMuVVBEQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vVmFsaWRhdGVPbkNyZWF0ZVVwZGF0ZSgpIHtcbiAgcmV0dXJuIG5vVmFsaWRhdGVPbihPcGVyYXRpb25LZXlzLlVQREFURSwgT3BlcmF0aW9uS2V5cy5DUkVBVEUpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIG1vZGVsIHByb3BlcnR5IGFzIGEgcmVsYXRpb25cbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZWwgcHJvcGVydHkgYXMgYSByZWxhdGlvbiBpbiB0aGUgZGF0YWJhc2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiByZWxhdGlvblxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aW9uKHJlbGF0aW9uS2V5OiBzdHJpbmcsIG1ldGE6IFJlbGF0aW9uc01ldGFkYXRhKSB7XG4gIGZ1bmN0aW9uIHJlbGF0aW9uKHJlbGF0aW9uS2V5OiBzdHJpbmcsIG1ldGE6IFJlbGF0aW9uc01ldGFkYXRhKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlbGF0aW9uKG9iajogYW55LCBhdHRyOiBhbnkpIHtcbiAgICAgIHByb3BNZXRhZGF0YShyZWxhdGlvbktleSwgbWV0YSkob2JqLCBhdHRyKTtcbiAgICAgIHJldHVybiBwcm9wTWV0YWRhdGEoXG4gICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuUkVMQVRJT05TLCBhdHRyKSxcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgbWV0YSwge1xuICAgICAgICAgIGtleTogcmVsYXRpb25LZXksXG4gICAgICAgIH0pXG4gICAgICApKG9iaiwgYXR0cik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuUkVMQVRJT05TKVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiByZWxhdGlvbixcbiAgICAgIGFyZ3M6IFtyZWxhdGlvbktleSwgbWV0YV0sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cbiJdfQ==
@@ -25,4 +25,4 @@ __exportStar(require("./decorators.cjs"), exports);
25
25
  __exportStar(require("./indexing.cjs"), exports);
26
26
  __exportStar(require("./SequenceModel.cjs"), exports);
27
27
  __exportStar(require("./types.cjs"), exports);
28
- //# sourceMappingURL=index.js.map
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0dBSUc7QUFDSCxrREFBNEI7QUFDNUIscURBQStCO0FBQy9CLG1EQUE2QjtBQUM3QixpREFBMkI7QUFDM0Isc0RBQWdDO0FBQ2hDLDhDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEV4cG9ydHMgZm9yIHRoZSBtb2RlbCBtb2R1bGUuXG4gKiBAc3VtbWFyeSBUaGlzIGZpbGUgZXhwb3J0cyBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciB0aGUgbW9kZWwgZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIHRoZSBCYXNlTW9kZWwsIGNvbnN0cnVjdGlvbiB1dGlsaXRpZXMsIGRlY29yYXRvcnMsIGFuZCBtb3JlLlxuICogQG1vZHVsZSBjb3JlL21vZGVsXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RydWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VxdWVuY2VNb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbiJdfQ==
@@ -37,4 +37,4 @@ function index(directions, compositions, name) {
37
37
  })
38
38
  .apply();
39
39
  }
40
- //# sourceMappingURL=indexing.js.map
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvaW5kZXhpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5Q0Esc0JBbURDO0FBM0ZELDZEQUF5RDtBQUN6RCw4REFBMkQ7QUFDM0QscURBQWdFO0FBQ2hFLHFEQUFnRDtBQXFDaEQsU0FBZ0IsS0FBSyxDQUNuQixVQUFtRSxFQUNuRSxZQUF5QyxFQUN6QyxJQUFhO0lBRWIsU0FBUyxLQUFLLENBQ1osVUFBaUQsRUFDakQsWUFBZ0MsRUFDaEMsSUFBYTtRQUViLE9BQU8sU0FBUyxLQUFLLENBQUMsR0FBUSxFQUFFLElBQVM7WUFDdkMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxHQUFHLFVBQVUsQ0FBQztnQkFDbEIsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxHQUFHLFlBQVksQ0FBQztnQkFDcEIsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsSUFDRSxVQUFVLENBQUMsSUFBSSxDQUNiLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsMEJBQWMsQ0FBQyxHQUFHLEVBQUUsMEJBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBUSxDQUFDLENBQ3BFLEVBQ0QsQ0FBQztvQkFDRCxZQUFZLEdBQUcsVUFBc0IsQ0FBQztvQkFDdEMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLElBQUEseUJBQVksRUFDakIscUJBQVEsQ0FBQyxHQUFHLENBQ1YsR0FBRywyQkFBZSxDQUFDLEtBQUssR0FBRyxZQUFZLElBQUksWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUNyRyxJQUFJLENBQ0wsRUFDRDtnQkFDRSxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLElBQUksRUFBRSxJQUFJO2FBQ00sQ0FDbkIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyx1QkFBVSxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLEtBQUssQ0FBQztTQUN6QyxNQUFNLENBQUM7UUFDTixTQUFTLEVBQUUsS0FBSztRQUNoQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQztLQUN2QyxDQUFDO1NBQ0QsS0FBSyxFQUFFLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5kZXhNZXRhZGF0YSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L3R5cGVzXCI7XG5pbXBvcnQgeyBPcmRlckRpcmVjdGlvbiB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRGVjb3JhdGlvbiwgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbmRleCBvbiBhIG1vZGVsIHByb3BlcnR5IGZvciBpbXByb3ZlZCBxdWVyeSBwZXJmb3JtYW5jZVxuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBwcm9wZXJ0eSB0byBiZSBpbmRleGVkIGluIHRoZSBkYXRhYmFzZSwgb3B0aW9uYWxseSB3aXRoIHNwZWNpZmljIGRpcmVjdGlvbnMgYW5kIGNvbXBvc2l0aW9uc1xuICogQHBhcmFtIHtPcmRlckRpcmVjdGlvbltdfSBbZGlyZWN0aW9uc10gLSBPcHRpb25hbCBhcnJheSBvZiBzb3J0IGRpcmVjdGlvbnMgZm9yIHRoZSBpbmRleFxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2NvbXBvc2l0aW9uc10gLSBPcHRpb25hbCBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0byBjcmVhdGUgYSBjb21wb3NpdGUgaW5kZXhcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiBpbmRleFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KCk6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgobmFtZTogc3RyaW5nKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChcbiAgZGlyZWN0aW9uczogT3JkZXJEaXJlY3Rpb25bXVxuKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChcbiAgZGlyZWN0aW9uczogT3JkZXJEaXJlY3Rpb25bXSxcbiAgbmFtZTogc3RyaW5nXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zOiBPcmRlckRpcmVjdGlvbltdLFxuICBjb21wb3NpdGlvbnM6IHN0cmluZ1tdXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zOiByZWFkb25seSBPcmRlckRpcmVjdGlvbltdLFxuICBjb21wb3NpdGlvbnM6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zOiByZWFkb25seSBPcmRlckRpcmVjdGlvbltdLFxuICBjb21wb3NpdGlvbnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBuYW1lOiBzdHJpbmdcbik6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoY29tcG9zaXRpb25zOiBzdHJpbmdbXSk6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoXG4gIGNvbXBvc2l0aW9uczogc3RyaW5nW10sXG4gIG5hbWU6IHN0cmluZ1xuKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChcbiAgZGlyZWN0aW9ucz86IHJlYWRvbmx5IE9yZGVyRGlyZWN0aW9uW10gfCByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyxcbiAgY29tcG9zaXRpb25zPzogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmcsXG4gIG5hbWU/OiBzdHJpbmdcbikge1xuICBmdW5jdGlvbiBpbmRleChcbiAgICBkaXJlY3Rpb25zPzogT3JkZXJEaXJlY3Rpb25bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxuICAgIGNvbXBvc2l0aW9ucz86IHN0cmluZ1tdIHwgc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4KG9iajogYW55LCBhdHRyOiBhbnkpIHtcbiAgICAgIGlmICh0eXBlb2YgZGlyZWN0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBuYW1lID0gZGlyZWN0aW9ucztcbiAgICAgICAgZGlyZWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29tcG9zaXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb21wb3NpdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbmFtZSA9IGNvbXBvc2l0aW9ucztcbiAgICAgICAgY29tcG9zaXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCFjb21wb3NpdGlvbnMgJiYgZGlyZWN0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGlyZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGQpID0+ICFbT3JkZXJEaXJlY3Rpb24uQVNDLCBPcmRlckRpcmVjdGlvbi5EU0NdLmluY2x1ZGVzKGQgYXMgYW55KVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29tcG9zaXRpb25zID0gZGlyZWN0aW9ucyBhcyBzdHJpbmdbXTtcbiAgICAgICAgICBkaXJlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wTWV0YWRhdGEoXG4gICAgICAgIE1ldGFkYXRhLmtleShcbiAgICAgICAgICBgJHtQZXJzaXN0ZW5jZUtleXMuSU5ERVh9JHtjb21wb3NpdGlvbnMgJiYgY29tcG9zaXRpb25zPy5sZW5ndGggPyBgLiR7Y29tcG9zaXRpb25zLmpvaW4oXCIuXCIpfWAgOiBcIlwifWAsXG4gICAgICAgICAgYXR0clxuICAgICAgICApLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aW9uczogZGlyZWN0aW9ucyxcbiAgICAgICAgICBjb21wb3NpdGlvbnM6IGNvbXBvc2l0aW9ucyxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB9IGFzIEluZGV4TWV0YWRhdGFcbiAgICAgICkob2JqLCBhdHRyKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKFBlcnNpc3RlbmNlS2V5cy5JTkRFWClcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogaW5kZXgsXG4gICAgICBhcmdzOiBbZGlyZWN0aW9ucywgY29tcG9zaXRpb25zLCBuYW1lXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuIl19
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBDYXNjYWRlTWV0YWRhdGEgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIERlc2NyaWJlcyBqb2luIGNvbHVtbiBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSBKb2luQ29sdW1uT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb2x1bW4gaW4gdGhlIGVudGl0eSB0byB3aGljaCB0aGlzIGNvbHVtbiBpcyByZWZlcmVuY2VkLlxuICAgKi9cbiAgcmVmZXJlbmNlZENvbHVtbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgKi9cbiAgZm9yZWlnbktleUNvbnN0cmFpbnROYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSm9pblRhYmxlT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRhYmxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIHN0b3JlIHZhbHVlcyBvZiB0aGUgYm90aCB0YWJsZXMgKGpvaW4gdGFibGUpLlxuICAgKiBCeSBkZWZhdWx0IGlzIGF1dG8gZ2VuZXJhdGVkLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEZpcnN0IGNvbHVtbiBvZiB0aGUgam9pbiB0YWJsZS5cbiAgICovXG4gIGpvaW5Db2x1bW4/OiBKb2luQ29sdW1uT3B0aW9ucztcbiAgLyoqXG4gICAqIFNlY29uZCAoaW52ZXJzZSkgY29sdW1uIG9mIHRoZSBqb2luIHRhYmxlLlxuICAgKi9cbiAgaW52ZXJzZUpvaW5Db2x1bW4/OiBKb2luQ29sdW1uT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB0YWJsZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCB0byBzdG9yZSB2YWx1ZXMgb2YgdGhlIGJvdGggdGFibGVzIChqb2luIHRhYmxlKS5cbiAgICogQnkgZGVmYXVsdCBpcyBhdXRvIGdlbmVyYXRlZC5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGaXJzdCBjb2x1bW4gb2YgdGhlIGpvaW4gdGFibGUuXG4gICAqL1xuICBqb2luQ29sdW1ucz86IEpvaW5Db2x1bW5PcHRpb25zW107XG4gIC8qKlxuICAgKiBTZWNvbmQgKGludmVyc2UpIGNvbHVtbiBvZiB0aGUgam9pbiB0YWJsZS5cbiAgICovXG4gIGludmVyc2VKb2luQ29sdW1ucz86IEpvaW5Db2x1bW5PcHRpb25zW107XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNNZXRhZGF0YSA9IHtcbiAgY2xhc3M6IENvbnN0cnVjdG9yPGFueT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8YW55Pik7XG4gIGNhc2NhZGU6IENhc2NhZGVNZXRhZGF0YTtcbiAgcG9wdWxhdGU6IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGpvaW5UYWJsZT86IEpvaW5UYWJsZU9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhID0gUmVsYXRpb25zTWV0YWRhdGEgJiB7XG4gIGtleTpcbiAgICB8IFBlcnNpc3RlbmNlS2V5cy5PTkVfVE9fT05FXG4gICAgfCBQZXJzaXN0ZW5jZUtleXMuT05FX1RPX01BTllcbiAgICB8IFBlcnNpc3RlbmNlS2V5cy5NQU5ZX1RPX09ORVxuICAgIHwgUGVyc2lzdGVuY2VLZXlzLk1BTllfVE9fTUFOWTtcbn07XG4iXX0=
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("@decaf-ts/decoration");
4
- //# sourceMappingURL=Metadata.js.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3ZlcnJpZGVzL01ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRXh0ZW5kZWRSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuLi9tb2RlbFwiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJGbGFncyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgVGFza0hhbmRsZXIgfSBmcm9tIFwiLi4vdGFza3MvVGFza0hhbmRsZXJcIjtcbmltcG9ydCB7IE1pZ3JhdGlvbiB9IGZyb20gXCIuLi9taWdyYXRpb25zL3R5cGVzXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIGV4cG9ydCBuYW1lc3BhY2UgTWV0YWRhdGEge1xuICAgIGZ1bmN0aW9uIHRhc2tzKCk6XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFRhc2tIYW5kbGVyPGFueSwgYW55Pj4+XG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGZ1bmN0aW9uIHRhc2tIYW5kbGVyRm9yKFxuICAgICAgdHlwZTogc3RyaW5nXG4gICAgKTogQ29uc3RydWN0b3I8VGFza0hhbmRsZXI8YW55LCBhbnk+PiB8IHVuZGVmaW5lZDtcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRpb25FeGNlcHRpb25zPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgICBvcDogT3BlcmF0aW9uS2V5c1xuICAgICk6IHN0cmluZ1tdO1xuXG4gICAgZnVuY3Rpb24gbWlncmF0aW9uc0ZvcjxcbiAgICAgIEEgZXh0ZW5kcyBBZGFwdGVyPENPTkYsIENPTk4sIFFVRVJZLCBDT05URVhUPixcbiAgICAgIENPTkYsXG4gICAgICBDT05OLFxuICAgICAgUVVFUlksXG4gICAgICBGTEFHUyBleHRlbmRzIEFkYXB0ZXJGbGFncyA9IEFkYXB0ZXJGbGFncyxcbiAgICAgIENPTlRFWFQgZXh0ZW5kcyBDb250ZXh0PEZMQUdTPiA9IENvbnRleHQ8RkxBR1M+LFxuICAgID4oYWRhcHRlcj86IEEpOiBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBBPj5bXTtcblxuICAgIGZ1bmN0aW9uIG1pZ3JhdGlvbnMoKTogW3N0cmluZywgQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj5dW107XG5cbiAgICBmdW5jdGlvbiByZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+XG4gICAgKTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgZnVuY3Rpb24gcmVsYXRpb25zPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIHByb3A6IGtleW9mIE1cbiAgICApOiBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhO1xuICAgIGZ1bmN0aW9uIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT4sXG4gICAgICBwcm9wPzoga2V5b2YgTVxuICAgICk6IHN0cmluZ1tdIHwgRXh0ZW5kZWRSZWxhdGlvbnNNZXRhZGF0YSB8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("@decaf-ts/decorator-validation");
4
- //# sourceMappingURL=Model.js.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3ZlcnJpZGVzL01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsMENBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZW5kZWRSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuLi9tb2RlbC90eXBlc1wiO1xuaW1wb3J0IHsgSW5kZXhNZXRhZGF0YSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L3R5cGVzXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBleHBvcnQgbmFtZXNwYWNlIE1vZGVsIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVsYXRpb24gcHJvcGVydGllcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyBtYXJrZWQgYXMgcmVsYXRpb25zIGluIHRoZSBtb2RlbCBoaWVyYXJjaHkuXG4gICAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGV4aXN0aW5nUmVsYXRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVyLCB0aGUgZXhpc3RpbmcgcmVsYXRpb25zIHRvIGJlIGluY2x1ZGVkLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFyZSByZWxhdGlvbnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmVzdGVkUmVsYXRpb25zPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgZXhpc3RpbmdSZWxhdGlvbnM/OiBzdHJpbmdbXVxuICAgICk6IHN0cmluZ1tdO1xuXG4gICAgZnVuY3Rpb24gZnJvbVRhYmxlPE0gZXh0ZW5kcyBNb2RlbD4odGFibGVOYW1lOiBzdHJpbmcpOiBDb25zdHJ1Y3RvcjxNPjtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFsbCByZWxhdGlvbiBwcm9wZXJ0aWVzIGRlZmluZWQgb24gYSBtb2RlbC5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIG1hcmtlZCBhcyByZWxhdGlvbnMgaW4gdGhlIG1vZGVsIGhpZXJhcmNoeS5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgYXJlIHJlbGF0aW9ucy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihtOiBDb25zdHJ1Y3RvcjxNPiB8IE0pOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFsbCByZWxhdGlvbiBwcm9wZXJ0aWVzIGRlZmluZWQgb24gYSBtb2RlbC5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIG1hcmtlZCBhcyByZWxhdGlvbnMgaW4gdGhlIG1vZGVsIGhpZXJhcmNoeS5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgYXJlIHJlbGF0aW9ucy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+IHwgTSxcbiAgICAgIHByb3A6IGtleW9mIE1cbiAgICApOiBFeHRlbmRlZFJlbGF0aW9uc01ldGFkYXRhO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIHJlbGF0aW9uIHByb3BlcnRpZXMgZGVmaW5lZCBvbiBhIG1vZGVsLlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgbWFya2VkIGFzIHJlbGF0aW9ucyBpbiB0aGUgbW9kZWwgaGllcmFyY2h5LlxuICAgICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgcmVsYXRpb25zLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdlbmVyYXRlZDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgcHJvcDoga2V5b2YgTVxuICAgICk6IGJvb2xlYW47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVkQnk8TSBleHRlbmRzIE1vZGVsPihtOiBDb25zdHJ1Y3RvcjxNPiB8IE0pOiBrZXlvZiBNO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlZEJ5PE0gZXh0ZW5kcyBNb2RlbD4obTogQ29uc3RydWN0b3I8TT4gfCBNKToga2V5b2YgTTtcblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRRdWVyeUF0dHJpYnV0ZXM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG06IENvbnN0cnVjdG9yPE0+IHwgTSxcbiAgICAgIHVzZURlZmF1bHQ/OiBib29sZWFuXG4gICAgKTogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVsYXRpb24gcHJvcGVydGllcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyBtYXJrZWQgYXMgcmVsYXRpb25zIGluIHRoZSBtb2RlbCBoaWVyYXJjaHkuXG4gICAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFyZSByZWxhdGlvbnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVsYXRpb25zPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBwcm9wPzoga2V5b2YgTVxuICAgICk6IHN0cmluZ1tdIHwgRXh0ZW5kZWRSZWxhdGlvbnNNZXRhZGF0YTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGFsbCBpbmRleGVzIGRlZmluZWQgb24gYSBtb2RlbC5cbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYWxsIGluZGV4IG1ldGFkYXRhIGZyb20gYSBtb2RlbCdzIHByb3BlcnR5IGRlY29yYXRvcnMuXG4gICAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEluZGV4TWV0YWRhdGE+Pn0gQSBuZXN0ZWQgcmVjb3JkIG9mIHByb3BlcnR5IG5hbWVzIHRvIGluZGV4IG1ldGFkYXRhLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4ZXM8TSBleHRlbmRzIE1vZGVsPihcbiAgICAgIG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT5cbiAgICApOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBJbmRleE1ldGFkYXRhPj47XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBzZXF1ZW5jZSBvcHRpb25zIGZvciBhIG1vZGVsJ3MgcHJpbWFyeSBrZXkuXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBzZXF1ZW5jZSBjb25maWd1cmF0aW9uIGZvciBhIG1vZGVsJ3MgcHJpbWFyeSBrZXkgZnJvbSBtZXRhZGF0YS5cbiAgICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm4ge1NlcXVlbmNlT3B0aW9uc30gVGhlIHNlcXVlbmNlIG9wdGlvbnMgZm9yIHRoZSBtb2RlbCdzIHByaW1hcnkga2V5LlxuICAgICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIG5vIHNlcXVlbmNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXF1ZW5jZUZvcjxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICAgICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgTSxcbiAgICAgIHByb3BlcnR5Pzoga2V5b2YgTVxuICAgICk6IFNlcXVlbmNlT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBuYW1lIGZvciBhIG1vZGVsXG4gICAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIHN0YW5kYXJkaXplZCBzZXF1ZW5jZSBuYW1lIGJ5IGNvbWJpbmluZyB0aGUgdGFibGUgbmFtZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHRlbXBsYXRlIE0gLSBUeXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICAgICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3RvciB0byBnZW5lcmF0ZSB0aGUgc2VxdWVuY2UgbmFtZSBmb3JcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gYXJncyAtIEFkZGl0aW9uYWwgc3RyaW5nIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhlIHNlcXVlbmNlIG5hbWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgc2VxdWVuY2UgbmFtZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlTmFtZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIC4uLmFyZ3M6IHN0cmluZ1tdXG4gICAgKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSB0YWJsZSBuYW1lIGZvciBhIG1vZGVsXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSB0YWJsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCBhIG1vZGVsIGJ5IGNoZWNraW5nIG1ldGFkYXRhIG9yIGZhbGxpbmcgYmFjayB0byB0aGUgY29uc3RydWN0b3IgbmFtZVxuICAgICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSB0aGF0IGV4dGVuZHMgTW9kZWxcbiAgICAgKiBAcGFyYW0ge00gfCBDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IgdG8gZ2V0IHRoZSB0YWJsZSBuYW1lIGZvclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRhYmxlIG5hbWUgZm9yIHRoZSBtb2RlbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhYmxlTmFtZTxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICAgICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgTVxuICAgICk6IHN0cmluZztcbiAgICBmdW5jdGlvbiBjb2x1bW5OYW1lPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gICAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgcHJvcDoga2V5b2YgTVxuICAgICk6IHN0cmluZztcbiAgICBmdW5jdGlvbiBub25WYWxpZGF0YWJsZUZvcjxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICAgICAgbTogQ29uc3RydWN0b3I8TT4gfCBNLFxuICAgICAgb3A6IE9wZXJhdGlvbktleXMuQ1JFQVRFIHwgT3BlcmF0aW9uS2V5cy5VUERBVEUgfCBzdHJpbmdcbiAgICApOiBzdHJpbmdbXTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZU9uPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gICAgICBtOiBDb25zdHJ1Y3RvcjxNPiB8IE0sXG4gICAgICBvcDogT3BlcmF0aW9uS2V5cy5DUkVBVEUgfCBPcGVyYXRpb25LZXlzXG4gICAgKTogTSBleHRlbmRzIE1vZGVsPHRydWU+XG4gICAgICA/IFByb21pc2U8TW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ+XG4gICAgICA6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVkQnlTZXF1ZW5jZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIHByb3A/OiBrZXlvZiBNXG4gICAgKTogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIGV4cG9ydCBpbnRlcmZhY2UgTW9kZWwge1xuICAvLyAgIGhhc0Vycm9yc09uPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPj4oXG4gIC8vICAgICBvcDogT3BlcmF0aW9uS2V5cy5DUkVBVEUgfCBPcGVyYXRpb25LZXlzLlVQREFURSB8IHN0cmluZ1xuICAvLyAgICk6IE0gZXh0ZW5kcyBNb2RlbDx0cnVlPlxuICAvLyAgICAgPyBQcm9taXNlPE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkPlxuICAvLyAgICAgOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgLy8gfVxufVxuIl19
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("@decaf-ts/decorator-validation");
4
- //# sourceMappingURL=ModelBuilder.js.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL292ZXJyaWRlcy9Nb2RlbEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTW9kZWxCdWlsZGVyPE0+IHtcbiAgICB0YWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICB1bmlxdWUoYXR0cjoga2V5b2YgTSk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICBjcmVhdGVkQnkoYXR0cjoga2V5b2YgTSk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICB1cGRhdGVkQnkoYXR0cjoga2V5b2YgTSk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICBjcmVhdGVkQXQoYXR0cjoga2V5b2YgTSk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICB1cGRhdGVkQXQoYXR0cjoga2V5b2YgTSk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICBvbmVUb09uZTxOIGV4dGVuZHMga2V5b2YgTT4oXG4gICAgICBhdHRyOiBOLFxuICAgICAgY2xheno6IGFueSB8ICgoKSA9PiBhbnkpLFxuICAgICAgY2FzY2FkZT86IGFueSxcbiAgICAgIHBvcHVsYXRlPzogYm9vbGVhbixcbiAgICAgIGpvaW5Db2x1bW5PcHRzPzogYW55LFxuICAgICAgZms/OiBzdHJpbmdcbiAgICApOiBNb2RlbEJ1aWxkZXI8TT47XG4gICAgb25lVG9NYW55PE4gZXh0ZW5kcyBrZXlvZiBNPihcbiAgICAgIGF0dHI6IE4sXG4gICAgICBjbGF6ejogYW55IHwgKCgpID0+IGFueSksXG4gICAgICBjYXNjYWRlPzogYW55LFxuICAgICAgcG9wdWxhdGU/OiBib29sZWFuLFxuICAgICAgam9pblRhYmxlT3B0cz86IGFueSxcbiAgICAgIGZrPzogc3RyaW5nXG4gICAgKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG1hbnlUb09uZTxOIGV4dGVuZHMga2V5b2YgTT4oXG4gICAgICBhdHRyOiBOLFxuICAgICAgY2xheno6IGFueSB8ICgoKSA9PiBhbnkpLFxuICAgICAgY2FzY2FkZT86IGFueSxcbiAgICAgIHBvcHVsYXRlPzogYm9vbGVhbixcbiAgICAgIGpvaW5UYWJsZU9wdHM/OiBhbnksXG4gICAgICBmaz86IHN0cmluZ1xuICAgICk6IE1vZGVsQnVpbGRlcjxNPjtcbiAgICBtYW55VG9NYW55PE4gZXh0ZW5kcyBrZXlvZiBNPihcbiAgICAgIGF0dHI6IE4sXG4gICAgICBjbGF6ejogYW55IHwgKCgpID0+IGFueSksXG4gICAgICBjYXNjYWRlPzogYW55LFxuICAgICAgcG9wdWxhdGU/OiBib29sZWFuLFxuICAgICAgam9pblRhYmxlT3B0cz86IGFueSxcbiAgICAgIGZrPzogc3RyaW5nXG4gICAgKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG5vVmFsaWRhdGVPbihhdHRyOiBrZXlvZiBNLCAuLi5vcHM6IGFueVtdKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG5vVmFsaWRhdGVPbkNyZWF0ZShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG5vVmFsaWRhdGVPblVwZGF0ZShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICAgIG5vVmFsaWRhdGVPbkNyZWF0ZVVwZGF0ZShhdHRyOiBrZXlvZiBNKTogTW9kZWxCdWlsZGVyPE0+O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBleHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZUJ1aWxkZXI8TSwgTiBleHRlbmRzIGtleW9mIE0sIFQ+IHtcbiAgICBjb2x1bW48TjIgZXh0ZW5kcyBrZXlvZiBNPihjb2x1bW5OYW1lPzogc3RyaW5nKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgdW5pcXVlPE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgY3JlYXRlZEJ5PE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgdXBkYXRlZEJ5PE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgY3JlYXRlZEF0PE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgdXBkYXRlZEF0PE4yIGV4dGVuZHMga2V5b2YgTT4oKTogQXR0cmlidXRlQnVpbGRlcjxNLCBOMiwgVD47XG4gICAgbm9WYWxpZGF0ZU9uPE4yIGV4dGVuZHMga2V5b2YgTT4oLi4ub3BzOiBhbnlbXSk6IEF0dHJpYnV0ZUJ1aWxkZXI8TSwgTjIsIFQ+O1xuICAgIG5vVmFsaWRhdGVPbkNyZWF0ZTxOMiBleHRlbmRzIGtleW9mIE0+KCk6IEF0dHJpYnV0ZUJ1aWxkZXI8TSwgTjIsIFQ+O1xuICAgIG5vVmFsaWRhdGVPblVwZGF0ZTxOMiBleHRlbmRzIGtleW9mIE0+KCk6IEF0dHJpYnV0ZUJ1aWxkZXI8TSwgTjIsIFQ+O1xuICAgIG5vVmFsaWRhdGVPbkNyZWF0ZVVwZGF0ZTxOMiBleHRlbmRzIGtleW9mIE0+KCk6IEF0dHJpYnV0ZUJ1aWxkZXI8TSwgTjIsIFQ+O1xuICB9XG59XG4iXX0=
@@ -24,4 +24,4 @@ __exportStar(require("./injectables.cjs"), exports);
24
24
  __exportStar(require("./Model.cjs"), exports);
25
25
  __exportStar(require("./overrides.cjs"), exports);
26
26
  __exportStar(require("./ModelBuilder.cjs"), exports);
27
- //# sourceMappingURL=index.js.map
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3ZlcnJpZGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztHQUlHO0FBQ0gsaURBQTJCO0FBQzNCLG9EQUE4QjtBQUM5Qiw4Q0FBd0I7QUFDeEIsa0RBQTRCO0FBQzVCLHFEQUErQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEV4cG9ydHMgZm9yIHRoZSBvdmVycmlkZXMgbW9kdWxlLlxuICogQHN1bW1hcnkgVGhpcyBmaWxlIGV4cG9ydHMgYWxsIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhlIG92ZXJyaWRlcyBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgTWV0YWRhdGEsIGluamVjdGFibGVzLCBNb2RlbCwgYW5kIG92ZXJyaWRlcy5cbiAqIEBtb2R1bGUgY29yZS9vdmVycmlkZXNcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vTWV0YWRhdGFcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luamVjdGFibGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Nb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3ZlcnJpZGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Nb2RlbEJ1aWxkZXJcIjtcbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("@decaf-ts/injectable-decorators");
4
- //# sourceMappingURL=injectables.js.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3ZlcnJpZGVzL2luamVjdGFibGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiQGRlY2FmLXRzL2luamVjdGFibGUtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBleHBvcnQgbmFtZXNwYWNlIEluamVjdGFibGVzIHtcbiAgICBmdW5jdGlvbiByZXBvc2l0b3JpZXM8UiBleHRlbmRzIFJlcG9zaXRvcnk8YW55LCBhbnk+PihcbiAgICAgIGZsYXZvdXI6IHN0cmluZ1xuICAgICk6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFI+Pj47XG5cbiAgICBmdW5jdGlvbiBzZXJ2aWNlczxTIGV4dGVuZHMgU2VydmljZT4oKTogUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8Uz4+O1xuICB9XG59XG4iXX0=