velocious 1.0.643 → 1.0.645

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 (279) hide show
  1. package/README.md +21 -10
  2. package/build/authorization/ability.js +36 -13
  3. package/build/background-jobs/adapter.js +9 -0
  4. package/build/background-jobs/main.js +35 -10
  5. package/build/background-jobs/store.js +217 -38
  6. package/build/background-jobs/types.js +15 -0
  7. package/build/configuration-types.js +1 -1
  8. package/build/configuration.js +45 -9
  9. package/build/database/drivers/base-column.js +8 -0
  10. package/build/database/drivers/mssql/sql/update.js +1 -3
  11. package/build/database/drivers/mysql/sql/update.js +1 -3
  12. package/build/database/drivers/pgsql/column.js +22 -0
  13. package/build/database/drivers/pgsql/sql/update.js +1 -3
  14. package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
  15. package/build/database/drivers/sqlite/sql/update.js +1 -3
  16. package/build/database/query/index.js +2 -2
  17. package/build/database/query/model-class-query.js +26 -10
  18. package/build/database/query/preloader/has-many.js +4 -1
  19. package/build/database/query/query-data.js +2 -1
  20. package/build/database/query/update-base.js +14 -0
  21. package/build/database/query/with-count.js +3 -1
  22. package/build/database/record/acts-as-list.js +37 -13
  23. package/build/database/record/attachments/store.js +336 -26
  24. package/build/database/record/auditing.js +6 -3
  25. package/build/database/record/index.js +197 -42
  26. package/build/database/record/instance-relationships/belongs-to.js +2 -1
  27. package/build/database/record/validators/uniqueness.js +8 -5
  28. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
  29. package/build/frontend-model-controller.js +136 -53
  30. package/build/frontend-model-resource/base-resource.js +87 -37
  31. package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
  32. package/build/frontend-models/base.js +307 -59
  33. package/build/frontend-models/preloader.js +6 -3
  34. package/build/frontend-models/query.js +15 -6
  35. package/build/frontend-models/resource-definition.js +21 -2
  36. package/build/frontend-models/use-destroyed-event.js +1 -1
  37. package/build/frontend-models/use-model-class-event.js +2 -2
  38. package/build/frontend-models/use-updated-event.js +1 -1
  39. package/build/frontend-models/websocket-channel.js +256 -93
  40. package/build/frontend-models/websocket-publishers.js +218 -18
  41. package/build/http-server/client/websocket-session.js +13 -1
  42. package/build/http-server/websocket-channel.js +15 -2
  43. package/build/src/authorization/ability.d.ts +9 -3
  44. package/build/src/authorization/ability.d.ts.map +1 -1
  45. package/build/src/authorization/ability.js +33 -14
  46. package/build/src/background-jobs/adapter.d.ts +6 -0
  47. package/build/src/background-jobs/adapter.d.ts.map +1 -1
  48. package/build/src/background-jobs/adapter.js +9 -1
  49. package/build/src/background-jobs/main.d.ts +6 -0
  50. package/build/src/background-jobs/main.d.ts.map +1 -1
  51. package/build/src/background-jobs/main.js +34 -11
  52. package/build/src/background-jobs/store.d.ts +66 -12
  53. package/build/src/background-jobs/store.d.ts.map +1 -1
  54. package/build/src/background-jobs/store.js +191 -35
  55. package/build/src/background-jobs/types.d.ts +55 -0
  56. package/build/src/background-jobs/types.d.ts.map +1 -1
  57. package/build/src/background-jobs/types.js +16 -1
  58. package/build/src/configuration-types.d.ts +3 -3
  59. package/build/src/configuration-types.d.ts.map +1 -1
  60. package/build/src/configuration-types.js +2 -2
  61. package/build/src/configuration.d.ts +18 -8
  62. package/build/src/configuration.d.ts.map +1 -1
  63. package/build/src/configuration.js +38 -7
  64. package/build/src/database/drivers/base-column.d.ts +5 -0
  65. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  66. package/build/src/database/drivers/base-column.js +8 -1
  67. package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
  68. package/build/src/database/drivers/mssql/sql/update.js +2 -4
  69. package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
  70. package/build/src/database/drivers/mysql/sql/update.js +2 -4
  71. package/build/src/database/drivers/pgsql/column.d.ts +5 -0
  72. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  73. package/build/src/database/drivers/pgsql/column.js +19 -1
  74. package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
  75. package/build/src/database/drivers/pgsql/sql/update.js +2 -4
  76. package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
  77. package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
  78. package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
  79. package/build/src/database/drivers/sqlite/sql/update.js +2 -4
  80. package/build/src/database/query/index.d.ts +4 -4
  81. package/build/src/database/query/index.d.ts.map +1 -1
  82. package/build/src/database/query/index.js +3 -3
  83. package/build/src/database/query/model-class-query.d.ts +8 -2
  84. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  85. package/build/src/database/query/model-class-query.js +25 -11
  86. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  87. package/build/src/database/query/preloader/has-many.js +4 -2
  88. package/build/src/database/query/query-data.d.ts.map +1 -1
  89. package/build/src/database/query/query-data.js +3 -2
  90. package/build/src/database/query/update-base.d.ts +7 -0
  91. package/build/src/database/query/update-base.d.ts.map +1 -1
  92. package/build/src/database/query/update-base.js +13 -1
  93. package/build/src/database/query/with-count.d.ts.map +1 -1
  94. package/build/src/database/query/with-count.js +3 -2
  95. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  96. package/build/src/database/record/acts-as-list.js +35 -14
  97. package/build/src/database/record/attachments/store.d.ts +67 -0
  98. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  99. package/build/src/database/record/attachments/store.js +301 -25
  100. package/build/src/database/record/auditing.d.ts.map +1 -1
  101. package/build/src/database/record/auditing.js +7 -4
  102. package/build/src/database/record/index.d.ts +78 -26
  103. package/build/src/database/record/index.d.ts.map +1 -1
  104. package/build/src/database/record/index.js +171 -42
  105. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  106. package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
  107. package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
  108. package/build/src/database/record/validators/uniqueness.js +8 -6
  109. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
  110. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  111. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -12
  112. package/build/src/frontend-model-controller.d.ts +29 -8
  113. package/build/src/frontend-model-controller.d.ts.map +1 -1
  114. package/build/src/frontend-model-controller.js +122 -51
  115. package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
  116. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  117. package/build/src/frontend-model-resource/base-resource.js +83 -37
  118. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
  119. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
  120. package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
  121. package/build/src/frontend-models/base.d.ts +53 -20
  122. package/build/src/frontend-models/base.d.ts.map +1 -1
  123. package/build/src/frontend-models/base.js +275 -59
  124. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  125. package/build/src/frontend-models/preloader.js +6 -4
  126. package/build/src/frontend-models/query.d.ts +2 -2
  127. package/build/src/frontend-models/query.d.ts.map +1 -1
  128. package/build/src/frontend-models/query.js +14 -7
  129. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  130. package/build/src/frontend-models/resource-definition.js +20 -3
  131. package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
  132. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  133. package/build/src/frontend-models/use-destroyed-event.js +2 -2
  134. package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
  135. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  136. package/build/src/frontend-models/use-model-class-event.js +3 -3
  137. package/build/src/frontend-models/use-updated-event.d.ts +1 -1
  138. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  139. package/build/src/frontend-models/use-updated-event.js +2 -2
  140. package/build/src/frontend-models/websocket-channel.d.ts +60 -41
  141. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  142. package/build/src/frontend-models/websocket-channel.js +225 -85
  143. package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
  144. package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
  145. package/build/src/frontend-models/websocket-publishers.js +190 -19
  146. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  147. package/build/src/http-server/client/websocket-session.js +11 -2
  148. package/build/src/http-server/websocket-channel.d.ts +20 -8
  149. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  150. package/build/src/http-server/websocket-channel.js +15 -3
  151. package/build/src/sync/assets/cache.d.ts +288 -0
  152. package/build/src/sync/assets/cache.d.ts.map +1 -0
  153. package/build/src/sync/assets/cache.js +883 -0
  154. package/build/src/sync/assets/types.d.ts +199 -0
  155. package/build/src/sync/assets/types.d.ts.map +1 -0
  156. package/build/src/sync/assets/types.js +56 -0
  157. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  158. package/build/src/sync/sync-api-client.js +4 -3
  159. package/build/src/sync/sync-client.d.ts.map +1 -1
  160. package/build/src/sync/sync-client.js +3 -2
  161. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  162. package/build/src/sync/sync-envelope-replay-service.js +6 -5
  163. package/build/src/sync/sync-publisher.d.ts.map +1 -1
  164. package/build/src/sync/sync-publisher.js +4 -3
  165. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
  166. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  167. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
  168. package/build/src/testing/test-profiler.d.ts +4 -4
  169. package/build/src/testing/test-profiler.d.ts.map +1 -1
  170. package/build/src/testing/test-profiler.js +3 -3
  171. package/build/src/testing/test-runner.d.ts +279 -117
  172. package/build/src/testing/test-runner.d.ts.map +1 -1
  173. package/build/src/testing/test-runner.js +503 -933
  174. package/build/src/testing/test.d.ts +11 -72
  175. package/build/src/testing/test.d.ts.map +1 -1
  176. package/build/src/testing/test.js +131 -284
  177. package/build/src/testing/velocious-attempt-executor.d.ts +54 -0
  178. package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
  179. package/build/src/testing/velocious-attempt-executor.js +408 -0
  180. package/build/src/testing/velocious-runner-reporter.d.ts +67 -0
  181. package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
  182. package/build/src/testing/velocious-runner-reporter.js +240 -0
  183. package/build/src/testing/velocious-suite-hook-executor.d.ts +19 -0
  184. package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
  185. package/build/src/testing/velocious-suite-hook-executor.js +41 -0
  186. package/build/src/testing/velocious-test-arguments.d.ts +39 -0
  187. package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
  188. package/build/src/testing/velocious-test-arguments.js +55 -0
  189. package/build/src/utils/model-primary-key.d.ts +73 -0
  190. package/build/src/utils/model-primary-key.d.ts.map +1 -0
  191. package/build/src/utils/model-primary-key.js +144 -0
  192. package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
  193. package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
  194. package/build/src/utils/sha256-bytes-hex.js +117 -0
  195. package/build/src/utils/sha256-hex.d.ts +2 -4
  196. package/build/src/utils/sha256-hex.d.ts.map +1 -1
  197. package/build/src/utils/sha256-hex.js +6 -120
  198. package/build/sync/assets/cache.js +998 -0
  199. package/build/sync/assets/types.js +62 -0
  200. package/build/sync/sync-api-client.js +3 -2
  201. package/build/sync/sync-client.js +2 -1
  202. package/build/sync/sync-envelope-replay-service.js +5 -4
  203. package/build/sync/sync-publisher.js +3 -2
  204. package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
  205. package/build/testing/test-profiler.js +2 -2
  206. package/build/testing/test-runner.js +496 -990
  207. package/build/testing/test.js +164 -306
  208. package/build/testing/velocious-attempt-executor.js +441 -0
  209. package/build/testing/velocious-runner-reporter.js +264 -0
  210. package/build/testing/velocious-suite-hook-executor.js +43 -0
  211. package/build/testing/velocious-test-arguments.js +64 -0
  212. package/build/tsconfig.tsbuildinfo +1 -1
  213. package/build/utils/model-primary-key.js +171 -0
  214. package/build/utils/sha256-bytes-hex.js +132 -0
  215. package/build/utils/sha256-hex.js +7 -135
  216. package/package.json +5 -4
  217. package/src/authorization/ability.js +36 -13
  218. package/src/background-jobs/adapter.js +9 -0
  219. package/src/background-jobs/main.js +35 -10
  220. package/src/background-jobs/store.js +217 -38
  221. package/src/background-jobs/types.js +15 -0
  222. package/src/configuration-types.js +1 -1
  223. package/src/configuration.js +45 -9
  224. package/src/database/drivers/base-column.js +8 -0
  225. package/src/database/drivers/mssql/sql/update.js +1 -3
  226. package/src/database/drivers/mysql/sql/update.js +1 -3
  227. package/src/database/drivers/pgsql/column.js +22 -0
  228. package/src/database/drivers/pgsql/sql/update.js +1 -3
  229. package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
  230. package/src/database/drivers/sqlite/sql/update.js +1 -3
  231. package/src/database/query/index.js +2 -2
  232. package/src/database/query/model-class-query.js +26 -10
  233. package/src/database/query/preloader/has-many.js +4 -1
  234. package/src/database/query/query-data.js +2 -1
  235. package/src/database/query/update-base.js +14 -0
  236. package/src/database/query/with-count.js +3 -1
  237. package/src/database/record/acts-as-list.js +37 -13
  238. package/src/database/record/attachments/store.js +336 -26
  239. package/src/database/record/auditing.js +6 -3
  240. package/src/database/record/index.js +197 -42
  241. package/src/database/record/instance-relationships/belongs-to.js +2 -1
  242. package/src/database/record/validators/uniqueness.js +8 -5
  243. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
  244. package/src/frontend-model-controller.js +136 -53
  245. package/src/frontend-model-resource/base-resource.js +87 -37
  246. package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
  247. package/src/frontend-models/base.js +307 -59
  248. package/src/frontend-models/preloader.js +6 -3
  249. package/src/frontend-models/query.js +15 -6
  250. package/src/frontend-models/resource-definition.js +21 -2
  251. package/src/frontend-models/use-destroyed-event.js +1 -1
  252. package/src/frontend-models/use-model-class-event.js +2 -2
  253. package/src/frontend-models/use-updated-event.js +1 -1
  254. package/src/frontend-models/websocket-channel.js +256 -93
  255. package/src/frontend-models/websocket-publishers.js +218 -18
  256. package/src/http-server/client/websocket-session.js +13 -1
  257. package/src/http-server/websocket-channel.js +15 -2
  258. package/src/sync/assets/cache.js +998 -0
  259. package/src/sync/assets/types.js +62 -0
  260. package/src/sync/sync-api-client.js +3 -2
  261. package/src/sync/sync-client.js +2 -1
  262. package/src/sync/sync-envelope-replay-service.js +5 -4
  263. package/src/sync/sync-publisher.js +3 -2
  264. package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
  265. package/src/testing/test-profiler.js +2 -2
  266. package/src/testing/test-runner.js +496 -990
  267. package/src/testing/test.js +164 -306
  268. package/src/testing/velocious-attempt-executor.js +441 -0
  269. package/src/testing/velocious-runner-reporter.js +264 -0
  270. package/src/testing/velocious-suite-hook-executor.js +43 -0
  271. package/src/testing/velocious-test-arguments.js +64 -0
  272. package/src/utils/model-primary-key.js +171 -0
  273. package/src/utils/sha256-bytes-hex.js +132 -0
  274. package/src/utils/sha256-hex.js +7 -135
  275. package/build/src/testing/testing-package-adapter.d.ts +0 -9
  276. package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
  277. package/build/src/testing/testing-package-adapter.js +0 -69
  278. package/build/testing/testing-package-adapter.js +0 -76
  279. package/src/testing/testing-package-adapter.js +0 -76
@@ -1,3 +1,12 @@
1
+ export type FrontendModelPublisherResource = {
2
+ primaryKey: import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition;
3
+ };
4
+ export type FrontendModelDestroyAuthorizationRecord = Record<string, import("./query.js").FrontendModelTransportValue>;
5
+ export type FrontendModelWebsocketRecord = import("../database/record/index.js").default & {
6
+ __frontendModelWebsocketAction?: "create" | "update";
7
+ __frontendModelWebsocketDestroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord;
8
+ __frontendModelWebsocketPreviousIds?: Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>;
9
+ };
1
10
  /** Shared channel name for all frontend-model lifecycle subscriptions. */
2
11
  export declare const FRONTEND_MODELS_CHANNEL_NAME = "frontend-models";
3
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAUA,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,oBAAoB,CAAA;AAa7D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAHhD,MAGgD,GAF9C,MAAM,CAIlB;AA4CD;;;;GAIG;AACH,wBAAsB,gDAAgD,CAAC,aAAa,EAHzE,OAAO,qBAAqB,EAAE,OAG2C,GAFvE,OAAO,CAAC,IAAI,CAAC,CAwFzB"}
1
+ {"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAQI,YAA2F,8BAA8B,GAA/G;IAAC,UAAU,EAAE,OAAO,+BAA+B,EAAE,yBAAyB,CAAA;CAAC,CAAgC;AACzH,YAA4E,uCAAuC,GAAzG,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,2BAA2B,CAAC,CAAyC;AACnH,YAAiU,4BAA4B,GAAnV,OAAO,6BAA6B,EAAE,OAAO,GAAG;IAAC,8BAA8B,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,kDAAkD,CAAC,EAAE,uCAAuC,CAAC;IAAC,mCAAmC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,+BAA+B,EAAE,oBAAoB,CAAC,CAAA;CAAC,CAA8B;AAOjW,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,oBAAoB,CAAA;AAa7D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAHhD,MAGgD,GAF9C,MAAM,CAIlB;AA4CD;;;;GAIG;AACH,wBAAsB,gDAAgD,CAAC,aAAa,EAHzE,OAAO,qBAAqB,EAAE,OAG2C,GAFvE,OAAO,CAAC,IAAI,CAAC,CA8HzB"}
@@ -3,8 +3,14 @@ import AuthorizationBaseResource from "../authorization/base-resource.js";
3
3
  import { frontendModelResourcesWithBuiltInsForBackendProject } from "./built-in-resources.js";
4
4
  import { frontendModelResourceDefinitionIsClass } from "./resource-definition.js";
5
5
  import { serializeFrontendModelTransportValue } from "./transport-serialization.js";
6
+ import { modelPrimaryKeyCacheKey, readModelPrimaryKeyValue } from "../utils/model-primary-key.js";
7
+ /** @typedef {{primaryKey: import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition}} FrontendModelPublisherResource */
8
+ /** @typedef {Record<string, import("./query.js").FrontendModelTransportValue>} FrontendModelDestroyAuthorizationRecord */
9
+ /** @typedef {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update", __frontendModelWebsocketDestroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord, __frontendModelWebsocketPreviousIds?: Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>}} FrontendModelWebsocketRecord */
6
10
  const modelClassesWithRegisteredHooks = new WeakSet();
7
11
  const channelClassRegisteredConfigurations = new WeakSet();
12
+ /** @type {WeakMap<import("../configuration.js").default, WeakMap<typeof import("../database/record/index.js").default, Map<string, FrontendModelPublisherResource>>>} */
13
+ const publisherResourcesByConfiguration = new WeakMap();
8
14
  /** Shared channel name for all frontend-model lifecycle subscriptions. */
9
15
  export const FRONTEND_MODELS_CHANNEL_NAME = "frontend-models";
10
16
  /**
@@ -51,7 +57,7 @@ function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
51
57
  // throw `requires a static ModelClass` during ability-resource discovery.
52
58
  if (!resourceClass.ModelClass)
53
59
  continue;
54
- const modelName = resourceClass.modelClass().getModelName();
60
+ const modelName = resourceClass.resourceConfig().modelName || resourceClass.modelClass().getModelName();
55
61
  resources[modelName] = resourceClass;
56
62
  }
57
63
  else if (resourceClass.prototype instanceof AuthorizationBaseResource) {
@@ -96,14 +102,32 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
96
102
  const { default: FrontendModelWebsocketChannel } = await import("./websocket-channel.js");
97
103
  configuration.registerWebsocketChannel(FRONTEND_MODELS_CHANNEL_NAME, FrontendModelWebsocketChannel);
98
104
  }
99
- for (const resourceClass of Object.values(allFrontendModels)) {
105
+ for (const [modelName, resourceClass] of Object.entries(allFrontendModels)) {
100
106
  // An abstract base resource (no static ModelClass — e.g. an app's shared
101
107
  // `BaseResource` that other resources extend) backs no model, so there is
102
108
  // nothing to publish realtime events for. Skip it instead of throwing.
103
109
  if (!resourceClass.ModelClass)
104
110
  continue;
105
111
  const modelClass = resourceClass.modelClass();
106
- const modelName = modelClass.getModelName();
112
+ const resourceConfiguration = resourceClass.resourceConfig();
113
+ const configuredPrimaryKey = resourceConfiguration.primaryKey;
114
+ const modelPrimaryKey = modelClass.primaryKey();
115
+ const primaryKey = configuredPrimaryKey || (Array.isArray(modelPrimaryKey)
116
+ ? modelPrimaryKey.map((columnName) => modelClass.resolveAttributeName(columnName) || columnName)
117
+ : modelClass.resolveAttributeName(modelPrimaryKey) || modelPrimaryKey);
118
+ let publisherResourcesByModelClass = publisherResourcesByConfiguration.get(configuration);
119
+ if (!publisherResourcesByModelClass) {
120
+ publisherResourcesByModelClass = new WeakMap();
121
+ publisherResourcesByConfiguration.set(configuration, publisherResourcesByModelClass);
122
+ }
123
+ let publisherResources = publisherResourcesByModelClass.get(modelClass);
124
+ if (!publisherResources) {
125
+ publisherResources = new Map();
126
+ publisherResourcesByModelClass.set(modelClass, publisherResources);
127
+ }
128
+ publisherResources.set(modelName, {
129
+ primaryKey
130
+ });
107
131
  // Register lifecycle hooks once per model class, not per configuration. A model class belongs to a
108
132
  // single backend project/config in production, so per-config registration only differs in tests where
109
133
  // the same model class is reachable from multiple configs — there it attaches duplicate beforeCreate/
@@ -113,32 +137,175 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
113
137
  continue;
114
138
  modelClassesWithRegisteredHooks.add(modelClass);
115
139
  modelClass.beforeCreate((model) => {
116
- /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create";
140
+ /** @type {FrontendModelWebsocketRecord} */ (model).__frontendModelWebsocketAction = "create";
117
141
  });
118
- modelClass.beforeUpdate((model) => {
119
- /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update";
142
+ modelClass.beforeUpdate(async (model) => {
143
+ const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
144
+ websocketModel.__frontendModelWebsocketAction = "update";
145
+ websocketModel.__frontendModelWebsocketPreviousIds = await frontendModelPreviousResourceIdentities(model);
146
+ });
147
+ modelClass.beforeDestroy(async (model) => {
148
+ const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
149
+ const persistedModel = await model
150
+ .queryForModel(model.getModelClass())
151
+ .find(model._persistedPrimaryKeyValue());
152
+ if (!persistedModel)
153
+ throw new Error(`Cannot capture websocket destroy authorization for missing ${model.getModelClass().name}`);
154
+ websocketModel.__frontendModelWebsocketPreviousIds = frontendModelResourceIdentities(persistedModel);
155
+ websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord = frontendModelDestroyAuthorizationRecord(persistedModel);
120
156
  });
121
157
  modelClass.afterSave((model) => {
122
- const modelWithWebsocketAction = /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model);
158
+ const modelWithWebsocketAction = /** @type {FrontendModelWebsocketRecord} */ (model);
123
159
  const action = modelWithWebsocketAction.__frontendModelWebsocketAction;
124
160
  if (action !== "create" && action !== "update")
125
161
  return;
162
+ const previousIds = modelWithWebsocketAction.__frontendModelWebsocketPreviousIds;
126
163
  void model.connection().afterCommit(async () => {
127
- broadcastFrontendModelEvent(model._getConfiguration(), modelName, {
128
- action,
129
- id: model.id(),
130
- record: model.attributes()
131
- });
164
+ broadcastFrontendModelEvents(model, action, previousIds);
132
165
  });
133
166
  delete modelWithWebsocketAction.__frontendModelWebsocketAction;
167
+ delete modelWithWebsocketAction.__frontendModelWebsocketPreviousIds;
134
168
  });
135
169
  modelClass.afterDestroy((model) => {
170
+ const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
171
+ const destroyAuthorizationRecord = websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord;
172
+ const previousIds = websocketModel.__frontendModelWebsocketPreviousIds;
136
173
  void model.connection().afterCommit(async () => {
137
- broadcastFrontendModelEvent(model._getConfiguration(), modelName, {
138
- action: "destroy",
139
- id: model.id()
140
- });
174
+ broadcastFrontendModelEvents(model, "destroy", previousIds, destroyAuthorizationRecord);
141
175
  });
176
+ delete websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord;
177
+ delete websocketModel.__frontendModelWebsocketPreviousIds;
178
+ });
179
+ }
180
+ }
181
+ /**
182
+ * Returns every resource identity represented by the record before its pending changes or destruction.
183
+ * @param {import("../database/record/index.js").default} model - Backing model before update or destroy.
184
+ * @returns {Promise<Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>>} - Previous identities by resource name.
185
+ */
186
+ async function frontendModelPreviousResourceIdentities(model) {
187
+ const publisherResources = publisherResourcesByConfiguration.get(model._getConfiguration())?.get(model.getModelClass());
188
+ /** @type {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} */
189
+ const previousIds = new Map();
190
+ if (!publisherResources)
191
+ return previousIds;
192
+ for (const [modelName, { primaryKey }] of publisherResources) {
193
+ const previousId = frontendModelResourceIdentity({ model, previous: true, primaryKey });
194
+ if (previousId !== null)
195
+ previousIds.set(modelName, previousId);
196
+ }
197
+ if (previousIds.size === publisherResources.size)
198
+ return previousIds;
199
+ const persistedModel = await model
200
+ .queryForModel(model.getModelClass())
201
+ .find(model._persistedPrimaryKeyValue());
202
+ for (const [modelName, { primaryKey }] of publisherResources) {
203
+ if (previousIds.has(modelName))
204
+ continue;
205
+ const persistedId = frontendModelResourceIdentity({ model: persistedModel, primaryKey });
206
+ if (persistedId !== null)
207
+ previousIds.set(modelName, persistedId);
208
+ }
209
+ return previousIds;
210
+ }
211
+ /**
212
+ * Returns every configured resource identity represented by a persisted backing record.
213
+ * @param {import("../database/record/index.js").default} model - Fully loaded persisted backing record.
214
+ * @returns {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} - Identities by resource name.
215
+ */
216
+ function frontendModelResourceIdentities(model) {
217
+ const publisherResources = publisherResourcesByConfiguration.get(model._getConfiguration())?.get(model.getModelClass());
218
+ /** @type {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} */
219
+ const identities = new Map();
220
+ if (!publisherResources)
221
+ return identities;
222
+ for (const [modelName, { primaryKey }] of publisherResources) {
223
+ const id = frontendModelResourceIdentity({ model, primaryKey });
224
+ if (id !== null)
225
+ identities.set(modelName, id);
226
+ }
227
+ return identities;
228
+ }
229
+ /**
230
+ * Serializes the persisted record for server-side destroy authorization. Binary values
231
+ * use a dedicated byte-array marker because the shared transport serializer otherwise
232
+ * leaves Buffers to the JSON implementation used by the worker or Beacon transport.
233
+ * @param {import("../database/record/index.js").default} model - Fully loaded persisted backing record.
234
+ * @returns {FrontendModelDestroyAuthorizationRecord} - Column-keyed transport values.
235
+ */
236
+ function frontendModelDestroyAuthorizationRecord(model) {
237
+ const serializationOptions = transportSerializationOptionsForConfiguration(model._getConfiguration());
238
+ /** @type {FrontendModelDestroyAuthorizationRecord} */
239
+ const authorizationRecord = {};
240
+ for (const [columnName, value] of Object.entries(model.rawAttributes())) {
241
+ authorizationRecord[columnName] = value instanceof Uint8Array
242
+ ? { __velociousDestroyAuthorizationType: "binary", value: Array.from(value) }
243
+ : serializeFrontendModelTransportValue(value, serializationOptions);
244
+ }
245
+ if (Object.keys(authorizationRecord).length === 0) {
246
+ throw new Error(`Cannot capture websocket destroy authorization without attributes for ${model.getModelClass().name}`);
247
+ }
248
+ return authorizationRecord;
249
+ }
250
+ /**
251
+ * Reads a resource identity only when every identity attribute was loaded on the backing record.
252
+ * @param {object} args - Identity arguments.
253
+ * @param {import("../database/record/index.js").default} args.model - Backing model.
254
+ * @param {boolean} [args.previous] - Read values from before pending changes.
255
+ * @param {import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition} args.primaryKey - Resource identity definition.
256
+ * @returns {import("../utils/model-primary-key.js").ModelPrimaryKeyValue | null} - Complete identity or null when unavailable.
257
+ */
258
+ function frontendModelResourceIdentity({ model, previous = false, primaryKey }) {
259
+ const attributes = model.attributes();
260
+ const changes = model.changes();
261
+ /** @type {Record<string, import("../utils/model-primary-key.js").ModelPrimaryKeyScalar>} */
262
+ const identityAttributes = {};
263
+ const primaryKeyAttributes = Array.isArray(primaryKey) ? primaryKey : [primaryKey];
264
+ for (const attributeName of primaryKeyAttributes) {
265
+ const columnName = model.getModelClass().getColumnNameForAttributeName(attributeName);
266
+ let value;
267
+ if (previous && Object.hasOwn(changes, columnName)) {
268
+ value = changes[columnName][0];
269
+ }
270
+ else {
271
+ if (!Object.hasOwn(attributes, attributeName))
272
+ return null;
273
+ value = attributes[attributeName];
274
+ }
275
+ if (typeof value !== "string" && typeof value !== "number")
276
+ return null;
277
+ identityAttributes[attributeName] = value;
278
+ }
279
+ return readModelPrimaryKeyValue(primaryKey, (attributeName) => identityAttributes[attributeName]);
280
+ }
281
+ /**
282
+ * Fans one backing-record lifecycle event out through every configured frontend-resource identity.
283
+ * @param {import("../database/record/index.js").default} model - Backing model instance.
284
+ * @param {"create" | "update" | "destroy"} action - Lifecycle action.
285
+ * @param {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} [previousIds] - Persisted identities captured before update or destroy.
286
+ * @param {FrontendModelDestroyAuthorizationRecord} [destroyAuthorizationRecord] - Server-only pre-delete row used to authorize a destroyed record.
287
+ * @returns {void}
288
+ */
289
+ function broadcastFrontendModelEvents(model, action, previousIds, destroyAuthorizationRecord) {
290
+ const configuration = model._getConfiguration();
291
+ const publisherResources = publisherResourcesByConfiguration.get(configuration)?.get(model.getModelClass());
292
+ if (!publisherResources)
293
+ return;
294
+ for (const [modelName, { primaryKey }] of publisherResources) {
295
+ const previousId = previousIds?.get(modelName);
296
+ const currentId = frontendModelResourceIdentity({ model, primaryKey });
297
+ const id = action === "destroy" ? previousId : currentId ?? previousId;
298
+ if (id === null || id === undefined)
299
+ continue;
300
+ const identityChanged = action === "update"
301
+ && currentId !== null
302
+ && previousId !== undefined
303
+ && modelPrimaryKeyCacheKey(primaryKey, previousId) !== modelPrimaryKeyCacheKey(primaryKey, id);
304
+ broadcastFrontendModelEvent(configuration, modelName, {
305
+ action,
306
+ id,
307
+ ...(destroyAuthorizationRecord !== undefined ? { destroyAuthorizationRecord } : {}),
308
+ ...(identityChanged ? { previousId } : {})
142
309
  });
143
310
  }
144
311
  }
@@ -148,7 +315,7 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
148
315
  * transport serializer so Date/undefined/etc. survive the JSON hop.
149
316
  * @param {import("../configuration.js").default} configuration - Configuration instance.
150
317
  * @param {string} modelName - Model class name.
151
- * @param {{action: "create" | "update" | "destroy", id: ReturnType<typeof JSON.parse>, record?: Record<string, ReturnType<typeof JSON.parse>>}} event - Lifecycle event.
318
+ * @param {{action: "create" | "update" | "destroy", destroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord, id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, previousId?: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, record?: Record<string, import("./query.js").FrontendModelTransportValue>}} event - Lifecycle event.
152
319
  * @returns {void}
153
320
  */
154
321
  function broadcastFrontendModelEvent(configuration, modelName, event) {
@@ -156,8 +323,12 @@ function broadcastFrontendModelEvent(configuration, modelName, event) {
156
323
  action: event.action,
157
324
  id: event.id,
158
325
  model: modelName,
326
+ ...(event.previousId !== undefined ? { previousId: event.previousId } : {}),
159
327
  ...(event.record ? { record: serializeFrontendModelTransportValue(event.record, transportSerializationOptionsForConfiguration(configuration)) } : {})
160
328
  };
161
- configuration.broadcastToChannel(FRONTEND_MODELS_CHANNEL_NAME, { model: modelName }, body);
329
+ configuration.broadcastToChannel(FRONTEND_MODELS_CHANNEL_NAME, {
330
+ ...(event.destroyAuthorizationRecord !== undefined ? { destroyAuthorizationRecord: event.destroyAuthorizationRecord } : {}),
331
+ model: modelName
332
+ }, body);
162
333
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8sRUFBQyxtREFBbUQsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNGLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQy9FLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBRWpGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUNyRCxNQUFNLG9DQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFMUQsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLGlCQUFpQixDQUFBO0FBRTdEOzs7O0dBSUc7QUFDSCxTQUFTLDZDQUE2QyxDQUFDLGFBQWE7SUFDbEUsT0FBTztRQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0tBQzNFLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxTQUFTO0lBQ3pELE9BQU8sbUJBQW1CLFNBQVMsRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyw4Q0FBOEMsQ0FBQyxnQkFBZ0I7SUFDdEU7O29HQUVnRztJQUNoRyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQyxD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QkFDN0MsMkJBQTJCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxFQUFFO29CQUNoRSxNQUFNLEVBQUUsU0FBUztvQkFDakIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSztJQUNsRSxNQUFNLElBQUksR0FBRztRQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUUsb0NBQW9DLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNwSixDQUFBO0lBRUQsYUFBYSxDQUFDLGtCQUFrQixDQUFDLDRCQUE0QixFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2UgZnJvbSBcIi4uL2F1dGhvcml6YXRpb24vYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxSZXNvdXJjZXNXaXRoQnVpbHRJbnNGb3JCYWNrZW5kUHJvamVjdH0gZnJvbSBcIi4vYnVpbHQtaW4tcmVzb3VyY2VzLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3N9IGZyb20gXCIuL3Jlc291cmNlLWRlZmluaXRpb24uanNcIlxuaW1wb3J0IHtzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcblxuY29uc3QgbW9kZWxDbGFzc2VzV2l0aFJlZ2lzdGVyZWRIb29rcyA9IG5ldyBXZWFrU2V0KClcbmNvbnN0IGNoYW5uZWxDbGFzc1JlZ2lzdGVyZWRDb25maWd1cmF0aW9ucyA9IG5ldyBXZWFrU2V0KClcblxuLyoqIFNoYXJlZCBjaGFubmVsIG5hbWUgZm9yIGFsbCBmcm9udGVuZC1tb2RlbCBsaWZlY3ljbGUgc3Vic2NyaXB0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FID0gXCJmcm9udGVuZC1tb2RlbHNcIlxuXG4vKipcbiAqIFJ1bnMgdHJhbnNwb3J0IHNlcmlhbGl6YXRpb24gb3B0aW9ucyBmb3IgYSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFNlcmlhbGl6YXRpb25PcHRpb25zfSAtIFNlcmlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gdHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnNGb3JDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0aW1lWm9uZTogY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5nZXRUaW1lWm9uZShjb25maWd1cmF0aW9uKVxuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lIChsZWdhY3ksIHJldGFpbmVkIGZvciBtaWdyYXRpb24gY29tcGF0aWJpbGl0eSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUobW9kZWxOYW1lKSB7XG4gIHJldHVybiBgZnJvbnRlbmQtbW9kZWxzOiR7bW9kZWxOYW1lfWBcbn1cblxuLyoqXG4gKiBSdW5zIGZyb250ZW5kIG1vZGVsIHJlc291cmNlcyBmcm9tIGFiaWxpdHkgcmVzb3VyY2VzIGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IGFiaWxpdHlSZXNvdXJjZXMgLSBBYmlsaXR5IHJlc291cmNlIGNsYXNzZXMuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcykge1xuICAvKipcbiAgICogUmVzb3VyY2VzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAqL1xuICBjb25zdCByZXNvdXJjZXMgPSB7fVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXR5UmVzb3VyY2VzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYWJpbGl0eSByZXNvdXJjZXMgdG8gYmUgYW4gYXJyYXkgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eVJlc291cmNlc31gKVxuICB9XG5cbiAgaWYgKGFiaWxpdHlSZXNvdXJjZXMubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb3VyY2VzXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIGFiaWxpdHlSZXNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlc291cmNlQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIHRvIGJlIGEgY2xhc3MgYnV0IGdvdDogJHt0eXBlb2YgcmVzb3VyY2VDbGFzc31gKVxuICAgIH1cblxuICAgIGlmIChmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZUNsYXNzKSkge1xuICAgICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgICAvLyBgQmFzZVJlc291cmNlYCB0aGF0IG90aGVyIHJlc291cmNlcyBleHRlbmQpIGJhY2tzIG5vIG1vZGVsLCBzbyBpdCBpc24ndCBhXG4gICAgICAvLyBwdWJsaXNoYWJsZSBmcm9udGVuZCBtb2RlbC4gU2tpcCBpdCBpbnN0ZWFkIG9mIGxldHRpbmcgYG1vZGVsQ2xhc3MoKWBcbiAgICAgIC8vIHRocm93IGByZXF1aXJlcyBhIHN0YXRpYyBNb2RlbENsYXNzYCBkdXJpbmcgYWJpbGl0eS1yZXNvdXJjZSBkaXNjb3ZlcnkuXG4gICAgICBpZiAoIXJlc291cmNlQ2xhc3MuTW9kZWxDbGFzcykgY29udGludWVcblxuICAgICAgY29uc3QgbW9kZWxOYW1lID0gcmVzb3VyY2VDbGFzcy5tb2RlbENsYXNzKCkuZ2V0TW9kZWxOYW1lKClcblxuICAgICAgcmVzb3VyY2VzW21vZGVsTmFtZV0gPSByZXNvdXJjZUNsYXNzXG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2UpIHtcbiAgICAgIC8vIEF1dGhvcml6YXRpb24tb25seSByZXNvdXJjZSDigJQgdmFsaWQgYnV0IG5vdCByZWxldmFudCBmb3IgV2ViU29ja2V0IHB1Ymxpc2hpbmdcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgY2xhc3M6ICR7cmVzb3VyY2VDbGFzcy5uYW1lfS4gRXhwZWN0ZWQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBvciBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHN1YmNsYXNzLmApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc291cmNlc1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZCBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZChjb25maWd1cmF0aW9uKSB7XG4gIC8qKlxuICAgKiBBbGwgZnJvbnRlbmQgbW9kZWxzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAqL1xuICBsZXQgYWxsRnJvbnRlbmRNb2RlbHMgPSB7fVxuXG4gIGZvciAoY29uc3QgYmFja2VuZFByb2plY3Qgb2YgY29uZmlndXJhdGlvbi5nZXRCYWNrZW5kUHJvamVjdHMoKSkge1xuICAgIGNvbnN0IHByb2plY3RSZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzV2l0aEJ1aWx0SW5zRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IHsuLi5hbGxGcm9udGVuZE1vZGVscywgLi4ucHJvamVjdFJlc291cmNlc31cbiAgfVxuXG4gIC8vIEFsd2F5cyBtZXJnZSB0aGUgYWJpbGl0eSByZXNvbHZlcidzIHJlc291cmNlIGxpc3QgdG9vLiBBIHByb2plY3QgY2FuIGV4cG9zZSBzb21lXG4gIC8vIHJlc291cmNlcyBhcyBkaXNjb3ZlcmFibGUgYHNyYy9yZXNvdXJjZXMvKi5qc2AgZmlsZXMgKGNvbmZpZ3VyZWQgb3IgYXV0by1kaXNjb3ZlcmVkKVxuICAvLyBhbmQgb3RoZXJzIG9ubHkgdGhyb3VnaCBgZ2V0QWJpbGl0eVJlc291cmNlcygpYDsgYm90aCBzZXRzIG5lZWQgbGlmZWN5Y2xlIHB1Ymxpc2hlcnMsXG4gIC8vIHNvIHJlc291cmNlIGRpc2NvdmVyeSBtdXN0IG5vdCBzdXBwcmVzcyB0aGlzIGxpc3QuXG4gIGNvbnN0IGFiaWxpdHlSZXNvdXJjZXMgPSBjb25maWd1cmF0aW9uLmdldEFiaWxpdHlSZXNvdXJjZXMoKVxuXG4gIGFsbEZyb250ZW5kTW9kZWxzID0ge1xuICAgIC4uLmFsbEZyb250ZW5kTW9kZWxzLFxuICAgIC4uLmZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcylcbiAgfVxuXG4gIC8vIFBoYXNlIDM6IHJlZ2lzdGVyIHRoZSBWMiBjaGFubmVsIGNsYXNzIG9uY2UgcGVyIGNvbmZpZ3VyYXRpb24gc29cbiAgLy8gYHN1YnNjcmliZUNoYW5uZWwoXCJmcm9udGVuZC1tb2RlbHNcIiwge3BhcmFtczoge21vZGVsfX0pYCBmaW5kcyBpdC5cbiAgLy8gRHluYW1pYyBpbXBvcnQga2VlcHMgc2VydmVyLW9ubHkgV2Vic29ja2V0UmVxdWVzdCArIE5vZGUgdXRpbGl0aWVzXG4gIC8vIG91dCBvZiBicm93c2VyIGJ1bmRsZXMgdGhhdCB0cmFuc2l0aXZlbHkgcHVsbCBpbiB0aGlzIG1vZHVsZSB2aWFcbiAgLy8gY29uZmlndXJhdGlvbiDihpIgbG9nZ2VyLlxuICBpZiAoIWNoYW5uZWxDbGFzc1JlZ2lzdGVyZWRDb25maWd1cmF0aW9ucy5oYXMoY29uZmlndXJhdGlvbikpIHtcbiAgICBjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuYWRkKGNvbmZpZ3VyYXRpb24pXG4gICAgY29uc3Qge2RlZmF1bHQ6IEZyb250ZW5kTW9kZWxXZWJzb2NrZXRDaGFubmVsfSA9IGF3YWl0IGltcG9ydChcIi4vd2Vic29ja2V0LWNoYW5uZWwuanNcIilcblxuICAgIGNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJXZWJzb2NrZXRDaGFubmVsKEZST05URU5EX01PREVMU19DSEFOTkVMX05BTUUsIEZyb250ZW5kTW9kZWxXZWJzb2NrZXRDaGFubmVsKVxuICB9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIE9iamVjdC52YWx1ZXMoYWxsRnJvbnRlbmRNb2RlbHMpKSB7XG4gICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgLy8gYEJhc2VSZXNvdXJjZWAgdGhhdCBvdGhlciByZXNvdXJjZXMgZXh0ZW5kKSBiYWNrcyBubyBtb2RlbCwgc28gdGhlcmUgaXNcbiAgICAvLyBub3RoaW5nIHRvIHB1Ymxpc2ggcmVhbHRpbWUgZXZlbnRzIGZvci4gU2tpcCBpdCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpXG4gICAgY29uc3QgbW9kZWxOYW1lID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuXG4gICAgLy8gUmVnaXN0ZXIgbGlmZWN5Y2xlIGhvb2tzIG9uY2UgcGVyIG1vZGVsIGNsYXNzLCBub3QgcGVyIGNvbmZpZ3VyYXRpb24uIEEgbW9kZWwgY2xhc3MgYmVsb25ncyB0byBhXG4gICAgLy8gc2luZ2xlIGJhY2tlbmQgcHJvamVjdC9jb25maWcgaW4gcHJvZHVjdGlvbiwgc28gcGVyLWNvbmZpZyByZWdpc3RyYXRpb24gb25seSBkaWZmZXJzIGluIHRlc3RzIHdoZXJlXG4gICAgLy8gdGhlIHNhbWUgbW9kZWwgY2xhc3MgaXMgcmVhY2hhYmxlIGZyb20gbXVsdGlwbGUgY29uZmlncyDigJQgdGhlcmUgaXQgYXR0YWNoZXMgZHVwbGljYXRlIGJlZm9yZUNyZWF0ZS9cbiAgICAvLyBhZnRlclNhdmUvYWZ0ZXJEZXN0cm95IGhvb2tzIHRoYXQgZG91YmxlLWZpcmUgYnJvYWRjYXN0cyAoYW5kIGxlYWsgYWNyb3NzIHNwZWNzKS4gVGhlIGhvb2tzIHJlYWQgdGhlXG4gICAgLy8gbW9kZWwncyBydW50aW1lIGNvbmZpZ3VyYXRpb24gd2hlbiBicm9hZGNhc3RpbmcsIHNvIGEgc2luZ2xlIHJlZ2lzdHJhdGlvbiBpcyBzdWZmaWNpZW50LlxuICAgIGlmIChtb2RlbENsYXNzZXNXaXRoUmVnaXN0ZXJlZEhvb2tzLmhhcyhtb2RlbENsYXNzKSkgY29udGludWVcblxuICAgIG1vZGVsQ2xhc3Nlc1dpdGhSZWdpc3RlcmVkSG9va3MuYWRkKG1vZGVsQ2xhc3MpXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZUNyZWF0ZSgobW9kZWwpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwiY3JlYXRlXCJcbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5iZWZvcmVVcGRhdGUoKG1vZGVsKSA9PiB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKS5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24gPSBcInVwZGF0ZVwiXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKChtb2RlbCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbClcbiAgICAgIGNvbnN0IGFjdGlvbiA9IG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cblxuICAgICAgaWYgKGFjdGlvbiAhPT0gXCJjcmVhdGVcIiAmJiBhY3Rpb24gIT09IFwidXBkYXRlXCIpIHJldHVyblxuXG4gICAgICB2b2lkIG1vZGVsLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGJyb2FkY2FzdEZyb250ZW5kTW9kZWxFdmVudChtb2RlbC5fZ2V0Q29uZmlndXJhdGlvbigpLCBtb2RlbE5hbWUsIHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKCksXG4gICAgICAgICAgcmVjb3JkOiBtb2RlbC5hdHRyaWJ1dGVzKClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICBkZWxldGUgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmFmdGVyRGVzdHJveSgobW9kZWwpID0+IHtcbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCksIG1vZGVsTmFtZSwge1xuICAgICAgICAgIGFjdGlvbjogXCJkZXN0cm95XCIsXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEZhbnMgYSBsaWZlY3ljbGUgZXZlbnQgb3V0IHRvIGFsbCBWMiBcImZyb250ZW5kLW1vZGVsc1wiIHN1YnNjcmliZXJzXG4gKiB3aG9zZSBgcGFyYW1zLm1vZGVsYCBtYXRjaGVzLiBSZWNvcmQgYXR0cmlidXRlcyBnbyB0aHJvdWdoIHRoZVxuICogdHJhbnNwb3J0IHNlcmlhbGl6ZXIgc28gRGF0ZS91bmRlZmluZWQvZXRjLiBzdXJ2aXZlIHRoZSBKU09OIGhvcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHt7YWN0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCBpZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHJlY29yZD86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19IGV2ZW50IC0gTGlmZWN5Y2xlIGV2ZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGJyb2FkY2FzdEZyb250ZW5kTW9kZWxFdmVudChjb25maWd1cmF0aW9uLCBtb2RlbE5hbWUsIGV2ZW50KSB7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgYWN0aW9uOiBldmVudC5hY3Rpb24sXG4gICAgaWQ6IGV2ZW50LmlkLFxuICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgLi4uKGV2ZW50LnJlY29yZCA/IHtyZWNvcmQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShldmVudC5yZWNvcmQsIHRyYW5zcG9ydFNlcmlhbGl6YXRpb25PcHRpb25zRm9yQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSl9IDoge30pXG4gIH1cblxuICBjb25maWd1cmF0aW9uLmJyb2FkY2FzdFRvQ2hhbm5lbChGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FLCB7bW9kZWw6IG1vZGVsTmFtZX0sIGJvZHkpXG59XG4iXX0=
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8sRUFBQyxtREFBbUQsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNGLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQy9FLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ2pGLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFBO0FBRS9GLGdJQUFnSTtBQUNoSSwwSEFBMEg7QUFDMUgsb1dBQW9XO0FBRXBXLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUNyRCxNQUFNLG9DQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFDMUQseUtBQXlLO0FBQ3pLLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUV2RCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsaUJBQWlCLENBQUE7QUFFN0Q7Ozs7R0FJRztBQUNILFNBQVMsNkNBQTZDLENBQUMsYUFBYTtJQUNsRSxPQUFPO1FBQ0wsUUFBUSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7S0FDM0UsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFNBQVM7SUFDekQsT0FBTyxtQkFBbUIsU0FBUyxFQUFFLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDhDQUE4QyxDQUFDLGdCQUFnQjtJQUN0RTs7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RUFBRSxDQUFDO1FBQ3pFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3BKLENBQUE7SUFFRCxhQUFhLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUU7UUFDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6SCxLQUFLLEVBQUUsU0FBUztLQUNqQixFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc1dpdGhCdWlsdEluc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9idWlsdC1pbi1yZXNvdXJjZXMuanNcIlxuaW1wb3J0IHtmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzc30gZnJvbSBcIi4vcmVzb3VyY2UtZGVmaW5pdGlvbi5qc1wiXG5pbXBvcnQge3NlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZX0gZnJvbSBcIi4vdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIlxuaW1wb3J0IHttb2RlbFByaW1hcnlLZXlDYWNoZUtleSwgcmVhZE1vZGVsUHJpbWFyeUtleVZhbHVlfSBmcm9tIFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIlxuXG4vKiogQHR5cGVkZWYge3twcmltYXJ5S2V5OiBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlEZWZpbml0aW9ufX0gRnJvbnRlbmRNb2RlbFB1Ymxpc2hlclJlc291cmNlICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gRnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiLCBfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXREZXN0cm95QXV0aG9yaXphdGlvblJlY29yZD86IEZyb250ZW5kTW9kZWxEZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCwgX19mcm9udGVuZE1vZGVsV2Vic29ja2V0UHJldmlvdXNJZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlWYWx1ZT59fSBGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkICovXG5cbmNvbnN0IG1vZGVsQ2xhc3Nlc1dpdGhSZWdpc3RlcmVkSG9va3MgPSBuZXcgV2Vha1NldCgpXG5jb25zdCBjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4vKiogQHR5cGUge1dlYWtNYXA8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBXZWFrTWFwPHR5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgTWFwPHN0cmluZywgRnJvbnRlbmRNb2RlbFB1Ymxpc2hlclJlc291cmNlPj4+fSAqL1xuY29uc3QgcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uID0gbmV3IFdlYWtNYXAoKVxuXG4vKiogU2hhcmVkIGNoYW5uZWwgbmFtZSBmb3IgYWxsIGZyb250ZW5kLW1vZGVsIGxpZmVjeWNsZSBzdWJzY3JpcHRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IEZST05URU5EX01PREVMU19DSEFOTkVMX05BTUUgPSBcImZyb250ZW5kLW1vZGVsc1wiXG5cbi8qKlxuICogUnVucyB0cmFuc3BvcnQgc2VyaWFsaXphdGlvbiBvcHRpb25zIGZvciBhIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90cmFuc3BvcnQtc2VyaWFsaXphdGlvbi5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnN9IC0gU2VyaWFsaXphdGlvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiB0cmFuc3BvcnRTZXJpYWxpemF0aW9uT3B0aW9uc0ZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikge1xuICByZXR1cm4ge1xuICAgIHRpbWVab25lOiBjb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpLmdldFRpbWVab25lKGNvbmZpZ3VyYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUgaGVscGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEJyb2FkY2FzdCBjaGFubmVsIG5hbWUgKGxlZ2FjeSwgcmV0YWluZWQgZm9yIG1pZ3JhdGlvbiBjb21wYXRpYmlsaXR5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpIHtcbiAgcmV0dXJuIGBmcm9udGVuZC1tb2RlbHM6JHttb2RlbE5hbWV9YFxufVxuXG4vKipcbiAqIFJ1bnMgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2VzIGZyb20gYWJpbGl0eSByZXNvdXJjZXMgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5BYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gYWJpbGl0eVJlc291cmNlcyAtIEFiaWxpdHkgcmVzb3VyY2UgY2xhc3Nlcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0Zyb21BYmlsaXR5UmVzb3VyY2VzTGlzdChhYmlsaXR5UmVzb3VyY2VzKSB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZXMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZT59ICovXG4gIGNvbnN0IHJlc291cmNlcyA9IHt9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlSZXNvdXJjZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlcyB0byBiZSBhbiBhcnJheSBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5UmVzb3VyY2VzfWApXG4gIH1cblxuICBpZiAoYWJpbGl0eVJlc291cmNlcy5sZW5ndGggPT09IDApIHJldHVybiByZXNvdXJjZXNcblxuICBmb3IgKGNvbnN0IHJlc291cmNlQ2xhc3Mgb2YgYWJpbGl0eVJlc291cmNlcykge1xuICAgIGlmICh0eXBlb2YgcmVzb3VyY2VDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgdG8gYmUgYSBjbGFzcyBidXQgZ290OiAke3R5cGVvZiByZXNvdXJjZUNsYXNzfWApXG4gICAgfVxuXG4gICAgaWYgKGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlQ2xhc3MpKSB7XG4gICAgICAvLyBBbiBhYnN0cmFjdCBiYXNlIHJlc291cmNlIChubyBzdGF0aWMgTW9kZWxDbGFzcyDigJQgZS5nLiBhbiBhcHAncyBzaGFyZWRcbiAgICAgIC8vIGBCYXNlUmVzb3VyY2VgIHRoYXQgb3RoZXIgcmVzb3VyY2VzIGV4dGVuZCkgYmFja3Mgbm8gbW9kZWwsIHNvIGl0IGlzbid0IGFcbiAgICAgIC8vIHB1Ymxpc2hhYmxlIGZyb250ZW5kIG1vZGVsLiBTa2lwIGl0IGluc3RlYWQgb2YgbGV0dGluZyBgbW9kZWxDbGFzcygpYFxuICAgICAgLy8gdGhyb3cgYHJlcXVpcmVzIGEgc3RhdGljIE1vZGVsQ2xhc3NgIGR1cmluZyBhYmlsaXR5LXJlc291cmNlIGRpc2NvdmVyeS5cbiAgICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSByZXNvdXJjZUNsYXNzLnJlc291cmNlQ29uZmlnKCkubW9kZWxOYW1lIHx8IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpLmdldE1vZGVsTmFtZSgpXG5cbiAgICAgIHJlc291cmNlc1ttb2RlbE5hbWVdID0gcmVzb3VyY2VDbGFzc1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uQmFzZVJlc291cmNlKSB7XG4gICAgICAvLyBBdXRob3JpemF0aW9uLW9ubHkgcmVzb3VyY2Ug4oCUIHZhbGlkIGJ1dCBub3QgcmVsZXZhbnQgZm9yIFdlYlNvY2tldCBwdWJsaXNoaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzOiAke3Jlc291cmNlQ2xhc3MubmFtZX0uIEV4cGVjdGVkIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2Ugb3IgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBzdWJjbGFzcy5gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXNcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBlbnN1cmVGcm9udGVuZE1vZGVsV2Vic29ja2V0UHVibGlzaGVyc1JlZ2lzdGVyZWQgaGVscGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVGcm9udGVuZE1vZGVsV2Vic29ja2V0UHVibGlzaGVyc1JlZ2lzdGVyZWQoY29uZmlndXJhdGlvbikge1xuICAvKipcbiAgICogQWxsIGZyb250ZW5kIG1vZGVscy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlPn0gKi9cbiAgbGV0IGFsbEZyb250ZW5kTW9kZWxzID0ge31cblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICBjb25zdCBwcm9qZWN0UmVzb3VyY2VzID0gZnJvbnRlbmRNb2RlbFJlc291cmNlc1dpdGhCdWlsdEluc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KVxuXG4gICAgYWxsRnJvbnRlbmRNb2RlbHMgPSB7Li4uYWxsRnJvbnRlbmRNb2RlbHMsIC4uLnByb2plY3RSZXNvdXJjZXN9XG4gIH1cblxuICAvLyBBbHdheXMgbWVyZ2UgdGhlIGFiaWxpdHkgcmVzb2x2ZXIncyByZXNvdXJjZSBsaXN0IHRvby4gQSBwcm9qZWN0IGNhbiBleHBvc2Ugc29tZVxuICAvLyByZXNvdXJjZXMgYXMgZGlzY292ZXJhYmxlIGBzcmMvcmVzb3VyY2VzLyouanNgIGZpbGVzIChjb25maWd1cmVkIG9yIGF1dG8tZGlzY292ZXJlZClcbiAgLy8gYW5kIG90aGVycyBvbmx5IHRocm91Z2ggYGdldEFiaWxpdHlSZXNvdXJjZXMoKWA7IGJvdGggc2V0cyBuZWVkIGxpZmVjeWNsZSBwdWJsaXNoZXJzLFxuICAvLyBzbyByZXNvdXJjZSBkaXNjb3ZlcnkgbXVzdCBub3Qgc3VwcHJlc3MgdGhpcyBsaXN0LlxuICBjb25zdCBhYmlsaXR5UmVzb3VyY2VzID0gY29uZmlndXJhdGlvbi5nZXRBYmlsaXR5UmVzb3VyY2VzKClcblxuICBhbGxGcm9udGVuZE1vZGVscyA9IHtcbiAgICAuLi5hbGxGcm9udGVuZE1vZGVscyxcbiAgICAuLi5mcm9udGVuZE1vZGVsUmVzb3VyY2VzRnJvbUFiaWxpdHlSZXNvdXJjZXNMaXN0KGFiaWxpdHlSZXNvdXJjZXMpXG4gIH1cblxuICAvLyBQaGFzZSAzOiByZWdpc3RlciB0aGUgVjIgY2hhbm5lbCBjbGFzcyBvbmNlIHBlciBjb25maWd1cmF0aW9uIHNvXG4gIC8vIGBzdWJzY3JpYmVDaGFubmVsKFwiZnJvbnRlbmQtbW9kZWxzXCIsIHtwYXJhbXM6IHttb2RlbH19KWAgZmluZHMgaXQuXG4gIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHNlcnZlci1vbmx5IFdlYnNvY2tldFJlcXVlc3QgKyBOb2RlIHV0aWxpdGllc1xuICAvLyBvdXQgb2YgYnJvd3NlciBidW5kbGVzIHRoYXQgdHJhbnNpdGl2ZWx5IHB1bGwgaW4gdGhpcyBtb2R1bGUgdmlhXG4gIC8vIGNvbmZpZ3VyYXRpb24g4oaSIGxvZ2dlci5cbiAgaWYgKCFjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuaGFzKGNvbmZpZ3VyYXRpb24pKSB7XG4gICAgY2hhbm5lbENsYXNzUmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zLmFkZChjb25maWd1cmF0aW9uKVxuICAgIGNvbnN0IHtkZWZhdWx0OiBGcm9udGVuZE1vZGVsV2Vic29ja2V0Q2hhbm5lbH0gPSBhd2FpdCBpbXBvcnQoXCIuL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpXG5cbiAgICBjb25maWd1cmF0aW9uLnJlZ2lzdGVyV2Vic29ja2V0Q2hhbm5lbChGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FLCBGcm9udGVuZE1vZGVsV2Vic29ja2V0Q2hhbm5lbClcbiAgfVxuXG4gIGZvciAoY29uc3QgW21vZGVsTmFtZSwgcmVzb3VyY2VDbGFzc10gb2YgT2JqZWN0LmVudHJpZXMoYWxsRnJvbnRlbmRNb2RlbHMpKSB7XG4gICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgLy8gYEJhc2VSZXNvdXJjZWAgdGhhdCBvdGhlciByZXNvdXJjZXMgZXh0ZW5kKSBiYWNrcyBubyBtb2RlbCwgc28gdGhlcmUgaXNcbiAgICAvLyBub3RoaW5nIHRvIHB1Ymxpc2ggcmVhbHRpbWUgZXZlbnRzIGZvci4gU2tpcCBpdCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpXG4gICAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gcmVzb3VyY2VDbGFzcy5yZXNvdXJjZUNvbmZpZygpXG4gICAgY29uc3QgY29uZmlndXJlZFByaW1hcnlLZXkgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleVxuICAgIGNvbnN0IG1vZGVsUHJpbWFyeUtleSA9IG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpXG4gICAgY29uc3QgcHJpbWFyeUtleSA9IGNvbmZpZ3VyZWRQcmltYXJ5S2V5IHx8IChBcnJheS5pc0FycmF5KG1vZGVsUHJpbWFyeUtleSlcbiAgICAgID8gbW9kZWxQcmltYXJ5S2V5Lm1hcCgoY29sdW1uTmFtZSkgPT4gbW9kZWxDbGFzcy5yZXNvbHZlQXR0cmlidXRlTmFtZShjb2x1bW5OYW1lKSB8fCBjb2x1bW5OYW1lKVxuICAgICAgOiBtb2RlbENsYXNzLnJlc29sdmVBdHRyaWJ1dGVOYW1lKG1vZGVsUHJpbWFyeUtleSkgfHwgbW9kZWxQcmltYXJ5S2V5KVxuICAgIGxldCBwdWJsaXNoZXJSZXNvdXJjZXNCeU1vZGVsQ2xhc3MgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KGNvbmZpZ3VyYXRpb24pXG5cbiAgICBpZiAoIXB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcykge1xuICAgICAgcHVibGlzaGVyUmVzb3VyY2VzQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuICAgICAgcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uLnNldChjb25maWd1cmF0aW9uLCBwdWJsaXNoZXJSZXNvdXJjZXNCeU1vZGVsQ2xhc3MpXG4gICAgfVxuXG4gICAgbGV0IHB1Ymxpc2hlclJlc291cmNlcyA9IHB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcy5nZXQobW9kZWxDbGFzcylcblxuICAgIGlmICghcHVibGlzaGVyUmVzb3VyY2VzKSB7XG4gICAgICBwdWJsaXNoZXJSZXNvdXJjZXMgPSBuZXcgTWFwKClcbiAgICAgIHB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcy5zZXQobW9kZWxDbGFzcywgcHVibGlzaGVyUmVzb3VyY2VzKVxuICAgIH1cblxuICAgIHB1Ymxpc2hlclJlc291cmNlcy5zZXQobW9kZWxOYW1lLCB7XG4gICAgICBwcmltYXJ5S2V5XG4gICAgfSlcblxuICAgIC8vIFJlZ2lzdGVyIGxpZmVjeWNsZSBob29rcyBvbmNlIHBlciBtb2RlbCBjbGFzcywgbm90IHBlciBjb25maWd1cmF0aW9uLiBBIG1vZGVsIGNsYXNzIGJlbG9uZ3MgdG8gYVxuICAgIC8vIHNpbmdsZSBiYWNrZW5kIHByb2plY3QvY29uZmlnIGluIHByb2R1Y3Rpb24sIHNvIHBlci1jb25maWcgcmVnaXN0cmF0aW9uIG9ubHkgZGlmZmVycyBpbiB0ZXN0cyB3aGVyZVxuICAgIC8vIHRoZSBzYW1lIG1vZGVsIGNsYXNzIGlzIHJlYWNoYWJsZSBmcm9tIG11bHRpcGxlIGNvbmZpZ3Mg4oCUIHRoZXJlIGl0IGF0dGFjaGVzIGR1cGxpY2F0ZSBiZWZvcmVDcmVhdGUvXG4gICAgLy8gYWZ0ZXJTYXZlL2FmdGVyRGVzdHJveSBob29rcyB0aGF0IGRvdWJsZS1maXJlIGJyb2FkY2FzdHMgKGFuZCBsZWFrIGFjcm9zcyBzcGVjcykuIFRoZSBob29rcyByZWFkIHRoZVxuICAgIC8vIG1vZGVsJ3MgcnVudGltZSBjb25maWd1cmF0aW9uIHdoZW4gYnJvYWRjYXN0aW5nLCBzbyBhIHNpbmdsZSByZWdpc3RyYXRpb24gaXMgc3VmZmljaWVudC5cbiAgICBpZiAobW9kZWxDbGFzc2VzV2l0aFJlZ2lzdGVyZWRIb29rcy5oYXMobW9kZWxDbGFzcykpIGNvbnRpbnVlXG5cbiAgICBtb2RlbENsYXNzZXNXaXRoUmVnaXN0ZXJlZEhvb2tzLmFkZChtb2RlbENsYXNzKVxuXG4gICAgbW9kZWxDbGFzcy5iZWZvcmVDcmVhdGUoKG1vZGVsKSA9PiB7XG4gICAgICAvKiogQHR5cGUge0Zyb250ZW5kTW9kZWxXZWJzb2NrZXRSZWNvcmR9ICovIChtb2RlbCkuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uID0gXCJjcmVhdGVcIlxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZVVwZGF0ZShhc3luYyAobW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYnNvY2tldE1vZGVsID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG5cbiAgICAgIHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwidXBkYXRlXCJcbiAgICAgIHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzID0gYXdhaXQgZnJvbnRlbmRNb2RlbFByZXZpb3VzUmVzb3VyY2VJZGVudGl0aWVzKG1vZGVsKVxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZURlc3Ryb3koYXN5bmMgKG1vZGVsKSA9PiB7XG4gICAgICBjb25zdCB3ZWJzb2NrZXRNb2RlbCA9IC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbFdlYnNvY2tldFJlY29yZH0gKi8gKG1vZGVsKVxuICAgICAgY29uc3QgcGVyc2lzdGVkTW9kZWwgPSBhd2FpdCBtb2RlbFxuICAgICAgICAucXVlcnlGb3JNb2RlbChtb2RlbC5nZXRNb2RlbENsYXNzKCkpXG4gICAgICAgIC5maW5kKG1vZGVsLl9wZXJzaXN0ZWRQcmltYXJ5S2V5VmFsdWUoKSlcblxuICAgICAgaWYgKCFwZXJzaXN0ZWRNb2RlbCkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2FwdHVyZSB3ZWJzb2NrZXQgZGVzdHJveSBhdXRob3JpemF0aW9uIGZvciBtaXNzaW5nICR7bW9kZWwuZ2V0TW9kZWxDbGFzcygpLm5hbWV9YClcblxuICAgICAgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0UHJldmlvdXNJZHMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0aWVzKHBlcnNpc3RlZE1vZGVsKVxuICAgICAgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0RGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQgPSBmcm9udGVuZE1vZGVsRGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQocGVyc2lzdGVkTW9kZWwpXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKChtb2RlbCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG4gICAgICBjb25zdCBhY3Rpb24gPSBtb2RlbFdpdGhXZWJzb2NrZXRBY3Rpb24uX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uXG5cbiAgICAgIGlmIChhY3Rpb24gIT09IFwiY3JlYXRlXCIgJiYgYWN0aW9uICE9PSBcInVwZGF0ZVwiKSByZXR1cm5cbiAgICAgIGNvbnN0IHByZXZpb3VzSWRzID0gbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzXG5cbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgYWN0aW9uLCBwcmV2aW91c0lkcylcbiAgICAgIH0pXG4gICAgICBkZWxldGUgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuICAgICAgZGVsZXRlIG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRQcmV2aW91c0lkc1xuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmFmdGVyRGVzdHJveSgobW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYnNvY2tldE1vZGVsID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG4gICAgICBjb25zdCBkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCA9IHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkXG4gICAgICBjb25zdCBwcmV2aW91c0lkcyA9IHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzXG5cbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgXCJkZXN0cm95XCIsIHByZXZpb3VzSWRzLCBkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZClcbiAgICAgIH0pXG4gICAgICBkZWxldGUgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0RGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmRcbiAgICAgIGRlbGV0ZSB3ZWJzb2NrZXRNb2RlbC5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRQcmV2aW91c0lkc1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV2ZXJ5IHJlc291cmNlIGlkZW50aXR5IHJlcHJlc2VudGVkIGJ5IHRoZSByZWNvcmQgYmVmb3JlIGl0cyBwZW5kaW5nIGNoYW5nZXMgb3IgZGVzdHJ1Y3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbCAtIEJhY2tpbmcgbW9kZWwgYmVmb3JlIHVwZGF0ZSBvciBkZXN0cm95LlxuICogQHJldHVybnMge1Byb21pc2U8TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+Pn0gLSBQcmV2aW91cyBpZGVudGl0aWVzIGJ5IHJlc291cmNlIG5hbWUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxQcmV2aW91c1Jlc291cmNlSWRlbnRpdGllcyhtb2RlbCkge1xuICBjb25zdCBwdWJsaXNoZXJSZXNvdXJjZXMgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpPy5nZXQobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleVZhbHVlPn0gKi9cbiAgY29uc3QgcHJldmlvdXNJZHMgPSBuZXcgTWFwKClcblxuICBpZiAoIXB1Ymxpc2hlclJlc291cmNlcykgcmV0dXJuIHByZXZpb3VzSWRzXG5cbiAgZm9yIChjb25zdCBbbW9kZWxOYW1lLCB7cHJpbWFyeUtleX1dIG9mIHB1Ymxpc2hlclJlc291cmNlcykge1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWwsIHByZXZpb3VzOiB0cnVlLCBwcmltYXJ5S2V5fSlcblxuICAgIGlmIChwcmV2aW91c0lkICE9PSBudWxsKSBwcmV2aW91c0lkcy5zZXQobW9kZWxOYW1lLCBwcmV2aW91c0lkKVxuICB9XG5cbiAgaWYgKHByZXZpb3VzSWRzLnNpemUgPT09IHB1Ymxpc2hlclJlc291cmNlcy5zaXplKSByZXR1cm4gcHJldmlvdXNJZHNcblxuICBjb25zdCBwZXJzaXN0ZWRNb2RlbCA9IGF3YWl0IG1vZGVsXG4gICAgLnF1ZXJ5Rm9yTW9kZWwobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAgIC5maW5kKG1vZGVsLl9wZXJzaXN0ZWRQcmltYXJ5S2V5VmFsdWUoKSlcblxuICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIHtwcmltYXJ5S2V5fV0gb2YgcHVibGlzaGVyUmVzb3VyY2VzKSB7XG4gICAgaWYgKHByZXZpb3VzSWRzLmhhcyhtb2RlbE5hbWUpKSBjb250aW51ZVxuXG4gICAgY29uc3QgcGVyc2lzdGVkSWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWw6IHBlcnNpc3RlZE1vZGVsLCBwcmltYXJ5S2V5fSlcblxuICAgIGlmIChwZXJzaXN0ZWRJZCAhPT0gbnVsbCkgcHJldmlvdXNJZHMuc2V0KG1vZGVsTmFtZSwgcGVyc2lzdGVkSWQpXG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNJZHNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV2ZXJ5IGNvbmZpZ3VyZWQgcmVzb3VyY2UgaWRlbnRpdHkgcmVwcmVzZW50ZWQgYnkgYSBwZXJzaXN0ZWQgYmFja2luZyByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbCAtIEZ1bGx5IGxvYWRlZCBwZXJzaXN0ZWQgYmFja2luZyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+fSAtIElkZW50aXRpZXMgYnkgcmVzb3VyY2UgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlSWRlbnRpdGllcyhtb2RlbCkge1xuICBjb25zdCBwdWJsaXNoZXJSZXNvdXJjZXMgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpPy5nZXQobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleVZhbHVlPn0gKi9cbiAgY29uc3QgaWRlbnRpdGllcyA9IG5ldyBNYXAoKVxuXG4gIGlmICghcHVibGlzaGVyUmVzb3VyY2VzKSByZXR1cm4gaWRlbnRpdGllc1xuXG4gIGZvciAoY29uc3QgW21vZGVsTmFtZSwge3ByaW1hcnlLZXl9XSBvZiBwdWJsaXNoZXJSZXNvdXJjZXMpIHtcbiAgICBjb25zdCBpZCA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUlkZW50aXR5KHttb2RlbCwgcHJpbWFyeUtleX0pXG5cbiAgICBpZiAoaWQgIT09IG51bGwpIGlkZW50aXRpZXMuc2V0KG1vZGVsTmFtZSwgaWQpXG4gIH1cblxuICByZXR1cm4gaWRlbnRpdGllc1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIHBlcnNpc3RlZCByZWNvcmQgZm9yIHNlcnZlci1zaWRlIGRlc3Ryb3kgYXV0aG9yaXphdGlvbi4gQmluYXJ5IHZhbHVlc1xuICogdXNlIGEgZGVkaWNhdGVkIGJ5dGUtYXJyYXkgbWFya2VyIGJlY2F1c2UgdGhlIHNoYXJlZCB0cmFuc3BvcnQgc2VyaWFsaXplciBvdGhlcndpc2VcbiAqIGxlYXZlcyBCdWZmZXJzIHRvIHRoZSBKU09OIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGhlIHdvcmtlciBvciBCZWFjb24gdHJhbnNwb3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWwgLSBGdWxseSBsb2FkZWQgcGVyc2lzdGVkIGJhY2tpbmcgcmVjb3JkLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxEZXN0cm95QXV0aG9yaXphdGlvblJlY29yZH0gLSBDb2x1bW4ta2V5ZWQgdHJhbnNwb3J0IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkKG1vZGVsKSB7XG4gIGNvbnN0IHNlcmlhbGl6YXRpb25PcHRpb25zID0gdHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnNGb3JDb25maWd1cmF0aW9uKG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpXG4gIC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkfSAqL1xuICBjb25zdCBhdXRob3JpemF0aW9uUmVjb3JkID0ge31cblxuICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWwucmF3QXR0cmlidXRlcygpKSkge1xuICAgIGF1dGhvcml6YXRpb25SZWNvcmRbY29sdW1uTmFtZV0gPSB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICAgID8ge19fdmVsb2Npb3VzRGVzdHJveUF1dGhvcml6YXRpb25UeXBlOiBcImJpbmFyeVwiLCB2YWx1ZTogQXJyYXkuZnJvbSh2YWx1ZSl9XG4gICAgICA6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh2YWx1ZSwgc2VyaWFsaXphdGlvbk9wdGlvbnMpXG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMoYXV0aG9yaXphdGlvblJlY29yZCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2FwdHVyZSB3ZWJzb2NrZXQgZGVzdHJveSBhdXRob3JpemF0aW9uIHdpdGhvdXQgYXR0cmlidXRlcyBmb3IgJHttb2RlbC5nZXRNb2RlbENsYXNzKCkubmFtZX1gKVxuICB9XG5cbiAgcmV0dXJuIGF1dGhvcml6YXRpb25SZWNvcmRcbn1cblxuLyoqXG4gKiBSZWFkcyBhIHJlc291cmNlIGlkZW50aXR5IG9ubHkgd2hlbiBldmVyeSBpZGVudGl0eSBhdHRyaWJ1dGUgd2FzIGxvYWRlZCBvbiB0aGUgYmFja2luZyByZWNvcmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIElkZW50aXR5IGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWwgLSBCYWNraW5nIG1vZGVsLlxuICogQHBhcmFtIHtib29sZWFufSBbYXJncy5wcmV2aW91c10gLSBSZWFkIHZhbHVlcyBmcm9tIGJlZm9yZSBwZW5kaW5nIGNoYW5nZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleURlZmluaXRpb259IGFyZ3MucHJpbWFyeUtleSAtIFJlc291cmNlIGlkZW50aXR5IGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWUgfCBudWxsfSAtIENvbXBsZXRlIGlkZW50aXR5IG9yIG51bGwgd2hlbiB1bmF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlSWRlbnRpdHkoe21vZGVsLCBwcmV2aW91cyA9IGZhbHNlLCBwcmltYXJ5S2V5fSkge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gbW9kZWwuYXR0cmlidXRlcygpXG4gIGNvbnN0IGNoYW5nZXMgPSBtb2RlbC5jaGFuZ2VzKClcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlTY2FsYXI+fSAqL1xuICBjb25zdCBpZGVudGl0eUF0dHJpYnV0ZXMgPSB7fVxuICBjb25zdCBwcmltYXJ5S2V5QXR0cmlidXRlcyA9IEFycmF5LmlzQXJyYXkocHJpbWFyeUtleSkgPyBwcmltYXJ5S2V5IDogW3ByaW1hcnlLZXldXG5cbiAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIHByaW1hcnlLZXlBdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IG1vZGVsLmdldE1vZGVsQ2xhc3MoKS5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKVxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKHByZXZpb3VzICYmIE9iamVjdC5oYXNPd24oY2hhbmdlcywgY29sdW1uTmFtZSkpIHtcbiAgICAgIHZhbHVlID0gY2hhbmdlc1tjb2x1bW5OYW1lXVswXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSkpIHJldHVybiBudWxsXG5cbiAgICAgIHZhbHVlID0gYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSByZXR1cm4gbnVsbFxuXG4gICAgaWRlbnRpdHlBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gdmFsdWVcbiAgfVxuXG4gIHJldHVybiByZWFkTW9kZWxQcmltYXJ5S2V5VmFsdWUocHJpbWFyeUtleSwgKGF0dHJpYnV0ZU5hbWUpID0+IGlkZW50aXR5QXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSlcbn1cblxuLyoqXG4gKiBGYW5zIG9uZSBiYWNraW5nLXJlY29yZCBsaWZlY3ljbGUgZXZlbnQgb3V0IHRocm91Z2ggZXZlcnkgY29uZmlndXJlZCBmcm9udGVuZC1yZXNvdXJjZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsIC0gQmFja2luZyBtb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIn0gYWN0aW9uIC0gTGlmZWN5Y2xlIGFjdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+fSBbcHJldmlvdXNJZHNdIC0gUGVyc2lzdGVkIGlkZW50aXRpZXMgY2FwdHVyZWQgYmVmb3JlIHVwZGF0ZSBvciBkZXN0cm95LlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsRGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmR9IFtkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZF0gLSBTZXJ2ZXItb25seSBwcmUtZGVsZXRlIHJvdyB1c2VkIHRvIGF1dGhvcml6ZSBhIGRlc3Ryb3llZCByZWNvcmQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgYWN0aW9uLCBwcmV2aW91c0lkcywgZGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQpIHtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKClcbiAgY29uc3QgcHVibGlzaGVyUmVzb3VyY2VzID0gcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uLmdldChjb25maWd1cmF0aW9uKT8uZ2V0KG1vZGVsLmdldE1vZGVsQ2xhc3MoKSlcblxuICBpZiAoIXB1Ymxpc2hlclJlc291cmNlcykgcmV0dXJuXG5cbiAgZm9yIChjb25zdCBbbW9kZWxOYW1lLCB7cHJpbWFyeUtleX1dIG9mIHB1Ymxpc2hlclJlc291cmNlcykge1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSBwcmV2aW91c0lkcz8uZ2V0KG1vZGVsTmFtZSlcbiAgICBjb25zdCBjdXJyZW50SWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWwsIHByaW1hcnlLZXl9KVxuICAgIGNvbnN0IGlkID0gYWN0aW9uID09PSBcImRlc3Ryb3lcIiA/IHByZXZpb3VzSWQgOiBjdXJyZW50SWQgPz8gcHJldmlvdXNJZFxuXG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpZGVudGl0eUNoYW5nZWQgPSBhY3Rpb24gPT09IFwidXBkYXRlXCJcbiAgICAgICYmIGN1cnJlbnRJZCAhPT0gbnVsbFxuICAgICAgJiYgcHJldmlvdXNJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAmJiBtb2RlbFByaW1hcnlLZXlDYWNoZUtleShwcmltYXJ5S2V5LCBwcmV2aW91c0lkKSAhPT0gbW9kZWxQcmltYXJ5S2V5Q2FjaGVLZXkocHJpbWFyeUtleSwgaWQpXG5cbiAgICBicm9hZGNhc3RGcm9udGVuZE1vZGVsRXZlbnQoY29uZmlndXJhdGlvbiwgbW9kZWxOYW1lLCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBpZCxcbiAgICAgIC4uLihkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCAhPT0gdW5kZWZpbmVkID8ge2Rlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkfSA6IHt9KSxcbiAgICAgIC4uLihpZGVudGl0eUNoYW5nZWQgPyB7cHJldmlvdXNJZH0gOiB7fSlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRmFucyBhIGxpZmVjeWNsZSBldmVudCBvdXQgdG8gYWxsIFYyIFwiZnJvbnRlbmQtbW9kZWxzXCIgc3Vic2NyaWJlcnNcbiAqIHdob3NlIGBwYXJhbXMubW9kZWxgIG1hdGNoZXMuIFJlY29yZCBhdHRyaWJ1dGVzIGdvIHRocm91Z2ggdGhlXG4gKiB0cmFuc3BvcnQgc2VyaWFsaXplciBzbyBEYXRlL3VuZGVmaW5lZC9ldGMuIHN1cnZpdmUgdGhlIEpTT04gaG9wLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3thY3Rpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIGRlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkPzogRnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkLCBpZDogaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWUsIHByZXZpb3VzSWQ/OiBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlWYWx1ZSwgcmVjb3JkPzogUmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fX0gZXZlbnQgLSBMaWZlY3ljbGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50KGNvbmZpZ3VyYXRpb24sIG1vZGVsTmFtZSwgZXZlbnQpIHtcbiAgY29uc3QgYm9keSA9IHtcbiAgICBhY3Rpb246IGV2ZW50LmFjdGlvbixcbiAgICBpZDogZXZlbnQuaWQsXG4gICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAuLi4oZXZlbnQucHJldmlvdXNJZCAhPT0gdW5kZWZpbmVkID8ge3ByZXZpb3VzSWQ6IGV2ZW50LnByZXZpb3VzSWR9IDoge30pLFxuICAgIC4uLihldmVudC5yZWNvcmQgPyB7cmVjb3JkOiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUoZXZlbnQucmVjb3JkLCB0cmFuc3BvcnRTZXJpYWxpemF0aW9uT3B0aW9uc0ZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikpfSA6IHt9KVxuICB9XG5cbiAgY29uZmlndXJhdGlvbi5icm9hZGNhc3RUb0NoYW5uZWwoRlJPTlRFTkRfTU9ERUxTX0NIQU5ORUxfTkFNRSwge1xuICAgIC4uLihldmVudC5kZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCAhPT0gdW5kZWZpbmVkID8ge2Rlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkOiBldmVudC5kZXN0cm95QXV0aG9yaXphdGlvblJlY29yZH0gOiB7fSksXG4gICAgbW9kZWw6IG1vZGVsTmFtZVxuICB9LCBib2R5KVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-session.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-session.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-session.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-session.js"],"names":[],"mappings":"AAMA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAIpC,OAAO,gBAAgB,MAAM,yBAAyB,CAAA;AAItD,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AAIlD,YAAwa,uBAAuB,GAArb;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAyB;AAI/b,YAAkB,uBAAuB,GACzC;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAoB,QAAQ,EAAjB,OAAO,CACpB;CAAA,CAAA;AAGE,YAAkB,kBAAkB,GACpC;;;;IAAoC,SAAS,EAAlC,uBAAuB,CAClC;;;;IAAoC,OAAO,EAAhC,uBAAuB,CACpC;CAAA,CAAA;AAwED,MAAM,CAAC,OAAO,OAAO,yCAAyC;IAuB1D,uBAAuB;IAClB,aAAa,EADP,MAAM,EAAE;IAEd,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,uBAAuB;IACvB,MAAM;IACN,aAAa;IACb,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,qBAAqB;IACrB,MAAM;IAGN,uBAAuB;IACvB,0BAA0B;IAC1B,oBAAoB;IACpB,uBAAuB;IACvB,4BAA4B;IAC5B,cAAc;IACd,yBAAyB;IAE9B;;+DAE2D;IACtD,SAAS,EADJ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAGvD;;;;;OAKG;IACE,IAAI,EAFC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAIvD;;2EAEuE;IAClE,YAAY,EADP,GAAG,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;IAGnE;;6GAEyG;IACpG,qBAAqB,EADhB,GAAG,CAAC,MAAM,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAA;KAAC,CAAC;IAGrG;;;;;;OAMG;IACE,SAAS,EAFJ,MAAM;IAIhB;;;OAGG;IACE,OAAO,EAFF,OAAO;IAIjB;;;OAGG;IACE,cAAc,EAFT,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAI9C;;qDAEiD;IAC5C,MAAM,EADD,OAAO,YAAY,EAAE,OAAO,GAAG,IAAI;IAG7C;;;;;;;OAOG;IACE,aAAa,EAFR,OAAO,CAAC,IAAI,CAAC;IAIvB;;;;;;OAMG;IACE,sBAAsB,EAFjB,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;IAI5D,4BAA4B;IACvB,iBAAiB,EADX,MAAM,GAAG,IAAI;IAGxB;;;;;OAKG;IACE,mBAAmB,EAFd,MAAM,EAAE,GAAG,IAAI;IAIzB;;;;;OAKG;IACE,iBAAiB,EAFZ,MAAM,GAAG,IAAI;IAIvB;;;;;OAKG;IACE,gBAAgB,EAFX,MAAM;IAMhB;;;;;;OAMG;IACE,eAAe,EAFV,OAAO;IAIjB;;;;;;OAMG;IACE,eAAe,EAFV,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI;IA5JjD,MAAM,6DAAqB;IAC3B,aAAa,WAAY;IACzB,QAAQ,WAAY;IACpB,oBAAoB,gBAAY;IAChC,oBAAoB,gBAAY;IAChC,cAAc,gBAAY;IAC1B,mBAAmB,gBAAY;IAC/B;;sCAEkC;IAClC,YAAY,EADF,kBAAkB,EAAE,CACb;IAEjB;;;;;;;;OAQG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAC,EANvF;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO,CACpC;QAAyF,cAAc,AAAvG,CACA,EADQ,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,CACjF;QAA8E,cAAc,AAA5F,CACA,EADQ,OAAO,8BAA8B,EAAE,uBAAuB,CACtE;QAA8F,qBAAqB,AAAnH,CACF,EADU,OAAO,CAAC,OAAO,8BAA8B,EAAE,uBAAuB,GAAG,IAAI,CAAC,CACxF;KACyF,EA0IzF;IAED;;;;OAIG;IACH,sBAAsB,IAFT,IAAI,CAYhB;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,YAAY,EAHnB,MAGmB,GAFjB,IAAI,CAIhB;IAED;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAIzD;IAED;;;OAGG;IACH,QAAQ,IAFK,OAAO,CAInB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,IAAI,CAIhB;IAED,OAAO,SAYN;IAED,8DAA8D;IAC9D,eAAe,SAMd;IAED,8DAA8D;IAC9D,iBAAiB,SAOhB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAInB;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAHA,MAGA,GAFE,IAAI,CAahB;IAED;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EALZ,MAKY,EAAE,OAAO,EAJrB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIP,EAAE,OAAO,AAHtC,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAGzC,GAFjC,OAAO,CAAC,IAAI,CAAC,CA2CzB;IAED;;;OAGG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CA+CzB;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAJP,OAAO,YAAY,EAAE,OAId,EAAE,EAAC,IAAI,EAAE,MAAW,EAAC,AAHpC,CACA,EADQ;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAGE,GAF/B,IAAI,CAyBhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAHf,KAGe,GAFb,OAAO,CAWnB;IAED;;;;;OAKG;IACH,8BAA8B,CAAC,WAAW,EAJ/B,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIG,EAAE,OAAO,EAHxC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGJ,GAFtC,KAAK,CA8BjB;IAED;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAHjB,uBAGiB,GAFf,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAHlB,kBAGkB,GAFhB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAHf,kBAGe,GAFb,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAHnB,uBAGmB,GAFjB,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAJ5B,uBAI4B,EAAE,QAAQ,EAHtC,MAAM,OAAO,CAAC,IAAI,CAGoB,GAFpC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;;;OAMG;IACG,mBAAmB,CAAC,OAAO,EAHtB,uBAGsB,GAFpB,OAAO,CAAC,IAAI,CAAC,CA6HzB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAsKhB;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAHjB,MAGiB,GAFf,MAAM,CAkBlB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,SAAS,EAHpB,MAGoB,GAFlB,MAAM,CAwClB;IAED;;;OAGG;IACH,yBAAyB,IAFZ,IAAI,CAOhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAHpB,MAGoB,GAFlB,uBAAuB,GAAG,IAAI,CAqB1C;IAED;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAHvB,uBAGuB,GAFrB,IAAI,CAUhB;IAED;;;OAGG;IACH,uBAAuB,IAFV,IAAI,CAQhB;IAED;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,EAH1B,MAG0B,GAFxB,IAAI,CAqBhB;IAED;;;OAGG;IACH,qBAAqB,IAFR,IAAI,CAOhB;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAUnB;IAED;;;;;;;OAOG;IACH,sBAAsB,IAFT,OAAO,CAwBnB;IAED;;yBAEqB;IACrB,oBAAoB,IADP,IAAI,CAKhB;IAED;;;;;;;OAOG;IACH,eAAe,IAFF,IAAI,CAWhB;IAED;;;;;;;OAOG;IACH,cAAc,IAFD,IAAI,CAgBhB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAOhB;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAJb,MAIa,EAAE,OAAO,EAHtB,MAGsB,GAFpB,IAAI,CAShB;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAHF,MAGE,GAFA,IAAI,CAwChB;IAED;;;;;OAKG;IACH,mBAAmB,IAFN,IAAI,CAUhB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,EAAC,WAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAC,AAH7G,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAGpF,GAFxG,OAAO,CAAC,OAAO,CAAC,CA6C5B;IAED;;;;OAIG;IACH,YAAY,CAAC,EAAC,WAAkB,EAAC,AAH9B,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAGK,GAFzB,IAAI,CAuChB;IAED;;;;;OAKG;IACH,oBAAoB,IAFP,IAAI,CAchB;IAED;;;;;;OAMG;IACG,sBAAsB,IAFf,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAiBlD;IAED;;;;;;OAMG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,aAAa,IAFN,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,YAAY,EAH9B,cAAc,GAAG,UAGa,GAF5B,OAAO,CAAC,IAAI,CAAC,CA8BzB;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,OAAO,EAHvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGrB,GAFrB,OAAO,CAAC,IAAI,CAAC,CAkFzB;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAHtB,mBAAmB,GAAG,eAAe,GAAG,OAGlB,GAFpB,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;;;;OAOG;IACG,qBAAqB,CAAC,OAAO,EAHxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGpB,GAFtB,OAAO,CAAC,IAAI,CAAC,CAkDzB;IAED;;;;OAIG;IACG,wBAAwB,CAAC,OAAO,EAH3B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGjB,GAFzB,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAHzB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGnB,GAFvB,OAAO,CAAC,IAAI,CAAC,CA2BzB;IAED;;;;;;OAMG;IACG,uBAAuB,CAAC,OAAO,EAH1B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGlB,GAFxB,OAAO,CAAC,IAAI,CAAC,CAoFzB;IAED;;;;;;;;;OASG;IACG,mCAAmC,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAC,EAL/E;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAwD,YAAY,EAA5D,OAAO,yBAAyB,EAAE,OAAO,CACjD;KAE+E,GAFrE,OAAO,CAAC,IAAI,CAAC,CA6CzB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAH5B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGhB,GAF1B,OAAO,CAAC,IAAI,CAAC,CA4BzB;IAED;;;;;;OAMG;IACG,6BAA6B,IAFtB,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAEK,gBAAgB,kBAMrB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,OAAO,EAHzB,gBAGyB,GAFvB,OAAO,CAAC,IAAI,CAAC,CAkCzB;IAED;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,EAJnB,gBAAgB,GAAG,SAIA,EAAE,MAAM,EAH3B,MAAM,GAAG,IAAI,GAAG,SAGW,GAFzB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,QAAQ,EAHpB,MAAM,OAAO,CAAC,IAAI,CAGE,GAFlB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACG,0BAA0B,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,EAHpD;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG1C,GAFlD,OAAO,CAAC,IAAI,CAAC,CAuDzB;IAED;;;;;;;;OAQG;IACG,mBAAmB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,EANtF;QAAqB,OAAO,EAApB,MAAM,CACd;QAAiC,WAAW,EAApC,MAAM,GAAG,SAAS,CAC1B;QAAqB,mBAAmB,EAAhC,MAAM,CACd;QAAwE,kBAAkB,EAAlF,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACjE;KAEsF,GAF5E,OAAO,CAAC,KAAK,GAAG;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAmBhI;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,EAJ9C;QAAqB,OAAO,EAApB,MAAM,CACd;QAA2G,WAAW,EAA9G;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,kBAAkB,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAC,CACpG;KAE8C,GAFpC,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,WAAW,EAHlC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAGzD,GAFhC,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;OAIG;IACG,cAAc,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,EAH3B;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG9C,GAFzB,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAe9C;IAED;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAJX,MAIW,EAAE,IAAI,EAHjB,MAGiB,GAFf,IAAI,CAMhB;IAEK,sBAAsB,kBAe3B;IAED;;;;OAIG;IACG,yBAAyB,CAAC,OAAO,EAH5B,uBAG4B,GAF1B,OAAO,CAAC,IAAI,CAAC,CAsCzB;IAEK,uBAAuB,kBAe5B;IAED;;;OAGG;IACH,aAAa,IAFA,MAAM,GAAG,SAAS,CAI9B;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAHd,OAAO,8BAA8B,EAAE,uBAGzB,GAFZ,IAAI,CAKhB;IAEK,6BAA6B,kBAyClC;IAED;;;;OAIG;IACG,+BAA+B,CAAC,EAAC,UAAU,EAAC,EAHvC;QAAC,UAAU,EAAE,OAAO,CAAA;KAGmB,GAFrC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;OAIG;IACG,oBAAoB,CAAC,EAAC,UAAU,EAAC,EAH5B;QAAC,UAAU,EAAE,OAAO,CAAA;KAGQ,GAF1B,OAAO,CAAC,IAAI,CAAC,CAqCzB;CACF"}