@graview/core 0.1.20 → 0.1.22

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 (196) hide show
  1. package/README.md +28 -0
  2. package/dist/blocks.d.ts +3 -0
  3. package/dist/blocks.d.ts.map +1 -1
  4. package/dist/blocks.js +2 -0
  5. package/dist/blocks.js.map +1 -1
  6. package/dist/capabilities.js +1 -1
  7. package/dist/capabilities.js.map +1 -1
  8. package/dist/cli/check/computed.d.ts +4 -2
  9. package/dist/cli/check/computed.d.ts.map +1 -1
  10. package/dist/cli/check/computed.js +7 -4
  11. package/dist/cli/check/computed.js.map +1 -1
  12. package/dist/cli/check/lenses.d.ts.map +1 -1
  13. package/dist/cli/check/lenses.js +4 -2
  14. package/dist/cli/check/lenses.js.map +1 -1
  15. package/dist/cli/check/policy.d.ts.map +1 -1
  16. package/dist/cli/check/policy.js +12 -4
  17. package/dist/cli/check/policy.js.map +1 -1
  18. package/dist/cli/check/relations.d.ts +0 -11
  19. package/dist/cli/check/relations.d.ts.map +1 -1
  20. package/dist/cli/check/relations.js +21 -46
  21. package/dist/cli/check/relations.js.map +1 -1
  22. package/dist/cli/check/views.d.ts.map +1 -1
  23. package/dist/cli/check/views.js +3 -2
  24. package/dist/cli/check/views.js.map +1 -1
  25. package/dist/cli/check.d.ts.map +1 -1
  26. package/dist/cli/check.js +1 -2
  27. package/dist/cli/check.js.map +1 -1
  28. package/dist/cli/describe.d.ts.map +1 -1
  29. package/dist/cli/describe.js +23 -2
  30. package/dist/cli/describe.js.map +1 -1
  31. package/dist/cli/doctor.d.ts +34 -0
  32. package/dist/cli/doctor.d.ts.map +1 -0
  33. package/dist/cli/doctor.js +346 -0
  34. package/dist/cli/doctor.js.map +1 -0
  35. package/dist/cli/document-schema.d.ts +6 -0
  36. package/dist/cli/document-schema.d.ts.map +1 -0
  37. package/dist/cli/document-schema.js +55 -0
  38. package/dist/cli/document-schema.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -1
  40. package/dist/cli/index.d.ts.map +1 -1
  41. package/dist/cli/index.js +41 -2
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/cli/types.d.ts +12 -0
  44. package/dist/cli/types.d.ts.map +1 -0
  45. package/dist/cli/types.js +95 -0
  46. package/dist/cli/types.js.map +1 -0
  47. package/dist/conformance/fixtures.d.ts.map +1 -1
  48. package/dist/conformance/fixtures.js +6 -3
  49. package/dist/conformance/fixtures.js.map +1 -1
  50. package/dist/describe.d.ts +3 -1
  51. package/dist/describe.d.ts.map +1 -1
  52. package/dist/describe.js +9 -0
  53. package/dist/describe.js.map +1 -1
  54. package/dist/document/block-context.d.ts +50 -0
  55. package/dist/document/block-context.d.ts.map +1 -0
  56. package/dist/document/block-context.js +69 -0
  57. package/dist/document/block-context.js.map +1 -0
  58. package/dist/document/blocks.d.ts +24 -10
  59. package/dist/document/blocks.d.ts.map +1 -1
  60. package/dist/document/blocks.js +50 -39
  61. package/dist/document/blocks.js.map +1 -1
  62. package/dist/document/compile-checked.d.ts.map +1 -1
  63. package/dist/document/compile-checked.js +6 -3
  64. package/dist/document/compile-checked.js.map +1 -1
  65. package/dist/document/compile.d.ts +1 -1
  66. package/dist/document/compile.d.ts.map +1 -1
  67. package/dist/document/compile.js +8 -3
  68. package/dist/document/compile.js.map +1 -1
  69. package/dist/document/compiled.d.ts +2 -0
  70. package/dist/document/compiled.d.ts.map +1 -1
  71. package/dist/document/compiled.js +31 -27
  72. package/dist/document/compiled.js.map +1 -1
  73. package/dist/document/computed-values.d.ts +6 -1
  74. package/dist/document/computed-values.d.ts.map +1 -1
  75. package/dist/document/computed-values.js +7 -4
  76. package/dist/document/computed-values.js.map +1 -1
  77. package/dist/document/computed.d.ts +21 -0
  78. package/dist/document/computed.d.ts.map +1 -1
  79. package/dist/document/computed.js +54 -4
  80. package/dist/document/computed.js.map +1 -1
  81. package/dist/document/describe-place.d.ts +15 -0
  82. package/dist/document/describe-place.d.ts.map +1 -1
  83. package/dist/document/describe-place.js +33 -28
  84. package/dist/document/describe-place.js.map +1 -1
  85. package/dist/document/diff.d.ts.map +1 -1
  86. package/dist/document/diff.js +22 -0
  87. package/dist/document/diff.js.map +1 -1
  88. package/dist/document/edit.d.ts.map +1 -1
  89. package/dist/document/edit.js +34 -0
  90. package/dist/document/edit.js.map +1 -1
  91. package/dist/document/expr/evaluate.d.ts +7 -1
  92. package/dist/document/expr/evaluate.d.ts.map +1 -1
  93. package/dist/document/expr/evaluate.js +19 -5
  94. package/dist/document/expr/evaluate.js.map +1 -1
  95. package/dist/document/expr/index.d.ts +1 -1
  96. package/dist/document/expr/index.d.ts.map +1 -1
  97. package/dist/document/expr/index.js +1 -1
  98. package/dist/document/expr/index.js.map +1 -1
  99. package/dist/document/expr/parse.js +1 -1
  100. package/dist/document/expr/parse.js.map +1 -1
  101. package/dist/document/fact-values.d.ts +21 -0
  102. package/dist/document/fact-values.d.ts.map +1 -0
  103. package/dist/document/fact-values.js +24 -0
  104. package/dist/document/fact-values.js.map +1 -0
  105. package/dist/document/facts-and-roles.d.ts +17 -0
  106. package/dist/document/facts-and-roles.d.ts.map +1 -0
  107. package/dist/document/facts-and-roles.js +75 -0
  108. package/dist/document/facts-and-roles.js.map +1 -0
  109. package/dist/document/resolve-for.d.ts +29 -0
  110. package/dist/document/resolve-for.d.ts.map +1 -0
  111. package/dist/document/resolve-for.js +23 -0
  112. package/dist/document/resolve-for.js.map +1 -0
  113. package/dist/document/respell.js +2 -2
  114. package/dist/document/respell.js.map +1 -1
  115. package/dist/document/rule-line.d.ts.map +1 -1
  116. package/dist/document/rule-line.js +6 -2
  117. package/dist/document/rule-line.js.map +1 -1
  118. package/dist/document/rules.d.ts.map +1 -1
  119. package/dist/document/rules.js +5 -1
  120. package/dist/document/rules.js.map +1 -1
  121. package/dist/document/schema.d.ts +8 -0
  122. package/dist/document/schema.d.ts.map +1 -1
  123. package/dist/document/schema.js +20 -3
  124. package/dist/document/schema.js.map +1 -1
  125. package/dist/document/to-document.d.ts.map +1 -1
  126. package/dist/document/to-document.js +2 -0
  127. package/dist/document/to-document.js.map +1 -1
  128. package/dist/document/views.d.ts +15 -1
  129. package/dist/document/views.d.ts.map +1 -1
  130. package/dist/document/views.js +82 -34
  131. package/dist/document/views.js.map +1 -1
  132. package/dist/document.schema.json +1655 -0
  133. package/dist/index.d.ts +1 -9
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +2 -5
  136. package/dist/index.js.map +1 -1
  137. package/dist/invariants/engine.d.ts +13 -0
  138. package/dist/invariants/engine.d.ts.map +1 -1
  139. package/dist/invariants/engine.js +16 -1
  140. package/dist/invariants/engine.js.map +1 -1
  141. package/dist/invariants/types.d.ts +7 -4
  142. package/dist/invariants/types.d.ts.map +1 -1
  143. package/dist/lines.d.ts +23 -3
  144. package/dist/lines.d.ts.map +1 -1
  145. package/dist/lines.js +38 -6
  146. package/dist/lines.js.map +1 -1
  147. package/dist/places.d.ts.map +1 -1
  148. package/dist/places.js +1 -1
  149. package/dist/places.js.map +1 -1
  150. package/dist/scaffold/project.d.ts.map +1 -1
  151. package/dist/scaffold/project.js +5 -0
  152. package/dist/scaffold/project.js.map +1 -1
  153. package/dist/schema/define-node.d.ts.map +1 -1
  154. package/dist/schema/define-node.js +6 -4
  155. package/dist/schema/define-node.js.map +1 -1
  156. package/dist/schema/schema.d.ts +10 -2
  157. package/dist/schema/schema.d.ts.map +1 -1
  158. package/dist/schema/schema.js +4 -1
  159. package/dist/schema/schema.js.map +1 -1
  160. package/dist/seen.d.ts.map +1 -1
  161. package/dist/seen.js +5 -2
  162. package/dist/seen.js.map +1 -1
  163. package/dist/snapshot.d.ts +67 -0
  164. package/dist/snapshot.d.ts.map +1 -0
  165. package/dist/snapshot.js +181 -0
  166. package/dist/snapshot.js.map +1 -0
  167. package/dist/store.d.ts +32 -2
  168. package/dist/store.d.ts.map +1 -1
  169. package/dist/store.js +48 -35
  170. package/dist/store.js.map +1 -1
  171. package/dist/sync/engine.d.ts +93 -9
  172. package/dist/sync/engine.d.ts.map +1 -1
  173. package/dist/sync/engine.js +357 -48
  174. package/dist/sync/engine.js.map +1 -1
  175. package/dist/sync/index.d.ts +11 -0
  176. package/dist/sync/index.d.ts.map +1 -0
  177. package/dist/sync/index.js +15 -0
  178. package/dist/sync/index.js.map +1 -0
  179. package/dist/sync/mcp.d.ts +124 -0
  180. package/dist/sync/mcp.d.ts.map +1 -0
  181. package/dist/sync/mcp.js +247 -0
  182. package/dist/sync/mcp.js.map +1 -0
  183. package/dist/sync/types.d.ts +35 -0
  184. package/dist/sync/types.d.ts.map +1 -1
  185. package/dist/sync/types.js.map +1 -1
  186. package/dist/testing.d.ts +30 -0
  187. package/dist/testing.d.ts.map +1 -1
  188. package/dist/testing.js +38 -0
  189. package/dist/testing.js.map +1 -1
  190. package/dist/typed.d.ts +267 -0
  191. package/dist/typed.d.ts.map +1 -0
  192. package/dist/typed.js +35 -0
  193. package/dist/typed.js.map +1 -0
  194. package/dist/version.d.ts +1 -1
  195. package/dist/version.js +1 -1
  196. package/package.json +16 -3
@@ -1,3 +1,5 @@
1
+ import { PermissionDeniedError } from "../permissions/types.js";
2
+ import { seesId } from "../seen.js";
1
3
  import { EMPTY_SYNC_STATE, systemAuthor, } from "./types.js";
2
4
  /** Reads a node's mapped values, in OUR field names. */
3
5
  function mappedValues(node, mapping) {
@@ -11,11 +13,12 @@ function mappedValues(node, mapping) {
11
13
  *
12
14
  * Both halves matter. A mapping that only renames ships a field full of
13
15
  * nonsense the first time the two systems disagree about what a time is.
16
+ * `all` reads back the fields we only send too: what a push of ours agreed.
14
17
  */
15
- function ourFields(remote, mapping) {
18
+ function ourFields(remote, mapping, all = false) {
16
19
  const values = {};
17
20
  for (const [ours, theirs] of Object.entries(mapping.fields)) {
18
- if (mapping.ours?.includes(ours))
21
+ if (!all && mapping.ours?.includes(ours))
19
22
  continue;
20
23
  if (!(theirs in remote))
21
24
  continue;
@@ -34,7 +37,8 @@ function remoteFields(values, mapping, node = values) {
34
37
  }
35
38
  return out;
36
39
  }
37
- const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
40
+ const same = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
41
+ const heldKey = (localId, field) => `${localId}\u0000${field}`;
38
42
  /**
39
43
  * Two-way sync, on top of the op log rather than beside it.
40
44
  *
@@ -46,23 +50,46 @@ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
46
50
  * write is distinguishable from somebody else's change — which is the loop
47
51
  * that breaks naive two-way sync.
48
52
  *
49
- * Nothing here resolves a conflict. A field both sides changed since they last
50
- * agreed is reported, and it is the app's business — the same instinct that
51
- * makes an invariant name its repairs rather than silently applying one.
53
+ * A field both sides changed since they last agreed is decided by the policy
54
+ * the engine was given, and by default it is not decided at all: it is held
55
+ * and reported, and neither value moves until somebody chooses — the same
56
+ * instinct that makes an invariant name its repairs rather than silently
57
+ * applying one.
52
58
  */
53
59
  export class SyncEngine {
54
60
  state;
55
61
  options;
56
62
  constructor(options, state = EMPTY_SYNC_STATE) {
57
63
  this.options = options;
58
- this.state = state;
64
+ /*
65
+ * LINKED AT THE VERSION THE GRAPH WAS MADE FROM. A graph projected from
66
+ * the remote already holds what the remote holds; without a link, the
67
+ * first run would send every record back as new.
68
+ */
69
+ this.state = { ...state, links: { ...this.seededLinks(), ...state.links } };
59
70
  }
60
71
  get snapshot() {
61
72
  return this.state;
62
73
  }
74
+ get policy() {
75
+ return this.options.conflicts ?? "report";
76
+ }
63
77
  mappingFor(kindOrResource) {
64
78
  return this.options.mapping.resources.find((resource) => resource.kind === kindOrResource || resource.resource === kindOrResource);
65
79
  }
80
+ /** The sentence a local act on a record the remote owns is refused with. */
81
+ because(mapping) {
82
+ return mapping.because ?? `${this.options.mapping.system} keeps these records; they are not changed here.`;
83
+ }
84
+ /**
85
+ * Why a record of this kind is not written here, or undefined when it is.
86
+ * The sentence a read-only resource declared, so a host can say it before
87
+ * an act is even offered.
88
+ */
89
+ refuses(kind) {
90
+ const mapping = this.options.mapping.resources.find((resource) => resource.kind === kind);
91
+ return mapping?.readonly ? this.because(mapping) : undefined;
92
+ }
66
93
  /** Every node that participates in the sync, by our id. */
67
94
  participants() {
68
95
  const graph = this.options.store.graph;
@@ -77,19 +104,93 @@ export class SyncEngine {
77
104
  }
78
105
  return found;
79
106
  }
107
+ /** A link for every participant whose mapping names its version field and that carries one. */
108
+ seededLinks() {
109
+ const links = {};
110
+ if (!this.options.mapping.resources.some((resource) => resource.version))
111
+ return links;
112
+ /*
113
+ * AS THE REMOTE MADE IT, not as it is now: a field somebody changed here
114
+ * before the first run is agreed at the value it had before that change,
115
+ * so the change is sent rather than taken for what the remote holds.
116
+ */
117
+ const before = new Map();
118
+ for (const op of this.options.store.log.all()) {
119
+ if (op.author.kind === "system" && op.author.id === this.options.mapping.system)
120
+ continue;
121
+ for (const primitive of op.primitives) {
122
+ if (primitive.op !== "patch-node")
123
+ continue;
124
+ const was = before.get(primitive.id) ?? {};
125
+ for (const [field, value] of Object.entries(primitive.before ?? {}))
126
+ if (!Object.hasOwn(was, field))
127
+ was[field] = value;
128
+ before.set(primitive.id, was);
129
+ }
130
+ }
131
+ for (const [localId, { node: now, mapping }] of this.participants()) {
132
+ const node = { ...now, ...before.get(localId) };
133
+ const version = mapping.version ? node[mapping.version] : undefined;
134
+ if ((typeof version !== "string" && typeof version !== "number") || version === "")
135
+ continue;
136
+ const remoteId = mapping.remoteId ? node[mapping.remoteId] : undefined;
137
+ links[localId] = {
138
+ resource: mapping.resource,
139
+ id: typeof remoteId === "string" && remoteId !== "" ? remoteId : localId,
140
+ version: String(version),
141
+ fields: mappedValues(node, mapping),
142
+ };
143
+ }
144
+ return links;
145
+ }
146
+ /** The fields held in conflict, by node and field. */
147
+ held() {
148
+ return new Map((this.state.conflicts ?? []).map((conflict) => [heldKey(conflict.localId, conflict.field), conflict]));
149
+ }
150
+ /**
151
+ * A HELD FIELD SETTLED HERE — somebody took their value by an ordinary act
152
+ * (the conflict invariant's repair is one) — is not held any longer: the
153
+ * value both sides hold is agreed, and nothing is sent for it.
154
+ */
155
+ release() {
156
+ const conflicts = this.state.conflicts ?? [];
157
+ if (conflicts.length === 0)
158
+ return;
159
+ const graph = this.options.store.graph;
160
+ let links = this.state.links;
161
+ const still = conflicts.filter((conflict) => {
162
+ const node = graph.getNode(conflict.localId);
163
+ const link = links[conflict.localId];
164
+ const mapping = link ? this.mappingFor(link.resource) : undefined;
165
+ if (!node || !link || !mapping || !same(mappedValues(node, mapping)[conflict.field], conflict.theirs))
166
+ return true;
167
+ links = { ...links, [conflict.localId]: { ...link, fields: { ...link.fields, [conflict.field]: conflict.theirs } } };
168
+ return false;
169
+ });
170
+ if (still.length === conflicts.length)
171
+ return;
172
+ const { conflicts: _was, ...rest } = this.state;
173
+ this.state = { ...rest, links, ...(still.length > 0 ? { conflicts: still } : {}) };
174
+ }
80
175
  /**
81
176
  * The local changes the remote has not seen.
82
177
  *
83
178
  * Derived by comparing what a node holds NOW against what we last agreed it
84
179
  * held — not by watching for edits. A change nobody was listening for still
85
180
  * gets sent, which matters because the alternative is a subscription that
86
- * has to be correct forever.
181
+ * has to be correct forever. A field held in conflict is not sent, and a
182
+ * record the remote owns never is.
87
183
  */
88
184
  pending() {
185
+ this.release();
89
186
  const writes = [];
90
187
  const seen = new Set();
188
+ const held = this.held();
189
+ const gone = new Set(this.state.gone ?? []);
91
190
  for (const [localId, { node, mapping }] of this.participants()) {
92
191
  seen.add(localId);
192
+ if (mapping.readonly || gone.has(localId))
193
+ continue;
93
194
  const link = this.state.links[localId];
94
195
  const values = mappedValues(node, mapping);
95
196
  if (!link) {
@@ -100,20 +201,22 @@ export class SyncEngine {
100
201
  });
101
202
  continue;
102
203
  }
103
- const changed = Object.keys(values).filter((field) => !same(values[field], link.fields[field]));
204
+ const free = Object.fromEntries(Object.entries(values).filter(([field]) => !held.has(heldKey(localId, field))));
205
+ const changed = Object.keys(free).filter((field) => !same(free[field], link.fields[field]));
104
206
  if (changed.length === 0)
105
207
  continue;
106
208
  writes.push({
107
209
  resource: mapping.resource,
108
210
  id: link.id,
109
211
  localId,
110
- fields: remoteFields(values, mapping, node),
212
+ fields: remoteFields(free, mapping, node),
111
213
  });
112
214
  }
113
215
  // Something we had linked and no longer have is a deletion, and saying so
114
- // is better than leaving an orphan on the remote forever.
216
+ // is better than leaving an orphan on the remote forever. A record the
217
+ // remote owns is not deleted there from here: `run` refuses it, once.
115
218
  for (const [localId, link] of Object.entries(this.state.links)) {
116
- if (seen.has(localId))
219
+ if (seen.has(localId) || this.mappingFor(link.resource)?.readonly)
117
220
  continue;
118
221
  writes.push({ resource: link.resource, id: link.id, localId, deleted: true });
119
222
  }
@@ -128,9 +231,13 @@ export class SyncEngine {
128
231
  async run() {
129
232
  const applied = [];
130
233
  const echoes = [];
131
- const conflicts = [];
234
+ const resolved = [];
132
235
  const pushed = [];
133
236
  const refused = [];
237
+ const gone = [];
238
+ this.release();
239
+ const held = this.held();
240
+ const policy = this.policy;
134
241
  let offline = false;
135
242
  let links = { ...this.state.links };
136
243
  let cursor = this.state.cursor;
@@ -181,41 +288,86 @@ export class SyncEngine {
181
288
  }
182
289
  const link = links[localId];
183
290
  const node = this.options.store.graph.getNode(localId);
291
+ /*
292
+ * DELETED THERE. Removed here through the declared act when there is
293
+ * one, as any inbound change lands; kept here otherwise, but no longer
294
+ * linked or sent, so it is not made again there as new. Either way
295
+ * its held fields are nobody's to choose between any more.
296
+ */
297
+ if (change.deleted) {
298
+ const removal = node ? this.options.removeInbound?.({ localId, kind: mapping.kind }) : null;
299
+ if (removal) {
300
+ this.options.store.apply(removal, {
301
+ author: systemAuthor(this.options.mapping.system),
302
+ intent: `${this.options.mapping.system}: deleted ${change.resource}`,
303
+ });
304
+ }
305
+ if (node)
306
+ gone.push(localId);
307
+ for (const key of [...held.keys()])
308
+ if (held.get(key).localId === localId)
309
+ held.delete(key);
310
+ const { [localId]: _deleted, ...rest } = links;
311
+ links = rest;
312
+ continue;
313
+ }
184
314
  if (!node)
185
315
  continue;
186
316
  const theirs = ourFields(change.fields ?? {}, mapping);
187
317
  const ours = mappedValues(node, mapping);
188
318
  /*
189
- * A GENUINE CONFLICT, reported rather than resolved.
190
- *
191
- * Both sides changed the same field since the version we last agreed
192
- * on. Picking a winner here would be the sync layer making a domain
193
- * decision on nobody's behalf, quietly, in a place nobody looks.
319
+ * Field by field: what lands, what both sides now agree on, and what
320
+ * is contested — both changed since the version we last agreed on,
321
+ * to different values. Contested goes where the policy says, and by
322
+ * default nowhere: picking a winner quietly would be the sync layer
323
+ * making a domain decision on nobody's behalf.
194
324
  */
195
- const contested = Object.keys(theirs).filter((field) => !same(theirs[field], link.fields[field]) && !same(ours[field], link.fields[field]));
196
- const settled = Object.fromEntries(Object.entries(theirs).filter(([field]) => !contested.includes(field)));
197
- for (const field of contested) {
198
- conflicts.push({
199
- localId,
200
- field,
201
- ours: ours[field],
202
- theirs: theirs[field],
203
- base: link.fields[field],
204
- });
325
+ const lands = {};
326
+ const agreed = {};
327
+ for (const [field, value] of Object.entries(theirs)) {
328
+ const key = heldKey(localId, field);
329
+ const base = link.fields[field];
330
+ if (same(value, ours[field])) {
331
+ agreed[field] = value;
332
+ held.delete(key);
333
+ continue;
334
+ }
335
+ if (same(value, base)) {
336
+ // Only we changed it: ours goes out in this pass.
337
+ held.delete(key);
338
+ continue;
339
+ }
340
+ if (same(ours[field], base) || mapping.readonly) {
341
+ lands[field] = agreed[field] = value;
342
+ held.delete(key);
343
+ continue;
344
+ }
345
+ const conflict = { localId, field, ours: ours[field], theirs: value, base };
346
+ if (policy === "report") {
347
+ held.set(key, conflict);
348
+ continue;
349
+ }
350
+ held.delete(key);
351
+ resolved.push({ ...conflict, took: policy });
352
+ // Theirs lands as any inbound change does; ours is agreed against
353
+ // what they hold now, so the push below sends it.
354
+ if (policy === "theirs")
355
+ lands[field] = value;
356
+ agreed[field] = value;
205
357
  }
206
- if (Object.keys(settled).length > 0) {
207
- this.options.store.apply(this.options.applyInbound({ localId, kind: mapping.kind, fields: settled }), {
358
+ if (Object.keys(lands).length > 0) {
359
+ this.options.store.apply(this.options.applyInbound({ localId, kind: mapping.kind, fields: lands }), {
208
360
  author: systemAuthor(this.options.mapping.system),
209
- intent: `${this.options.mapping.system}: ${Object.keys(settled).join(", ")}`,
361
+ intent: `${this.options.mapping.system}: ${Object.keys(lands).join(", ")}`,
210
362
  });
211
363
  applied.push(localId);
212
364
  }
213
365
  links[localId] = {
214
366
  ...link,
215
367
  version: change.version,
216
- // The uncontested fields are agreed now; the contested ones are not,
217
- // so they keep their old base until somebody resolves them.
218
- fields: { ...link.fields, ...settled },
368
+ // What both sides hold is agreed now; a held field is not, so it
369
+ // keeps its old base until somebody resolves it.
370
+ fields: { ...link.fields, ...agreed },
219
371
  };
220
372
  }
221
373
  }
@@ -229,19 +381,48 @@ export class SyncEngine {
229
381
  */
230
382
  offline = true;
231
383
  }
384
+ // What the inbound pass decided is what the outbound pass sends from.
385
+ const { conflicts: _before, gone: _gone, ...kept } = this.state;
386
+ const unsynced = [...new Set([...(this.state.gone ?? []), ...gone])].filter((id) => this.options.store.graph.getNode(id));
387
+ this.state = { ...kept, links, ...this.heldState(held), ...(unsynced.length > 0 ? { gone: unsynced } : {}) };
388
+ /*
389
+ * A RECORD THE REMOTE OWNS, DELETED HERE, is refused here and said once:
390
+ * the link goes, so the next pass does not refuse it again, and the
391
+ * remote's record comes back as new on a pull that carries it.
392
+ */
393
+ const participants = this.participants();
394
+ for (const [localId, link] of Object.entries(links)) {
395
+ const mapping = this.mappingFor(link.resource);
396
+ if (participants.has(localId) || !mapping?.readonly)
397
+ continue;
398
+ refused.push({ localId, error: this.because(mapping) });
399
+ const { [localId]: _gone, ...rest } = links;
400
+ links = rest;
401
+ }
232
402
  // -------------------------------------------------------------- outbound
233
- const outbox = [...this.state.outbox, ...this.pending()];
234
- // The last write for a node wins; sending three versions of the same edit
235
- // is how a remote's rate limit is discovered.
236
- const deduped = [...new Map(outbox.map((write) => [write.localId, write])).values()];
403
+ this.state = { ...this.state, links };
404
+ /*
405
+ * WHAT IS OWED IS WORKED OUT AGAIN, not replayed: a write queued while
406
+ * offline is what `pending` says now, unless something since — a
407
+ * conflict the pull just held, an edit taken back — says otherwise, and
408
+ * then the queued one would send what nobody now holds. One write per
409
+ * node: sending three versions of the same edit is how a remote's rate
410
+ * limit is discovered.
411
+ */
412
+ const deduped = [...new Map(this.pending().map((write) => [write.localId, write])).values()];
237
413
  let queued = deduped;
238
414
  if (!offline && deduped.length > 0) {
239
415
  try {
240
416
  const acks = await this.options.remote.push(deduped);
241
- queued = [];
242
417
  for (const ack of acks) {
243
418
  if (ack.error) {
244
419
  refused.push({ localId: ack.localId, error: ack.error });
420
+ // A refused delete is said once: we stop asking, rather than
421
+ // being refused again on every pass for as long as we run.
422
+ if (deduped.find((write) => write.localId === ack.localId)?.deleted) {
423
+ const { [ack.localId]: _gone, ...rest } = links;
424
+ links = rest;
425
+ }
245
426
  continue;
246
427
  }
247
428
  pushed.push(ack.localId);
@@ -260,19 +441,26 @@ export class SyncEngine {
260
441
  ...(cursor === undefined ? {} : { cursor }),
261
442
  links,
262
443
  outbox: queued,
444
+ ...this.heldState(held),
445
+ ...(this.state.gone ? { gone: this.state.gone } : {}),
263
446
  };
264
447
  return {
265
448
  system: this.options.mapping.system,
266
449
  applied,
267
450
  echoes,
268
- conflicts,
451
+ conflicts: this.state.conflicts ?? [],
452
+ resolved,
269
453
  pushed,
270
454
  queued: queued.map((write) => write.localId),
271
455
  refused,
456
+ gone,
272
457
  offline,
273
458
  state: this.state,
274
459
  };
275
460
  }
461
+ heldState(held) {
462
+ return held.size > 0 ? { conflicts: [...held.values()] } : {};
463
+ }
276
464
  /** Records what the remote made of one of our writes. */
277
465
  linkAfterPush(links, ack, writes) {
278
466
  const write = writes.find((candidate) => candidate.localId === ack.localId);
@@ -294,8 +482,9 @@ export class SyncEngine {
294
482
  version: ack.version,
295
483
  // Stored in OUR representation, because that is what the next run
296
484
  // compares against — comparing a decoded remote value with an encoded
297
- // local one reports a change on every single pass.
298
- fields: ourFields(write.fields ?? {}, mapping),
485
+ // local one reports a change on every single pass. A field the write
486
+ // left out (held in conflict) keeps the base it had.
487
+ fields: { ...links[ack.localId]?.fields, ...ourFields(write.fields ?? {}, mapping, true) },
299
488
  },
300
489
  };
301
490
  }
@@ -304,12 +493,16 @@ export class SyncEngine {
304
493
  *
305
494
  * `theirs` writes their value through the ordinary inbound mutation, so it
306
495
  * lands in the log like any other change. `ours` changes nothing locally and
307
- * simply re-bases, which makes the next run push our value.
496
+ * re-bases on their value, which makes the next run push ours. Either way
497
+ * the field is no longer held.
308
498
  */
309
499
  resolve(conflict, take) {
310
500
  const link = this.state.links[conflict.localId];
311
501
  if (!link)
312
502
  return;
503
+ // One a later pull already settled, or that holds another value since, is not this one to choose: choosing it would agree on a value neither side holds.
504
+ if (!same(this.held().get(heldKey(conflict.localId, conflict.field))?.theirs, conflict.theirs))
505
+ return;
313
506
  const mapping = this.mappingFor(link.resource);
314
507
  if (!mapping)
315
508
  return;
@@ -323,19 +516,135 @@ export class SyncEngine {
323
516
  intent: `${this.options.mapping.system}: took their "${conflict.field}"`,
324
517
  });
325
518
  }
519
+ const held = this.held();
520
+ held.delete(heldKey(conflict.localId, conflict.field));
521
+ const { conflicts: _was, ...rest } = this.state;
326
522
  this.state = {
327
- ...this.state,
523
+ ...rest,
524
+ ...this.heldState(held),
328
525
  links: {
329
526
  ...this.state.links,
330
527
  [conflict.localId]: {
331
528
  ...link,
332
- fields: {
333
- ...link.fields,
334
- [conflict.field]: take === "theirs" ? conflict.theirs : conflict.base,
335
- },
529
+ fields: { ...link.fields, [conflict.field]: conflict.theirs },
336
530
  },
337
531
  },
338
532
  };
339
533
  }
534
+ /**
535
+ * REFUSES A LOCAL ACT ON A RECORD THE REMOTE OWNS, with the sentence its
536
+ * resource declared — as an `ApplyOptions.admit`, so the change is put
537
+ * back before anything is kept. The engine's own inbound changes pass.
538
+ */
539
+ admit(planned) {
540
+ const graph = this.options.store.graph;
541
+ for (const op of planned.ops) {
542
+ if (op.author.kind === "system" && op.author.id === this.options.mapping.system)
543
+ continue;
544
+ for (const primitive of op.primitives) {
545
+ const node = (primitive.op === "add-node" || primitive.op === "remove-node"
546
+ ? primitive.node
547
+ : primitive.op === "patch-node"
548
+ ? graph.getNode(primitive.id)
549
+ : undefined);
550
+ if (!node)
551
+ continue;
552
+ const mapping = this.options.mapping.resources.find((resource) => resource.kind === node["kind"]);
553
+ // Judged as it was and as it would be: a patch that moves a record out of what `match` reads is still a write to it.
554
+ const was = primitive.op === "patch-node" ? { ...node, ...primitive.before } : node;
555
+ if (!mapping?.readonly || (mapping.match && !mapping.match(node) && !mapping.match(was)))
556
+ continue;
557
+ throw new PermissionDeniedError({
558
+ mutation: op.mutation?.name ?? "",
559
+ kind: mapping.kind,
560
+ message: this.because(mapping),
561
+ wouldNeed: [],
562
+ });
563
+ }
564
+ }
565
+ }
566
+ /**
567
+ * HOLDS THE STORE TO THE MAPPING: every act applied on it from now on is
568
+ * judged by `admit`, so a record the remote owns cannot be changed here
569
+ * by a person, an agent or a view, whoever calls `apply`. Returns the way
570
+ * back.
571
+ */
572
+ guard() {
573
+ const store = this.options.store;
574
+ const { applyAll, undo, permits, permittedMutations } = store;
575
+ const held = store;
576
+ const replaced = ["applyAll", "undo", "permits", "permittedMutations"].map((name) => [name, held[name], Object.prototype.hasOwnProperty.call(store, name)]);
577
+ const admitted = (options) => ({
578
+ ...options,
579
+ admit: (planned) => {
580
+ this.admit(planned);
581
+ options.admit?.(planned);
582
+ },
583
+ });
584
+ store.applyAll = (calls, options = {}) => applyAll.call(store, calls, admitted(options));
585
+ // Taking back the remote's own change to a record it owns is a write to it too (redo goes through here).
586
+ store.undo = (batchIds, options = {}) => undo.call(store, batchIds, admitted(options));
587
+ /*
588
+ * THE OFFER SAYS WHAT THE ACT WOULD MEET. The store's own answer is what
589
+ * every surface asks before it offers an act (the actions strip, the
590
+ * seat's tools, a lens's press), so a record the remote owns is refused
591
+ * there with the sentence `admit` gives, rather than offered and then
592
+ * put back.
593
+ */
594
+ store.permits = (call, principal) => {
595
+ const verdict = permits.call(store, call, principal);
596
+ const message = verdict.ok ? this.owned(call, principal) : undefined;
597
+ return message === undefined ? verdict : { ok: false, refusal: { mutation: call.name, message, wouldNeed: [] } };
598
+ };
599
+ store.permittedMutations = (principal) => permittedMutations.call(store, principal).filter((mutation) => this.ownedKindOf(mutation) === undefined);
600
+ return () => {
601
+ for (const [name, was, own] of replaced) {
602
+ if (own)
603
+ held[name] = was;
604
+ else
605
+ delete held[name];
606
+ }
607
+ };
608
+ }
609
+ /** The read-only mapping every record of this kind falls under, whatever its fields: one with no `match`. */
610
+ ownedMapping(kind) {
611
+ const mapping = this.options.mapping.resources.find((resource) => resource.kind === kind);
612
+ return mapping?.readonly && !mapping.match ? mapping : undefined;
613
+ }
614
+ /**
615
+ * THE KIND AN ACT CAN ONLY EVER WRITE when the remote owns every record of
616
+ * it: the kind a derived edit rides, its subject's kinds, or every kind it
617
+ * creates. Undefined when it could write something that is ours.
618
+ */
619
+ ownedKindOf(mutation) {
620
+ const subject = mutation.subject;
621
+ const kinds = mutation.derived
622
+ ? [mutation.derived.kind]
623
+ : subject
624
+ ? subject.kinds === "*" ? [] : subject.kinds
625
+ : mutation.creates ?? [];
626
+ return kinds.length > 0 && kinds.every((kind) => this.ownedMapping(kind)) ? kinds[0] : undefined;
627
+ }
628
+ /** Why this call would be refused as a write to a record the remote owns — said only of a record the asker sees. */
629
+ owned(call, principal) {
630
+ const store = this.options.store;
631
+ let mutation;
632
+ try {
633
+ mutation = store.mutation(call.name);
634
+ }
635
+ catch {
636
+ return undefined;
637
+ }
638
+ const id = mutation.subject ? call.args[mutation.subject.arg] : undefined;
639
+ if (typeof id === "string") {
640
+ const node = store.graph.getNode(id);
641
+ if (!node || (principal && !seesId(store, principal)(id)))
642
+ return undefined;
643
+ const mapping = this.options.mapping.resources.find((resource) => resource.kind === node["kind"]);
644
+ return mapping?.readonly && (!mapping.match || mapping.match(node)) ? this.because(mapping) : undefined;
645
+ }
646
+ const kind = this.ownedKindOf(mutation);
647
+ return kind === undefined ? undefined : this.because(this.ownedMapping(kind));
648
+ }
340
649
  }
341
650
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,YAAY,GAUb,MAAM,YAAY,CAAC;AA+CpB,wDAAwD;AACxD,SAAS,YAAY,CACnB,IAA6B,EAC7B,OAAwB;IAExB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAChB,MAAyC,EACzC,OAAwB,EACxB,GAAG,GAAG,KAAK;IAEX,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACnD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;YAAE,SAAS;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,MAA+B,EAC/B,OAAwB,EACxB,OAAgC,MAAM;IAEtC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;YAAE,SAAS;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACjG,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,OAAO,SAAS,KAAK,EAAE,CAAC;AAuC/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,CAAY;IACR,OAAO,CAAiB;IAEzC,YAAY,OAAuB,EAAE,QAAmB,gBAAgB;QACtE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB;;;;WAIG;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;IAC5C,CAAC;IAEO,UAAU,CAAC,cAAsB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CACxC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc,CAC3E,CAAC;IACJ,CAAC;IAED,4EAA4E;IACpE,OAAO,CAAC,OAAwB;QACtC,OAAO,OAAO,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,kDAAkD,CAAC;IAC7G,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1F,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED,2DAA2D;IACnD,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAqC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuE,CAAC;QAC7F,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAA+B,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAW,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;gBAAE,SAAS;YACxD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+FAA+F;IACvF,WAAW;QACjB,MAAM,KAAK,GAA+B,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACvF;;;;WAIG;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9C,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;gBAAE,SAAS;YAC1F,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBACtC,IAAI,SAAS,CAAC,EAAE,KAAK,YAAY;oBAAE,SAAS;gBAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACxH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,KAAK,CAAC,OAAO,CAAC,GAAG;gBACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,EAAE,EAAE,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;gBACxE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;aACpC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sDAAsD;IAC9C,IAAI;QACV,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxH,CAAC;IAED;;;;OAIG;IACK,OAAO;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QAC7C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAqC,CAAC;QACvE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC,CAAC;YACpF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnH,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;YACrH,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO;QAC9C,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO;QACL,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,OAAO;oBACP,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;iBAC5C,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO;gBACP,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QACD,0EAA0E;QAC1E,uEAAuE;QACvE,sEAAsE;QACtE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ;gBAAE,SAAS;YAC5E,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAyC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,KAAK,GAA+B,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAE/B,0EAA0E;QAC1E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CACzF,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAElE;;;;;;mBAMG;gBACH,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;qBAC5B,CAAC,CAAC;oBACH,IAAI,CAAC,OAAO;wBAAE,SAAS;oBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;wBAChD,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;wBACjD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,QAAQ,EAAE;qBACjE,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACrE,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrB,KAAK,CAAC,MAAM,CAAC,GAAG;4BACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,EAAE,EAAE,MAAM,CAAC,EAAE;4BACb,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC;yBAChD,CAAC;oBACJ,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAExC,CAAC;gBAEd;;;;;mBAKG;gBACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5F,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;4BAChC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;4BACjD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,aAAa,MAAM,CAAC,QAAQ,EAAE;yBACrE,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,IAAI;wBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;wBAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,OAAO,KAAK,OAAO;4BAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7F,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;oBAC/C,KAAK,GAAG,IAAI,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEzC;;;;;;mBAMG;gBACH,MAAM,KAAK,GAA4B,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAA4B,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;wBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjB,SAAS;oBACX,CAAC;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;wBACtB,kDAAkD;wBAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjB,SAAS;oBACX,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAChD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;wBACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjB,SAAS;oBACX,CAAC;oBACD,MAAM,QAAQ,GAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC1F,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;wBACxB,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC7C,kEAAkE;oBAClE,kDAAkD;oBAClD,IAAI,MAAM,KAAK,QAAQ;wBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;gBAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CACtB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EACzE;wBACE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;wBACjD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3E,CACF,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC;gBACD,KAAK,CAAC,OAAO,CAAC,GAAG;oBACf,GAAG,IAAI;oBACP,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,iEAAiE;oBACjE,iDAAiD;oBACjD,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;iBACtC,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP;;;;;;eAMG;YACH,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,sEAAsE;QACtE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAE7G;;;;WAIG;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;gBAAE,SAAS;YAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACtC;;;;;;;WAOG;QACH,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,IAAI,MAAM,GAAkB,OAAO,CAAC;QAEpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wBACd,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;wBACzD,6DAA6D;wBAC7D,2DAA2D;wBAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;4BACpE,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;4BAChD,KAAK,GAAG,IAAI,CAAC;wBACf,CAAC;wBACD,SAAS;oBACX,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACzB,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBAClD,CAAC;gBACD,qEAAqE;gBACrE,gCAAgC;gBAChC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtD,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YAC3C,KAAK;YACL,MAAM,EAAE,MAAM;YACd,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;YACnC,OAAO;YACP,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE;YACrC,QAAQ;YACR,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5C,OAAO;YACP,IAAI;YACJ,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,IAA+B;QAC/C,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,yDAAyD;IACjD,aAAa,CACnB,KAAiC,EACjC,GAAc,EACd,MAA8B;QAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO;YACL,GAAG,KAAK;YACR,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,oEAAoE;gBACpE,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,kEAAkE;gBAClE,sEAAsE;gBACtE,qEAAqE;gBACrE,qDAAqD;gBACrD,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;aAC3F;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,QAAsB,EAAE,IAAuB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,yJAAyJ;QACzJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO;QACvG,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CACtB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBACxB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE;aAC9C,CAAC,EACF;gBACE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBACjD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,iBAAiB,QAAQ,CAAC,KAAK,GAAG;aACzE,CACF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI;YACP,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE;gBACL,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;gBACnB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAClB,GAAG,IAAI;oBACP,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAsB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAqC,CAAC;QACvE,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;gBAAE,SAAS;YAC1F,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,CACX,SAAS,CAAC,EAAE,KAAK,UAAU,IAAI,SAAS,CAAC,EAAE,KAAK,aAAa;oBAC3D,CAAC,CAAC,SAAS,CAAC,IAAI;oBAChB,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,YAAY;wBAC7B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7B,CAAC,CAAC,SAAS,CACuB,CAAC;gBACzC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClG,qHAAqH;gBACrH,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpF,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAE,SAAS;gBACnG,MAAM,IAAI,qBAAqB,CAAC;oBAC9B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;oBACjC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;oBAC9B,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;QAC9D,MAAM,IAAI,GAAG,KAA2C,CAAC;QACzD,MAAM,QAAQ,GAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAU,CAAC,CAAC;QAChL,MAAM,QAAQ,GAAG,CAAC,OAAqB,EAAgB,EAAE,CAAC,CAAC;YACzD,GAAG,OAAO;YACV,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;gBACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;QACH,KAAK,CAAC,QAAQ,GAAG,CAAC,KAA8B,EAAE,UAAwB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChI,yGAAyG;QACzG,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF;;;;;;WAMG;QACH,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,EAAqB,CAAC;QACvI,CAAC,CAAC;QACF,KAAK,CAAC,kBAAkB,GAAG,CAAC,SAAS,EAAE,EAAE,CACvC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC;QAC3G,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACxC,IAAI,GAAG;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;;oBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,6GAA6G;IACrG,YAAY,CAAC,IAAY;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1F,OAAO,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,QAA+B;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,KAAK,GAAsB,QAAQ,CAAC,OAAO;YAC/C,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,OAAO;gBACP,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;gBAC5C,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,CAAC;IAED,oHAAoH;IAC5G,KAAK,CAAC,IAAkB,EAAE,SAAqB;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,QAA+B,CAAC;QACpC,IAAI,CAAC;YACH,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAwC,CAAC;YAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,OAAO,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAoB,CAAC,CAAC;IACnG,CAAC;CACF"}