@peerbit/shared-log 5.0.1 → 6.0.1

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.
@@ -9,10 +9,10 @@ import { Cache } from "@peerbit/cache";
9
9
  */
10
10
  export declare class EntryWithRefs<T> {
11
11
  entry: Entry<T>;
12
- references: Entry<T>[];
12
+ gidRefrences: string[];
13
13
  constructor(properties: {
14
14
  entry: Entry<T>;
15
- references: Entry<T>[];
15
+ gidRefrences: string[];
16
16
  });
17
17
  }
18
18
  export declare class ExchangeHeadsMessage<T> extends TransportMessage {
@@ -40,5 +40,5 @@ export declare class ResponseIPrune extends TransportMessage {
40
40
  hashes: string[];
41
41
  });
42
42
  }
43
- export declare const createExchangeHeadsMessage: (log: Log<any>, heads: Entry<any>[], gidParentCache: Cache<Entry<any>[]>) => Promise<ExchangeHeadsMessage<any>>;
43
+ export declare const createExchangeHeadsMessages: (log: Log<any>, heads: Entry<any>[], gidParentCache: Cache<Entry<any>[]>) => Promise<ExchangeHeadsMessage<any>[]>;
44
44
  export declare const allEntriesWithUniqueGids: (log: Log<any>, entry: Entry<any>, gidParentCache: Cache<Entry<any>[]>) => Promise<Entry<any>[]>;
@@ -19,10 +19,10 @@ const logger = loggerFn({ module: "exchange-heads" });
19
19
  */
20
20
  let EntryWithRefs = class EntryWithRefs {
21
21
  entry;
22
- references; // are some parents to the entry
22
+ gidRefrences; // are some parents to the entry
23
23
  constructor(properties) {
24
24
  this.entry = properties.entry;
25
- this.references = properties.references;
25
+ this.gidRefrences = properties.gidRefrences;
26
26
  }
27
27
  };
28
28
  __decorate([
@@ -30,9 +30,9 @@ __decorate([
30
30
  __metadata("design:type", Entry)
31
31
  ], EntryWithRefs.prototype, "entry", void 0);
32
32
  __decorate([
33
- field({ type: vec(Entry) }),
33
+ field({ type: vec("string") }),
34
34
  __metadata("design:type", Array)
35
- ], EntryWithRefs.prototype, "references", void 0);
35
+ ], EntryWithRefs.prototype, "gidRefrences", void 0);
36
36
  EntryWithRefs = __decorate([
37
37
  variant(0),
38
38
  __metadata("design:paramtypes", [Object])
@@ -110,20 +110,46 @@ ResponseIPrune = __decorate([
110
110
  __metadata("design:paramtypes", [Object])
111
111
  ], ResponseIPrune);
112
112
  export { ResponseIPrune };
113
- export const createExchangeHeadsMessage = async (log, heads, gidParentCache) => {
114
- const headsSet = new Set(heads);
115
- const headsWithRefs = await Promise.all(heads.map(async (head) => {
116
- const refs = (await allEntriesWithUniqueGids(log, head, gidParentCache)) // 1mb total limit split on all heads
117
- .filter((r) => !headsSet.has(r));
118
- return new EntryWithRefs({
119
- entry: head,
120
- references: refs
113
+ const MAX_EXCHANGE_MESSAGE_SIZE = 5e6; // 5mb (since stream limits are 10mb)
114
+ export const createExchangeHeadsMessages = async (log, heads, gidParentCache) => {
115
+ const messages = [];
116
+ let size = 0;
117
+ let current = [];
118
+ const visitedHeads = new Set();
119
+ for (const fromHead of heads) {
120
+ visitedHeads.add(fromHead.hash);
121
+ // TODO eventually we don't want to load all refs
122
+ // since majority of the old leader would not be interested in these anymore
123
+ const refs = (await allEntriesWithUniqueGids(log, fromHead, gidParentCache)).filter((x) => {
124
+ if (visitedHeads.has(x.hash)) {
125
+ return false;
126
+ }
127
+ visitedHeads.add(x.hash);
128
+ return true;
121
129
  });
122
- }));
123
- logger.debug(`Send latest heads of '${log.id}'`);
124
- return new ExchangeHeadsMessage({
125
- heads: headsWithRefs
126
- });
130
+ if (refs.length > 1000) {
131
+ logger.warn("Large refs count: ", refs.length);
132
+ }
133
+ current.push(new EntryWithRefs({
134
+ entry: fromHead,
135
+ gidRefrences: refs.map((x) => x.meta.gid)
136
+ }));
137
+ size += fromHead.size;
138
+ if (size > MAX_EXCHANGE_MESSAGE_SIZE) {
139
+ size = 0;
140
+ messages.push(new ExchangeHeadsMessage({
141
+ heads: current
142
+ }));
143
+ current = [];
144
+ continue;
145
+ }
146
+ }
147
+ if (current.length > 0) {
148
+ messages.push(new ExchangeHeadsMessage({
149
+ heads: current
150
+ }));
151
+ }
152
+ return messages;
127
153
  };
128
154
  export const allEntriesWithUniqueGids = async (log, entry, gidParentCache) => {
129
155
  const cachedValue = gidParentCache.get(entry.hash);
@@ -142,7 +168,8 @@ export const allEntriesWithUniqueGids = async (log, entry, gidParentCache) => {
142
168
  for (const next of element.meta.next) {
143
169
  const indexedEntry = log.entryIndex.getShallow(next);
144
170
  if (!indexedEntry) {
145
- logger.error("Failed to find indexed entry for hash: " + next);
171
+ logger.error("Failed to find indexed entry for hash when fetching references: " +
172
+ next);
146
173
  }
147
174
  else {
148
175
  nexts.push(indexedEntry);
@@ -1 +1 @@
1
- {"version":3,"file":"exchange-heads.js","sourceRoot":"","sources":["../../src/exchange-heads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exchange-heads.js","sourceRoot":"","sources":["../../src/exchange-heads.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,6 @@ import yallist from "yallist";
10
10
  import { PIDReplicationController, ReplicationErrorFunction } from "./pid.js";
11
11
  export type { ReplicationErrorFunction };
12
12
  export * from "./replication.js";
13
- import PQueue from "p-queue";
14
13
  export { Observer, Replicator, Role };
15
14
  export declare const logger: import("pino").Logger<never>;
16
15
  export type ReplicationLimitsOptions = Partial<ReplicationLimits> | {
@@ -40,6 +39,7 @@ export type SharedLogOptions<T> = {
40
39
  canReplicate?: (publicKey: PublicSignKey) => Promise<boolean> | boolean;
41
40
  sync?: (entry: Entry<T>) => boolean;
42
41
  timeUntilRoleMaturity?: number;
42
+ waitForReplicatorTimeout?: number;
43
43
  };
44
44
  export declare const DEFAULT_MIN_REPLICAS = 2;
45
45
  export declare const WAIT_FOR_REPLICATOR_TIMEOUT = 9000;
@@ -78,8 +78,10 @@ export declare class SharedLog<T = Uint8Array> extends Program<Args<T>, SharedLo
78
78
  private openTime;
79
79
  private sync?;
80
80
  private rebalanceParticipationDebounced;
81
+ private distributeInterval;
81
82
  replicas: ReplicationLimits;
82
83
  timeUntilRoleMaturity: number;
84
+ waitForReplicatorTimeout: number;
83
85
  constructor(properties?: {
84
86
  id?: Uint8Array;
85
87
  });
@@ -135,8 +137,8 @@ export declare class SharedLog<T = Uint8Array> extends Program<Args<T>, SharedLo
135
137
  timeout?: number;
136
138
  unchecked?: boolean;
137
139
  }): Promise<any>[];
138
- _queue: PQueue;
139
- distribute(): Promise<void>;
140
+ private _queue;
141
+ distribute(): Promise<false | void>;
140
142
  _distribute(): Promise<false | undefined>;
141
143
  _onUnsubscription(evt: CustomEvent<UnsubcriptionEvent>): Promise<void>;
142
144
  _onSubscription(evt: CustomEvent<SubscriptionEvent>): Promise<void>;
@@ -147,6 +149,5 @@ export declare class SharedLog<T = Uint8Array> extends Program<Args<T>, SharedLo
147
149
  }[];
148
150
  addToHistory(usedMemory: number, factor: number): Promise<void>;
149
151
  calculateTrend(): Promise<number>;
150
- xxx: number;
151
152
  rebalanceParticipation(onRoleChange?: boolean): Promise<boolean>;
152
153
  }
package/lib/esm/index.js CHANGED
@@ -14,7 +14,7 @@ import { Program } from "@peerbit/program";
14
14
  import { BinaryWriter, BorshError, field, variant } from "@dao-xyz/borsh";
15
15
  import { AccessError, sha256, sha256Base64Sync } from "@peerbit/crypto";
16
16
  import { logger as loggerFn } from "@peerbit/logger";
17
- import { ExchangeHeadsMessage, RequestIPrune, ResponseIPrune, createExchangeHeadsMessage } from "./exchange-heads.js";
17
+ import { ExchangeHeadsMessage, RequestIPrune, ResponseIPrune, createExchangeHeadsMessages } from "./exchange-heads.js";
18
18
  import { AbortError, waitFor } from "@peerbit/time";
19
19
  import { Observer, Replicator, Role } from "./role.js";
20
20
  import { AbsoluteReplicas, ReplicationError, RequestRoleMessage, ResponseRoleMessage, decodeReplicas, encodeReplicas, hashToUniformNumber, maxReplicas } from "./replication.js";
@@ -22,7 +22,7 @@ import pDefer from "p-defer";
22
22
  import { Cache } from "@peerbit/cache";
23
23
  import { CustomEvent } from "@libp2p/interface";
24
24
  import yallist from "yallist";
25
- import { AcknowledgeDelivery, SeekDelivery, SilentDelivery } from "@peerbit/stream-interface";
25
+ import { AcknowledgeDelivery, SeekDelivery, SilentDelivery, NotStartedError } from "@peerbit/stream-interface";
26
26
  import { AnyBlockStore, RemoteBlocks } from "@peerbit/blocks";
27
27
  import { BlocksMessage } from "./blocks.js";
28
28
  import debounce from "p-debounce";
@@ -81,8 +81,10 @@ let SharedLog = class SharedLog extends Program {
81
81
  openTime;
82
82
  sync;
83
83
  rebalanceParticipationDebounced;
84
+ distributeInterval;
84
85
  replicas;
85
86
  timeUntilRoleMaturity;
87
+ waitForReplicatorTimeout;
86
88
  constructor(properties) {
87
89
  super();
88
90
  this.log = new Log(properties);
@@ -95,7 +97,8 @@ let SharedLog = class SharedLog extends Program {
95
97
  return this._totalParticipation;
96
98
  }
97
99
  setupRebalanceDebounceFunction() {
98
- this.rebalanceParticipationDebounced = debounce(() => this.rebalanceParticipation(), Math.max(REBALANCE_DEBOUNCE_INTERVAL, (this.getReplicatorsSorted()?.length || 0) * REBALANCE_DEBOUNCE_INTERVAL));
100
+ this.rebalanceParticipationDebounced = debounce(() => this.rebalanceParticipation(), Math.max(REBALANCE_DEBOUNCE_INTERVAL, Math.log((this.getReplicatorsSorted()?.length || 0) *
101
+ REBALANCE_DEBOUNCE_INTERVAL)));
99
102
  }
100
103
  setupRole(options) {
101
104
  this.rebalanceParticipationDebounced = undefined;
@@ -194,16 +197,28 @@ let SharedLog = class SharedLog extends Program {
194
197
  }
195
198
  const result = await this.log.append(data, appendOptions);
196
199
  let mode = undefined;
197
- if (options?.target === "replicators" || !options?.target) {
198
- const leaders = await this.findLeaders(result.entry.meta.gid, decodeReplicas(result.entry).getValue(this));
199
- const isLeader = leaders.includes(this.node.identity.publicKey.hashcode());
200
- mode = isLeader
201
- ? new SilentDelivery({ redundancy: 1, to: leaders })
202
- : new AcknowledgeDelivery({ redundancy: 1, to: leaders });
200
+ for (const message of await createExchangeHeadsMessages(this.log, [result.entry], this._gidParentCache)) {
201
+ if (options?.target === "replicators" || !options?.target) {
202
+ const minReplicas = decodeReplicas(result.entry).getValue(this);
203
+ let leaders = await this.findLeaders(result.entry.meta.gid, minReplicas);
204
+ const isLeader = leaders.includes(this.node.identity.publicKey.hashcode());
205
+ if (message.heads[0].gidRefrences.length > 0) {
206
+ const newAndOldLeaders = new Set(leaders);
207
+ for (const ref of message.heads[0].gidRefrences) {
208
+ for (const hash of await this.findLeaders(ref, minReplicas)) {
209
+ newAndOldLeaders.add(hash);
210
+ }
211
+ }
212
+ leaders = newAndOldLeaders;
213
+ }
214
+ mode = isLeader
215
+ ? new SilentDelivery({ redundancy: 1, to: leaders })
216
+ : new AcknowledgeDelivery({ redundancy: 1, to: leaders });
217
+ }
218
+ await this.rpc.send(message, {
219
+ mode
220
+ });
203
221
  }
204
- await this.rpc.send(await createExchangeHeadsMessage(this.log, [result.entry], this._gidParentCache), {
205
- mode
206
- });
207
222
  this.rebalanceParticipationDebounced?.();
208
223
  return result;
209
224
  }
@@ -227,6 +242,8 @@ let SharedLog = class SharedLog extends Program {
227
242
  this.openTime = +new Date();
228
243
  this.timeUntilRoleMaturity =
229
244
  options?.timeUntilRoleMaturity || WAIT_FOR_ROLE_MATURITY;
245
+ this.waitForReplicatorTimeout =
246
+ options?.waitForReplicatorTimeout || WAIT_FOR_REPLICATOR_TIMEOUT;
230
247
  this._gidParentCache = new Cache({ max: 1000 });
231
248
  this._closeController = new AbortController();
232
249
  this._canReplicate = options?.canReplicate;
@@ -307,6 +324,12 @@ let SharedLog = class SharedLog extends Program {
307
324
  this._onUnsubscriptionFn = this._onUnsubscription.bind(this);
308
325
  await this.node.services.pubsub.addEventListener("unsubscribe", this._onUnsubscriptionFn);
309
326
  await this.log.load();
327
+ // TODO (do better)
328
+ // we do this distribution interval to eliminate the sideeffects arriving from updating roles and joining entries continously.
329
+ // an alternative to this would be to call distribute/maybe prune after every join if our role has changed
330
+ this.distributeInterval = setInterval(() => {
331
+ this.distribute();
332
+ }, 7.5 * 1000);
310
333
  }
311
334
  async afterOpen() {
312
335
  await super.afterOpen();
@@ -328,6 +351,7 @@ let SharedLog = class SharedLog extends Program {
328
351
  return this.log.idString;
329
352
  }
330
353
  async _close() {
354
+ clearInterval(this.distributeInterval);
331
355
  this._closeController.abort();
332
356
  this.node.services.pubsub.removeEventListener("subscribe", this._onSubscriptionFn);
333
357
  this._onUnsubscriptionFn = this._onUnsubscription.bind(this);
@@ -424,13 +448,13 @@ let SharedLog = class SharedLog extends Program {
424
448
  }
425
449
  outer: for (const entry of entries) {
426
450
  if (isLeader || this.sync?.(entry.entry)) {
427
- toMerge.push(entry);
451
+ toMerge.push(entry.entry);
428
452
  }
429
453
  else {
430
- for (const ref of entry.references) {
431
- const map = this.log.headsIndex.gids.get(await ref.getGid());
454
+ for (const ref of entry.gidRefrences) {
455
+ const map = this.log.headsIndex.gids.get(ref);
432
456
  if (map && map.size > 0) {
433
- toMerge.push(entry);
457
+ toMerge.push(entry.entry);
434
458
  (toDelete || (toDelete = [])).push(entry.entry);
435
459
  continue outer;
436
460
  }
@@ -544,7 +568,7 @@ let SharedLog = class SharedLog extends Program {
544
568
  }
545
569
  this.waitFor(context.from, {
546
570
  signal: this._closeController.signal,
547
- timeout: WAIT_FOR_REPLICATOR_TIMEOUT
571
+ timeout: this.waitForReplicatorTimeout
548
572
  })
549
573
  .then(async () => {
550
574
  const prev = this.latestRoleMessages.get(context.from.hashcode());
@@ -558,6 +582,9 @@ let SharedLog = class SharedLog extends Program {
558
582
  if (e instanceof AbortError) {
559
583
  return;
560
584
  }
585
+ if (e instanceof NotStartedError) {
586
+ return;
587
+ }
561
588
  logger.error("Failed to find peer who updated their role: " + e?.message);
562
589
  });
563
590
  }
@@ -600,7 +627,7 @@ let SharedLog = class SharedLog extends Program {
600
627
  const isLeader = (await this.findLeaders(slot, numberOfLeaders, options)).find((l) => l === this.node.identity.publicKey.hashcode());
601
628
  return !!isLeader;
602
629
  }
603
- async waitForIsLeader(slot, numberOfLeaders, timeout = WAIT_FOR_REPLICATOR_TIMEOUT) {
630
+ async waitForIsLeader(slot, numberOfLeaders, timeout = this.waitForReplicatorTimeout) {
604
631
  return new Promise((res, rej) => {
605
632
  const removeListeners = () => {
606
633
  this.events.removeEventListener("role", roleListener);
@@ -1022,7 +1049,7 @@ let SharedLog = class SharedLog extends Program {
1022
1049
  if (this._queue?.size > 0) {
1023
1050
  return this._queue.onEmpty();
1024
1051
  }
1025
- (this._queue || (this._queue = new PQueue({ concurrency: 1 }))).add(() => this._distribute());
1052
+ return (this._queue || (this._queue = new PQueue({ concurrency: 1 }))).add(() => this._distribute());
1026
1053
  }
1027
1054
  async _distribute() {
1028
1055
  /**
@@ -1087,10 +1114,10 @@ let SharedLog = class SharedLog extends Program {
1087
1114
  }
1088
1115
  for (const [target, entries] of uncheckedDeliver) {
1089
1116
  // TODO better choice of step size
1090
- for (let i = 0; i < entries.length; i += 100) {
1091
- const message = await createExchangeHeadsMessage(this.log, entries.slice(i, i + 100), this._gidParentCache);
1092
- // TODO perhaps send less messages to more receivers for performance reasons?
1093
- // TODO wait for previous send to target before trying to send more?
1117
+ const messages = await createExchangeHeadsMessages(this.log, entries, this._gidParentCache);
1118
+ // TODO perhaps send less messages to more receivers for performance reasons?
1119
+ // TODO wait for previous send to target before trying to send more?
1120
+ for (const message of messages) {
1094
1121
  this.rpc.send(message, {
1095
1122
  mode: new SilentDelivery({ to: [target], redundancy: 1 })
1096
1123
  });
@@ -1142,13 +1169,9 @@ let SharedLog = class SharedLog extends Program {
1142
1169
  return (factorChanges.reduce((sum, change) => sum + change, 0) /
1143
1170
  factorChanges.length);
1144
1171
  }
1145
- xxx;
1146
1172
  async rebalanceParticipation(onRoleChange = true) {
1147
1173
  // update more participation rate to converge to the average expected rate or bounded by
1148
1174
  // resources such as memory and or cpu
1149
- const t = +new Date();
1150
- // console.log(t - this.xxx)
1151
- this.xxx = t;
1152
1175
  if (this.closed) {
1153
1176
  return false;
1154
1177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAkB,GAAG,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAEN,KAAK,EACL,GAAG,EAIH,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACN,WAAW,EAEX,MAAM,EACN,gBAAgB,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAEN,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAGhB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,MAA2B,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EACN,mBAAmB,EAEnB,YAAY,EACZ,cAAc,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAA4B,MAAM,UAAU,CAAC;AAE9E,cAAc,kBAAkB,CAAC;AACjC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAEzD,MAAM,UAAU,GAAG,KAAK,EACvB,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,YAAY,KAAK;YACvC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxB,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AA6BF,MAAM,0BAA0B,GAAG,CAClC,OAA2D,EACpB,EAAE;IACzC,IACE,OAAqC,CAAC,MAAM;QAC5C,OAAqC,CAAC,KAAK;QAC3C,OAAkC,CAAC,MAAM,IAAI,IAAI,EACjD,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAejC,IAAM,SAAS,GAAf,MAAM,SAA0B,SAAQ,OAG9C;IAEA,GAAG,CAAS;IAGZ,GAAG,CAA0C;IAE7C,UAAU;IACF,KAAK,CAAwB;IAC7B,YAAY,CAAoD;IAChE,iBAAiB,CAAsC;IACvD,mBAAmB,CAAS;IAC5B,gBAAgB,CAA2B;IAE3C,iBAAiB,CAAoB;IACrC,mBAAmB,CAAoB;IAEvC,aAAa,CAGW;IAExB,cAAc,CAAmC;IACjD,gBAAgB,CAAkB;IAClC,eAAe,CAAsB;IACrC,sBAAsB,CAAC;IACvB,eAAe,CAQrB;IAEM,aAAa,CAGnB;IAEM,kBAAkB,CAAsB;IAExC,YAAY,CAAe;IAE3B,QAAQ,CAAS;IAEjB,IAAI,CAAgC;IAEpC,+BAA+B,CAE1B;IAEb,QAAQ,CAAoB;IAE5B,qBAAqB,CAAS;IAE9B,YAAY,UAAgC;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,kBAAkB;QACrB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACjC,CAAC;IAEO,8BAA8B;QACrC,IAAI,CAAC,+BAA+B,GAAG,QAAQ,CAC9C,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,EACnC,IAAI,CAAC,GAAG,CACP,2BAA2B,EAC3B,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,2BAA2B,CACxE,CACD,CAAC;IACH,CAAC;IACO,SAAS,CAAC,OAAqB;QACtC,IAAI,CAAC,+BAA+B,GAAG,SAAS,CAAC;QAEjD,MAAM,yBAAyB,GAAG,CAAC,OAAmC,EAAE,EAAE;YACzE,IAAI,CAAC,qBAAqB,GAAG,IAAI,wBAAwB,CACxD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EACvC;gBACC,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;gBAC1C,aAAa,EAAE,OAAO,EAAE,KAAK;aAC7B,CACD,CAAC;YAEF,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACvC,CAAC,CAAC;QAEF,IAAI,OAAO,YAAY,QAAQ,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YACrC,yBAAyB,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACnC,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzC,yBAAyB,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,UAAU,CAAC;wBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;qBAC/D,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;YACpC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,iBAAiB;YACjB,yBAAyB,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC5C,CAAC;QAED,yBAAyB;QAEzB,IACC,IAAI,CAAC,YAAY,YAAY,UAAU;YACvC,IAAI,CAAC,YAAY,YAAY,QAAQ,EACpC,CAAC;YACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAqC,CAAC;QACzD,CAAC;aAAM,CAAC;YACP,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC;oBAC3B,kCAAkC;oBAClC,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC;oBAC3B,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAiB,EAAE,YAAY,GAAG,IAAI;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,WAAW,CACxB,OAA8B,IAAI,CAAC,KAAK,EACxC,YAAY,GAAG,IAAI;QAEnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAChD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC5B,CAAC;QAEF,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;YAClE,IAAI,EAAE,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,CAAC;aACb,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,YAAY,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CACX,IAAO,EACP,OAA4C;QAK5C,MAAM,aAAa,GAAqB,EAAE,GAAG,OAAO,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,cAAc,CACrC,OAAO,EAAE,QAAQ;YAChB,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;gBACrC,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,OAAO,CAAC,QAAQ;YACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CACpB,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,GAAG;gBACpB,IAAI,EAAE,eAAe;aACrB,CAAC;QACH,CAAC;aAAM,CAAC;YACP,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,IAAI,GAA6B,SAAS,CAAC;QAE/C,IAAI,OAAO,EAAE,MAAM,KAAK,aAAa,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EACrB,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3C,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CACvC,CAAC;YACF,IAAI,GAAG,QAAQ;gBACd,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;gBACpD,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAClB,MAAM,0BAA0B,CAC/B,IAAI,CAAC,GAAG,EACR,CAAC,MAAM,CAAC,KAAK,CAAC,EACd,IAAI,CAAC,eAAe,CACpB,EACD;YACC,IAAI;SACJ,CACD,CAAC;QAEF,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC;QAEzC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG;YACf,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;gBAC1B,CAAC,CAAC,OAAO,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,QAAQ;oBAC3C,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;oBAC9C,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG;gBACzB,CAAC,CAAC,IAAI,gBAAgB,CAAC,oBAAoB,CAAC;YAC7C,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;gBAC1B,CAAC,CAAC,OAAO,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,QAAQ;oBAC3C,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;oBAC9C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBACvB,CAAC,CAAC,SAAS;SACZ,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,qBAAqB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,qBAAqB;QAChG,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,qBAAqB;YACzB,OAAO,EAAE,qBAAqB,IAAI,sBAAsB,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,YAAY,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEpD,MAAM,WAAW,GAAG,MAAM,IAAI,aAAa,CAC1C,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChC,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACpC,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;gBACzC,IAAI,EAAE,OAAO,EAAE,EAAE;oBAChB,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;oBACvD,CAAC,CAAC,SAAS;aACZ,CAAC;YACH,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACxC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAEhC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;YACrC,GAAG,IAAI,CAAC,cAAc;YACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACpB,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBAClC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC9C,IAAI,EAAE,EAAE,CAAC;4BACR,EAAE,CAAC,KAAK,EAAE,CAAC;4BACX,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACpB,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;YACD,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1B,IAAI,CAAC;oBACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;wBAC1D,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;wBACzC,OAAO,KAAK,CAAC;oBACd,CAAC;oBAED,2EAA2E;oBAC3E,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;wBAChE,OAAO,KAAK,CAAC;oBACd,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IACC,KAAK,YAAY,UAAU;wBAC3B,KAAK,YAAY,gBAAgB,EAChC,CAAC;wBACF,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;wBACpE,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM,KAAK,CAAC;gBACb,CAAC;gBAED,OAAO,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;YACxD,CAAC;YACD,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI;gBAClC,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI;aAC5B;YACD,KAAK,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,SAAS,EAAE,gBAAgB;YAC3B,YAAY,EAAE,gBAAgB;YAC9B,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAC/C,WAAW,EACX,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAC/C,aAAa,EACb,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS;QACd,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAExB,qEAAqE;QACrE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEpC,0CAA0C;QAC1C,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CACpE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACR,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5C,OAAO;YACR,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC,CACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,cAAc;QACnB,OAAO,CACN,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACvE,CAAC;IACH,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,MAAM;QACnB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAC5C,WAAW,EACX,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAC5C,aAAa,EACb,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,kBAAkB;QACxC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,CAAC,CAAC,KAAK,EAAE,CAAC;QACX,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAEhC,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAc;QACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,WAAW,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAc;QACxB,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,YAAY,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,UAAU,CACf,GAAqB,EACrB,OAAuB;QAEvB,IAAI,CAAC;YACJ,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;gBACzC;;;mBAGG;gBAEH,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;gBAEtB,MAAM,CAAC,KAAK,CACX,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,qBACzC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,MACxD,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAC/B,CAAC;gBACF,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,aAAa,GAAyB,EAAE,CAAC;oBAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gCACf,yDAAyD;gCACzD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;gCAC3B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;6BAC3B,CAAC,CAAC;4BACH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC1B,CAAC;oBACF,CAAC;oBAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAChC,OAAO;oBACR,CAAC;oBAED,MAAM,OAAO,GAAyB,EAAE,CAAC;oBACzC,IAAI,QAAQ,GAA6B,SAAS,CAAC;oBACnD,IAAI,WAAW,GAAuC,SAAS,CAAC;oBAEhE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAoB,EAAE,CAAC;oBAErC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;wBAC3C,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;4BACrB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAEvD,MAAM,mBAAmB,GACxB,YAAY,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;gCACpC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;gCAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;4BAErC,MAAM,yBAAyB,GAAG,WAAW,CAC5C,IAAI,EACJ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAC3B,CAAC;4BAEF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,QAAQ;gCACnD,CAAC,CAAC,IAAI,CAAC,WAAW,CAChB,GAAG,EACH,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,CACxD;gCACF,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,GAAG,EACH,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,CACxD,CAAC,CAAC;4BACL,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;4BAC3B,IAAI,QAAQ,EAAE,CAAC;gCACd,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oCACzD,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oCAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;wCACd,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;wCACpB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oCACzC,CAAC;oCACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gCACvC,CAAC;gCAED,IAAI,yBAAyB,GAAG,mBAAmB,EAAE,CAAC;oCACrD,CAAC,WAAW,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACnD,CAAC;4BACF,CAAC;4BAED,KAAK,EAAE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gCACpC,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oCAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gCACrB,CAAC;qCAAM,CAAC;oCACP,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wCACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CACvC,MAAM,GAAG,CAAC,MAAM,EAAE,CAClB,CAAC;wCACF,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;4CACzB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4CACpB,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4CAChD,SAAS,KAAK,CAAC;wCAChB,CAAC;oCACF,CAAC;gCACF,CAAC;gCAED,MAAM,CAAC,KAAK,CACX,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,8BACzC,KAAK,CAAC,KAAK,CAAC,GACb,sBAAsB,CACtB,CAAC;4BACH,CAAC;wBACF,CAAC,CAAC;wBACF,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACrB,CAAC;oBACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAE5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjB,OAAO;oBACR,CAAC;oBAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC7B,QAAQ;4BACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gCAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;4BAC3B,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC;oBAC1C,CAAC;oBAED,IAAI,WAAW,EAAE,CAAC;wBACjB,KAAK,MAAM,OAAO,IAAI,WAAqC,EAAE,CAAC;4BAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAChD,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CACzB,CAAC;4BACF,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gCAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;gCAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CACnC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EACzB,WAAW,CACX,CAAC;gCAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;oCACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACzD,CAAC,CAAC,EAAE,EAAE;wCACL,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oCAC3B,CAAC,CACD,CAAC;gCACH,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACzC,MAAM,cAAc,GAAa,EAAE,CAAC;gBAEpC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC1D,IACC,YAAY;wBACZ,CAAC,MAAM,IAAI,CAAC,QAAQ,CACnB,YAAY,CAAC,IAAI,CAAC,GAAG,EACrB,cAAc,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3C,CAAC,EACD,CAAC;wBACF,IAAI,CAAC,gBAAgB;6BACnB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;4BAC3B,EAAE,MAAM,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACpC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACP,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACtD,MAAM,YAAY,GAAG;4BACpB,KAAK,EAAE,GAAG,EAAE;gCACX,YAAY,CAAC,OAAO,CAAC,CAAC;gCACtB,gBAAgB,EAAE,KAAK,EAAE,CAAC;4BAC3B,CAAC;4BACD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gCACzB,IACC,MAAM,IAAI,CAAC,QAAQ,CAClB,KAAK,CAAC,IAAI,CAAC,GAAG,EACd,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpC,EACA,CAAC;oCACF,IAAI,CAAC,gBAAgB;yCACnB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;wCACpB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oCACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wCAC3D,IAAI,EAAE,IAAI,cAAc,CAAC;4CACxB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAK,CAAC;4CACnB,UAAU,EAAE,CAAC;yCACb,CAAC;qCACF,CAAC,CAAC;gCACJ,CAAC;gCAED,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gCACrD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BACvC,CAAC;yBACD,CAAC;wBACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;4BAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BACrD,IAAI,YAAY,KAAK,eAAe,EAAE,CAAC;gCACtC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;4BACjC,CAAC;wBACF,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;wBAEhC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC5C,CAAC;gBACF,CAAC;gBAED,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE;oBACnE,IAAI,EAAE,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;iBAChE,CAAC,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAC1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;iBAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACxD,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvD,OAAO;gBACR,CAAC;gBAED,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;oBACjE,IAAI,EAAE,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;iBAChE,CAAC,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACxD,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvD,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;oBAC1B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;oBACpC,OAAO,EAAE,2BAA2B;iBACpC,CAAC;qBACA,IAAI,CAAC,KAAK,IAAI,EAAE;oBAChB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACnE,IAAI,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;wBACtC,OAAO;oBACR,CAAC;oBACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAC1B,OAAO,CAAC,IAAK,CAAC,QAAQ,EAAE,EACxB,OAAO,CAAC,SAAS,CACjB,CAAC;oBAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAK,CAAC,CAAC;gBACvD,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACZ,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;wBAC7B,OAAO;oBACR,CAAC;oBACD,MAAM,CAAC,KAAK,CACX,8CAA8C,GAAG,CAAC,EAAE,OAAO,CAC3D,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;gBAC7B,OAAO;YACR,CAAC;YAED,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CACX,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,wCAAwC,IAAI,CAAC,SAAS,CAC/F,IAAI,CAAC,GAAG,CAAC,QAAQ,CACjB,yCAAyC,CAC1C,CAAC;gBACF,OAAO;YACR,CAAC;YAED,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CACX,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,uCAAuC,IAAI,CAAC,SAAS,CAC9F,IAAI,CAAC,GAAG,CAAC,QAAQ,CACjB,2BAA2B,CAC5B,CAAC;gBACF,OAAO;YACR,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IAED,oBAAoB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAG,IAAqB;QAC/C,MAAM,KAAK,GAAG,GAAG,EAAE;YAClB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACtB,IACC,CAAC,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,EAAE,OAAO,EAAE;oBACX,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpC,CAAC;oBACF,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,QAAQ,CACb,IAA4B,EAC5B,eAAuB,EACvB,OAGC;QAED,MAAM,QAAQ,GAAG,CAChB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CACtD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,eAAe,CAC5B,IAA4B,EAC5B,eAAuB,EACvB,OAAO,GAAG,2BAA2B;QAErC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,eAAe,GAAG,GAAG,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACvE,CAAC,CAAC;YACF,MAAM,aAAa,GAAG,GAAG,EAAE;gBAC1B,eAAe,EAAE,CAAC;gBAClB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,eAAe,EAAE,CAAC;gBAClB,GAAG,CAAC,KAAK,CAAC,CAAC;YACZ,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,MAAM,KAAK,GAAG,GAAG,EAAE,CAClB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CACpD,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACd,eAAe,EAAE,CAAC;oBAClB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,GAAG,CAAC,OAAO,CAAC,CAAC;gBACd,CAAC;YACF,CAAC,CAAC,CAAC;YAEJ,MAAM,YAAY,GAAG,GAAG,EAAE;gBACzB,KAAK,EAAE,CAAC;YACT,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAEtE,KAAK,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,OAA+B,EAC/B,eAAuB,EACvB,OAEC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,yFAAyF;QAC5I,CAAC;QAED,8FAA8F;QAC9F,kHAAkH;QAElH,2FAA2F;QAC3F,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjD,mCAAmC;QACnC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;QACpE,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAEO,uBAAuB,CAC9B,IAAY,EACZ,OAAe,EACf,KAA8B,EAC9B,WAAgD,EAChD,KAAa,EACb,SAAsB,EACtB,KAAmB,EACnB,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,EAClB,YAA4C,GAAG,EAAE,GAAE,CAAC;QAEpD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,qBAAqB,GAAG,CAAC,IAAgB,EAAE,EAAE;YAClD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC;gBAC7C,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC;YACb,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAEF,gDAAgD;QAChD,MAAM,SAAS,GAAG,WAAW,CAAC;QAC9B,MAAM,KAAK,GAA6C,EAAE,CAAC;QAC3D,OAAO,WAAW,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;YAElD,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;gBACxD,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtD,IAAI,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EACH,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;wBAChC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;wBACtC,CAAC,CAAC,MAAM,CAAC,gBAAgB;oBAC3B,IAAI,EAAE,WAAW,CAAC,KAAK;iBACvB,CAAC,CAAC;YACJ,CAAC;YAED,WAAW,GAAG,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;YAE7C,IACC,WAAW,EAAE,KAAK,CAAC,SAAS;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAC9D,CAAC;gBACF,MAAM,CAAC,oDAAoD;YAC5D,CAAC;QACF,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBACjB,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAEO,4BAA4B,CACnC,MAAc,EACd,eAAuB,EACvB,OAEC;QAED,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACX,CAAC;QACD,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1D,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,OAAO,GACZ,OAAO,EAAE,OAAO;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,uBAAuB,CAC3B,CAAC,EACD,OAAO,EACP,KAAK,EACL,WAAW,EACX,KAAK,EACL,OAAO,EACP,GAAG,EAAE,CAAC,KAAK,CACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,UAAkB,IAAI,CAAC,qBAAqB;QAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,4BAA4B;QAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,oCAAoC;QAErD,wCAAwC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAG,CAAC,CAAC,aAAa;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC3B,KAAK,CAAC,MAAM,EACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAChC,CAAC;QAEF,sBAAsB;QACtB,uFAAuF;QACvF,kFAAkF;QAClF,+BAA+B;QAC/B,MAAM,aAAa,GAAG,KAAK,GAAG,WAAW,CAAC;QAE1C,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;YACrC,kCAAkC;YAClC,OAAO,MAAM,EAAE,CAAC;gBACf,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjE,MAAM;gBACP,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,0BAA0B;YACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAM;gBACP,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,CAAC;QACF,CAAC;QAED,MAAM,GAAG,GAAgB,IAAI,GAAG,EAAE,CAAC;QACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,CAC3B,CAAC,EACD,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,EACH,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,QAAQ,IAAI,aAAa,EAC/B,CAAC,IAAI,EAAE,EAAE;YACR,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,SAAS,GAAG,CAAC,SAAS,GAAG,MAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC7D,CAAC,CACD,CAAC;QAEF,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU,CACf,KAAiB,EACjB,OAGC;QAED,OAAO,IAAI,CAAC,QAAQ,CACnB,KAAK,CAAC,GAAG,EACT,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpC,OAAO,CACP,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAA2B,EAAE,SAAwB;QACzE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBACnC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;YAEtC,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACrB,YAAY,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,aAAa,CACxB,IAAI,WAAW,CAAkB,MAAM,EAAE;YACxC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;SAC3B,CAAC,CACF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC9B,IAA2B,EAC3B,SAAwB;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChE,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACvC,CAAC;YAED,MAAM,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,+CAA+C;YAC/F,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;oBAClE,IAAI,EAAE,IAAI,YAAY,CAAC;wBACtB,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;wBAC1B,UAAU,EAAE,CAAC;qBACb,CAAC;iBACF,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC/B,IAA2B,EAC3B,SAAwB;QAKxB,IACC,IAAI,YAAY,UAAU;YAC1B,IAAI,CAAC,aAAa;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAC3C,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,YAAY,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,sCAAsC;YACtC,iCAAiC;YAEjC,MAAM,QAAQ,GACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC9C,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;qBACtE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;qBAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAEvB,IAAI,QAAQ,EAAE,CAAC;gBACd,wCAAwC;gBACxC,MAAM,IAAI,GAAmB;oBAC5B,SAAS;oBACT,IAAI;iBACJ,CAAC;gBAEF,IAAI,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;gBAClC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC7C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACP,OAAO,WAAW,EAAE,CAAC;wBACpB,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;4BACnD,mBAAmB;4BACnB,gDAAgD;4BAChD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;4BAC/B,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;4BACzB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;4BAC7C,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;4BAC7C,0DAA0D;4BAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;wBAChD,CAAC;wBAED,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;4BACjD,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC;4BAC/B,IAAI,IAAI,EAAE,CAAC;gCACV,WAAW,GAAG,IAAI,CAAC;gCACnB,SAAS;4BACV,CAAC;iCAAM,CAAC;gCACP,MAAM;4BACP,CAAC;wBACF,CAAC;6BAAM,CAAC;4BACP,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;4BAC/B,MAAM;wBACP,CAAC;oBACF,CAAC;oBAED,MAAM,IAAI,GAAG,WAAW,CAAC;oBACzB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpD,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC7C,YAAY,CAAC,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC/B,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC7B,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5B,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;YAClC,OAAO,WAAW,EAAE,CAAC;gBACpB,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnD,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBACnC,IAAI,CAAC,mBAAmB,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC1D,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBAC7D,CAAC;gBACD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;YAChC,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC7B,SAAwB,EACxB,OAAiB,EACjB,UAAmB;QAEnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACjC,SAAS;YACV,CAAC;QACF,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG;qBACN,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;oBACpD,IAAI,EAAE,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;iBAC1D,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;IACF,CAAC;IAED,KAAK,CACJ,OAAqB,EACrB,OAAmD;QAEnD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;oBACzB,WAAW,EAAE,IAAI;iBACjB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,uCAAuC;QACvC,qBAAqB;QAErB,kDAAkD;QAElD,oIAAoI;QACpI,6KAA6K;QAC7K,2EAA2E;QAE3E,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,MAAM,eAAe,GAAiB,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,WAAW,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3C,SAAS;YACV,CAAC;YACD,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,eAAe,GAA0B,MAAM,EAAE,CAAC;YAExD,MAAM,KAAK,GAAG,GAAG,EAAE;gBAClB,uBAAuB;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC;oBACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACpB,KAAK,EAAE,CAAC;gBACR,eAAe,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,CAAM,EAAE,EAAE;gBACzB,KAAK,EAAE,CAAC;gBACR,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,UAAU,CACzB,GAAG,EAAE;gBACJ,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAClD,CAAC,EACD,OAAO,EAAE,OAAO,IAAI,EAAE,GAAG,IAAI,CAC7B,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;gBACpC,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,GAAG,EAAE;oBACX,KAAK,EAAE,CAAC;gBACT,CAAC;gBACD,MAAM;gBACN,OAAO,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;oBACxC,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACpD,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG;wBAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC9D,CAAC,CAAC,gBAAgB,CAAC;oBAEpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,KAAK,CAAC,GAAG,EACT,mBAAmB,CACnB,CAAC;oBAEF,IACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EACjE,CAAC;wBACF,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;wBACjD,OAAO;oBACR,CAAC;oBAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,EAAE,CAAC;wBAC9C,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBAChC,IAAI,mBAAmB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;4BAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAC7C,IAAI,CAAC,GAAG;iCACN,MAAM,CAAC,KAAK,EAAE;gCACd,WAAW,EAAE,IAAI;6BACjB,CAAC;iCACD,IAAI,CAAC,GAAG,EAAE;gCACV,OAAO,EAAE,CAAC;4BACX,CAAC,CAAC;iCACD,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;gCACjB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;4BAC9D,CAAC,CAAC,CAAC;wBACL,CAAC;oBACF,CAAC;gBACF,CAAC;aACD,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACjE,CAAC;QAEF,MAAM,SAAS,GAAG,KAAK,EAAE,CAA+B,EAAE,EAAE;YAC3D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAClB,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EACjE;oBACC,IAAI,EAAE,IAAI,cAAc,CAAC;wBACxB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;wBACnC,UAAU,EAAE,CAAC;qBACb,CAAC;iBACF,CACD,CAAC;YACH,CAAC;QACF,CAAC,CAAC;QAEF,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CACzC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAClD,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,CAAS;IACf,KAAK,CAAC,UAAU;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;QACD,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CACxE,IAAI,CAAC,WAAW,EAAE,CAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QAChB;;;WAGG;QAEH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAA8B,IAAI,GAAG,EAAE,CAAC;QAC9D,MAAM,kBAAkB,GAAiB,EAAE,CAAC;QAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM;YACP,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS,CAAC,0BAA0B;YACrC,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAC1C,GAAG,EACH,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,oHAAoH;aAC/I,CAAC;YAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CACpD,CAAC;YACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAEhD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACxC,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAC5D,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpC,kIAAkI;oBAClI,IAAI,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;wBACV,GAAG,GAAG,EAAE,CAAC;wBACT,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBACxC,CAAC;oBAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,wGAAwG;oBACxG,iIAAiI;oBACjI,MAAM,eAAe,GACpB,IAAI,CAAC,KAAK,YAAY,QAAQ;wBAC7B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;wBAC1C,CAAC,CAAC,OAAO,CAAC;oBACZ,kBAAkB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,CAAC,eAAe;yBAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAChB,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACF,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC;YAClD,kCAAkC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAC/C,IAAI,CAAC,GAAG,EACR,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EACzB,IAAI,CAAC,eAAe,CACpB,CAAC;gBACF,6EAA6E;gBAC7E,oEAAoE;gBACpE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;oBACtB,IAAI,EAAE,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;iBACzD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAoC;QAC3D,MAAM,CAAC,KAAK,CACX,sBAAsB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,SAAS,CACxE,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACxC,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,aAAa,CACxB,IAAI,WAAW,CAAkB,MAAM,EAAE;YACxC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,EAAE;SAC5D,CAAC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,wBAAwB,CACnC,GAAG,CAAC,MAAM,CAAC,IAAI,EACf,GAAG,CAAC,MAAM,CAAC,eAAe,EAC1B,KAAK,CACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAmC;QACxD,MAAM,CAAC,KAAK,CACX,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,IAAI,CAAC,SAAS,CACvE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACtC,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,wBAAwB,CACnC,GAAG,CAAC,MAAM,CAAC,IAAI,EACf,GAAG,CAAC,MAAM,CAAC,aAAa,EACxB,IAAI,CACJ,CAAC;IACH,CAAC;IACD,qBAAqB,CAA2B;IAEhD,OAAO,CAA2C;IAClD,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,MAAc;QACpD,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,2FAA2F;QAC3F,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACF,CAAC;IAED,KAAK,CAAC,cAAc;QACnB,yEAAyE;QACzE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,YAAY,GACjB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;gBACvD,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBACnE,OAAO,YAAY,GAAG,YAAY,CAAC;gBACpC,CAAC;YACF,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,0DAA0D;QAC1D,OAAO,CACN,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC;YACtD,aAAa,CAAC,MAAM,CACpB,CAAC;IACH,CAAC;IAED,GAAG,CAAS;IACZ,KAAK,CAAC,sBAAsB,CAAC,YAAY,GAAG,IAAI;QAC/C,wFAAwF;QACxF,sCAAsC;QAEtC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACtB,4BAA4B;QAC5B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,6EAA6E;QAC7E,IAAI,IAAI,CAAC,YAAY,YAAY,IAAI,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,+DAA+D;QAC/D,IACC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY;YACtC,IAAI,CAAC,KAAK,YAAY,UAAU,EAC/B,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE/C,MAAM,SAAS,GACd,MAAM,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CACvD,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,mBAAmB,EACxB,KAAK,EAAE,MAAM,IAAI,CAAC,CAClB,CAAC;YAEH,MAAM,kBAAkB,GACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAE7D,IAAI,kBAAkB,GAAG,MAAM,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;oBAC9B,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;oBAC/B,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;gBAEH,MAAM,YAAY,GACjB,CAAC,IAAI,CAAC,aAAa;oBACnB,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC;gBACd,CAAC;gBAED,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC9C,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC;gBAEzC,OAAO,IAAI,CAAC;YACb,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC;YAC1C,CAAC;YACD,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD,CAAA;AApiDA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;8BAChB,GAAG;sCAAI;AAGZ;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;8BAChB,GAAG;sCAAqC;AARjC,SAAS;IADrB,OAAO,CAAC,YAAY,CAAC;;GACT,SAAS,CAyiDrB;;AAED,SAAS,YAAY,CACpB,IAAkB,EAClB,IAA8C,EAC9C,KAAqB;IAErB,MAAM,QAAQ,GAAG,CAAC,IAAI;QACrB,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAChB,KAAK,EACL,IAAW,EACX,IAAI,CAAC,IAAgD,EACrD,IAAI,CACJ;QACF,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAChB,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,IAAgD,EACrD,IAAI,CACJ,CAAC;IAEJ,UAAU;IACV,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,CAAC;IAED,UAAU;IACV,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACd,OAAO,QAAQ,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/lib/esm/pid.js CHANGED
@@ -13,7 +13,7 @@ export class PIDReplicationController {
13
13
  this.id = id;
14
14
  const { targetMemoryLimit, kp = 0.7, ki = 0.025, kd = 0.05, errorFunction = ({ balance, coverage, memory }) => {
15
15
  return memory < 0
16
- ? memory * 0.9 + balance * 0.06 + coverage * 0.04
16
+ ? memory * 0.9 + balance * 0.07 + coverage * 0.03
17
17
  : balance * 0.6 + coverage * 0.4;
18
18
  } } = options;
19
19
  this.reset();
@@ -64,7 +64,7 @@ export class PIDReplicationController {
64
64
  // Integral term
65
65
  this.integral += totalError;
66
66
  // Beta controls how much of the accumulated error we should forget
67
- const beta = 0.8;
67
+ const beta = 0.3;
68
68
  this.integral = beta * totalError + (1 - beta) * this.integral;
69
69
  const iTerm = this.ki * this.integral;
70
70
  // Derivative term
@@ -75,33 +75,40 @@ export class PIDReplicationController {
75
75
  const newFactor = currentFactor + change;
76
76
  // Update state for the next iteration
77
77
  this.prevError = totalError;
78
- if (newFactor < 0 || newFactor > 1) {
78
+ // reset integral term if we are "way" out of bounds
79
+ if (newFactor < 0 && this.integral < 0) {
79
80
  this.integral = 0;
80
81
  }
81
- // prevent drift when everone wants to do less
82
- /* if (newFactor < currentFactor && totalFactorDiff < 0 && totalFactor < 0.5) {
83
- newFactor = currentFactor;
82
+ else if (newFactor > 1 && this.integral > 0) {
84
83
  this.integral = 0;
85
84
  }
86
- */
87
- /* console.log({
88
- id: this.id,
89
- currentFactor,
90
- newFactor,
91
- factorDiff: newFactor - currentFactor,
92
- pTerm,
93
- dTerm,
94
- iTerm,
95
- totalError,
96
- errorTarget: errorBalance,
97
- errorCoverage,
98
- errorMemory,
99
- peerCount,
100
- totalFactor,
101
- totalFactorDiff,
102
- targetScaler: balanceErrorScaler,
103
- estimatedTotalSize
104
- }); */
85
+ // prevent drift when everone wants to do less
86
+ /* if (newFactor < currentFactor && totalFactorDiff < 0 && totalFactor < 0.5) {
87
+ newFactor = currentFactor;
88
+ this.integral = 0;
89
+ } */
90
+ /* */
91
+ /* {
92
+ console.log({
93
+ id: this.id,
94
+ currentFactor,
95
+ newFactor,
96
+ factorDiff: newFactor - currentFactor,
97
+ pTerm,
98
+ dTerm,
99
+ iTerm,
100
+ totalError,
101
+ errorTarget: errorBalance,
102
+ errorCoverage,
103
+ errorMemory,
104
+ peerCount,
105
+ totalFactor,
106
+ totalFactorDiff,
107
+ targetScaler: balanceErrorScaler,
108
+ memoryUsage,
109
+ estimatedTotalSize
110
+ });
111
+ } */
105
112
  return Math.max(Math.min(newFactor, 1), 0);
106
113
  }
107
114
  reset() {
@@ -1 +1 @@
1
- {"version":3,"file":"pid.js","sourceRoot":"","sources":["../../src/pid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pid.js","sourceRoot":"","sources":["../../src/pid.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/shared-log",
3
- "version": "5.0.1",
3
+ "version": "6.0.1",
4
4
  "description": "Shared log",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -30,16 +30,16 @@
30
30
  "author": "dao.xyz",
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
- "@dao-xyz/borsh": "^5.1.8",
34
- "@peerbit/log": "3.0.12",
33
+ "@dao-xyz/borsh": "^5.2.1",
34
+ "@peerbit/log": "3.0.14",
35
35
  "@peerbit/logger": "1.0.2",
36
- "@peerbit/program": "3.0.10",
37
- "@peerbit/rpc": "3.0.12",
38
- "@peerbit/time": "2.0.4",
36
+ "@peerbit/program": "3.0.12",
37
+ "@peerbit/rpc": "3.0.14",
38
+ "@peerbit/time": "2.0.5",
39
39
  "p-debounce": "^4.0.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@peerbit/test-utils": "^2.0.12"
42
+ "@peerbit/test-utils": "^2.0.14"
43
43
  },
44
- "gitHead": "2539f936bbe572f34a297bc8275fcd059105fc2a"
44
+ "gitHead": "7d274b1b196ffdcad390da510b635ee2733f65c3"
45
45
  }
@@ -17,12 +17,12 @@ export class EntryWithRefs<T> {
17
17
  @field({ type: Entry })
18
18
  entry: Entry<T>;
19
19
 
20
- @field({ type: vec(Entry) })
21
- references: Entry<T>[]; // are some parents to the entry
20
+ @field({ type: vec("string") })
21
+ gidRefrences: string[]; // are some parents to the entry
22
22
 
23
- constructor(properties: { entry: Entry<T>; references: Entry<T>[] }) {
23
+ constructor(properties: { entry: Entry<T>; gidRefrences: string[] }) {
24
24
  this.entry = properties.entry;
25
- this.references = properties.references;
25
+ this.gidRefrences = properties.gidRefrences;
26
26
  }
27
27
  }
28
28
 
@@ -75,27 +75,61 @@ export class ResponseIPrune extends TransportMessage {
75
75
  this.hashes = props.hashes;
76
76
  }
77
77
  }
78
+ const MAX_EXCHANGE_MESSAGE_SIZE = 5e6; // 5mb (since stream limits are 10mb)
78
79
 
79
- export const createExchangeHeadsMessage = async (
80
+ export const createExchangeHeadsMessages = async (
80
81
  log: Log<any>,
81
82
  heads: Entry<any>[],
82
83
  gidParentCache: Cache<Entry<any>[]>
83
- ) => {
84
- const headsSet = new Set(heads);
85
- const headsWithRefs = await Promise.all(
86
- heads.map(async (head) => {
87
- const refs = (await allEntriesWithUniqueGids(log, head, gidParentCache)) // 1mb total limit split on all heads
88
- .filter((r) => !headsSet.has(r));
89
- return new EntryWithRefs({
90
- entry: head,
91
- references: refs
92
- });
93
- })
94
- );
95
- logger.debug(`Send latest heads of '${log.id}'`);
96
- return new ExchangeHeadsMessage({
97
- heads: headsWithRefs
98
- });
84
+ ): Promise<ExchangeHeadsMessage<any>[]> => {
85
+ const messages: ExchangeHeadsMessage<any>[] = [];
86
+ let size = 0;
87
+ let current: EntryWithRefs<any>[] = [];
88
+ const visitedHeads = new Set<string>();
89
+ for (const fromHead of heads) {
90
+ visitedHeads.add(fromHead.hash);
91
+
92
+ // TODO eventually we don't want to load all refs
93
+ // since majority of the old leader would not be interested in these anymore
94
+ const refs = (
95
+ await allEntriesWithUniqueGids(log, fromHead, gidParentCache)
96
+ ).filter((x) => {
97
+ if (visitedHeads.has(x.hash)) {
98
+ return false;
99
+ }
100
+ visitedHeads.add(x.hash);
101
+ return true;
102
+ });
103
+ if (refs.length > 1000) {
104
+ logger.warn("Large refs count: ", refs.length);
105
+ }
106
+ current.push(
107
+ new EntryWithRefs({
108
+ entry: fromHead,
109
+ gidRefrences: refs.map((x) => x.meta.gid)
110
+ })
111
+ );
112
+
113
+ size += fromHead.size;
114
+ if (size > MAX_EXCHANGE_MESSAGE_SIZE) {
115
+ size = 0;
116
+ messages.push(
117
+ new ExchangeHeadsMessage({
118
+ heads: current
119
+ })
120
+ );
121
+ current = [];
122
+ continue;
123
+ }
124
+ }
125
+ if (current.length > 0) {
126
+ messages.push(
127
+ new ExchangeHeadsMessage({
128
+ heads: current
129
+ })
130
+ );
131
+ }
132
+ return messages;
99
133
  };
100
134
 
101
135
  export const allEntriesWithUniqueGids = async (
@@ -120,7 +154,10 @@ export const allEntriesWithUniqueGids = async (
120
154
  for (const next of element.meta.next) {
121
155
  const indexedEntry = log.entryIndex.getShallow(next);
122
156
  if (!indexedEntry) {
123
- logger.error("Failed to find indexed entry for hash: " + next);
157
+ logger.error(
158
+ "Failed to find indexed entry for hash when fetching references: " +
159
+ next
160
+ );
124
161
  } else {
125
162
  nexts.push(indexedEntry);
126
163
  }
package/src/index.ts CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  ExchangeHeadsMessage,
23
23
  RequestIPrune,
24
24
  ResponseIPrune,
25
- createExchangeHeadsMessage
25
+ createExchangeHeadsMessages
26
26
  } from "./exchange-heads.js";
27
27
  import {
28
28
  SubscriptionEvent,
@@ -50,7 +50,8 @@ import {
50
50
  AcknowledgeDelivery,
51
51
  DeliveryMode,
52
52
  SeekDelivery,
53
- SilentDelivery
53
+ SilentDelivery,
54
+ NotStartedError
54
55
  } from "@peerbit/stream-interface";
55
56
  import { AnyBlockStore, RemoteBlocks } from "@peerbit/blocks";
56
57
  import { BlocksMessage } from "./blocks.js";
@@ -128,6 +129,7 @@ export type SharedLogOptions<T> = {
128
129
  canReplicate?: (publicKey: PublicSignKey) => Promise<boolean> | boolean;
129
130
  sync?: (entry: Entry<T>) => boolean;
130
131
  timeUntilRoleMaturity?: number;
132
+ waitForReplicatorTimeout?: number;
131
133
  };
132
134
 
133
135
  export const DEFAULT_MIN_REPLICAS = 2;
@@ -204,9 +206,11 @@ export class SharedLog<T = Uint8Array> extends Program<
204
206
  | ReturnType<typeof debounce>
205
207
  | undefined;
206
208
 
209
+ private distributeInterval: ReturnType<typeof setInterval>;
207
210
  replicas: ReplicationLimits;
208
211
 
209
212
  timeUntilRoleMaturity: number;
213
+ waitForReplicatorTimeout: number;
210
214
 
211
215
  constructor(properties?: { id?: Uint8Array }) {
212
216
  super();
@@ -227,7 +231,10 @@ export class SharedLog<T = Uint8Array> extends Program<
227
231
  () => this.rebalanceParticipation(),
228
232
  Math.max(
229
233
  REBALANCE_DEBOUNCE_INTERVAL,
230
- (this.getReplicatorsSorted()?.length || 0) * REBALANCE_DEBOUNCE_INTERVAL
234
+ Math.log(
235
+ (this.getReplicatorsSorted()?.length || 0) *
236
+ REBALANCE_DEBOUNCE_INTERVAL
237
+ )
231
238
  )
232
239
  );
233
240
  }
@@ -354,30 +361,38 @@ export class SharedLog<T = Uint8Array> extends Program<
354
361
  const result = await this.log.append(data, appendOptions);
355
362
  let mode: DeliveryMode | undefined = undefined;
356
363
 
357
- if (options?.target === "replicators" || !options?.target) {
358
- const leaders = await this.findLeaders(
359
- result.entry.meta.gid,
360
- decodeReplicas(result.entry).getValue(this)
361
- );
362
- const isLeader = leaders.includes(
363
- this.node.identity.publicKey.hashcode()
364
- );
365
- mode = isLeader
366
- ? new SilentDelivery({ redundancy: 1, to: leaders })
367
- : new AcknowledgeDelivery({ redundancy: 1, to: leaders });
368
- }
369
-
370
- await this.rpc.send(
371
- await createExchangeHeadsMessage(
372
- this.log,
373
- [result.entry],
374
- this._gidParentCache
375
- ),
376
- {
377
- mode
364
+ for (const message of await createExchangeHeadsMessages(
365
+ this.log,
366
+ [result.entry],
367
+ this._gidParentCache
368
+ )) {
369
+ if (options?.target === "replicators" || !options?.target) {
370
+ const minReplicas = decodeReplicas(result.entry).getValue(this);
371
+ let leaders: string[] | Set<string> = await this.findLeaders(
372
+ result.entry.meta.gid,
373
+ minReplicas
374
+ );
375
+ const isLeader = leaders.includes(
376
+ this.node.identity.publicKey.hashcode()
377
+ );
378
+ if (message.heads[0].gidRefrences.length > 0) {
379
+ const newAndOldLeaders = new Set(leaders);
380
+ for (const ref of message.heads[0].gidRefrences) {
381
+ for (const hash of await this.findLeaders(ref, minReplicas)) {
382
+ newAndOldLeaders.add(hash);
383
+ }
384
+ }
385
+ leaders = newAndOldLeaders;
386
+ }
387
+ mode = isLeader
388
+ ? new SilentDelivery({ redundancy: 1, to: leaders })
389
+ : new AcknowledgeDelivery({ redundancy: 1, to: leaders });
378
390
  }
379
- );
380
391
 
392
+ await this.rpc.send(message, {
393
+ mode
394
+ });
395
+ }
381
396
  this.rebalanceParticipationDebounced?.();
382
397
 
383
398
  return result;
@@ -404,6 +419,8 @@ export class SharedLog<T = Uint8Array> extends Program<
404
419
  this.openTime = +new Date();
405
420
  this.timeUntilRoleMaturity =
406
421
  options?.timeUntilRoleMaturity || WAIT_FOR_ROLE_MATURITY;
422
+ this.waitForReplicatorTimeout =
423
+ options?.waitForReplicatorTimeout || WAIT_FOR_REPLICATOR_TIMEOUT;
407
424
  this._gidParentCache = new Cache({ max: 1000 });
408
425
  this._closeController = new AbortController();
409
426
 
@@ -508,6 +525,13 @@ export class SharedLog<T = Uint8Array> extends Program<
508
525
  );
509
526
 
510
527
  await this.log.load();
528
+
529
+ // TODO (do better)
530
+ // we do this distribution interval to eliminate the sideeffects arriving from updating roles and joining entries continously.
531
+ // an alternative to this would be to call distribute/maybe prune after every join if our role has changed
532
+ this.distributeInterval = setInterval(() => {
533
+ this.distribute();
534
+ }, 7.5 * 1000);
511
535
  }
512
536
 
513
537
  async afterOpen(): Promise<void> {
@@ -538,6 +562,7 @@ export class SharedLog<T = Uint8Array> extends Program<
538
562
  }
539
563
 
540
564
  private async _close() {
565
+ clearInterval(this.distributeInterval);
541
566
  this._closeController.abort();
542
567
 
543
568
  this.node.services.pubsub.removeEventListener(
@@ -628,7 +653,7 @@ export class SharedLog<T = Uint8Array> extends Program<
628
653
  return;
629
654
  }
630
655
 
631
- const toMerge: EntryWithRefs<any>[] = [];
656
+ const toMerge: Entry<any>[] = [];
632
657
  let toDelete: Entry<any>[] | undefined = undefined;
633
658
  let maybeDelete: EntryWithRefs<any>[][] | undefined = undefined;
634
659
 
@@ -658,7 +683,9 @@ export class SharedLog<T = Uint8Array> extends Program<
658
683
  gid,
659
684
  Math.max(maxReplicasFromHead, maxReplicasFromNewEntries)
660
685
  ));
686
+
661
687
  const isLeader = !!leaders;
688
+
662
689
  if (isLeader) {
663
690
  if (leaders.find((x) => x === context.from!.hashcode())) {
664
691
  let peerSet = this._gidPeersHistory.get(gid);
@@ -676,14 +703,12 @@ export class SharedLog<T = Uint8Array> extends Program<
676
703
 
677
704
  outer: for (const entry of entries) {
678
705
  if (isLeader || this.sync?.(entry.entry)) {
679
- toMerge.push(entry);
706
+ toMerge.push(entry.entry);
680
707
  } else {
681
- for (const ref of entry.references) {
682
- const map = this.log.headsIndex.gids.get(
683
- await ref.getGid()
684
- );
708
+ for (const ref of entry.gidRefrences) {
709
+ const map = this.log.headsIndex.gids.get(ref);
685
710
  if (map && map.size > 0) {
686
- toMerge.push(entry);
711
+ toMerge.push(entry.entry);
687
712
  (toDelete || (toDelete = [])).push(entry.entry);
688
713
  continue outer;
689
714
  }
@@ -826,7 +851,7 @@ export class SharedLog<T = Uint8Array> extends Program<
826
851
 
827
852
  this.waitFor(context.from, {
828
853
  signal: this._closeController.signal,
829
- timeout: WAIT_FOR_REPLICATOR_TIMEOUT
854
+ timeout: this.waitForReplicatorTimeout
830
855
  })
831
856
  .then(async () => {
832
857
  const prev = this.latestRoleMessages.get(context.from!.hashcode());
@@ -844,6 +869,9 @@ export class SharedLog<T = Uint8Array> extends Program<
844
869
  if (e instanceof AbortError) {
845
870
  return;
846
871
  }
872
+ if (e instanceof NotStartedError) {
873
+ return;
874
+ }
847
875
  logger.error(
848
876
  "Failed to find peer who updated their role: " + e?.message
849
877
  );
@@ -914,7 +942,7 @@ export class SharedLog<T = Uint8Array> extends Program<
914
942
  private async waitForIsLeader(
915
943
  slot: { toString(): string },
916
944
  numberOfLeaders: number,
917
- timeout = WAIT_FOR_REPLICATOR_TIMEOUT
945
+ timeout = this.waitForReplicatorTimeout
918
946
  ): Promise<string[] | false> {
919
947
  return new Promise((res, rej) => {
920
948
  const removeListeners = () => {
@@ -1485,13 +1513,13 @@ export class SharedLog<T = Uint8Array> extends Program<
1485
1513
  return promises;
1486
1514
  }
1487
1515
 
1488
- _queue: PQueue;
1516
+ private _queue: PQueue;
1489
1517
  async distribute() {
1490
1518
  if (this._queue?.size > 0) {
1491
1519
  return this._queue.onEmpty();
1492
1520
  }
1493
- (this._queue || (this._queue = new PQueue({ concurrency: 1 }))).add(() =>
1494
- this._distribute()
1521
+ return (this._queue || (this._queue = new PQueue({ concurrency: 1 }))).add(
1522
+ () => this._distribute()
1495
1523
  );
1496
1524
  }
1497
1525
 
@@ -1573,14 +1601,14 @@ export class SharedLog<T = Uint8Array> extends Program<
1573
1601
 
1574
1602
  for (const [target, entries] of uncheckedDeliver) {
1575
1603
  // TODO better choice of step size
1576
- for (let i = 0; i < entries.length; i += 100) {
1577
- const message = await createExchangeHeadsMessage(
1578
- this.log,
1579
- entries.slice(i, i + 100),
1580
- this._gidParentCache
1581
- );
1582
- // TODO perhaps send less messages to more receivers for performance reasons?
1583
- // TODO wait for previous send to target before trying to send more?
1604
+ const messages = await createExchangeHeadsMessages(
1605
+ this.log,
1606
+ entries,
1607
+ this._gidParentCache
1608
+ );
1609
+ // TODO perhaps send less messages to more receivers for performance reasons?
1610
+ // TODO wait for previous send to target before trying to send more?
1611
+ for (const message of messages) {
1584
1612
  this.rpc.send(message, {
1585
1613
  mode: new SilentDelivery({ to: [target], redundancy: 1 })
1586
1614
  });
@@ -1664,14 +1692,10 @@ export class SharedLog<T = Uint8Array> extends Program<
1664
1692
  );
1665
1693
  }
1666
1694
 
1667
- xxx: number;
1668
1695
  async rebalanceParticipation(onRoleChange = true) {
1669
1696
  // update more participation rate to converge to the average expected rate or bounded by
1670
1697
  // resources such as memory and or cpu
1671
1698
 
1672
- const t = +new Date();
1673
- // console.log(t - this.xxx)
1674
- this.xxx = t;
1675
1699
  if (this.closed) {
1676
1700
  return false;
1677
1701
  }
package/src/pid.ts CHANGED
@@ -31,7 +31,7 @@ export class PIDReplicationController {
31
31
  kd = 0.05,
32
32
  errorFunction = ({ balance, coverage, memory }) => {
33
33
  return memory < 0
34
- ? memory * 0.9 + balance * 0.06 + coverage * 0.04
34
+ ? memory * 0.9 + balance * 0.07 + coverage * 0.03
35
35
  : balance * 0.6 + coverage * 0.4;
36
36
  }
37
37
  } = options;
@@ -104,7 +104,7 @@ export class PIDReplicationController {
104
104
  this.integral += totalError;
105
105
 
106
106
  // Beta controls how much of the accumulated error we should forget
107
- const beta = 0.8;
107
+ const beta = 0.3;
108
108
  this.integral = beta * totalError + (1 - beta) * this.integral;
109
109
 
110
110
  const iTerm = this.ki * this.integral;
@@ -120,35 +120,41 @@ export class PIDReplicationController {
120
120
  // Update state for the next iteration
121
121
  this.prevError = totalError;
122
122
 
123
- if (newFactor < 0 || newFactor > 1) {
123
+ // reset integral term if we are "way" out of bounds
124
+ if (newFactor < 0 && this.integral < 0) {
124
125
  this.integral = 0;
125
- }
126
-
127
- // prevent drift when everone wants to do less
128
- /* if (newFactor < currentFactor && totalFactorDiff < 0 && totalFactor < 0.5) {
129
- newFactor = currentFactor;
126
+ } else if (newFactor > 1 && this.integral > 0) {
130
127
  this.integral = 0;
131
128
  }
132
- */
133
-
134
- /* console.log({
135
- id: this.id,
136
- currentFactor,
137
- newFactor,
138
- factorDiff: newFactor - currentFactor,
139
- pTerm,
140
- dTerm,
141
- iTerm,
142
- totalError,
143
- errorTarget: errorBalance,
144
- errorCoverage,
145
- errorMemory,
146
- peerCount,
147
- totalFactor,
148
- totalFactorDiff,
149
- targetScaler: balanceErrorScaler,
150
- estimatedTotalSize
151
- }); */
129
+ // prevent drift when everone wants to do less
130
+ /* if (newFactor < currentFactor && totalFactorDiff < 0 && totalFactor < 0.5) {
131
+ newFactor = currentFactor;
132
+ this.integral = 0;
133
+ } */
134
+
135
+ /* */
136
+
137
+ /* {
138
+ console.log({
139
+ id: this.id,
140
+ currentFactor,
141
+ newFactor,
142
+ factorDiff: newFactor - currentFactor,
143
+ pTerm,
144
+ dTerm,
145
+ iTerm,
146
+ totalError,
147
+ errorTarget: errorBalance,
148
+ errorCoverage,
149
+ errorMemory,
150
+ peerCount,
151
+ totalFactor,
152
+ totalFactorDiff,
153
+ targetScaler: balanceErrorScaler,
154
+ memoryUsage,
155
+ estimatedTotalSize
156
+ });
157
+ } */
152
158
 
153
159
  return Math.max(Math.min(newFactor, 1), 0);
154
160
  }