@aztec/pxe 0.87.5 → 0.87.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dest/config/package_info.js +1 -1
  2. package/dest/contract_function_simulator/contract_function_simulator.d.ts +37 -0
  3. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -0
  4. package/dest/contract_function_simulator/contract_function_simulator.js +117 -0
  5. package/dest/contract_function_simulator/execution_data_provider.d.ts +301 -0
  6. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +1 -0
  7. package/dest/contract_function_simulator/execution_data_provider.js +14 -0
  8. package/dest/contract_function_simulator/execution_note_cache.d.ts +93 -0
  9. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -0
  10. package/dest/contract_function_simulator/execution_note_cache.js +180 -0
  11. package/dest/contract_function_simulator/hashed_values_cache.d.ts +28 -0
  12. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -0
  13. package/dest/contract_function_simulator/hashed_values_cache.js +36 -0
  14. package/dest/contract_function_simulator/index.d.ts +10 -0
  15. package/dest/contract_function_simulator/index.d.ts.map +1 -0
  16. package/dest/contract_function_simulator/index.js +8 -0
  17. package/dest/contract_function_simulator/oracle/index.d.ts +14 -0
  18. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -0
  19. package/dest/contract_function_simulator/oracle/index.js +2 -0
  20. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +19 -0
  21. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -0
  22. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +24 -0
  23. package/dest/contract_function_simulator/oracle/oracle.d.ts +53 -0
  24. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -0
  25. package/dest/contract_function_simulator/oracle/oracle.js +317 -0
  26. package/dest/contract_function_simulator/oracle/private_execution.d.ts +24 -0
  27. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -0
  28. package/dest/contract_function_simulator/oracle/private_execution.js +100 -0
  29. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +187 -0
  30. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -0
  31. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +325 -0
  32. package/dest/contract_function_simulator/oracle/typed_oracle.d.ts +83 -0
  33. package/dest/contract_function_simulator/oracle/typed_oracle.d.ts.map +1 -0
  34. package/dest/contract_function_simulator/oracle/typed_oracle.js +138 -0
  35. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +163 -0
  36. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -0
  37. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +257 -0
  38. package/dest/contract_function_simulator/pick_notes.d.ts +85 -0
  39. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -0
  40. package/dest/contract_function_simulator/pick_notes.js +51 -0
  41. package/dest/contract_function_simulator/proxied_node.d.ts +9 -0
  42. package/dest/contract_function_simulator/proxied_node.d.ts.map +1 -0
  43. package/dest/contract_function_simulator/proxied_node.js +27 -0
  44. package/dest/{pxe_oracle_interface → contract_function_simulator}/pxe_oracle_interface.d.ts +5 -4
  45. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +1 -0
  46. package/dest/{pxe_oracle_interface → contract_function_simulator}/pxe_oracle_interface.js +16 -15
  47. package/dest/contract_function_simulator/tagging_utils.d.ts.map +1 -0
  48. package/dest/entrypoints/client/bundle/index.d.ts +1 -1
  49. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  50. package/dest/entrypoints/client/bundle/index.js +1 -1
  51. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  52. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  53. package/dest/entrypoints/client/bundle/utils.js +10 -4
  54. package/dest/entrypoints/client/lazy/index.d.ts +1 -1
  55. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  56. package/dest/entrypoints/client/lazy/index.js +1 -1
  57. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  58. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  59. package/dest/entrypoints/client/lazy/utils.js +10 -4
  60. package/dest/entrypoints/{client/pxe_creation_options.d.ts → pxe_creation_options.d.ts} +4 -1
  61. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
  62. package/dest/entrypoints/server/index.d.ts +1 -1
  63. package/dest/entrypoints/server/index.d.ts.map +1 -1
  64. package/dest/entrypoints/server/index.js +1 -1
  65. package/dest/entrypoints/server/utils.d.ts +6 -6
  66. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  67. package/dest/entrypoints/server/utils.js +26 -18
  68. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  69. package/dest/private_kernel/private_kernel_execution_prover.js +6 -5
  70. package/dest/pxe_service/pxe_service.d.ts +2 -2
  71. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  72. package/dest/pxe_service/pxe_service.js +58 -28
  73. package/dest/storage/note_data_provider/note_dao.d.ts +1 -1
  74. package/dest/storage/note_data_provider/note_dao.d.ts.map +1 -1
  75. package/package.json +17 -15
  76. package/src/config/package_info.ts +1 -1
  77. package/src/contract_function_simulator/contract_function_simulator.ts +193 -0
  78. package/src/contract_function_simulator/execution_data_provider.ts +391 -0
  79. package/src/contract_function_simulator/execution_note_cache.ts +217 -0
  80. package/src/contract_function_simulator/hashed_values_cache.ts +47 -0
  81. package/src/contract_function_simulator/index.ts +9 -0
  82. package/src/contract_function_simulator/oracle/index.ts +16 -0
  83. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +23 -0
  84. package/src/contract_function_simulator/oracle/oracle.ts +541 -0
  85. package/src/contract_function_simulator/oracle/private_execution.ts +171 -0
  86. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +518 -0
  87. package/src/contract_function_simulator/oracle/typed_oracle.ts +273 -0
  88. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +384 -0
  89. package/src/contract_function_simulator/pick_notes.ts +141 -0
  90. package/src/contract_function_simulator/proxied_node.ts +33 -0
  91. package/src/{pxe_oracle_interface → contract_function_simulator}/pxe_oracle_interface.ts +18 -21
  92. package/src/entrypoints/client/bundle/index.ts +1 -1
  93. package/src/entrypoints/client/bundle/utils.ts +24 -16
  94. package/src/entrypoints/client/lazy/index.ts +1 -1
  95. package/src/entrypoints/client/lazy/utils.ts +25 -12
  96. package/src/entrypoints/{client/pxe_creation_options.ts → pxe_creation_options.ts} +4 -1
  97. package/src/entrypoints/server/index.ts +1 -1
  98. package/src/entrypoints/server/utils.ts +44 -26
  99. package/src/private_kernel/private_kernel_execution_prover.ts +6 -4
  100. package/src/pxe_service/pxe_service.ts +86 -45
  101. package/src/storage/note_data_provider/note_dao.ts +2 -1
  102. package/dest/entrypoints/client/pxe_creation_options.d.ts.map +0 -1
  103. package/dest/pxe_oracle_interface/pxe_oracle_interface.d.ts.map +0 -1
  104. package/dest/pxe_oracle_interface/tagging_utils.d.ts.map +0 -1
  105. /package/dest/{pxe_oracle_interface → contract_function_simulator}/tagging_utils.d.ts +0 -0
  106. /package/dest/{pxe_oracle_interface → contract_function_simulator}/tagging_utils.js +0 -0
  107. /package/dest/entrypoints/{client/pxe_creation_options.js → pxe_creation_options.js} +0 -0
  108. /package/src/{pxe_oracle_interface → contract_function_simulator}/tagging_utils.ts +0 -0
@@ -0,0 +1,180 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
3
+ /**
4
+ * Data that's accessible by all the function calls in an execution.
5
+ */ export class ExecutionNoteCache {
6
+ txRequestHash;
7
+ /**
8
+ * New notes created in this transaction.
9
+ * They are pushed to this array in the same order as they are emitted.
10
+ */ notes;
11
+ /**
12
+ * This mapping maps from a contract address to the notes in the contract.
13
+ */ noteMap;
14
+ /**
15
+ * This maps from a contract address to the nullifiers emitted from the contract.
16
+ * The note which is nullified might be new or not (i.e., was generated in a previous transaction).
17
+ * Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
18
+ */ nullifierMap;
19
+ /**
20
+ * All nullifiers emitted in this transaction.
21
+ */ allNullifiers;
22
+ minRevertibleSideEffectCounter;
23
+ inRevertiblePhase;
24
+ /**
25
+ * We don't need to use the tx request hash for nonces if another non revertible nullifier is emitted.
26
+ * In that case we disable injecting the tx request hash as a nullifier.
27
+ */ usedTxRequestHashForNonces;
28
+ constructor(txRequestHash){
29
+ this.txRequestHash = txRequestHash;
30
+ this.notes = [];
31
+ this.noteMap = new Map();
32
+ this.nullifierMap = new Map();
33
+ this.allNullifiers = new Set();
34
+ this.minRevertibleSideEffectCounter = 0;
35
+ this.inRevertiblePhase = false;
36
+ this.usedTxRequestHashForNonces = true;
37
+ }
38
+ /**
39
+ * Enters the revertible phase of the transaction.
40
+ * @param minRevertibleSideEffectCounter - The counter at which the transaction enters the revertible phase.
41
+ */ async setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter) {
42
+ if (this.inRevertiblePhase) {
43
+ throw new Error(`Cannot enter the revertible phase twice. Current counter: ${minRevertibleSideEffectCounter}. Previous enter counter: ${this.minRevertibleSideEffectCounter}`);
44
+ }
45
+ this.inRevertiblePhase = true;
46
+ this.minRevertibleSideEffectCounter = minRevertibleSideEffectCounter;
47
+ let nonceGenerator = this.txRequestHash;
48
+ const nullifiers = this.getAllNullifiers();
49
+ if (nullifiers.length > 0) {
50
+ nonceGenerator = new Fr(nullifiers[0]);
51
+ this.usedTxRequestHashForNonces = false;
52
+ }
53
+ // The existing pending notes are all non-revertible.
54
+ // They cannot be squashed by nullifiers emitted after minRevertibleSideEffectCounter is set.
55
+ // Their indexes in the tx are known at this point and won't change. So we can assign a nonce to each one of them.
56
+ // The nonces will be used to create the "complete" nullifier.
57
+ const updatedNotes = await Promise.all(this.notes.map(async ({ note, counter }, i)=>{
58
+ const nonce = await computeNoteHashNonce(nonceGenerator, i);
59
+ const uniqueNoteHash = await computeUniqueNoteHash(nonce, await siloNoteHash(note.contractAddress, note.noteHash));
60
+ return {
61
+ counter,
62
+ note: {
63
+ ...note,
64
+ nonce
65
+ },
66
+ noteHashForConsumption: uniqueNoteHash
67
+ };
68
+ }));
69
+ // Rebuild the data.
70
+ this.notes = [];
71
+ this.noteMap = new Map();
72
+ updatedNotes.forEach((n)=>this.#addNote(n));
73
+ }
74
+ finish() {
75
+ // If we never entered the revertible phase, we need to use the tx request hash as a nonce for the notes if no nullifiers have been emitted.
76
+ if (!this.inRevertiblePhase) {
77
+ this.usedTxRequestHashForNonces = this.getAllNullifiers().length === 0;
78
+ }
79
+ // If we entered the revertible phase, the nonce generator was decided based on wether or not a nullifier was emitted before entering.
80
+ return {
81
+ usedTxRequestHashForNonces: this.usedTxRequestHashForNonces
82
+ };
83
+ }
84
+ /**
85
+ * Add a new note to cache.
86
+ * @param note - New note created during execution.
87
+ */ addNewNote(note, counter) {
88
+ const previousNote = this.notes[this.notes.length - 1];
89
+ if (previousNote && previousNote.counter >= counter) {
90
+ throw new Error(`Note hash counters must be strictly increasing. Current counter: ${counter}. Previous counter: ${previousNote.counter}.`);
91
+ }
92
+ this.#addNote({
93
+ note,
94
+ counter,
95
+ noteHashForConsumption: note.noteHash
96
+ });
97
+ }
98
+ /**
99
+ * Add a nullifier to cache. It could be for a db note or a new note created during execution.
100
+ * @param contractAddress - Contract address of the note.
101
+ * @param innerNullifier - Inner nullifier of the note.
102
+ * @param noteHash - A hash of the note. If this value equals 0, it means the note being nullified is from a previous
103
+ * transaction (and thus not a new note).
104
+ */ async nullifyNote(contractAddress, innerNullifier, noteHash) {
105
+ const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
106
+ let nullifiedNoteHashCounter = undefined;
107
+ // Find and remove the matching new note and log(s) if the emitted noteHash is not empty.
108
+ if (!noteHash.isEmpty()) {
109
+ const notesInContract = this.noteMap.get(contractAddress.toBigInt()) ?? [];
110
+ const noteIndexToRemove = notesInContract.findIndex((n)=>n.noteHashForConsumption.equals(noteHash));
111
+ if (noteIndexToRemove === -1) {
112
+ throw new Error('Attempt to remove a pending note that does not exist.');
113
+ }
114
+ const note = notesInContract.splice(noteIndexToRemove, 1)[0];
115
+ nullifiedNoteHashCounter = note.counter;
116
+ this.noteMap.set(contractAddress.toBigInt(), notesInContract);
117
+ this.notes = this.notes.filter((n)=>n.counter !== note.counter);
118
+ // If the note is non revertible and the nullifier was emitted in the revertible phase, both the note hash and the nullifier will be emitted
119
+ if (this.inRevertiblePhase && note.counter < this.minRevertibleSideEffectCounter) {
120
+ this.recordNullifier(contractAddress, siloedNullifier);
121
+ }
122
+ } else {
123
+ // If the note being nullified comes from a previous tx the nullifier will be emitted.
124
+ this.recordNullifier(contractAddress, siloedNullifier);
125
+ }
126
+ return nullifiedNoteHashCounter;
127
+ }
128
+ /**
129
+ * Adds a nullifier to the cache. Note cache needs to track all nullifiers to decide which nullifier to use for note siloing.
130
+ * @param contractAddress - Contract address that emitted the nullifier.
131
+ * @param innerNullifier
132
+ */ async nullifierCreated(contractAddress, innerNullifier) {
133
+ const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
134
+ this.recordNullifier(contractAddress, siloedNullifier);
135
+ }
136
+ /**
137
+ * Return notes created up to current point in execution.
138
+ * If a nullifier for a note in this list is emitted, the note will be deleted.
139
+ * @param contractAddress - Contract address of the notes.
140
+ * @param storageSlot - Storage slot of the notes.
141
+ **/ getNotes(contractAddress, storageSlot) {
142
+ const notes = this.noteMap.get(contractAddress.toBigInt()) ?? [];
143
+ return notes.filter((n)=>n.note.storageSlot.equals(storageSlot)).map((n)=>n.note);
144
+ }
145
+ /**
146
+ * Check if a note exists in the newNotes array.
147
+ * @param contractAddress - Contract address of the note.
148
+ * @param storageSlot - Storage slot of the note.
149
+ * @param noteHash - A hash of the note.
150
+ **/ checkNoteExists(contractAddress, noteHash) {
151
+ const notes = this.noteMap.get(contractAddress.toBigInt()) ?? [];
152
+ return notes.some((n)=>n.note.noteHash.equals(noteHash));
153
+ }
154
+ /**
155
+ * Return all nullifiers emitted from a contract.
156
+ * @param contractAddress - Address of the contract.
157
+ */ getNullifiers(contractAddress) {
158
+ return this.nullifierMap.get(contractAddress.toBigInt()) ?? new Set();
159
+ }
160
+ #addNote(note) {
161
+ this.notes.push(note);
162
+ const notes = this.noteMap.get(note.note.contractAddress.toBigInt()) ?? [];
163
+ notes.push(note);
164
+ this.noteMap.set(note.note.contractAddress.toBigInt(), notes);
165
+ }
166
+ getAllNotes() {
167
+ return this.notes;
168
+ }
169
+ getAllNullifiers() {
170
+ return [
171
+ ...this.allNullifiers
172
+ ].map((n)=>new Fr(n));
173
+ }
174
+ recordNullifier(contractAddress, siloedNullifier) {
175
+ const nullifiers = this.getNullifiers(contractAddress);
176
+ nullifiers.add(siloedNullifier.toBigInt());
177
+ this.nullifierMap.set(contractAddress.toBigInt(), nullifiers);
178
+ this.allNullifiers.add(siloedNullifier.toBigInt());
179
+ }
180
+ }
@@ -0,0 +1,28 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { HashedValues } from '@aztec/stdlib/tx';
3
+ /**
4
+ * A cache for hashed values (arguments, returns) during transaction execution.
5
+ */
6
+ export declare class HashedValuesCache {
7
+ private cache;
8
+ constructor(initialArguments?: HashedValues[]);
9
+ /**
10
+ * Creates a new hashed values cache.
11
+ * @param initialArguments - The initial arguments to add to the cache.
12
+ * @returns The new hashed values cache.
13
+ */
14
+ static create(initialArguments?: HashedValues[]): HashedValuesCache;
15
+ /**
16
+ * Gets preimage of a hash.
17
+ * @param hash - The hash to get the preimage of.
18
+ * @returns The preimage.
19
+ */
20
+ getPreimage(hash: Fr): Fr[] | undefined;
21
+ /**
22
+ * Stores values in cache and returns its hash.
23
+ * @param values - The values to store.
24
+ * @returns The hash of the values.
25
+ */
26
+ store(values: Fr[], hash: Fr): void;
27
+ }
28
+ //# sourceMappingURL=hashed_values_cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashed_values_cache.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/hashed_values_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAoB;gBAErB,gBAAgB,GAAE,YAAY,EAAO;IAOjD;;;;OAIG;WACW,MAAM,CAAC,gBAAgB,GAAE,YAAY,EAAO;IAI1D;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,SAAS;IAQ9C;;;;OAIG;IACI,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;CAGpC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A cache for hashed values (arguments, returns) during transaction execution.
3
+ */ export class HashedValuesCache {
4
+ cache;
5
+ constructor(initialArguments = []){
6
+ this.cache = new Map();
7
+ for (const initialArg of initialArguments){
8
+ this.cache.set(initialArg.hash.toBigInt(), initialArg.values);
9
+ }
10
+ }
11
+ /**
12
+ * Creates a new hashed values cache.
13
+ * @param initialArguments - The initial arguments to add to the cache.
14
+ * @returns The new hashed values cache.
15
+ */ static create(initialArguments = []) {
16
+ return new HashedValuesCache(initialArguments);
17
+ }
18
+ /**
19
+ * Gets preimage of a hash.
20
+ * @param hash - The hash to get the preimage of.
21
+ * @returns The preimage.
22
+ */ getPreimage(hash) {
23
+ if (hash.isEmpty()) {
24
+ return [];
25
+ } else {
26
+ return this.cache.get(hash.toBigInt());
27
+ }
28
+ }
29
+ /**
30
+ * Stores values in cache and returns its hash.
31
+ * @param values - The values to store.
32
+ * @returns The hash of the values.
33
+ */ store(values, hash) {
34
+ this.cache.set(hash.toBigInt(), values);
35
+ }
36
+ }
@@ -0,0 +1,10 @@
1
+ export { ExecutionNoteCache } from './execution_note_cache.js';
2
+ export { HashedValuesCache } from './hashed_values_cache.js';
3
+ export { pickNotes } from './pick_notes.js';
4
+ export type { NoteData, TypedOracle } from './oracle/typed_oracle.js';
5
+ export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
6
+ export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
7
+ export { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
8
+ export { Oracle } from './oracle/oracle.js';
9
+ export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './oracle/private_execution.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { ExecutionNoteCache } from './execution_note_cache.js';
2
+ export { HashedValuesCache } from './hashed_values_cache.js';
3
+ export { pickNotes } from './pick_notes.js';
4
+ export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
5
+ export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
6
+ export { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
7
+ export { Oracle } from './oracle/oracle.js';
8
+ export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './oracle/private_execution.js';
@@ -0,0 +1,14 @@
1
+ import type { Oracle } from './oracle.js';
2
+ export * from './oracle.js';
3
+ export * from './typed_oracle.js';
4
+ /**
5
+ * A conditional type that takes a type `T` and returns a union of its method names.
6
+ */
7
+ type MethodNames<T> = {
8
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
9
+ }[keyof T];
10
+ /**
11
+ * Available oracle function names.
12
+ */
13
+ export type ORACLE_NAMES = MethodNames<Oracle>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC;;GAEG;AACH,KAAK,WAAW,CAAC,CAAC,IAAI;KACnB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK;CACjE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './oracle.js';
2
+ export * from './typed_oracle.js';
@@ -0,0 +1,19 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import type { SiblingPath } from '@aztec/foundation/trees';
3
+ export declare class MessageLoadOracleInputs<N extends number> {
4
+ /** The index of the message commitment in the merkle tree. */
5
+ index: bigint;
6
+ /** The path in the merkle tree to the message. */
7
+ siblingPath: SiblingPath<N>;
8
+ constructor(
9
+ /** The index of the message commitment in the merkle tree. */
10
+ index: bigint,
11
+ /** The path in the merkle tree to the message. */
12
+ siblingPath: SiblingPath<N>);
13
+ toFields(): Fr[];
14
+ /**
15
+ * Returns a representation of the public data witness as expected by intrinsic Noir deserialization.
16
+ */
17
+ toNoirRepresentation(): (string | string[])[];
18
+ }
19
+ //# sourceMappingURL=message_load_oracle_inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_load_oracle_inputs.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/message_load_oracle_inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,qBAAa,uBAAuB,CAAC,CAAC,SAAS,MAAM;IAEjD,8DAA8D;IACvD,KAAK,EAAE,MAAM;IACpB,kDAAkD;IAC3C,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;;IAHlC,8DAA8D;IACvD,KAAK,EAAE,MAAM;IACpB,kDAAkD;IAC3C,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAGpC,QAAQ,IAAI,EAAE,EAAE;IAIhB;;OAEG;IACI,oBAAoB,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE;CAIrD"}
@@ -0,0 +1,24 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ export class MessageLoadOracleInputs {
3
+ index;
4
+ siblingPath;
5
+ constructor(/** The index of the message commitment in the merkle tree. */ index, /** The path in the merkle tree to the message. */ siblingPath){
6
+ this.index = index;
7
+ this.siblingPath = siblingPath;
8
+ }
9
+ toFields() {
10
+ return [
11
+ new Fr(this.index),
12
+ ...this.siblingPath.toFields()
13
+ ];
14
+ }
15
+ /**
16
+ * Returns a representation of the public data witness as expected by intrinsic Noir deserialization.
17
+ */ toNoirRepresentation() {
18
+ // TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
19
+ return [
20
+ new Fr(this.index).toString(),
21
+ this.siblingPath.toFields().map((fr)=>fr.toString())
22
+ ];
23
+ }
24
+ }
@@ -0,0 +1,53 @@
1
+ import { type ACIRCallback, type ACVMField } from '@aztec/simulator/client';
2
+ import type { TypedOracle } from './typed_oracle.js';
3
+ /**
4
+ * A data source that has all the apis required by Aztec.nr.
5
+ */
6
+ export declare class Oracle {
7
+ private typedOracle;
8
+ constructor(typedOracle: TypedOracle);
9
+ toACIRCallback(): ACIRCallback;
10
+ getRandomField(): Promise<ACVMField[]>;
11
+ storeInExecutionCache(_length: ACVMField[], values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]>;
12
+ loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]>;
13
+ getBlockNumber(): Promise<ACVMField[]>;
14
+ getContractAddress(): Promise<ACVMField[]>;
15
+ getVersion(): Promise<ACVMField[]>;
16
+ getChainId(): Promise<ACVMField[]>;
17
+ getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]>;
18
+ getContractInstance([address]: ACVMField[]): Promise<ACVMField[]>;
19
+ getMembershipWitness([blockNumber]: ACVMField[], [treeId]: ACVMField[], [leafValue]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
20
+ getNullifierMembershipWitness([blockNumber]: ACVMField[], [nullifier]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
21
+ getLowNullifierMembershipWitness([blockNumber]: ACVMField[], [nullifier]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
22
+ getPublicDataWitness([blockNumber]: ACVMField[], [leafSlot]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
23
+ getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]>;
24
+ getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]>;
25
+ getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]>;
26
+ getNotes([storageSlot]: ACVMField[], [numSelects]: ACVMField[], selectByIndexes: ACVMField[], selectByOffsets: ACVMField[], selectByLengths: ACVMField[], selectValues: ACVMField[], selectComparators: ACVMField[], sortByIndexes: ACVMField[], sortByOffsets: ACVMField[], sortByLengths: ACVMField[], sortOrder: ACVMField[], [limit]: ACVMField[], [offset]: ACVMField[], [status]: ACVMField[], [maxNotes]: ACVMField[], [packedRetrievedNoteLength]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
27
+ notifyCreatedNote([storageSlot]: ACVMField[], [noteTypeId]: ACVMField[], note: ACVMField[], [noteHash]: ACVMField[], [counter]: ACVMField[]): Promise<ACVMField[]>;
28
+ notifyNullifiedNote([innerNullifier]: ACVMField[], [noteHash]: ACVMField[], [counter]: ACVMField[]): Promise<ACVMField[]>;
29
+ notifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]>;
30
+ checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]>;
31
+ getL1ToL2MembershipWitness([contractAddress]: ACVMField[], [messageHash]: ACVMField[], [secret]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
32
+ storageRead([contractAddress]: ACVMField[], [startStorageSlot]: ACVMField[], [blockNumber]: ACVMField[], [numberOfElements]: ACVMField[]): Promise<ACVMField[][]>;
33
+ storageWrite([startStorageSlot]: ACVMField[], values: ACVMField[]): Promise<ACVMField[]>;
34
+ notifyCreatedContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [length]: ACVMField[], [counter]: ACVMField[]): Promise<ACVMField[]>;
35
+ debugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): Promise<ACVMField[]>;
36
+ callPrivateFunction([contractAddress]: ACVMField[], [functionSelector]: ACVMField[], [argsHash]: ACVMField[], [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[]): Promise<ACVMField[][]>;
37
+ notifyEnqueuedPublicFunctionCall([contractAddress]: ACVMField[], [calldataHash]: ACVMField[], [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[]): Promise<ACVMField[]>;
38
+ notifySetPublicTeardownFunctionCall([contractAddress]: ACVMField[], [calldataHash]: ACVMField[], [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[]): Promise<ACVMField[]>;
39
+ notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]>;
40
+ getIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]>;
41
+ incrementAppTaggingSecretIndexAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]>;
42
+ fetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]>;
43
+ deliverNote([contractAddress]: ACVMField[], [storageSlot]: ACVMField[], [nonce]: ACVMField[], content: ACVMField[], [contentLength]: ACVMField[], [noteHash]: ACVMField[], [nullifier]: ACVMField[], [txHash]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]>;
44
+ getLogByTag([tag]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
45
+ storeCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[], capsule: ACVMField[]): Promise<ACVMField[]>;
46
+ loadCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[], [tSize]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
47
+ deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]>;
48
+ copyCapsule([contractAddress]: ACVMField[], [srcSlot]: ACVMField[], [dstSlot]: ACVMField[], [numEntries]: ACVMField[]): Promise<ACVMField[]>;
49
+ aes128Decrypt(ciphertextBVecStorage: ACVMField[], [ciphertextLength]: ACVMField[], iv: ACVMField[], symKey: ACVMField[]): Promise<(ACVMField | ACVMField[])[]>;
50
+ getSharedSecret([address]: ACVMField[], [ephPKField0]: ACVMField[], [ephPKField1]: ACVMField[], [ephPKField2]: ACVMField[]): Promise<ACVMField[]>;
51
+ storePrivateEventLog([contractAddress]: ACVMField[], [recipient]: ACVMField[], [eventSelector]: ACVMField[], msgContentBVecStorage: ACVMField[], [msgContentLength]: ACVMField[], [txHash]: ACVMField[], [logIndexInTx]: ACVMField[], [txIndexInBlock]: ACVMField[]): Promise<never[]>;
52
+ }
53
+ //# sourceMappingURL=oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/oracle.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EAQf,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,WAAW;IAIpC,cAAc,IAAI,YAAY;IAW9B,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAMtC,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKrG,sBAAsB,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAK1E,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAItC,kBAAkB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAI1C,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMrE,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAYjE,oBAAoB,CACxB,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAcjC,6BAA6B,CACjC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAWjC,gCAAgC,CACpC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAajC,oBAAoB,CACxB,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAWjC,cAAc,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAUhE,cAAc,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IASlE,8BAA8B,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAO9E,QAAQ,CACZ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EACzB,eAAe,EAAE,SAAS,EAAE,EAC5B,eAAe,EAAE,SAAS,EAAE,EAC5B,eAAe,EAAE,SAAS,EAAE,EAC5B,YAAY,EAAE,SAAS,EAAE,EACzB,iBAAiB,EAAE,SAAS,EAAE,EAC9B,aAAa,EAAE,SAAS,EAAE,EAC1B,aAAa,EAAE,SAAS,EAAE,EAC1B,aAAa,EAAE,SAAS,EAAE,EAC1B,SAAS,EAAE,SAAS,EAAE,EACtB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EACpB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EACvB,CAAC,yBAAyB,CAAC,EAAE,SAAS,EAAE,GACvC,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IA4CvC,iBAAiB,CACf,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EACzB,IAAI,EAAE,SAAS,EAAE,EACjB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EACvB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC;IAWjB,mBAAmB,CACvB,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,EAC7B,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EACvB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC;IAKjB,sBAAsB,CAAC,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK3E,oBAAoB,CAAC,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKzE,0BAA0B,CAC9B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GACpB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IASjC,WAAW,CACf,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAC/B,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAUnB,YAAY,CAAC,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK9F,6BAA6B,CAC3B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,OAAO,EAAE,SAAS,EAAE,EACpB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC;IAQvB,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAOpG,mBAAmB,CACvB,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAC/B,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EACvB,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAChC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAC1B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAWnB,gCAAgC,CACpC,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAC3B,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAChC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAC1B,OAAO,CAAC,SAAS,EAAE,CAAC;IAUjB,mCAAmC,CACvC,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAC3B,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAChC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAC1B,OAAO,CAAC,SAAS,EAAE,CAAC;IAUjB,uCAAuC,CAAC,CAAC,8BAA8B,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO5G,+BAA+B,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQtG,sCAAsC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQ7G,eAAe,CAAC,CAAC,6BAA6B,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKnF,WAAW,CACf,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EACpB,OAAO,EAAE,SAAS,EAAE,EACpB,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,EAC5B,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EACvB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EACxB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,SAAS,EAAE,CAAC;IAkBjB,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAUrE,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAS7G,WAAW,CACf,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EACnB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GACnB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IAiBjC,aAAa,CAAC,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKxF,WAAW,CACf,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EACtB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EACtB,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC;IAUjB,aAAa,CACjB,qBAAqB,EAAE,SAAS,EAAE,EAClC,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAC/B,EAAE,EAAE,SAAS,EAAE,EACf,MAAM,EAAE,SAAS,EAAE,GAClB,OAAO,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;IASjC,eAAe,CACnB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EACtB,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,EAC1B,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC;IAQjB,oBAAoB,CACxB,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,EAC9B,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EACxB,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,EAC5B,qBAAqB,EAAE,SAAS,EAAE,EAClC,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAC/B,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EACrB,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAC3B,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE;CAahC"}