velocious 1.0.591 → 1.0.592

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 (46) hide show
  1. package/README.md +1 -1
  2. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  3. package/build/src/sync/conflict-strategy.js +7 -1
  4. package/build/src/sync/local-mutation-log.d.ts +10 -0
  5. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  6. package/build/src/sync/local-mutation-log.js +21 -1
  7. package/build/src/sync/sync-api-client-types.d.ts +15 -0
  8. package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
  9. package/build/src/sync/sync-api-client-types.js +4 -1
  10. package/build/src/sync/sync-api-client.d.ts +91 -0
  11. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  12. package/build/src/sync/sync-api-client.js +184 -1
  13. package/build/src/sync/sync-client-types.d.ts +57 -0
  14. package/build/src/sync/sync-client-types.d.ts.map +1 -1
  15. package/build/src/sync/sync-client-types.js +16 -1
  16. package/build/src/sync/sync-client.d.ts +56 -7
  17. package/build/src/sync/sync-client.d.ts.map +1 -1
  18. package/build/src/sync/sync-client.js +180 -15
  19. package/build/src/sync/sync-envelope-replay-service.d.ts +31 -2
  20. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  21. package/build/src/sync/sync-envelope-replay-service.js +98 -16
  22. package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
  23. package/build/src/sync/sync-model-change-feed-service.js +3 -4
  24. package/build/src/sync/sync-replay-persisted-data.d.ts +26 -0
  25. package/build/src/sync/sync-replay-persisted-data.d.ts.map +1 -0
  26. package/build/src/sync/sync-replay-persisted-data.js +43 -0
  27. package/build/sync/conflict-strategy.js +3 -0
  28. package/build/sync/local-mutation-log.js +24 -0
  29. package/build/sync/sync-api-client-types.js +3 -0
  30. package/build/sync/sync-api-client.js +203 -0
  31. package/build/sync/sync-client-types.js +16 -0
  32. package/build/sync/sync-client.js +198 -14
  33. package/build/sync/sync-envelope-replay-service.js +109 -12
  34. package/build/sync/sync-model-change-feed-service.js +2 -4
  35. package/build/sync/sync-replay-persisted-data.js +50 -0
  36. package/build/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/src/sync/conflict-strategy.js +3 -0
  39. package/src/sync/local-mutation-log.js +24 -0
  40. package/src/sync/sync-api-client-types.js +3 -0
  41. package/src/sync/sync-api-client.js +203 -0
  42. package/src/sync/sync-client-types.js +16 -0
  43. package/src/sync/sync-client.js +198 -14
  44. package/src/sync/sync-envelope-replay-service.js +109 -12
  45. package/src/sync/sync-model-change-feed-service.js +2 -4
  46. package/src/sync/sync-replay-persisted-data.js +50 -0
@@ -22,6 +22,40 @@ export type ModelSyncRealtimeDeclaration = {
22
22
  */
23
23
  params?: Record<string, ReturnType<typeof JSON.parse>>;
24
24
  };
25
+ export type SyncClientConflictTrackingConfig = {
26
+ /**
27
+ * - Stable device identity.
28
+ */
29
+ actorDeviceId: string;
30
+ /**
31
+ * - Stable user identity.
32
+ */
33
+ actorUserId: string;
34
+ /**
35
+ * - Durable idempotency-id generator.
36
+ */
37
+ clientMutationId: () => string;
38
+ /**
39
+ * - Existing durable mutation log.
40
+ */
41
+ mutationLog: import("./local-mutation-log.js").default;
42
+ /**
43
+ * - Mutation clock.
44
+ */
45
+ now?: () => Date;
46
+ /**
47
+ * - Grant identifier retained with intent.
48
+ */
49
+ offlineGrantId: string;
50
+ /**
51
+ * - Policy hash retained with intent.
52
+ */
53
+ policyHash: string;
54
+ /**
55
+ * - Authoritative version attribute; defaults to updatedAt when present.
56
+ */
57
+ versionAttribute?: string;
58
+ };
25
59
  export type SyncClientResourceConfig = {
26
60
  /**
27
61
  * - Local model class for this resource.
@@ -47,6 +81,10 @@ export type SyncClientResourceConfig = {
47
81
  * - Attributes coerced through sync boolean parsing when queueing.
48
82
  */
49
83
  booleanAttributes?: string[];
84
+ /**
85
+ * - Opt-in durable base-version conflict tracking.
86
+ */
87
+ conflictTracking?: SyncClientConflictTrackingConfig;
50
88
  /**
51
89
  * - Attributes stripped from queued payloads.
52
90
  */
@@ -89,6 +127,10 @@ export type ModelSyncDeclarationConfig<TModel = any> = {
89
127
  * - Extra boolean attributes merged with the boolean columns derived from column types.
90
128
  */
91
129
  booleanAttributes?: string[];
130
+ /**
131
+ * - Opt-in durable base-version conflict tracking.
132
+ */
133
+ conflictTracking?: SyncClientConflictTrackingConfig;
92
134
  /**
93
135
  * - Custom pull-apply record resolver.
94
136
  */
@@ -228,6 +270,19 @@ export type SyncClientConfig = {
228
270
  * @property {string} channel - Server channel name to subscribe.
229
271
  * @property {Record<string, ReturnType<typeof JSON.parse>>} [params] - Static subscribe params. The framework injects `authenticationToken` automatically.
230
272
  */
273
+ /**
274
+ * Durable optimistic-version tracking configuration. Identity/grant fields are
275
+ * retained in the shared LocalMutationLog mutation shape used by offline sync.
276
+ * @typedef {object} SyncClientConflictTrackingConfig
277
+ * @property {string} actorDeviceId - Stable device identity.
278
+ * @property {string} actorUserId - Stable user identity.
279
+ * @property {() => string} clientMutationId - Durable idempotency-id generator.
280
+ * @property {import("./local-mutation-log.js").default} mutationLog - Existing durable mutation log.
281
+ * @property {() => Date} [now] - Mutation clock.
282
+ * @property {string} offlineGrantId - Grant identifier retained with intent.
283
+ * @property {string} policyHash - Policy hash retained with intent.
284
+ * @property {string} [versionAttribute] - Authoritative version attribute; defaults to updatedAt when present.
285
+ */
231
286
  /**
232
287
  * Declarative per-resource sync policy.
233
288
  * @typedef {object} SyncClientResourceConfig
@@ -237,6 +292,7 @@ export type SyncClientConfig = {
237
292
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
238
293
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
239
294
  * @property {string[]} [booleanAttributes] - Attributes coerced through sync boolean parsing when queueing.
295
+ * @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
240
296
  * @property {string[]} [localOnlyAttributes] - Attributes stripped from queued payloads.
241
297
  * @property {"upsert" | ((args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => string)} [syncType] - Maps a mutation operation to a sync type. The "upsert" flag queues creates and updates as "update" rows (the server upserts by resource id) and destroys as "delete". Defaults to the operation name with destroy mapped to "delete".
242
298
  * @property {(args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => Record<string, ReturnType<typeof JSON.parse>>} [trackedData] - Custom queued-payload builder for tracked mutations.
@@ -252,6 +308,7 @@ export type SyncClientConfig = {
252
308
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
253
309
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["attributes"]} [attributes] - Pull-apply attribute mapper. Required for resources that receive pulled changes.
254
310
  * @property {string[]} [booleanAttributes] - Extra boolean attributes merged with the boolean columns derived from column types.
311
+ * @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
255
312
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecord"]} [findRecord] - Custom pull-apply record resolver.
256
313
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
257
314
  * @property {string[]} [localOnlyAttributes] - Extra local-only attributes merged with the derived primary key, createdAt/updatedAt, and sync bookkeeping attributes.
@@ -1 +1 @@
1
- {"version":3,"file":"sync-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client-types.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client-types.js"],"names":[],"mappings":"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"}
@@ -14,6 +14,19 @@
14
14
  * @property {string} channel - Server channel name to subscribe.
15
15
  * @property {Record<string, ReturnType<typeof JSON.parse>>} [params] - Static subscribe params. The framework injects `authenticationToken` automatically.
16
16
  */
17
+ /**
18
+ * Durable optimistic-version tracking configuration. Identity/grant fields are
19
+ * retained in the shared LocalMutationLog mutation shape used by offline sync.
20
+ * @typedef {object} SyncClientConflictTrackingConfig
21
+ * @property {string} actorDeviceId - Stable device identity.
22
+ * @property {string} actorUserId - Stable user identity.
23
+ * @property {() => string} clientMutationId - Durable idempotency-id generator.
24
+ * @property {import("./local-mutation-log.js").default} mutationLog - Existing durable mutation log.
25
+ * @property {() => Date} [now] - Mutation clock.
26
+ * @property {string} offlineGrantId - Grant identifier retained with intent.
27
+ * @property {string} policyHash - Policy hash retained with intent.
28
+ * @property {string} [versionAttribute] - Authoritative version attribute; defaults to updatedAt when present.
29
+ */
17
30
  /**
18
31
  * Declarative per-resource sync policy.
19
32
  * @typedef {object} SyncClientResourceConfig
@@ -23,6 +36,7 @@
23
36
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
24
37
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
25
38
  * @property {string[]} [booleanAttributes] - Attributes coerced through sync boolean parsing when queueing.
39
+ * @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
26
40
  * @property {string[]} [localOnlyAttributes] - Attributes stripped from queued payloads.
27
41
  * @property {"upsert" | ((args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => string)} [syncType] - Maps a mutation operation to a sync type. The "upsert" flag queues creates and updates as "update" rows (the server upserts by resource id) and destroys as "delete". Defaults to the operation name with destroy mapped to "delete".
28
42
  * @property {(args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => Record<string, ReturnType<typeof JSON.parse>>} [trackedData] - Custom queued-payload builder for tracked mutations.
@@ -38,6 +52,7 @@
38
52
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
39
53
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["attributes"]} [attributes] - Pull-apply attribute mapper. Required for resources that receive pulled changes.
40
54
  * @property {string[]} [booleanAttributes] - Extra boolean attributes merged with the boolean columns derived from column types.
55
+ * @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
41
56
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecord"]} [findRecord] - Custom pull-apply record resolver.
42
57
  * @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
43
58
  * @property {string[]} [localOnlyAttributes] - Extra local-only attributes merged with the derived primary key, createdAt/updatedAt, and sync bookkeeping attributes.
@@ -88,4 +103,4 @@
88
103
  * @property {string | (() => string | null | undefined)} [websocketUrl] - Shared app-lifetime websocket URL the framework builds a client from.
89
104
  */
90
105
  export {};
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jbGllbnQtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLWNsaWVudC10eXBlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQ2xpZW50LWRlY2xhcmVkIHN5bmMgc2NvcGUgc2VyaWFsaXplZCBmcm9tIGEgbW9kZWwgcXVlcnkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTZXJpYWxpemVkU3luY1Njb3BlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29uZGl0aW9ucyAtIFBsYWluIGF0dHJpYnV0ZSBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXJ5LlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSByZXNvdXJjZVR5cGUgLSBSZXNvdXJjZS9tb2RlbCBuYW1lIHRoZSBzY29wZSB3YXMgZGVjbGFyZWQgZm9yLCBvciBudWxsIGZvciB0aGUgYWxsLXR5cGVzICh1c2VyKSBzY29wZSBjb3ZlcmluZyBldmVyeSB0eXBlIHRoZSBzZXJ2ZXIgYXV0aG9yaXplcyBmb3IgdGhlIGNhbGxlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbb3duZXJdIC0gTG9jYWwgcGFydGl0aW9uIGtleTogdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgdGhhdCBkZWNsYXJlZCB0aGUgc2NvcGUuIFVzZWQgb25seSB0byBwYXJ0aXRpb24gdGhlIGxvY2FsIHNjb3BlL2N1cnNvciBzdG9yZSAobmV2ZXIgc2VudCB0byB0aGUgc2VydmVyIGFzIHNjb3BlIGNvbmRpdGlvbnMpLCBzbyBhIHVzZXIgc2NvcGUncyBlbXB0eS1jb25kaXRpb25zIGN1cnNvciBkb2VzIG5vdCBsZWFrIGFjcm9zcyBhY2NvdW50cyBvbiBhIHNoYXJlZCBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBTdGF0aWMgcmVhbHRpbWUgY2hhbm5lbCBkZWNsYXJhdGlvbiBvbiBhIG1vZGVsJ3MgYHN0YXRpYyBzeW5jYCwgZm9yIGNoYW5uZWxzXG4gKiB3aG9zZSBuYW1lIGFuZCBwYXJhbXMgYXJlIHN0YXRpYy5cbiAqIEBkZXByZWNhdGVkIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5OyBrZWVwIHRoaXMgb25seSBmb3IgbGVnYWN5IGFwcCBjaGFubmVscy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1vZGVsU3luY1JlYWx0aW1lRGVjbGFyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gU2VydmVyIGNoYW5uZWwgbmFtZSB0byBzdWJzY3JpYmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3BhcmFtc10gLSBTdGF0aWMgc3Vic2NyaWJlIHBhcmFtcy4gVGhlIGZyYW1ld29yayBpbmplY3RzIGBhdXRoZW50aWNhdGlvblRva2VuYCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogRGVjbGFyYXRpdmUgcGVyLXJlc291cmNlIHN5bmMgcG9saWN5LlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudFJlc291cmNlQ29uZmlnXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtb2RlbENsYXNzIC0gTG9jYWwgbW9kZWwgY2xhc3MgZm9yIHRoaXMgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImF0dHJpYnV0ZXNcIl19IFthdHRyaWJ1dGVzXSAtIFB1bGwtYXBwbHkgYXR0cmlidXRlIG1hcHBlci4gUmVxdWlyZWQgZm9yIHJlc291cmNlcyB0aGF0IHJlY2VpdmUgcHVsbGVkIGNoYW5nZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRcIl19IFtmaW5kUmVjb3JkXSAtIEN1c3RvbSBwdWxsLWFwcGx5IHJlY29yZCByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiZmluZFJlY29yZEZvckRlbGV0ZVwiXX0gW2ZpbmRSZWNvcmRGb3JEZWxldGVdIC0gQ3VzdG9tIHB1bGwtYXBwbHkgZGVsZXRlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhZnRlckFwcGx5XCJdfSBbYWZ0ZXJBcHBseV0gLSBQb3N0LWFwcGx5IGhvb2suXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYm9vbGVhbkF0dHJpYnV0ZXNdIC0gQXR0cmlidXRlcyBjb2VyY2VkIHRocm91Z2ggc3luYyBib29sZWFuIHBhcnNpbmcgd2hlbiBxdWV1ZWluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsb2NhbE9ubHlBdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgc3RyaXBwZWQgZnJvbSBxdWV1ZWQgcGF5bG9hZHMuXG4gKiBAcHJvcGVydHkge1widXBzZXJ0XCIgfCAoKGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBzdHJpbmcpfSBbc3luY1R5cGVdIC0gTWFwcyBhIG11dGF0aW9uIG9wZXJhdGlvbiB0byBhIHN5bmMgdHlwZS4gVGhlIFwidXBzZXJ0XCIgZmxhZyBxdWV1ZXMgY3JlYXRlcyBhbmQgdXBkYXRlcyBhcyBcInVwZGF0ZVwiIHJvd3MgKHRoZSBzZXJ2ZXIgdXBzZXJ0cyBieSByZXNvdXJjZSBpZCkgYW5kIGRlc3Ryb3lzIGFzIFwiZGVsZXRlXCIuIERlZmF1bHRzIHRvIHRoZSBvcGVyYXRpb24gbmFtZSB3aXRoIGRlc3Ryb3kgbWFwcGVkIHRvIFwiZGVsZXRlXCIuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdHJhY2tlZERhdGFdIC0gQ3VzdG9tIHF1ZXVlZC1wYXlsb2FkIGJ1aWxkZXIgZm9yIHRyYWNrZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwge29wZXJhdGlvbnM6IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+fX0gW3RyYWNrXSAtIEF1dG9tYXRpYyBtdXRhdGlvbiB0cmFja2luZyBwb2xpY3kuIE9uIGJ5IGRlZmF1bHQgKGNyZWF0ZXMgYW5kIHVwZGF0ZXMgcXVldWUgYXV0b21hdGljYWxseSk7IGBmYWxzZWAgb3B0cyB0aGUgcmVzb3VyY2Ugb3V0LCBgdHJ1ZWAgYWRkcyBkZXN0cm95cywgYHtvcGVyYXRpb25zfWAgbmFycm93cyB0aGUgdHJhY2tlZCBvcGVyYXRpb25zLlxuICogQHByb3BlcnR5IHtNb2RlbFN5bmNSZWFsdGltZURlY2xhcmF0aW9ufSBbcmVhbHRpbWVdIC0gRGVwcmVjYXRlZDogc3RhdGljIGxlZ2FjeSByZWFsdGltZSBjaGFubmVsIHRoaXMgcmVzb3VyY2Ugc3Vic2NyaWJlcyB0aHJvdWdoIGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBNb2RlbC1sZXZlbCBjbGllbnQgc3luYyBkZWNsYXJhdGlvbiByZWFkIGZyb20gYHN0YXRpYyBzeW5jYCBieVxuICogYFN5bmNDbGllbnQuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAuIGB0cnVlYCBvcHRzIHRoZSBtb2RlbCBpbiB3aXRoIGFsbFxuICogZGVmYXVsdHM7IGFuIG9iamVjdCBjdXN0b21pemVzIHRoZSBkZXJpdmVkIHJlc291cmNlIGNvbmZpZy5cbiAqIEB0ZW1wbGF0ZSBbVE1vZGVsPWFueV1cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1vZGVsU3luY0RlY2xhcmF0aW9uQ29uZmlnXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImFmdGVyQXBwbHlcIl19IFthZnRlckFwcGx5XSAtIFBvc3QtYXBwbHkgaG9vay5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiYXR0cmlidXRlc1wiXX0gW2F0dHJpYnV0ZXNdIC0gUHVsbC1hcHBseSBhdHRyaWJ1dGUgbWFwcGVyLiBSZXF1aXJlZCBmb3IgcmVzb3VyY2VzIHRoYXQgcmVjZWl2ZSBwdWxsZWQgY2hhbmdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtib29sZWFuQXR0cmlidXRlc10gLSBFeHRyYSBib29sZWFuIGF0dHJpYnV0ZXMgbWVyZ2VkIHdpdGggdGhlIGJvb2xlYW4gY29sdW1ucyBkZXJpdmVkIGZyb20gY29sdW1uIHR5cGVzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkXCJdfSBbZmluZFJlY29yZF0gLSBDdXN0b20gcHVsbC1hcHBseSByZWNvcmQgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRGb3JEZWxldGVcIl19IFtmaW5kUmVjb3JkRm9yRGVsZXRlXSAtIEN1c3RvbSBwdWxsLWFwcGx5IGRlbGV0ZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsb2NhbE9ubHlBdHRyaWJ1dGVzXSAtIEV4dHJhIGxvY2FsLW9ubHkgYXR0cmlidXRlcyBtZXJnZWQgd2l0aCB0aGUgZGVyaXZlZCBwcmltYXJ5IGtleSwgY3JlYXRlZEF0L3VwZGF0ZWRBdCwgYW5kIHN5bmMgYm9va2tlZXBpbmcgYXR0cmlidXRlcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLXB1Ymxpc2hlci10eXBlcy5qc1wiKS5TeW5jUHVibGlzaERlY2xhcmF0aW9uPFRNb2RlbD59IFtwdWJsaXNoXSAtIFNlcnZlci1zaWRlIHB1Ymxpc2ggZGVjbGFyYXRpb24gY29uc3VtZWQgYnkgYFN5bmNQdWJsaXNoZXIuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAgb24gdGhlIGJhY2tlbmQ7IGlnbm9yZWQgYnkgdGhlIGNsaWVudC5cbiAqIEBwcm9wZXJ0eSB7XCJ1cHNlcnRcIiB8ICgoYXJnczoge29wZXJhdGlvbjogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IHN0cmluZyl9IFtzeW5jVHlwZV0gLSBTeW5jIHR5cGUgZmxhZyBvciBtYXBwZXIgKHNlZSBTeW5jQ2xpZW50UmVzb3VyY2VDb25maWcpLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgQXJyYXk8XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIj4gfCB7b3BlcmF0aW9uczogQXJyYXk8XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIj59fSBbdHJhY2tdIC0gQXV0b21hdGljIG11dGF0aW9uIHRyYWNraW5nIHBvbGljeTsgYW4gYXJyYXkgaXMgc2hvcnRoYW5kIGZvciB7b3BlcmF0aW9uc30uIE9uIGJ5IGRlZmF1bHQgKGNyZWF0ZXMgYW5kIHVwZGF0ZXMgcXVldWUgYXV0b21hdGljYWxseSk7IGBmYWxzZWAgb3B0cyB0aGUgbW9kZWwgb3V0IChmb3IgbW9kZWxzIHdyaXR0ZW4gYnkgbm9uLXVzZXIgZmxvd3MpLCBgdHJ1ZWAgYWRkcyBkZXN0cm95cy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFt0cmFja2VkRGF0YV0gLSBDdXN0b20gcXVldWVkLXBheWxvYWQgYnVpbGRlciBmb3IgdHJhY2tlZCBtdXRhdGlvbnMuXG4gKiBAcHJvcGVydHkge01vZGVsU3luY1JlYWx0aW1lRGVjbGFyYXRpb259IFtyZWFsdGltZV0gLSBEZXByZWNhdGVkOiBzdGF0aWMgbGVnYWN5IHJlYWx0aW1lIGNoYW5uZWwgdGhpcyByZXNvdXJjZSBzdWJzY3JpYmVzIHRocm91Z2ggYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLiBEZWNsYXJlZCBwdWxsIHNjb3BlcyBzdWJzY3JpYmUgdGhlIGZyYW1ld29yayBzeW5jIGNoYW5uZWwgYXV0b21hdGljYWxseS5cbiAqL1xuXG4vKipcbiAqIE1vZGVsLWxldmVsIHN5bmMgZGVjbGFyYXRpb24gdmFsdWU6IGB0cnVlYCBvcHRzIGluIHdpdGggYWxsIGRlZmF1bHRzLCBhblxuICogb2JqZWN0IGN1c3RvbWl6ZXMgdGhlIGRlcml2ZWQgcmVzb3VyY2UgY29uZmlnLlxuICogQHRlbXBsYXRlIFtUTW9kZWw9YW55XVxuICogQHR5cGVkZWYge2Jvb2xlYW4gfCBNb2RlbFN5bmNEZWNsYXJhdGlvbkNvbmZpZzxUTW9kZWw+fSBNb2RlbFN5bmNEZWNsYXJhdGlvblxuICovXG5cbi8qKlxuICogU2hhcmVkIGFwcC1saWZldGltZSB3ZWJzb2NrZXQgY29ubmVjdGlvbiBhbGwgc3luYyB0cmFmZmljIHJpZGVzLiBNYXRjaGVzIHRoZVxuICogcmVhbHRpbWUgd2Vic29ja2V0IGNsaWVudCBjb250cmFjdDsgdGhlIHN5bmMgY2xpZW50IHJpZGVzIGl0IHdpdGhvdXQgb3duaW5nXG4gKiBpdHMgY29ubmVjdC9kaXNjb25uZWN0IGxpZmVjeWNsZS5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudH0gU3luY0NsaWVudFNoYXJlZENvbm5lY3Rpb25cbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGJ1aWxkaW5nIGEgc3luYyBjbGllbnQuIEV2ZXJ5dGhpbmcgZWxzZSDigJQgcmVzb3VyY2VzLCB0cmFuc3BvcnRcbiAqIFBPU1RlcnMsIGF1dGgsIGNvbm5lY3Rpdml0eSwgYmF0Y2ggc2l6ZSDigJQgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uJ3NcbiAqIHJlZ2lzdGVyZWQgbW9kZWxzIChgc3RhdGljIHN5bmNgKSBhbmQgaXRzIGBzeW5jLmNsaWVudGAgYmxvY2suXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50T3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFtjb25maWd1cmF0aW9uXSAtIENvbmZpZ3VyYXRpb24gb3duaW5nIHRoZSByZWdpc3RlcmVkIG1vZGVscywgdGhlIGBzeW5jLmNsaWVudGAgYmxvY2ssIGFuZCB0aGUgc2NvcGUtc3RvcmUgZGF0YWJhc2UuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7c2NvcGU6IFNlcmlhbGl6ZWRTeW5jU2NvcGV9KSA9PiBzdHJpbmcgfCBudWxsIHwgUHJvbWlzZTxzdHJpbmcgfCBudWxsPn0gW2xlZ2FjeUN1cnNvcl0gLSBTZWVkcyBhIG5ld2x5IGRlY2xhcmVkIHNjb3BlJ3MgY3Vyc29yIChlLmcuIGZyb20gYSBwcmUtc2NvcGUgY3Vyc29yIHN0b3JlKSBzbyBkZXZpY2VzIGRvbid0IHJlLXB1bGwgZXZlcnl0aGluZy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLXNjb3BlLXN0b3JlLmpzXCIpLmRlZmF1bHR9IFtzY29wZVN0b3JlXSAtIFNjb3BlIHN0b3JlIG92ZXJyaWRlICh0ZXN0cykuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbc3luY01vZGVsXSAtIFBlbmRpbmctc3luYyBtb2RlbCBvdmVycmlkZS4gRGVmYXVsdHMgdG8gdGhlIHJlZ2lzdGVyZWQgXCJTeW5jXCIgbW9kZWwuXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBkZXJpdmVkIHN5bmMgY2xpZW50IGNvbmZpZ3VyYXRpb24gYnVpbHQgYnkgdGhlIFN5bmNDbGllbnRcbiAqIGNvbnN0cnVjdG9yIOKAlCBub3QgYW4gYXBwLWZhY2luZyBBUEkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50Q29uZmlnXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gYXV0aGVudGljYXRpb25Ub2tlbiAtIFJlc29sdmVzIHRoZSBhdXRoIHRva2VuIHNlbnQgd2l0aCBzeW5jIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gTWF4IHN5bmNzIHBlciByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgc2NvcGUtc3RvcmUgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+fSBbaXNPbmxpbmVdIC0gQ29ubmVjdGl2aXR5IGdhdGUgZm9yIHB1bGxzIGFuZCByZXBsYXlzLiBEZWZhdWx0cyB0byBhbHdheXMgb25saW5lLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Njb3BlOiBTZXJpYWxpemVkU3luY1Njb3BlfSkgPT4gc3RyaW5nIHwgbnVsbCB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD59IFtsZWdhY3lDdXJzb3JdIC0gU2VlZHMgYSBuZXdseSBkZWNsYXJlZCBzY29wZSdzIGN1cnNvciAoZS5nLiBmcm9tIGEgcHJlLXNjb3BlIGN1cnNvciBzdG9yZSkgc28gZGV2aWNlcyBkb24ndCByZS1wdWxsIGV2ZXJ5dGhpbmcuXG4gKiBAcHJvcGVydHkgeyhlcnJvcjogRXJyb3IpID0+IHZvaWR9IFtvbkVycm9yXSAtIFJlcG9ydHMgYmFja2dyb3VuZCByZXBsYXkvcHVsbCBmYWlsdXJlcy4gRGVmYXVsdHMgdG8gcmV0aHJvd2luZy5cbiAqIEBwcm9wZXJ0eSB7KHBheWxvYWQ6IGltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNDaGFuZ2VzUmVxdWVzdCAmIHtzY29wZTogU2VyaWFsaXplZFN5bmNTY29wZX0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY0NoYW5nZXNSZXNwb25zZT59IHBvc3RDaGFuZ2VzIC0gUG9zdHMgb25lIGNoYW5nZXMgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7KHBheWxvYWQ6IHthdXRoZW50aWNhdGlvblRva2VuOiBzdHJpbmcsIHN5bmNzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVwbGF5UmVzcG9uc2U+fSBwb3N0UmVwbGF5IC0gUG9zdHMgb25lIHJlcGxheSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlZlbG9jaW91c1N5bmNDbGllbnRSZWFsdGltZUNvbmZpZ3VyYXRpb259IFtyZWFsdGltZV0gLSBSZWFsdGltZSBwdXNoIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBTeW5jQ2xpZW50UmVzb3VyY2VDb25maWc+fSByZXNvdXJjZXMgLSBEZXJpdmVkIHJlc291cmNlIHBvbGljaWVzIGtleWVkIGJ5IHJlc291cmNlL21vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBzeW5jTW9kZWwgLSBMb2NhbCBwZW5kaW5nLXN5bmMgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge1N5bmNDbGllbnRTaGFyZWRDb25uZWN0aW9ufSBbd2Vic29ja2V0Q2xpZW50XSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNsaWVudCBpbnN0YW5jZSAodGhlIGxvdy1sZXZlbCBzaGFyZWQtY29ubmVjdGlvbiBmb3JtKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpfSBbd2Vic29ja2V0VXJsXSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IFVSTCB0aGUgZnJhbWV3b3JrIGJ1aWxkcyBhIGNsaWVudCBmcm9tLlxuICovXG5cbmV4cG9ydCB7fVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jbGllbnQtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLWNsaWVudC10eXBlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBDbGllbnQtZGVjbGFyZWQgc3luYyBzY29wZSBzZXJpYWxpemVkIGZyb20gYSBtb2RlbCBxdWVyeS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcmlhbGl6ZWRTeW5jU2NvcGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBjb25kaXRpb25zIC0gUGxhaW4gYXR0cmlidXRlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcXVlcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlc291cmNlVHlwZSAtIFJlc291cmNlL21vZGVsIG5hbWUgdGhlIHNjb3BlIHdhcyBkZWNsYXJlZCBmb3IsIG9yIG51bGwgZm9yIHRoZSBhbGwtdHlwZXMgKHVzZXIpIHNjb3BlIGNvdmVyaW5nIGV2ZXJ5IHR5cGUgdGhlIHNlcnZlciBhdXRob3JpemVzIGZvciB0aGUgY2FsbGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvd25lcl0gLSBMb2NhbCBwYXJ0aXRpb24ga2V5OiB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSB0aGF0IGRlY2xhcmVkIHRoZSBzY29wZS4gVXNlZCBvbmx5IHRvIHBhcnRpdGlvbiB0aGUgbG9jYWwgc2NvcGUvY3Vyc29yIHN0b3JlIChuZXZlciBzZW50IHRvIHRoZSBzZXJ2ZXIgYXMgc2NvcGUgY29uZGl0aW9ucyksIHNvIGEgdXNlciBzY29wZSdzIGVtcHR5LWNvbmRpdGlvbnMgY3Vyc29yIGRvZXMgbm90IGxlYWsgYWNyb3NzIGFjY291bnRzIG9uIGEgc2hhcmVkIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIFN0YXRpYyByZWFsdGltZSBjaGFubmVsIGRlY2xhcmF0aW9uIG9uIGEgbW9kZWwncyBgc3RhdGljIHN5bmNgLCBmb3IgY2hhbm5lbHNcbiAqIHdob3NlIG5hbWUgYW5kIHBhcmFtcyBhcmUgc3RhdGljLlxuICogQGRlcHJlY2F0ZWQgRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHk7IGtlZXAgdGhpcyBvbmx5IGZvciBsZWdhY3kgYXBwIGNoYW5uZWxzLlxuICogQHR5cGVkZWYge29iamVjdH0gTW9kZWxTeW5jUmVhbHRpbWVEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBTZXJ2ZXIgY2hhbm5lbCBuYW1lIHRvIHN1YnNjcmliZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbcGFyYW1zXSAtIFN0YXRpYyBzdWJzY3JpYmUgcGFyYW1zLiBUaGUgZnJhbWV3b3JrIGluamVjdHMgYGF1dGhlbnRpY2F0aW9uVG9rZW5gIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBEdXJhYmxlIG9wdGltaXN0aWMtdmVyc2lvbiB0cmFja2luZyBjb25maWd1cmF0aW9uLiBJZGVudGl0eS9ncmFudCBmaWVsZHMgYXJlXG4gKiByZXRhaW5lZCBpbiB0aGUgc2hhcmVkIExvY2FsTXV0YXRpb25Mb2cgbXV0YXRpb24gc2hhcGUgdXNlZCBieSBvZmZsaW5lIHN5bmMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50Q29uZmxpY3RUcmFja2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdG9yRGV2aWNlSWQgLSBTdGFibGUgZGV2aWNlIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdG9yVXNlcklkIC0gU3RhYmxlIHVzZXIgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gY2xpZW50TXV0YXRpb25JZCAtIER1cmFibGUgaWRlbXBvdGVuY3ktaWQgZ2VuZXJhdG9yLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5kZWZhdWx0fSBtdXRhdGlvbkxvZyAtIEV4aXN0aW5nIGR1cmFibGUgbXV0YXRpb24gbG9nLlxuICogQHByb3BlcnR5IHsoKSA9PiBEYXRlfSBbbm93XSAtIE11dGF0aW9uIGNsb2NrLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9mZmxpbmVHcmFudElkIC0gR3JhbnQgaWRlbnRpZmllciByZXRhaW5lZCB3aXRoIGludGVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb2xpY3lIYXNoIC0gUG9saWN5IGhhc2ggcmV0YWluZWQgd2l0aCBpbnRlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZlcnNpb25BdHRyaWJ1dGVdIC0gQXV0aG9yaXRhdGl2ZSB2ZXJzaW9uIGF0dHJpYnV0ZTsgZGVmYXVsdHMgdG8gdXBkYXRlZEF0IHdoZW4gcHJlc2VudC5cbiAqL1xuXG4vKipcbiAqIERlY2xhcmF0aXZlIHBlci1yZXNvdXJjZSBzeW5jIHBvbGljeS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNDbGllbnRSZXNvdXJjZUNvbmZpZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbW9kZWxDbGFzcyAtIExvY2FsIG1vZGVsIGNsYXNzIGZvciB0aGlzIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhdHRyaWJ1dGVzXCJdfSBbYXR0cmlidXRlc10gLSBQdWxsLWFwcGx5IGF0dHJpYnV0ZSBtYXBwZXIuIFJlcXVpcmVkIGZvciByZXNvdXJjZXMgdGhhdCByZWNlaXZlIHB1bGxlZCBjaGFuZ2VzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkXCJdfSBbZmluZFJlY29yZF0gLSBDdXN0b20gcHVsbC1hcHBseSByZWNvcmQgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRGb3JEZWxldGVcIl19IFtmaW5kUmVjb3JkRm9yRGVsZXRlXSAtIEN1c3RvbSBwdWxsLWFwcGx5IGRlbGV0ZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiYWZ0ZXJBcHBseVwiXX0gW2FmdGVyQXBwbHldIC0gUG9zdC1hcHBseSBob29rLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Jvb2xlYW5BdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgY29lcmNlZCB0aHJvdWdoIHN5bmMgYm9vbGVhbiBwYXJzaW5nIHdoZW4gcXVldWVpbmcuXG4gKiBAcHJvcGVydHkge1N5bmNDbGllbnRDb25mbGljdFRyYWNraW5nQ29uZmlnfSBbY29uZmxpY3RUcmFja2luZ10gLSBPcHQtaW4gZHVyYWJsZSBiYXNlLXZlcnNpb24gY29uZmxpY3QgdHJhY2tpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbbG9jYWxPbmx5QXR0cmlidXRlc10gLSBBdHRyaWJ1dGVzIHN0cmlwcGVkIGZyb20gcXVldWVkIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHtcInVwc2VydFwiIHwgKChhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gc3RyaW5nKX0gW3N5bmNUeXBlXSAtIE1hcHMgYSBtdXRhdGlvbiBvcGVyYXRpb24gdG8gYSBzeW5jIHR5cGUuIFRoZSBcInVwc2VydFwiIGZsYWcgcXVldWVzIGNyZWF0ZXMgYW5kIHVwZGF0ZXMgYXMgXCJ1cGRhdGVcIiByb3dzICh0aGUgc2VydmVyIHVwc2VydHMgYnkgcmVzb3VyY2UgaWQpIGFuZCBkZXN0cm95cyBhcyBcImRlbGV0ZVwiLiBEZWZhdWx0cyB0byB0aGUgb3BlcmF0aW9uIG5hbWUgd2l0aCBkZXN0cm95IG1hcHBlZCB0byBcImRlbGV0ZVwiLlxuICogQHByb3BlcnR5IHsoYXJnczoge29wZXJhdGlvbjogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3RyYWNrZWREYXRhXSAtIEN1c3RvbSBxdWV1ZWQtcGF5bG9hZCBidWlsZGVyIGZvciB0cmFja2VkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IHtvcGVyYXRpb25zOiBBcnJheTxcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiPn19IFt0cmFja10gLSBBdXRvbWF0aWMgbXV0YXRpb24gdHJhY2tpbmcgcG9saWN5LiBPbiBieSBkZWZhdWx0IChjcmVhdGVzIGFuZCB1cGRhdGVzIHF1ZXVlIGF1dG9tYXRpY2FsbHkpOyBgZmFsc2VgIG9wdHMgdGhlIHJlc291cmNlIG91dCwgYHRydWVgIGFkZHMgZGVzdHJveXMsIGB7b3BlcmF0aW9uc31gIG5hcnJvd3MgdGhlIHRyYWNrZWQgb3BlcmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7TW9kZWxTeW5jUmVhbHRpbWVEZWNsYXJhdGlvbn0gW3JlYWx0aW1lXSAtIERlcHJlY2F0ZWQ6IHN0YXRpYyBsZWdhY3kgcmVhbHRpbWUgY2hhbm5lbCB0aGlzIHJlc291cmNlIHN1YnNjcmliZXMgdGhyb3VnaCBgc3Vic2NyaWJlUmVhbHRpbWUoLi4uKWAuIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogTW9kZWwtbGV2ZWwgY2xpZW50IHN5bmMgZGVjbGFyYXRpb24gcmVhZCBmcm9tIGBzdGF0aWMgc3luY2AgYnlcbiAqIGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLiBgdHJ1ZWAgb3B0cyB0aGUgbW9kZWwgaW4gd2l0aCBhbGxcbiAqIGRlZmF1bHRzOyBhbiBvYmplY3QgY3VzdG9taXplcyB0aGUgZGVyaXZlZCByZXNvdXJjZSBjb25maWcuXG4gKiBAdGVtcGxhdGUgW1RNb2RlbD1hbnldXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFN5bmNEZWNsYXJhdGlvbkNvbmZpZ1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhZnRlckFwcGx5XCJdfSBbYWZ0ZXJBcHBseV0gLSBQb3N0LWFwcGx5IGhvb2suXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImF0dHJpYnV0ZXNcIl19IFthdHRyaWJ1dGVzXSAtIFB1bGwtYXBwbHkgYXR0cmlidXRlIG1hcHBlci4gUmVxdWlyZWQgZm9yIHJlc291cmNlcyB0aGF0IHJlY2VpdmUgcHVsbGVkIGNoYW5nZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYm9vbGVhbkF0dHJpYnV0ZXNdIC0gRXh0cmEgYm9vbGVhbiBhdHRyaWJ1dGVzIG1lcmdlZCB3aXRoIHRoZSBib29sZWFuIGNvbHVtbnMgZGVyaXZlZCBmcm9tIGNvbHVtbiB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7U3luY0NsaWVudENvbmZsaWN0VHJhY2tpbmdDb25maWd9IFtjb25mbGljdFRyYWNraW5nXSAtIE9wdC1pbiBkdXJhYmxlIGJhc2UtdmVyc2lvbiBjb25mbGljdCB0cmFja2luZy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiZmluZFJlY29yZFwiXX0gW2ZpbmRSZWNvcmRdIC0gQ3VzdG9tIHB1bGwtYXBwbHkgcmVjb3JkIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkRm9yRGVsZXRlXCJdfSBbZmluZFJlY29yZEZvckRlbGV0ZV0gLSBDdXN0b20gcHVsbC1hcHBseSBkZWxldGUgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbbG9jYWxPbmx5QXR0cmlidXRlc10gLSBFeHRyYSBsb2NhbC1vbmx5IGF0dHJpYnV0ZXMgbWVyZ2VkIHdpdGggdGhlIGRlcml2ZWQgcHJpbWFyeSBrZXksIGNyZWF0ZWRBdC91cGRhdGVkQXQsIGFuZCBzeW5jIGJvb2trZWVwaW5nIGF0dHJpYnV0ZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1wdWJsaXNoZXItdHlwZXMuanNcIikuU3luY1B1Ymxpc2hEZWNsYXJhdGlvbjxUTW9kZWw+fSBbcHVibGlzaF0gLSBTZXJ2ZXItc2lkZSBwdWJsaXNoIGRlY2xhcmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jUHVibGlzaGVyLmZyb21Db25maWd1cmF0aW9uKC4uLilgIG9uIHRoZSBiYWNrZW5kOyBpZ25vcmVkIGJ5IHRoZSBjbGllbnQuXG4gKiBAcHJvcGVydHkge1widXBzZXJ0XCIgfCAoKGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBzdHJpbmcpfSBbc3luY1R5cGVdIC0gU3luYyB0eXBlIGZsYWcgb3IgbWFwcGVyIChzZWUgU3luY0NsaWVudFJlc291cmNlQ29uZmlnKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+IHwge29wZXJhdGlvbnM6IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+fX0gW3RyYWNrXSAtIEF1dG9tYXRpYyBtdXRhdGlvbiB0cmFja2luZyBwb2xpY3k7IGFuIGFycmF5IGlzIHNob3J0aGFuZCBmb3Ige29wZXJhdGlvbnN9LiBPbiBieSBkZWZhdWx0IChjcmVhdGVzIGFuZCB1cGRhdGVzIHF1ZXVlIGF1dG9tYXRpY2FsbHkpOyBgZmFsc2VgIG9wdHMgdGhlIG1vZGVsIG91dCAoZm9yIG1vZGVscyB3cml0dGVuIGJ5IG5vbi11c2VyIGZsb3dzKSwgYHRydWVgIGFkZHMgZGVzdHJveXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdHJhY2tlZERhdGFdIC0gQ3VzdG9tIHF1ZXVlZC1wYXlsb2FkIGJ1aWxkZXIgZm9yIHRyYWNrZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtNb2RlbFN5bmNSZWFsdGltZURlY2xhcmF0aW9ufSBbcmVhbHRpbWVdIC0gRGVwcmVjYXRlZDogc3RhdGljIGxlZ2FjeSByZWFsdGltZSBjaGFubmVsIHRoaXMgcmVzb3VyY2Ugc3Vic2NyaWJlcyB0aHJvdWdoIGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBNb2RlbC1sZXZlbCBzeW5jIGRlY2xhcmF0aW9uIHZhbHVlOiBgdHJ1ZWAgb3B0cyBpbiB3aXRoIGFsbCBkZWZhdWx0cywgYW5cbiAqIG9iamVjdCBjdXN0b21pemVzIHRoZSBkZXJpdmVkIHJlc291cmNlIGNvbmZpZy5cbiAqIEB0ZW1wbGF0ZSBbVE1vZGVsPWFueV1cbiAqIEB0eXBlZGVmIHtib29sZWFuIHwgTW9kZWxTeW5jRGVjbGFyYXRpb25Db25maWc8VE1vZGVsPn0gTW9kZWxTeW5jRGVjbGFyYXRpb25cbiAqL1xuXG4vKipcbiAqIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNvbm5lY3Rpb24gYWxsIHN5bmMgdHJhZmZpYyByaWRlcy4gTWF0Y2hlcyB0aGVcbiAqIHJlYWx0aW1lIHdlYnNvY2tldCBjbGllbnQgY29udHJhY3Q7IHRoZSBzeW5jIGNsaWVudCByaWRlcyBpdCB3aXRob3V0IG93bmluZ1xuICogaXRzIGNvbm5lY3QvZGlzY29ubmVjdCBsaWZlY3ljbGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5WZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnR9IFN5bmNDbGllbnRTaGFyZWRDb25uZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciBidWlsZGluZyBhIHN5bmMgY2xpZW50LiBFdmVyeXRoaW5nIGVsc2Ug4oCUIHJlc291cmNlcywgdHJhbnNwb3J0XG4gKiBQT1NUZXJzLCBhdXRoLCBjb25uZWN0aXZpdHksIGJhdGNoIHNpemUg4oCUIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbidzXG4gKiByZWdpc3RlcmVkIG1vZGVscyAoYHN0YXRpYyBzeW5jYCkgYW5kIGl0cyBgc3luYy5jbGllbnRgIGJsb2NrLlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBbY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgcmVnaXN0ZXJlZCBtb2RlbHMsIHRoZSBgc3luYy5jbGllbnRgIGJsb2NrLCBhbmQgdGhlIHNjb3BlLXN0b3JlIGRhdGFiYXNlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Njb3BlOiBTZXJpYWxpemVkU3luY1Njb3BlfSkgPT4gc3RyaW5nIHwgbnVsbCB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD59IFtsZWdhY3lDdXJzb3JdIC0gU2VlZHMgYSBuZXdseSBkZWNsYXJlZCBzY29wZSdzIGN1cnNvciAoZS5nLiBmcm9tIGEgcHJlLXNjb3BlIGN1cnNvciBzdG9yZSkgc28gZGV2aWNlcyBkb24ndCByZS1wdWxsIGV2ZXJ5dGhpbmcuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1zY29wZS1zdG9yZS5qc1wiKS5kZWZhdWx0fSBbc2NvcGVTdG9yZV0gLSBTY29wZSBzdG9yZSBvdmVycmlkZSAodGVzdHMpLlxuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW3N5bmNNb2RlbF0gLSBQZW5kaW5nLXN5bmMgbW9kZWwgb3ZlcnJpZGUuIERlZmF1bHRzIHRvIHRoZSByZWdpc3RlcmVkIFwiU3luY1wiIG1vZGVsLlxuICovXG5cbi8qKlxuICogSW50ZXJuYWwgZGVyaXZlZCBzeW5jIGNsaWVudCBjb25maWd1cmF0aW9uIGJ1aWx0IGJ5IHRoZSBTeW5jQ2xpZW50XG4gKiBjb25zdHJ1Y3RvciDigJQgbm90IGFuIGFwcC1mYWNpbmcgQVBJLlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudENvbmZpZ1xuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IGF1dGhlbnRpY2F0aW9uVG9rZW4gLSBSZXNvbHZlcyB0aGUgYXV0aCB0b2tlbiBzZW50IHdpdGggc3luYyByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYmF0Y2hTaXplXSAtIE1heCBzeW5jcyBwZXIgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIHNjb3BlLXN0b3JlIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPn0gW2lzT25saW5lXSAtIENvbm5lY3Rpdml0eSBnYXRlIGZvciBwdWxscyBhbmQgcmVwbGF5cy4gRGVmYXVsdHMgdG8gYWx3YXlzIG9ubGluZS5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtzY29wZTogU2VyaWFsaXplZFN5bmNTY29wZX0pID0+IHN0cmluZyB8IG51bGwgfCBQcm9taXNlPHN0cmluZyB8IG51bGw+fSBbbGVnYWN5Q3Vyc29yXSAtIFNlZWRzIGEgbmV3bHkgZGVjbGFyZWQgc2NvcGUncyBjdXJzb3IgKGUuZy4gZnJvbSBhIHByZS1zY29wZSBjdXJzb3Igc3RvcmUpIHNvIGRldmljZXMgZG9uJ3QgcmUtcHVsbCBldmVyeXRoaW5nLlxuICogQHByb3BlcnR5IHsoZXJyb3I6IEVycm9yKSA9PiB2b2lkfSBbb25FcnJvcl0gLSBSZXBvcnRzIGJhY2tncm91bmQgcmVwbGF5L3B1bGwgZmFpbHVyZXMuIERlZmF1bHRzIHRvIHJldGhyb3dpbmcuXG4gKiBAcHJvcGVydHkgeyhwYXlsb2FkOiBpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jQ2hhbmdlc1JlcXVlc3QgJiB7c2NvcGU6IFNlcmlhbGl6ZWRTeW5jU2NvcGV9KSA9PiBQcm9taXNlPGltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNDaGFuZ2VzUmVzcG9uc2U+fSBwb3N0Q2hhbmdlcyAtIFBvc3RzIG9uZSBjaGFuZ2VzIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkgeyhwYXlsb2FkOiB7YXV0aGVudGljYXRpb25Ub2tlbjogc3RyaW5nLCBzeW5jczogQXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1JlcGxheVJlc3BvbnNlPn0gcG9zdFJlcGxheSAtIFBvc3RzIG9uZSByZXBsYXkgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5WZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9ufSBbcmVhbHRpbWVdIC0gUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU3luY0NsaWVudFJlc291cmNlQ29uZmlnPn0gcmVzb3VyY2VzIC0gRGVyaXZlZCByZXNvdXJjZSBwb2xpY2llcyBrZXllZCBieSByZXNvdXJjZS9tb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gc3luY01vZGVsIC0gTG9jYWwgcGVuZGluZy1zeW5jIG1vZGVsIGNsYXNzLlxuICogQHByb3BlcnR5IHtTeW5jQ2xpZW50U2hhcmVkQ29ubmVjdGlvbn0gW3dlYnNvY2tldENsaWVudF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBjbGllbnQgaW5zdGFuY2UgKHRoZSBsb3ctbGV2ZWwgc2hhcmVkLWNvbm5lY3Rpb24gZm9ybSkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKX0gW3dlYnNvY2tldFVybF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBVUkwgdGhlIGZyYW1ld29yayBidWlsZHMgYSBjbGllbnQgZnJvbS5cbiAqL1xuXG5leHBvcnQge31cbiJdfQ==
@@ -31,14 +31,18 @@ export default class SyncClient {
31
31
  _scheduledReplay: Promise<void> | null;
32
32
  /** @type {Record<string, import("./sync-api-client-types.js").SyncResourceConfig> | null} */
33
33
  _pullResourceConfigs: Record<string, import("./sync-api-client-types.js").SyncResourceConfig> | null;
34
- /** @type {Array<{callback: (record: ReturnType<typeof JSON.parse>) => Promise<void>, callbackName: "afterCreate" | "afterUpdate" | "afterDestroy", modelClass: ReturnType<typeof JSON.parse>}>} */
34
+ /** @type {Array<{callback: (record: ReturnType<typeof JSON.parse>) => Promise<void> | void, callbackName: "afterCreate" | "afterUpdate" | "afterDestroy" | "beforeUpdate" | "beforeDestroy", modelClass: ReturnType<typeof JSON.parse>}>} */
35
35
  _trackedCallbacks: Array<{
36
- callback: (record: ReturnType<typeof JSON.parse>) => Promise<void>;
37
- callbackName: "afterCreate" | "afterUpdate" | "afterDestroy";
36
+ callback: (record: ReturnType<typeof JSON.parse>) => Promise<void> | void;
37
+ callbackName: "afterCreate" | "afterUpdate" | "afterDestroy" | "beforeUpdate" | "beforeDestroy";
38
38
  modelClass: ReturnType<typeof JSON.parse>;
39
39
  }>;
40
40
  /** @type {WeakSet<object>} */
41
41
  _remoteApplyRecords: WeakSet<object>;
42
+ /** @type {Map<string, number>} */
43
+ _remoteGenerations: Map<string, number>;
44
+ /** @type {WeakMap<object, Array<string | number | null>>} */
45
+ _capturedBaseVersions: WeakMap<object, Array<string | number | null>>;
42
46
  _withoutTrackingDepth: number;
43
47
  /** @type {Logger | {error: (...messages: Array<ReturnType<typeof JSON.parse>>) => Promise<void>} | null} */
44
48
  _logger: Logger | {
@@ -316,20 +320,65 @@ export default class SyncClient {
316
320
  /**
317
321
  * Queues a local model change as a pending sync row and schedules an immediate
318
322
  * replay attempt (kept pending while offline or when the backend rejects it).
319
- * @param {{resource: ReturnType<typeof JSON.parse>, data?: Record<string, ReturnType<typeof JSON.parse>>, syncType?: string}} args - Queue args.
320
- * @returns {Promise<ReturnType<typeof JSON.parse>>} Pending local sync row.
323
+ * @param {{baseVersion?: string | number | null, resource: ReturnType<typeof JSON.parse>, data?: Record<string, ReturnType<typeof JSON.parse>>, operation?: "create" | "update" | "destroy", syncType?: string}} args - Queue args.
324
+ * @returns {Promise<ReturnType<typeof JSON.parse> | import("./local-mutation-log.js").LocalMutationLogRecord>} Pending local sync row or durable conflict-tracked intent.
321
325
  */
322
- queue({ data, resource, syncType }: {
326
+ queue({ baseVersion, data, operation, resource, syncType }: {
327
+ baseVersion?: string | number | null;
323
328
  resource: ReturnType<typeof JSON.parse>;
324
329
  data?: Record<string, ReturnType<typeof JSON.parse>>;
330
+ operation?: "create" | "update" | "destroy";
325
331
  syncType?: string;
326
- }): Promise<ReturnType<typeof JSON.parse>>;
332
+ }): Promise<ReturnType<typeof JSON.parse> | import("./local-mutation-log.js").LocalMutationLogRecord>;
327
333
  /**
328
334
  * Drains pending local sync rows to the backend (single-flighted, online-gated).
329
335
  * Rows are only marked successful after the backend acknowledges them.
330
336
  * @returns {Promise<void>}
331
337
  */
332
338
  replayPending(): Promise<void>;
339
+ /**
340
+ * Records an authoritative remote observation so an in-flight acknowledgement
341
+ * cannot rebase a successor across that observation.
342
+ * @param {{resourceId: string | number, resourceType: string, version?: string | number | null}} args - Remote identity.
343
+ * @returns {void}
344
+ */
345
+ noteRemoteVersion({ resourceId, resourceType, version }: {
346
+ resourceId: string | number;
347
+ resourceType: string;
348
+ version?: string | number | null;
349
+ }): void;
350
+ /**
351
+ * Reads the authoritative base version observed before a local mutation.
352
+ * @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Version args.
353
+ * @returns {string | number | null} Base version.
354
+ */
355
+ baseVersionFor({ operation, record, resourceConfig }: {
356
+ operation: "create" | "update" | "destroy";
357
+ record: ReturnType<typeof JSON.parse>;
358
+ resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
359
+ }): string | number | null;
360
+ /**
361
+ * Reads the pre-assignment value exposed by record changes during beforeUpdate.
362
+ * Deletes have no version change pair and use the record's current version.
363
+ * @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Version args.
364
+ * @returns {string | number | null} Pre-mutation base version.
365
+ */
366
+ preMutationBaseVersionFor({ operation, record, resourceConfig }: {
367
+ operation: "create" | "update" | "destroy";
368
+ record: ReturnType<typeof JSON.parse>;
369
+ resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
370
+ }): string | number | null;
371
+ /**
372
+ * Consumes the base captured for this lifecycle event before its after-commit
373
+ * closure is deferred, preserving repeated same-record writes in one transaction.
374
+ * @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Capture args.
375
+ * @returns {string | number | null} Captured base version.
376
+ */
377
+ capturedBaseVersionFor({ operation, record, resourceConfig }: {
378
+ operation: "create" | "update" | "destroy";
379
+ record: ReturnType<typeof JSON.parse>;
380
+ resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
381
+ }): string | number | null;
333
382
  /**
334
383
  * Schedules a background replay attempt without blocking the caller.
335
384
  * Failures go to config.onError (or rethrow when none is configured).
@@ -1 +1 @@
1
- {"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}