@aztec/bot 0.0.1-commit.96dac018d → 0.0.1-commit.9a89641

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.
@@ -37,22 +37,23 @@ import { seedL1ToL2Message } from './l1_to_l2_seeding.js';
37
37
  inboxAddress;
38
38
  rollupVersion;
39
39
  store;
40
+ syncChainTip;
40
41
  l2ToL1Sent;
41
42
  l1ToL2Consumed;
42
43
  pendingSeedPromise;
43
- constructor(node, wallet, defaultAccountAddress, contract, l1Client, l1Recipient, inboxAddress, rollupVersion, store, config){
44
- super(node, wallet, defaultAccountAddress, config), this.contract = contract, this.l1Client = l1Client, this.l1Recipient = l1Recipient, this.inboxAddress = inboxAddress, this.rollupVersion = rollupVersion, this.store = store, this.l2ToL1Sent = 0, this.l1ToL2Consumed = 0;
44
+ constructor(node, wallet, defaultAccountAddress, contract, l1Client, l1Recipient, inboxAddress, rollupVersion, store, config, syncChainTip){
45
+ super(node, wallet, defaultAccountAddress, config), this.contract = contract, this.l1Client = l1Client, this.l1Recipient = l1Recipient, this.inboxAddress = inboxAddress, this.rollupVersion = rollupVersion, this.store = store, this.syncChainTip = syncChainTip, this.l2ToL1Sent = 0, this.l1ToL2Consumed = 0;
45
46
  }
46
- static async create(config, wallet, aztecNode, aztecNodeAdmin, store) {
47
+ static async create(config, wallet, aztecNode, aztecNodeAdmin, store, syncChainTip) {
47
48
  if (config.followChain === 'NONE') {
48
49
  throw new Error(`CrossChainBot requires followChain to be set (got NONE)`);
49
50
  }
50
- const factory = new BotFactory(config, wallet, store, aztecNode, aztecNodeAdmin);
51
+ const factory = new BotFactory(config, wallet, store, aztecNode, aztecNodeAdmin, syncChainTip);
51
52
  const { defaultAccountAddress, contract, l1Client, rollupVersion } = await factory.setupCrossChain();
52
53
  const l1Recipient = EthAddress.fromString(l1Client.account.address);
53
54
  const { l1ContractAddresses } = await aztecNode.getNodeInfo();
54
55
  const inboxAddress = EthAddress.fromString(l1ContractAddresses.inboxAddress.toString());
55
- return new CrossChainBot(aztecNode, wallet, defaultAccountAddress, contract, l1Client, l1Recipient, inboxAddress, rollupVersion, store, config);
56
+ return new CrossChainBot(aztecNode, wallet, defaultAccountAddress, contract, l1Client, l1Recipient, inboxAddress, rollupVersion, store, config, syncChainTip);
56
57
  }
57
58
  async createAndSendTx(logCtx) {
58
59
  const pendingMessages = await this.store.getUnconsumedL1ToL2Messages();
@@ -82,18 +83,22 @@ import { seedL1ToL2Message } from './l1_to_l2_seeding.js';
82
83
  });
83
84
  }
84
85
  const batch = new BatchCall(this.wallet, calls);
85
- const opts = await this.getSendMethodOpts(batch);
86
+ const opts = this.getSendMethodOpts();
86
87
  this.log.verbose(`Sending cross-chain batch with ${calls.length} calls`, logCtx);
87
- return batch.send({
88
+ const { txHash } = await batch.send({
88
89
  ...opts,
89
90
  wait: NO_WAIT
90
91
  });
92
+ return txHash;
91
93
  }
92
94
  async onTxMined(receipt, logCtx) {
93
95
  // Verify L2→L1 messages appeared in this tx's effects
94
- const indexed = await this.node.getTxEffect(receipt.txHash);
95
- if (indexed) {
96
- const l2ToL1Msgs = indexed.data.l2ToL1Msgs.filter((m)=>!m.isZero());
96
+ const minedReceipt = await this.node.getTxReceipt(receipt.txHash, {
97
+ includeTxEffect: true
98
+ });
99
+ const l2ToL1MsgsRaw = minedReceipt.txEffect?.l2ToL1Msgs;
100
+ if (l2ToL1MsgsRaw) {
101
+ const l2ToL1Msgs = l2ToL1MsgsRaw.filter((m)=>!m.isZero());
97
102
  if (l2ToL1Msgs.length >= this.config.l2ToL1MessagesPerTx) {
98
103
  this.l2ToL1Sent += l2ToL1Msgs.length;
99
104
  } else {
@@ -115,14 +120,7 @@ import { seedL1ToL2Message } from './l1_to_l2_seeding.js';
115
120
  /** Finds the oldest pending message that is ready for consumption. */ async getReadyL1ToL2Message(pendingMessages) {
116
121
  const now = Date.now();
117
122
  for (const msg of pendingMessages){
118
- const ready = await isL1ToL2MessageReady(this.node, Fr.fromHexString(msg.msgHash), {
119
- // Use forPublicConsumption: false so we wait until blockNumber >= messageBlockNumber.
120
- // With forPublicConsumption: true, the check returns true one block early (the sequencer
121
- // includes L1→L2 messages before executing the block's txs), but gas estimation simulates
122
- // against the current world state which doesn't yet have the message.
123
- // See https://linear.app/aztec-labs/issue/A-548 for details.
124
- forPublicConsumption: false
125
- });
123
+ const ready = await isL1ToL2MessageReady(this.node, Fr.fromHexString(msg.msgHash), this.syncChainTip);
126
124
  if (ready) {
127
125
  return msg;
128
126
  }
package/dest/factory.d.ts CHANGED
@@ -14,8 +14,13 @@ export declare class BotFactory {
14
14
  private readonly store;
15
15
  private readonly aztecNode;
16
16
  private readonly aztecNodeAdmin?;
17
+ private readonly syncChainTip?;
17
18
  private log;
18
- constructor(config: BotConfig, wallet: EmbeddedWallet, store: BotStore, aztecNode: AztecNode, aztecNodeAdmin?: AztecNodeAdmin | undefined);
19
+ /** Number of in-flight withNoMinTxsPerBlock calls; see that method for why they are counted. */
20
+ private noMinTxsPerBlockDepth;
21
+ /** Set by the first withNoMinTxsPerBlock entrant; resolves to the minTxsPerBlock value to restore. */
22
+ private savedMinTxsPerBlock?;
23
+ constructor(config: BotConfig, wallet: EmbeddedWallet, store: BotStore, aztecNode: AztecNode, aztecNodeAdmin?: AztecNodeAdmin | undefined, syncChainTip?: "checkpointed" | "finalized" | "latest" | "proposed" | "proven" | undefined);
19
24
  /**
20
25
  * Initializes a new bot by setting up the sender account, registering the recipient,
21
26
  * deploying the token contract, and minting tokens if necessary.
@@ -47,18 +52,23 @@ export declare class BotFactory {
47
52
  l1Client: ExtendedViemWalletClient;
48
53
  rollupVersion: bigint;
49
54
  }>;
50
- private setupTestContract;
55
+ private deployTestContract;
51
56
  private setupAccount;
52
- private setupAccountWithPrivateKey;
53
57
  private setupTestAccount;
58
+ private setupAccountWithPrivateKey;
54
59
  private setupToken;
55
60
  private setupTokenContract;
56
- private setupAmmContract;
57
- private fundAmm;
61
+ private deployAmmContract;
62
+ private grantLpTokenMinter;
63
+ private mintAmmLiquidity;
64
+ private addAmmLiquidity;
58
65
  private registerOrDeployContract;
66
+ /** True when the config allows bridging fee juice from L1 (fee_juice mode, an L1 RPC, and an L1 key). */
67
+ private isL1BridgingConfigured;
68
+ private ensureFeeJuiceBalance;
59
69
  private mintTokens;
60
70
  private getOrCreateBridgeClaim;
61
71
  private bridgeL1FeeJuice;
62
- private withNoMinTxsPerBlock;
72
+ protected withNoMinTxsPerBlock<T>(fn: () => Promise<T>): Promise<T>;
63
73
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBbUJ6RCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR2xFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUEyQixNQUFNLGFBQWEsQ0FBQztBQUV0RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU1qRCxxQkFBYSxVQUFVO0lBSW5CLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0lBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQVBsQyxPQUFPLENBQUMsR0FBRyxDQUF1QjtJQUVsQyxZQUNtQixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsY0FBYyxFQUN0QixLQUFLLEVBQUUsUUFBUSxFQUNmLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGNBQWMsQ0FBQyw0QkFBZ0IsRUFDOUM7SUFFSjs7O09BR0c7SUFDVSxLQUFLLElBQUksT0FBTyxDQUFDO1FBQzVCLE1BQU0sRUFBRSxjQUFjLENBQUM7UUFDdkIscUJBQXFCLEVBQUUsWUFBWSxDQUFDO1FBQ3BDLEtBQUssRUFBRSxhQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUNoQixTQUFTLEVBQUUsWUFBWSxDQUFDO0tBQ3pCLENBQUMsQ0FNRDtJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUM7UUFDL0IsTUFBTSxFQUFFLGNBQWMsQ0FBQztRQUN2QixxQkFBcUIsRUFBRSxZQUFZLENBQUM7UUFDcEMsR0FBRyxFQUFFLFdBQVcsQ0FBQztRQUNqQixNQUFNLEVBQUUsYUFBYSxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFDdEIsSUFBSSxFQUFFLFNBQVMsQ0FBQztLQUNqQixDQUFDLENBc0JEO0lBRUQ7OztPQUdHO0lBQ1UsZUFBZSxJQUFJLE9BQU8sQ0FBQztRQUN0QyxNQUFNLEVBQUUsY0FBYyxDQUFDO1FBQ3ZCLHFCQUFxQixFQUFFLFlBQVksQ0FBQztRQUNwQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxTQUFTLENBQUM7UUFDaEIsUUFBUSxFQUFFLHdCQUF3QixDQUFDO1FBQ25DLGFBQWEsRUFBRSxNQUFNLENBQUM7S0FDdkIsQ0FBQyxDQWdFRDtZQUVhLGlCQUFpQjtZQWVqQixZQUFZO1lBV1osMEJBQTBCO1lBeUMxQixnQkFBZ0I7WUFlaEIsVUFBVTtZQXNEVixrQkFBa0I7WUFhbEIsZ0JBQWdCO1lBc0JoQixPQUFPO1lBNkVQLHdCQUF3QjtZQTBCeEIsVUFBVTtZQTRDVixzQkFBc0I7WUE0QnRCLGdCQUFnQjtZQWdDaEIsb0JBQW9CO0NBZW5DIn0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBb0J6RCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR2xFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUEyQixNQUFNLGFBQWEsQ0FBQztBQUV0RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU9qRCxxQkFBYSxVQUFVO0lBU25CLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0lBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztJQWJoQyxPQUFPLENBQUMsR0FBRyxDQUF1QjtJQUVsQyxnR0FBZ0c7SUFDaEcsT0FBTyxDQUFDLHFCQUFxQixDQUFLO0lBQ2xDLHNHQUFzRztJQUN0RyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBdUM7SUFFbkUsWUFDbUIsTUFBTSxFQUFFLFNBQVMsRUFDakIsTUFBTSxFQUFFLGNBQWMsRUFDdEIsS0FBSyxFQUFFLFFBQVEsRUFDZixTQUFTLEVBQUUsU0FBUyxFQUNwQixjQUFjLENBQUMsNEJBQWdCLEVBQy9CLFlBQVksQ0FBQyw2RUFBVSxFQUt6QztJQUVEOzs7T0FHRztJQUNVLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDNUIsTUFBTSxFQUFFLGNBQWMsQ0FBQztRQUN2QixxQkFBcUIsRUFBRSxZQUFZLENBQUM7UUFDcEMsS0FBSyxFQUFFLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QyxJQUFJLEVBQUUsU0FBUyxDQUFDO1FBQ2hCLFNBQVMsRUFBRSxZQUFZLENBQUM7S0FDekIsQ0FBQyxDQVFEO0lBRVksUUFBUSxJQUFJLE9BQU8sQ0FBQztRQUMvQixNQUFNLEVBQUUsY0FBYyxDQUFDO1FBQ3ZCLHFCQUFxQixFQUFFLFlBQVksQ0FBQztRQUNwQyxHQUFHLEVBQUUsV0FBVyxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFDdEIsTUFBTSxFQUFFLGFBQWEsQ0FBQztRQUN0QixJQUFJLEVBQUUsU0FBUyxDQUFDO0tBQ2pCLENBQUMsQ0FtQ0Q7SUFFRDs7O09BR0c7SUFDVSxlQUFlLElBQUksT0FBTyxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxjQUFjLENBQUM7UUFDdkIscUJBQXFCLEVBQUUsWUFBWSxDQUFDO1FBQ3BDLFFBQVEsRUFBRSxZQUFZLENBQUM7UUFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUNoQixRQUFRLEVBQUUsd0JBQXdCLENBQUM7UUFDbkMsYUFBYSxFQUFFLE1BQU0sQ0FBQztLQUN2QixDQUFDLENBb0VEO1lBRWEsa0JBQWtCO1lBU2xCLFlBQVk7WUFrQlosZ0JBQWdCO1lBVWhCLDBCQUEwQjtZQWUxQixVQUFVO1lBeUNWLGtCQUFrQjtZQWFsQixpQkFBaUI7WUFTakIsa0JBQWtCO1lBUWxCLGdCQUFnQjtZQWFoQixlQUFlO1lBc0VmLHdCQUF3QjtJQTJCdEMseUdBQXlHO0lBQ3pHLE9BQU8sQ0FBQyxzQkFBc0I7WUFjaEIscUJBQXFCO1lBZ0NyQixVQUFVO1lBaURWLHNCQUFzQjtZQXdCdEIsZ0JBQWdCO0lBZ0M5QixVQUFnQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0ErQnhFO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAmBzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAItE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,KAAK,SAAS,EAA2B,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMjD,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAPlC,OAAO,CAAC,GAAG,CAAuB;IAElC,YACmB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,4BAAgB,EAC9C;IAEJ;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC;QAC5B,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAAC;QAC5C,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,YAAY,CAAC;KACzB,CAAC,CAMD;IAEY,QAAQ,IAAI,OAAO,CAAC;QAC/B,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,GAAG,EAAE,WAAW,CAAC;QACjB,MAAM,EAAE,aAAa,CAAC;QACtB,MAAM,EAAE,aAAa,CAAC;QACtB,IAAI,EAAE,SAAS,CAAC;KACjB,CAAC,CAsBD;IAED;;;OAGG;IACU,eAAe,IAAI,OAAO,CAAC;QACtC,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,SAAS,CAAC;QAChB,QAAQ,EAAE,wBAAwB,CAAC;QACnC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAgED;YAEa,iBAAiB;YAejB,YAAY;YAWZ,0BAA0B;YAyC1B,gBAAgB;YAehB,UAAU;YAsDV,kBAAkB;YAalB,gBAAgB;YAsBhB,OAAO;YA6EP,wBAAwB;YA0BxB,UAAU;YA4CV,sBAAsB;YA4BtB,gBAAgB;YAgChB,oBAAoB;CAenC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAoBzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAItE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,KAAK,SAAS,EAA2B,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOjD,qBAAa,UAAU;IASnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAbhC,OAAO,CAAC,GAAG,CAAuB;IAElC,gGAAgG;IAChG,OAAO,CAAC,qBAAqB,CAAK;IAClC,sGAAsG;IACtG,OAAO,CAAC,mBAAmB,CAAC,CAAuC;IAEnE,YACmB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,4BAAgB,EAC/B,YAAY,CAAC,6EAAU,EAKzC;IAED;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC;QAC5B,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAAC;QAC5C,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,YAAY,CAAC;KACzB,CAAC,CAQD;IAEY,QAAQ,IAAI,OAAO,CAAC;QAC/B,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,GAAG,EAAE,WAAW,CAAC;QACjB,MAAM,EAAE,aAAa,CAAC;QACtB,MAAM,EAAE,aAAa,CAAC;QACtB,IAAI,EAAE,SAAS,CAAC;KACjB,CAAC,CAmCD;IAED;;;OAGG;IACU,eAAe,IAAI,OAAO,CAAC;QACtC,MAAM,EAAE,cAAc,CAAC;QACvB,qBAAqB,EAAE,YAAY,CAAC;QACpC,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,SAAS,CAAC;QAChB,QAAQ,EAAE,wBAAwB,CAAC;QACnC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAoED;YAEa,kBAAkB;YASlB,YAAY;YAkBZ,gBAAgB;YAUhB,0BAA0B;YAe1B,UAAU;YAyCV,kBAAkB;YAalB,iBAAiB;YASjB,kBAAkB;YAQlB,gBAAgB;YAahB,eAAe;YAsEf,wBAAwB;IA2BtC,yGAAyG;IACzG,OAAO,CAAC,sBAAsB;YAchB,qBAAqB;YAgCrB,UAAU;YAiDV,sBAAsB;YAwBtB,gBAAgB;IAgC9B,UAAgB,oBAAoB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA+BxE;CACF"}