@aztec/pxe 0.61.0 → 0.63.0

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 (109) hide show
  1. package/dest/config/index.d.ts +2 -3
  2. package/dest/config/index.d.ts.map +1 -1
  3. package/dest/config/index.js +4 -5
  4. package/dest/contract_data_oracle/index.d.ts +1 -0
  5. package/dest/contract_data_oracle/index.d.ts.map +1 -1
  6. package/dest/contract_data_oracle/index.js +5 -1
  7. package/dest/database/incoming_note_dao.d.ts +4 -4
  8. package/dest/database/incoming_note_dao.d.ts.map +1 -1
  9. package/dest/database/incoming_note_dao.js +6 -6
  10. package/dest/database/kv_pxe_database.d.ts +10 -14
  11. package/dest/database/kv_pxe_database.d.ts.map +1 -1
  12. package/dest/database/kv_pxe_database.js +82 -94
  13. package/dest/database/outgoing_note_dao.d.ts +2 -2
  14. package/dest/database/outgoing_note_dao.d.ts.map +1 -1
  15. package/dest/database/outgoing_note_dao.js +2 -2
  16. package/dest/database/pxe_database.d.ts +42 -20
  17. package/dest/database/pxe_database.d.ts.map +1 -1
  18. package/dest/database/pxe_database_test_suite.d.ts.map +1 -1
  19. package/dest/database/pxe_database_test_suite.js +11 -11
  20. package/dest/index.d.ts +1 -1
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +1 -1
  23. package/dest/kernel_oracle/index.d.ts +3 -3
  24. package/dest/kernel_oracle/index.d.ts.map +1 -1
  25. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -1
  26. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +12 -4
  27. package/dest/kernel_prover/kernel_prover.d.ts +3 -1
  28. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
  29. package/dest/kernel_prover/kernel_prover.js +39 -7
  30. package/dest/kernel_prover/test/test_circuit_prover.d.ts +1 -0
  31. package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
  32. package/dest/kernel_prover/test/test_circuit_prover.js +5 -1
  33. package/dest/{note_processor/utils → note_decryption_utils}/add_public_values_to_payload.d.ts +1 -1
  34. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +1 -0
  35. package/dest/{note_processor/utils → note_decryption_utils}/add_public_values_to_payload.js +1 -1
  36. package/dest/note_decryption_utils/brute_force_note_info.d.ts.map +1 -0
  37. package/dest/{note_processor/utils → note_decryption_utils}/brute_force_note_info.js +1 -1
  38. package/dest/note_decryption_utils/index.d.ts.map +1 -0
  39. package/dest/{note_processor/utils → note_decryption_utils}/index.js +1 -1
  40. package/dest/{note_processor/utils → note_decryption_utils}/produce_note_daos.d.ts +6 -9
  41. package/dest/note_decryption_utils/produce_note_daos.d.ts.map +1 -0
  42. package/dest/note_decryption_utils/produce_note_daos.js +47 -0
  43. package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts +8 -0
  44. package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts.map +1 -0
  45. package/dest/note_decryption_utils/produce_note_daos_for_key.js +17 -0
  46. package/dest/pxe_http/pxe_http_server.d.ts +1 -2
  47. package/dest/pxe_http/pxe_http_server.d.ts.map +1 -1
  48. package/dest/pxe_http/pxe_http_server.js +5 -49
  49. package/dest/pxe_service/create_pxe_service.d.ts.map +1 -1
  50. package/dest/pxe_service/create_pxe_service.js +7 -4
  51. package/dest/pxe_service/error_enriching.d.ts.map +1 -1
  52. package/dest/pxe_service/error_enriching.js +7 -6
  53. package/dest/pxe_service/pxe_service.d.ts +13 -19
  54. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  55. package/dest/pxe_service/pxe_service.js +79 -79
  56. package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
  57. package/dest/pxe_service/test/pxe_test_suite.js +5 -34
  58. package/dest/simulator_oracle/index.d.ts +32 -10
  59. package/dest/simulator_oracle/index.d.ts.map +1 -1
  60. package/dest/simulator_oracle/index.js +223 -30
  61. package/dest/synchronizer/synchronizer.d.ts +0 -48
  62. package/dest/synchronizer/synchronizer.d.ts.map +1 -1
  63. package/dest/synchronizer/synchronizer.js +3 -201
  64. package/package.json +16 -14
  65. package/src/config/index.ts +4 -7
  66. package/src/contract_data_oracle/index.ts +5 -0
  67. package/src/database/incoming_note_dao.ts +5 -5
  68. package/src/database/kv_pxe_database.ts +95 -106
  69. package/src/database/outgoing_note_dao.ts +3 -3
  70. package/src/database/pxe_database.ts +47 -22
  71. package/src/database/pxe_database_test_suite.ts +12 -20
  72. package/src/index.ts +1 -1
  73. package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +13 -3
  74. package/src/kernel_prover/kernel_prover.ts +49 -5
  75. package/src/kernel_prover/test/test_circuit_prover.ts +8 -4
  76. package/src/{note_processor/utils → note_decryption_utils}/add_public_values_to_payload.ts +1 -1
  77. package/src/{note_processor/utils → note_decryption_utils}/produce_note_daos.ts +12 -22
  78. package/src/{note_processor/utils → note_decryption_utils}/produce_note_daos_for_key.ts +6 -15
  79. package/src/pxe_http/pxe_http_server.ts +5 -81
  80. package/src/pxe_service/create_pxe_service.ts +9 -3
  81. package/src/pxe_service/error_enriching.ts +12 -5
  82. package/src/pxe_service/pxe_service.ts +102 -113
  83. package/src/pxe_service/test/pxe_test_suite.ts +7 -55
  84. package/src/simulator_oracle/index.ts +322 -23
  85. package/src/synchronizer/synchronizer.ts +3 -253
  86. package/dest/database/deferred_note_dao.d.ts +0 -40
  87. package/dest/database/deferred_note_dao.d.ts.map +0 -1
  88. package/dest/database/deferred_note_dao.js +0 -38
  89. package/dest/note_processor/index.d.ts +0 -2
  90. package/dest/note_processor/index.d.ts.map +0 -1
  91. package/dest/note_processor/index.js +0 -2
  92. package/dest/note_processor/note_processor.d.ts +0 -83
  93. package/dest/note_processor/note_processor.d.ts.map +0 -1
  94. package/dest/note_processor/note_processor.js +0 -230
  95. package/dest/note_processor/utils/add_public_values_to_payload.d.ts.map +0 -1
  96. package/dest/note_processor/utils/brute_force_note_info.d.ts.map +0 -1
  97. package/dest/note_processor/utils/index.d.ts.map +0 -1
  98. package/dest/note_processor/utils/produce_note_daos.d.ts.map +0 -1
  99. package/dest/note_processor/utils/produce_note_daos.js +0 -51
  100. package/dest/note_processor/utils/produce_note_daos_for_key.d.ts +0 -9
  101. package/dest/note_processor/utils/produce_note_daos_for_key.d.ts.map +0 -1
  102. package/dest/note_processor/utils/produce_note_daos_for_key.js +0 -26
  103. package/src/database/deferred_note_dao.ts +0 -47
  104. package/src/note_processor/index.ts +0 -1
  105. package/src/note_processor/note_processor.ts +0 -355
  106. /package/dest/{note_processor/utils → note_decryption_utils}/brute_force_note_info.d.ts +0 -0
  107. /package/dest/{note_processor/utils → note_decryption_utils}/index.d.ts +0 -0
  108. /package/src/{note_processor/utils → note_decryption_utils}/brute_force_note_info.ts +0 -0
  109. /package/src/{note_processor/utils → note_decryption_utils}/index.ts +0 -0
@@ -1,11 +1,10 @@
1
- var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_addresses, _KVPxeDatabase_addressIndex, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByIvpkM, _KVPxeDatabase_deferredNotes, _KVPxeDatabase_deferredNotesByContract, _KVPxeDatabase_syncedBlockPerPublicKey, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_outgoingNotes, _KVPxeDatabase_outgoingNotesByContract, _KVPxeDatabase_outgoingNotesByStorageSlot, _KVPxeDatabase_outgoingNotesByTxHash, _KVPxeDatabase_outgoingNotesByOvpkM, _KVPxeDatabase_scopes, _KVPxeDatabase_notesByContractAndScope, _KVPxeDatabase_notesByStorageSlotAndScope, _KVPxeDatabase_notesByTxHashAndScope, _KVPxeDatabase_notesByIvpkMAndScope, _KVPxeDatabase_taggingSecretIndexes, _KVPxeDatabase_addScope, _KVPxeDatabase_getCompleteAddress;
1
+ var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_completeAddresses, _KVPxeDatabase_completeAddressIndex, _KVPxeDatabase_addressBook, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByAddressPoint, _KVPxeDatabase_syncedBlockPerPublicKey, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_outgoingNotes, _KVPxeDatabase_outgoingNotesByContract, _KVPxeDatabase_outgoingNotesByStorageSlot, _KVPxeDatabase_outgoingNotesByTxHash, _KVPxeDatabase_outgoingNotesByOvpkM, _KVPxeDatabase_scopes, _KVPxeDatabase_notesByContractAndScope, _KVPxeDatabase_notesByStorageSlotAndScope, _KVPxeDatabase_notesByTxHashAndScope, _KVPxeDatabase_notesByAddressPointAndScope, _KVPxeDatabase_taggingSecretIndexesForSenders, _KVPxeDatabase_taggingSecretIndexesForRecipients, _KVPxeDatabase_addScope, _KVPxeDatabase_getCompleteAddress, _KVPxeDatabase_incrementTaggingSecretsIndexes, _KVPxeDatabase_getTaggingSecretsIndexes;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { MerkleTreeId, NoteStatus, } from '@aztec/circuit-types';
4
- import { AztecAddress, CompleteAddress, Header, SerializableContractInstance, } from '@aztec/circuits.js';
3
+ import { MerkleTreeId, NoteStatus } from '@aztec/circuit-types';
4
+ import { AztecAddress, CompleteAddress, Header, SerializableContractInstance, computePoint, } from '@aztec/circuits.js';
5
5
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
6
6
  import { Fr } from '@aztec/foundation/fields';
7
7
  import { contractArtifactFromBuffer, contractArtifactToBuffer } from '@aztec/types/abi';
8
- import { DeferredNoteDao } from './deferred_note_dao.js';
9
8
  import { IncomingNoteDao } from './incoming_note_dao.js';
10
9
  import { OutgoingNoteDao } from './outgoing_note_dao.js';
11
10
  /**
@@ -16,8 +15,9 @@ export class KVPxeDatabase {
16
15
  _KVPxeDatabase_instances.add(this);
17
16
  this.db = db;
18
17
  _KVPxeDatabase_synchronizedBlock.set(this, void 0);
19
- _KVPxeDatabase_addresses.set(this, void 0);
20
- _KVPxeDatabase_addressIndex.set(this, void 0);
18
+ _KVPxeDatabase_completeAddresses.set(this, void 0);
19
+ _KVPxeDatabase_completeAddressIndex.set(this, void 0);
20
+ _KVPxeDatabase_addressBook.set(this, void 0);
21
21
  _KVPxeDatabase_authWitnesses.set(this, void 0);
22
22
  _KVPxeDatabase_capsules.set(this, void 0);
23
23
  _KVPxeDatabase_notes.set(this, void 0);
@@ -26,9 +26,7 @@ export class KVPxeDatabase {
26
26
  _KVPxeDatabase_nullifiedNotesByContract.set(this, void 0);
27
27
  _KVPxeDatabase_nullifiedNotesByStorageSlot.set(this, void 0);
28
28
  _KVPxeDatabase_nullifiedNotesByTxHash.set(this, void 0);
29
- _KVPxeDatabase_nullifiedNotesByIvpkM.set(this, void 0);
30
- _KVPxeDatabase_deferredNotes.set(this, void 0);
31
- _KVPxeDatabase_deferredNotesByContract.set(this, void 0);
29
+ _KVPxeDatabase_nullifiedNotesByAddressPoint.set(this, void 0);
32
30
  _KVPxeDatabase_syncedBlockPerPublicKey.set(this, void 0);
33
31
  _KVPxeDatabase_contractArtifacts.set(this, void 0);
34
32
  _KVPxeDatabase_contractInstances.set(this, void 0);
@@ -42,11 +40,16 @@ export class KVPxeDatabase {
42
40
  _KVPxeDatabase_notesByContractAndScope.set(this, void 0);
43
41
  _KVPxeDatabase_notesByStorageSlotAndScope.set(this, void 0);
44
42
  _KVPxeDatabase_notesByTxHashAndScope.set(this, void 0);
45
- _KVPxeDatabase_notesByIvpkMAndScope.set(this, void 0);
46
- _KVPxeDatabase_taggingSecretIndexes.set(this, void 0);
43
+ _KVPxeDatabase_notesByAddressPointAndScope.set(this, void 0);
44
+ // Stores the last index used for each tagging secret, taking direction into account
45
+ // This is necessary to avoid reusing the same index for the same secret, which happens if
46
+ // sender and recipient are the same
47
+ _KVPxeDatabase_taggingSecretIndexesForSenders.set(this, void 0);
48
+ _KVPxeDatabase_taggingSecretIndexesForRecipients.set(this, void 0);
47
49
  __classPrivateFieldSet(this, _KVPxeDatabase_db, db, "f");
48
- __classPrivateFieldSet(this, _KVPxeDatabase_addresses, db.openArray('addresses'), "f");
49
- __classPrivateFieldSet(this, _KVPxeDatabase_addressIndex, db.openMap('address_index'), "f");
50
+ __classPrivateFieldSet(this, _KVPxeDatabase_completeAddresses, db.openArray('complete_addresses'), "f");
51
+ __classPrivateFieldSet(this, _KVPxeDatabase_completeAddressIndex, db.openMap('complete_address_index'), "f");
52
+ __classPrivateFieldSet(this, _KVPxeDatabase_addressBook, db.openSet('address_book'), "f");
50
53
  __classPrivateFieldSet(this, _KVPxeDatabase_authWitnesses, db.openMap('auth_witnesses'), "f");
51
54
  __classPrivateFieldSet(this, _KVPxeDatabase_capsules, db.openArray('capsules'), "f");
52
55
  __classPrivateFieldSet(this, _KVPxeDatabase_contractArtifacts, db.openMap('contract_artifacts'), "f");
@@ -59,9 +62,7 @@ export class KVPxeDatabase {
59
62
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByContract, db.openMultiMap('nullified_notes_by_contract'), "f");
60
63
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, db.openMultiMap('nullified_notes_by_storage_slot'), "f");
61
64
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByTxHash, db.openMultiMap('nullified_notes_by_tx_hash'), "f");
62
- __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByIvpkM, db.openMultiMap('nullified_notes_by_ivpk_m'), "f");
63
- __classPrivateFieldSet(this, _KVPxeDatabase_deferredNotes, db.openArray('deferred_notes'), "f");
64
- __classPrivateFieldSet(this, _KVPxeDatabase_deferredNotesByContract, db.openMultiMap('deferred_notes_by_contract'), "f");
65
+ __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, db.openMultiMap('nullified_notes_by_address_point'), "f");
65
66
  __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotes, db.openMap('outgoing_notes'), "f");
66
67
  __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByContract, db.openMultiMap('outgoing_notes_by_contract'), "f");
67
68
  __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByStorageSlot, db.openMultiMap('outgoing_notes_by_storage_slot'), "f");
@@ -71,14 +72,15 @@ export class KVPxeDatabase {
71
72
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByContractAndScope, new Map(), "f");
72
73
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByStorageSlotAndScope, new Map(), "f");
73
74
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByTxHashAndScope, new Map(), "f");
74
- __classPrivateFieldSet(this, _KVPxeDatabase_notesByIvpkMAndScope, new Map(), "f");
75
+ __classPrivateFieldSet(this, _KVPxeDatabase_notesByAddressPointAndScope, new Map(), "f");
75
76
  for (const scope of __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()) {
76
77
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_contract`));
77
78
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_storage_slot`));
78
79
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_tx_hash`));
79
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_ivpk_m`));
80
+ __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_address_point`));
80
81
  }
81
- __classPrivateFieldSet(this, _KVPxeDatabase_taggingSecretIndexes, db.openMap('tagging_secret_indices'), "f");
82
+ __classPrivateFieldSet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, db.openMap('tagging_secret_indexes_for_senders'), "f");
83
+ __classPrivateFieldSet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, db.openMap('tagging_secret_indexes_for_recipients'), "f");
82
84
  }
83
85
  async getContract(address) {
84
86
  const instance = await this.getContractInstance(address);
@@ -139,7 +141,7 @@ export class KVPxeDatabase {
139
141
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope.toString()).set(dao.contractAddress.toString(), noteIndex);
140
142
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope.toString()).set(dao.storageSlot.toString(), noteIndex);
141
143
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope.toString()).set(dao.txHash.toString(), noteIndex);
142
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").get(scope.toString()).set(dao.ivpkM.toString(), noteIndex);
144
+ void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope.toString()).set(dao.addressPoint.toString(), noteIndex);
143
145
  }
144
146
  for (const dao of outgoingNotes) {
145
147
  const noteIndex = toBufferBE(dao.index, 32).toString('hex');
@@ -151,53 +153,8 @@ export class KVPxeDatabase {
151
153
  }
152
154
  });
153
155
  }
154
- async addDeferredNotes(deferredNotes) {
155
- const newLength = await __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotes, "f").push(...deferredNotes.map(note => note.toBuffer()));
156
- for (const [index, note] of deferredNotes.entries()) {
157
- const noteId = newLength - deferredNotes.length + index;
158
- await __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotesByContract, "f").set(note.payload.contractAddress.toString(), noteId);
159
- }
160
- }
161
- getDeferredNotesByContract(contractAddress) {
162
- const noteIds = __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotesByContract, "f").getValues(contractAddress.toString());
163
- const notes = [];
164
- for (const noteId of noteIds) {
165
- const serializedNote = __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotes, "f").at(noteId);
166
- if (!serializedNote) {
167
- continue;
168
- }
169
- const note = DeferredNoteDao.fromBuffer(serializedNote);
170
- notes.push(note);
171
- }
172
- return Promise.resolve(notes);
173
- }
174
- /**
175
- * Removes all deferred notes for a given contract address.
176
- * @param contractAddress - the contract address to remove deferred notes for
177
- * @returns an array of the removed deferred notes
178
- */
179
- removeDeferredNotesByContract(contractAddress) {
180
- return __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").transaction(() => {
181
- const deferredNotes = [];
182
- const indices = Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_deferredNotesByContract, "f").getValues(contractAddress.toString()));
183
- for (const index of indices) {
184
- const deferredNoteBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotes, "f").at(index);
185
- if (!deferredNoteBuffer) {
186
- continue;
187
- }
188
- else {
189
- deferredNotes.push(DeferredNoteDao.fromBuffer(deferredNoteBuffer));
190
- }
191
- void __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotesByContract, "f").deleteValue(contractAddress.toString(), index);
192
- void __classPrivateFieldGet(this, _KVPxeDatabase_deferredNotes, "f").setAt(index, null);
193
- }
194
- return deferredNotes;
195
- });
196
- }
197
156
  getIncomingNotes(filter) {
198
- const publicKey = filter.owner
199
- ? __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, filter.owner)?.publicKeys.masterIncomingViewingPublicKey
200
- : undefined;
157
+ const publicKey = filter.owner ? computePoint(filter.owner) : undefined;
201
158
  filter.status = filter.status ?? NoteStatus.ACTIVE;
202
159
  const candidateNoteSources = [];
203
160
  filter.scopes ?? (filter.scopes = [...__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()].map(addressString => AztecAddress.fromString(addressString)));
@@ -208,14 +165,14 @@ export class KVPxeDatabase {
208
165
  throw new Error('Trying to get incoming notes of an scope that is not in the PXE database');
209
166
  }
210
167
  activeNoteIdsPerScope.push(publicKey
211
- ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").get(formattedScopeString).getValues(publicKey.toString())
168
+ ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).getValues(publicKey.toString())
212
169
  : filter.txHash
213
170
  ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(formattedScopeString).getValues(filter.txHash.toString())
214
171
  : filter.contractAddress
215
172
  ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(formattedScopeString).getValues(filter.contractAddress.toString())
216
173
  : filter.storageSlot
217
174
  ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(formattedScopeString).getValues(filter.storageSlot.toString())
218
- : __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").get(formattedScopeString).values());
175
+ : __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).values());
219
176
  }
220
177
  candidateNoteSources.push({
221
178
  ids: new Set(activeNoteIdsPerScope.flatMap(iterableIterator => [...iterableIterator])),
@@ -224,7 +181,7 @@ export class KVPxeDatabase {
224
181
  if (filter.status == NoteStatus.ACTIVE_OR_NULLIFIED) {
225
182
  candidateNoteSources.push({
226
183
  ids: publicKey
227
- ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByIvpkM, "f").getValues(publicKey.toString())
184
+ ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").getValues(publicKey.toString())
228
185
  : filter.txHash
229
186
  ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").getValues(filter.txHash.toString())
230
187
  : filter.contractAddress
@@ -252,7 +209,7 @@ export class KVPxeDatabase {
252
209
  if (filter.storageSlot && !note.storageSlot.equals(filter.storageSlot)) {
253
210
  continue;
254
211
  }
255
- if (publicKey && !note.ivpkM.equals(publicKey)) {
212
+ if (publicKey && !note.addressPoint.equals(publicKey)) {
256
213
  continue;
257
214
  }
258
215
  if (filter.siloedNullifier && !note.siloedNullifier.equals(filter.siloedNullifier)) {
@@ -304,7 +261,7 @@ export class KVPxeDatabase {
304
261
  }
305
262
  return Promise.resolve(notes);
306
263
  }
307
- removeNullifiedNotes(nullifiers, accountIvpkM) {
264
+ removeNullifiedNotes(nullifiers, accountAddressPoint) {
308
265
  if (nullifiers.length === 0) {
309
266
  return Promise.resolve([]);
310
267
  }
@@ -321,14 +278,14 @@ export class KVPxeDatabase {
321
278
  continue;
322
279
  }
323
280
  const note = IncomingNoteDao.fromBuffer(noteBuffer);
324
- if (!note.ivpkM.equals(accountIvpkM)) {
281
+ if (!note.addressPoint.equals(accountAddressPoint)) {
325
282
  // tried to nullify someone else's note
326
283
  continue;
327
284
  }
328
285
  nullifiedNotes.push(note);
329
286
  void __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").delete(noteIndex);
330
287
  for (const scope in __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()) {
331
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").get(scope).deleteValue(accountIvpkM.toString(), noteIndex);
288
+ void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).deleteValue(accountAddressPoint.toString(), noteIndex);
332
289
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).deleteValue(note.txHash.toString(), noteIndex);
333
290
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).deleteValue(note.contractAddress.toString(), noteIndex);
334
291
  void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).deleteValue(note.storageSlot.toString(), noteIndex);
@@ -337,7 +294,7 @@ export class KVPxeDatabase {
337
294
  void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").set(note.contractAddress.toString(), noteIndex);
338
295
  void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").set(note.storageSlot.toString(), noteIndex);
339
296
  void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").set(note.txHash.toString(), noteIndex);
340
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByIvpkM, "f").set(note.ivpkM.toString(), noteIndex);
297
+ void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").set(note.addressPoint.toString(), noteIndex);
341
298
  void __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").delete(nullifier.toString());
342
299
  }
343
300
  return nullifiedNotes;
@@ -349,7 +306,7 @@ export class KVPxeDatabase {
349
306
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").set(note.contractAddress.toString(), noteIndex);
350
307
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").set(note.storageSlot.toString(), noteIndex);
351
308
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").set(note.txHash.toString(), noteIndex);
352
- await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByIvpkM, "f").set(note.ivpkM.toString(), noteIndex);
309
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").set(note.addressPoint.toString(), noteIndex);
353
310
  return Promise.resolve();
354
311
  }
355
312
  async setHeader(header) {
@@ -374,15 +331,15 @@ export class KVPxeDatabase {
374
331
  return __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").transaction(() => {
375
332
  const addressString = completeAddress.address.toString();
376
333
  const buffer = completeAddress.toBuffer();
377
- const existing = __classPrivateFieldGet(this, _KVPxeDatabase_addressIndex, "f").get(addressString);
334
+ const existing = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").get(addressString);
378
335
  if (typeof existing === 'undefined') {
379
- const index = __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").length;
380
- void __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").push(buffer);
381
- void __classPrivateFieldGet(this, _KVPxeDatabase_addressIndex, "f").set(addressString, index);
336
+ const index = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").length;
337
+ void __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").push(buffer);
338
+ void __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").set(addressString, index);
382
339
  return true;
383
340
  }
384
341
  else {
385
- const existingBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").at(existing);
342
+ const existingBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").at(existing);
386
343
  if (existingBuffer?.equals(buffer)) {
387
344
  return false;
388
345
  }
@@ -394,7 +351,24 @@ export class KVPxeDatabase {
394
351
  return Promise.resolve(__classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, account));
395
352
  }
396
353
  getCompleteAddresses() {
397
- return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f")).map(v => CompleteAddress.fromBuffer(v)));
354
+ return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f")).map(v => CompleteAddress.fromBuffer(v)));
355
+ }
356
+ async addContactAddress(address) {
357
+ if (__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").has(address.toString())) {
358
+ return false;
359
+ }
360
+ await __classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").add(address.toString());
361
+ return true;
362
+ }
363
+ getContactAddresses() {
364
+ return [...__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").entries()].map(AztecAddress.fromString);
365
+ }
366
+ async removeContactAddress(address) {
367
+ if (!__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").has(address.toString())) {
368
+ return false;
369
+ }
370
+ await __classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").delete(address.toString());
371
+ return true;
398
372
  }
399
373
  getSynchedBlockNumberForAccount(account) {
400
374
  return __classPrivateFieldGet(this, _KVPxeDatabase_syncedBlockPerPublicKey, "f").get(account.toString());
@@ -406,24 +380,28 @@ export class KVPxeDatabase {
406
380
  const incomingNotesSize = Array.from(await this.getIncomingNotes({})).reduce((sum, note) => sum + note.getSize(), 0);
407
381
  const outgoingNotesSize = Array.from(await this.getOutgoingNotes({})).reduce((sum, note) => sum + note.getSize(), 0);
408
382
  const authWitsSize = Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").values()).reduce((sum, value) => sum + value.length * Fr.SIZE_IN_BYTES, 0);
409
- const addressesSize = __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").length * CompleteAddress.SIZE_IN_BYTES;
383
+ const addressesSize = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").length * CompleteAddress.SIZE_IN_BYTES;
410
384
  const treeRootsSize = Object.keys(MerkleTreeId).length * Fr.SIZE_IN_BYTES;
411
385
  return incomingNotesSize + outgoingNotesSize + treeRootsSize + authWitsSize + addressesSize;
412
386
  }
413
- async incrementTaggingSecretsIndexes(appTaggingSecrets) {
414
- const indexes = await this.getTaggingSecretsIndexes(appTaggingSecrets);
387
+ async incrementTaggingSecretsIndexesAsSender(appTaggingSecrets) {
388
+ await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_incrementTaggingSecretsIndexes).call(this, appTaggingSecrets, __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f"));
389
+ }
390
+ async setTaggingSecretsIndexesAsRecipient(indexedSecrets) {
415
391
  await this.db.transaction(() => {
416
- indexes.forEach(index => {
417
- const nextIndex = index ? index + 1 : 1;
418
- void __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexes, "f").set(appTaggingSecrets.toString(), nextIndex);
392
+ indexedSecrets.forEach(indexedSecret => {
393
+ void __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f").set(indexedSecret.secret.toString(), indexedSecret.index);
419
394
  });
420
395
  });
421
396
  }
422
- getTaggingSecretsIndexes(appTaggingSecrets) {
423
- return this.db.transaction(() => appTaggingSecrets.map(secret => __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexes, "f").get(secret.toString()) ?? 0));
397
+ async getTaggingSecretsIndexesAsRecipient(appTaggingSecrets) {
398
+ return await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getTaggingSecretsIndexes).call(this, appTaggingSecrets, __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f"));
399
+ }
400
+ async getTaggingSecretsIndexesAsSender(appTaggingSecrets) {
401
+ return await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getTaggingSecretsIndexes).call(this, appTaggingSecrets, __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f"));
424
402
  }
425
403
  }
426
- _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_addresses = new WeakMap(), _KVPxeDatabase_addressIndex = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByIvpkM = new WeakMap(), _KVPxeDatabase_deferredNotes = new WeakMap(), _KVPxeDatabase_deferredNotesByContract = new WeakMap(), _KVPxeDatabase_syncedBlockPerPublicKey = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_outgoingNotes = new WeakMap(), _KVPxeDatabase_outgoingNotesByContract = new WeakMap(), _KVPxeDatabase_outgoingNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_outgoingNotesByTxHash = new WeakMap(), _KVPxeDatabase_outgoingNotesByOvpkM = new WeakMap(), _KVPxeDatabase_scopes = new WeakMap(), _KVPxeDatabase_notesByContractAndScope = new WeakMap(), _KVPxeDatabase_notesByStorageSlotAndScope = new WeakMap(), _KVPxeDatabase_notesByTxHashAndScope = new WeakMap(), _KVPxeDatabase_notesByIvpkMAndScope = new WeakMap(), _KVPxeDatabase_taggingSecretIndexes = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_addScope = async function _KVPxeDatabase_addScope(scope) {
404
+ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_completeAddresses = new WeakMap(), _KVPxeDatabase_completeAddressIndex = new WeakMap(), _KVPxeDatabase_addressBook = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByAddressPoint = new WeakMap(), _KVPxeDatabase_syncedBlockPerPublicKey = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_outgoingNotes = new WeakMap(), _KVPxeDatabase_outgoingNotesByContract = new WeakMap(), _KVPxeDatabase_outgoingNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_outgoingNotesByTxHash = new WeakMap(), _KVPxeDatabase_outgoingNotesByOvpkM = new WeakMap(), _KVPxeDatabase_scopes = new WeakMap(), _KVPxeDatabase_notesByContractAndScope = new WeakMap(), _KVPxeDatabase_notesByStorageSlotAndScope = new WeakMap(), _KVPxeDatabase_notesByTxHashAndScope = new WeakMap(), _KVPxeDatabase_notesByAddressPointAndScope = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForSenders = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForRecipients = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_addScope = async function _KVPxeDatabase_addScope(scope) {
427
405
  const scopeString = scope.toString();
428
406
  if (__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").has(scopeString)) {
429
407
  return false;
@@ -432,14 +410,24 @@ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_addresses = new
432
410
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_contract`));
433
411
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_storage_slot`));
434
412
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_tx_hash`));
435
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByIvpkMAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_ivpk_m`));
413
+ __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_address_point`));
436
414
  return true;
437
415
  }, _KVPxeDatabase_getCompleteAddress = function _KVPxeDatabase_getCompleteAddress(address) {
438
- const index = __classPrivateFieldGet(this, _KVPxeDatabase_addressIndex, "f").get(address.toString());
416
+ const index = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").get(address.toString());
439
417
  if (typeof index === 'undefined') {
440
418
  return undefined;
441
419
  }
442
- const value = __classPrivateFieldGet(this, _KVPxeDatabase_addresses, "f").at(index);
420
+ const value = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").at(index);
443
421
  return value ? CompleteAddress.fromBuffer(value) : undefined;
422
+ }, _KVPxeDatabase_incrementTaggingSecretsIndexes = async function _KVPxeDatabase_incrementTaggingSecretsIndexes(appTaggingSecrets, storageMap) {
423
+ const indexes = await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getTaggingSecretsIndexes).call(this, appTaggingSecrets, storageMap);
424
+ await this.db.transaction(() => {
425
+ indexes.forEach((taggingSecretIndex, listIndex) => {
426
+ const nextIndex = taggingSecretIndex + 1;
427
+ void storageMap.set(appTaggingSecrets[listIndex].toString(), nextIndex);
428
+ });
429
+ });
430
+ }, _KVPxeDatabase_getTaggingSecretsIndexes = function _KVPxeDatabase_getTaggingSecretsIndexes(appTaggingSecrets, storageMap) {
431
+ return this.db.transaction(() => appTaggingSecrets.map(secret => storageMap.get(`${secret.toString()}`) ?? 0));
444
432
  };
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxZQUFZLEVBQ1osVUFBVSxHQUdYLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUNOLDRCQUE0QixHQUM3QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTOUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHekQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQW1DeEIsWUFBb0IsRUFBZ0I7O1FBQWhCLE9BQUUsR0FBRixFQUFFLENBQWM7UUFsQ3BDLG1EQUEyQztRQUMzQywyQ0FBK0I7UUFDL0IsOENBQXdDO1FBQ3hDLCtDQUEyQztRQUMzQywwQ0FBZ0M7UUFDaEMsdUNBQWlDO1FBQ2pDLGdEQUEwQztRQUMxQyxtREFBNkM7UUFFN0MsMERBQXlEO1FBQ3pELDZEQUE0RDtRQUM1RCx3REFBdUQ7UUFDdkQsdURBQXNEO1FBQ3RELCtDQUEwQztRQUMxQyx5REFBd0Q7UUFDeEQseURBQW1EO1FBQ25ELG1EQUE2QztRQUM3QyxtREFBNkM7UUFDN0Msb0NBQWtCO1FBRWxCLCtDQUF5QztRQUN6Qyx5REFBd0Q7UUFDeEQsNERBQTJEO1FBQzNELHVEQUFzRDtRQUN0RCxzREFBcUQ7UUFFckQsd0NBQTBCO1FBQzFCLHlEQUFxRTtRQUNyRSw0REFBd0U7UUFDeEUsdURBQW1FO1FBQ25FLHNEQUFrRTtRQUVsRSxzREFBZ0Q7UUFHOUMsdUJBQUEsSUFBSSxxQkFBTyxFQUFFLE1BQUEsQ0FBQztRQUVkLHVCQUFBLElBQUksNEJBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBQSxDQUFDO1FBQzVDLHVCQUFBLElBQUksK0JBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQUEsQ0FBQztRQUVqRCx1QkFBQSxJQUFJLGdDQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQUEsQ0FBQztRQUNuRCx1QkFBQSxJQUFJLDJCQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQUEsQ0FBQztRQUUxQyx1QkFBQSxJQUFJLG9DQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQUEsQ0FBQztRQUMzRCx1QkFBQSxJQUFJLG9DQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQUEsQ0FBQztRQUU1RCx1QkFBQSxJQUFJLG9DQUFzQixFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFBLENBQUM7UUFDckQsdUJBQUEsSUFBSSwwQ0FBNEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFBLENBQUM7UUFFMUUsdUJBQUEsSUFBSSx3QkFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFBLENBQUM7UUFDbEMsdUJBQUEsSUFBSSxpQ0FBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFBLENBQUM7UUFDckQsdUJBQUEsSUFBSSxvQ0FBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFBLENBQUM7UUFFMUQsdUJBQUEsSUFBSSwyQ0FBNkIsRUFBRSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFBLENBQUM7UUFDaEYsdUJBQUEsSUFBSSw4Q0FBZ0MsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFBLENBQUM7UUFDdkYsdUJBQUEsSUFBSSx5Q0FBMkIsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFBLENBQUM7UUFDN0UsdUJBQUEsSUFBSSx3Q0FBMEIsRUFBRSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxNQUFBLENBQUM7UUFFM0UsdUJBQUEsSUFBSSxnQ0FBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFBLENBQUM7UUFDckQsdUJBQUEsSUFBSSwwQ0FBNEIsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFBLENBQUM7UUFFOUUsdUJBQUEsSUFBSSxnQ0FBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFBLENBQUM7UUFDbkQsdUJBQUEsSUFBSSwwQ0FBNEIsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFBLENBQUM7UUFDOUUsdUJBQUEsSUFBSSw2Q0FBK0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFBLENBQUM7UUFDckYsdUJBQUEsSUFBSSx3Q0FBMEIsRUFBRSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxNQUFBLENBQUM7UUFDM0UsdUJBQUEsSUFBSSx1Q0FBeUIsRUFBRSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFBLENBQUM7UUFFekUsdUJBQUEsSUFBSSx5QkFBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFBLENBQUM7UUFDcEMsdUJBQUEsSUFBSSwwQ0FBNEIsSUFBSSxHQUFHLEVBQXlDLE1BQUEsQ0FBQztRQUNqRix1QkFBQSxJQUFJLDZDQUErQixJQUFJLEdBQUcsRUFBeUMsTUFBQSxDQUFDO1FBQ3BGLHVCQUFBLElBQUksd0NBQTBCLElBQUksR0FBRyxFQUF5QyxNQUFBLENBQUM7UUFDL0UsdUJBQUEsSUFBSSx1Q0FBeUIsSUFBSSxHQUFHLEVBQXlDLE1BQUEsQ0FBQztRQUU5RSxLQUFLLE1BQU0sS0FBSyxJQUFJLHVCQUFBLElBQUksNkJBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzNDLHVCQUFBLElBQUksOENBQXlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDeEYsdUJBQUEsSUFBSSxpREFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUMvRix1QkFBQSxJQUFJLDRDQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLHVCQUFBLElBQUksMkNBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELHVCQUFBLElBQUksdUNBQXlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBQSxDQUFDO0lBQ3BFLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUN0QixPQUFxQjtRQUVyQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBTSxFQUFFLFFBQTBCO1FBQ2pFLE1BQU0sdUJBQUEsSUFBSSx3Q0FBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEVBQU07UUFDL0IsTUFBTSxRQUFRLEdBQUcsdUJBQUEsSUFBSSx3Q0FBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUQsNEdBQTRHO1FBQzVHLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksMEJBQTBCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFxQztRQUM3RCxNQUFNLHVCQUFBLElBQUksd0NBQW1CLENBQUMsR0FBRyxDQUMvQixRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUMzQixJQUFJLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQXFCO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLHVCQUFBLElBQUksd0NBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksNEJBQTRCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFlLEVBQUUsT0FBYTtRQUNqRCxNQUFNLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxHQUFHLENBQzNCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFlO1FBQzVCLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFhO1FBQzVCLE1BQU0sdUJBQUEsSUFBSSwrQkFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFNLHVCQUFBLElBQUksK0JBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBcUIsRUFBRSxLQUFvQjtRQUN2RCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osYUFBZ0MsRUFDaEMsYUFBZ0MsRUFDaEMsUUFBc0IsWUFBWSxDQUFDLElBQUk7UUFFdkMsSUFBSSxDQUFDLHVCQUFBLElBQUksNkJBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLHVCQUFBLElBQUkseURBQVUsTUFBZCxJQUFJLEVBQVcsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLG9EQUFvRDtnQkFDcEQsaUVBQWlFO2dCQUNqRSxvRUFBb0U7Z0JBQ3BFLGdGQUFnRjtnQkFDaEYsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxLQUFLLHVCQUFBLElBQUksNEJBQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxLQUFLLHVCQUFBLElBQUksd0NBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRTVFLEtBQUssdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3pHLEtBQUssdUJBQUEsSUFBSSxpREFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3hHLEtBQUssdUJBQUEsSUFBSSw0Q0FBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzlGLEtBQUssdUJBQUEsSUFBSSwyQ0FBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDOUYsQ0FBQztZQUVELEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUQsS0FBSyx1QkFBQSxJQUFJLG9DQUFlLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEQsS0FBSyx1QkFBQSxJQUFJLDhDQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRixLQUFLLHVCQUFBLElBQUksaURBQTRCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2pGLEtBQUssdUJBQUEsSUFBSSw0Q0FBdUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkUsS0FBSyx1QkFBQSxJQUFJLDJDQUFzQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBZ0M7UUFDckQsTUFBTSxTQUFTLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG9DQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEcsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4RCxNQUFNLHVCQUFBLElBQUksOENBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNGLENBQUM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsZUFBNkI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEYsTUFBTSxLQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sY0FBYyxHQUFHLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNkJBQTZCLENBQUMsZUFBNkI7UUFDekQsT0FBTyx1QkFBQSxJQUFJLHlCQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLGFBQWEsR0FBc0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVoRyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNLGtCQUFrQixHQUFHLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN4QixTQUFTO2dCQUNYLENBQUM7cUJBQU0sQ0FBQztvQkFDTixhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDO2dCQUVELEtBQUssdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNsRixLQUFLLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFFRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUEyQjtRQUMxQyxNQUFNLFNBQVMsR0FBMEIsTUFBTSxDQUFDLEtBQUs7WUFDbkQsQ0FBQyxDQUFDLHVCQUFBLElBQUksbUVBQW9CLE1BQXhCLElBQUksRUFBcUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyw4QkFBOEI7WUFDbkYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRW5ELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBRWhDLE1BQU0sQ0FBQyxNQUFNLEtBQWIsTUFBTSxDQUFDLE1BQU0sR0FBSyxDQUFDLEdBQUcsdUJBQUEsSUFBSSw2QkFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDO1FBRTNHLE1BQU0scUJBQXFCLEdBQStCLEVBQUUsQ0FBQztRQUU3RCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDZCQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1lBQzlGLENBQUM7WUFFRCxxQkFBcUIsQ0FBQyxJQUFJLENBQ3hCLFNBQVM7Z0JBQ1AsQ0FBQyxDQUFDLHVCQUFBLElBQUksMkNBQXNCLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdkYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUNmLENBQUMsQ0FBQyx1QkFBQSxJQUFJLDRDQUF1QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM1RixDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWU7d0JBQ3hCLENBQUMsQ0FBQyx1QkFBQSxJQUFJLDhDQUF5QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN2RyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVc7NEJBQ3BCLENBQUMsQ0FBQyx1QkFBQSxJQUFJLGlEQUE0QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN0RyxDQUFDLENBQUMsdUJBQUEsSUFBSSwyQ0FBc0IsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FDbkUsQ0FBQztRQUNKLENBQUM7UUFFRCxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDeEIsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN0RixLQUFLLEVBQUUsdUJBQUEsSUFBSSw0QkFBTztTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDcEQsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUN4QixHQUFHLEVBQUUsU0FBUztvQkFDWixDQUFDLENBQUMsdUJBQUEsSUFBSSw0Q0FBdUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM3RCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07d0JBQ2YsQ0FBQyxDQUFDLHVCQUFBLElBQUksNkNBQXdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2xFLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZTs0QkFDeEIsQ0FBQyxDQUFDLHVCQUFBLElBQUksK0NBQTBCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQzdFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVztnQ0FDcEIsQ0FBQyxDQUFDLHVCQUFBLElBQUksa0RBQTZCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQzVFLENBQUMsQ0FBQyx1QkFBQSxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRTtnQkFDL0IsS0FBSyxFQUFFLHVCQUFBLElBQUkscUNBQWdCO2FBQzVCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO1FBQ3JDLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ2xELEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDcEIsU0FBUztnQkFDWCxDQUFDO2dCQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNuRixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3hELFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBWSxDQUFDLEVBQUUsQ0FBQztvQkFDeEUsU0FBUztnQkFDWCxDQUFDO2dCQUVELElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsU0FBUztnQkFDWCxDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNuRixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBMkI7UUFDMUMsTUFBTSxLQUFLLEdBQTBCLE1BQU0sQ0FBQyxLQUFLO1lBQy9DLENBQUMsQ0FBQyx1QkFBQSxJQUFJLG1FQUFvQixNQUF4QixJQUFJLEVBQXFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsOEJBQThCO1lBQ25GLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCwyQkFBMkI7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSztZQUNmLENBQUMsQ0FBQyx1QkFBQSxJQUFJLDJDQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEQsQ0FBQyxDQUFDLHNEQUFzRDtnQkFDeEQsTUFBTSxDQUFDLE1BQU07b0JBQ2IsQ0FBQyxDQUFDLHVCQUFBLElBQUksNENBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pFLENBQUMsQ0FBQyx1RkFBdUY7d0JBQ3pGLE1BQU0sQ0FBQyxlQUFlOzRCQUN0QixDQUFDLENBQUMsdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDNUUsQ0FBQyxDQUFDLDJHQUEyRztnQ0FDN0csTUFBTSxDQUFDLFdBQVc7b0NBQ2xCLENBQUMsQ0FBQyx1QkFBQSxJQUFJLGlEQUE0QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO29DQUMzRSxDQUFDLENBQUMsc0ZBQXNGO3dDQUN0Rix1QkFBQSxJQUFJLG9DQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFL0IsTUFBTSxLQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sY0FBYyxHQUFHLHVCQUFBLElBQUksb0NBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDeEQsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25GLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hFLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxTQUFTO1lBQ1gsQ0FBQztZQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBZ0IsRUFBRSxZQUF1QjtRQUM1RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLHVCQUFBLElBQUkseUJBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sY0FBYyxHQUFzQixFQUFFLENBQUM7WUFFN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsdUJBQUEsSUFBSSx3Q0FBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDZixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyx1QkFBQSxJQUFJLDRCQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBRXRFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEIscURBQXFEO29CQUNyRCxTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLHVDQUF1QztvQkFDdkMsU0FBUztnQkFDWCxDQUFDO2dCQUVELGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTFCLEtBQUssdUJBQUEsSUFBSSw0QkFBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFbkMsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBQSxJQUFJLDZCQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDM0MsS0FBSyx1QkFBQSxJQUFJLDJDQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUM1RixLQUFLLHVCQUFBLElBQUksNENBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUM1RixLQUFLLHVCQUFBLElBQUksOENBQXlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUN2RyxLQUFLLHVCQUFBLElBQUksaURBQTRCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RyxDQUFDO2dCQUVELEtBQUssdUJBQUEsSUFBSSxxQ0FBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLHVCQUFBLElBQUksK0NBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3BGLEtBQUssdUJBQUEsSUFBSSxrREFBNkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbkYsS0FBSyx1QkFBQSxJQUFJLDZDQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN6RSxLQUFLLHVCQUFBLElBQUksNENBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRXZFLEtBQUssdUJBQUEsSUFBSSx3Q0FBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUVELE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFxQjtRQUMxQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0QsTUFBTSx1QkFBQSxJQUFJLHFDQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSx1QkFBQSxJQUFJLCtDQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sdUJBQUEsSUFBSSxrREFBNkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRixNQUFNLHVCQUFBLElBQUksNkNBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUUsTUFBTSx1QkFBQSxJQUFJLDRDQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQWM7UUFDNUIsTUFBTSx1QkFBQSxJQUFJLHdDQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sWUFBWSxHQUFHLHVCQUFBLElBQUksd0NBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sWUFBWSxHQUFHLHVCQUFBLElBQUksd0NBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFrQkQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGVBQWdDO1FBQ3ZELE1BQU0sdUJBQUEsSUFBSSx5REFBVSxNQUFkLElBQUksRUFBVyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUMsT0FBTyx1QkFBQSxJQUFJLHlCQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyx1QkFBQSxJQUFJLG1DQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLHVCQUFBLElBQUksZ0NBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3JDLEtBQUssdUJBQUEsSUFBSSxnQ0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsS0FBSyx1QkFBQSxJQUFJLG1DQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFbEQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxjQUFjLEdBQUcsdUJBQUEsSUFBSSxnQ0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFcEQsSUFBSSxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYix1Q0FBdUMsYUFBYSw0RUFBNEUsQ0FDakksQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFZRCxrQkFBa0IsQ0FBQyxPQUFxQjtRQUN0QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUJBQUEsSUFBSSxtRUFBb0IsTUFBeEIsSUFBSSxFQUFxQixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSxnQ0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELCtCQUErQixDQUFDLE9BQXFCO1FBQ25ELE9BQU8sdUJBQUEsSUFBSSw4Q0FBeUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELCtCQUErQixDQUFDLE9BQXFCLEVBQUUsV0FBbUI7UUFDeEUsT0FBTyx1QkFBQSxJQUFJLDhDQUF5QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNuQyxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNuQyxDQUFDLENBQ0YsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSxvQ0FBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNsRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQ3JELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsdUJBQUEsSUFBSSxnQ0FBVyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzdFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFFMUUsT0FBTyxpQkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxhQUFhLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztJQUM5RixDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUFDLGlCQUF1QjtRQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLHVCQUFBLElBQUksMkNBQXNCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9FLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsaUJBQXVCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQzlCLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLHVCQUFBLElBQUksMkNBQXNCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN4RixDQUFDO0lBQ0osQ0FBQztDQUNGO3cvQ0F4R0MsS0FBSyxrQ0FBVyxLQUFtQjtJQUNqQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMsSUFBSSx1QkFBQSxJQUFJLDZCQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSx1QkFBQSxJQUFJLDZCQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLHVCQUFBLElBQUksOENBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSx1QkFBQSxJQUFJLHlCQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDMUcsdUJBQUEsSUFBSSxpREFBNEIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLHVCQUFBLElBQUkseUJBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNqSCx1QkFBQSxJQUFJLDRDQUF1QixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsdUJBQUEsSUFBSSx5QkFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLHVCQUFBLElBQUksMkNBQXNCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSx1QkFBQSxJQUFJLHlCQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFckcsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLGlGQTZCbUIsT0FBcUI7SUFDdkMsTUFBTSxLQUFLLEdBQUcsdUJBQUEsSUFBSSxtQ0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyx1QkFBQSxJQUFJLGdDQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQyJ9
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBNEIsWUFBWSxFQUFFLFVBQVUsRUFBNEIsTUFBTSxzQkFBc0IsQ0FBQztBQUNwSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFFZixNQUFNLEVBR04sNEJBQTRCLEVBQzVCLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTOUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBc0N4QixZQUFvQixFQUFnQjs7UUFBaEIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQXJDcEMsbURBQTJDO1FBQzNDLG1EQUF1QztRQUN2QyxzREFBZ0Q7UUFDaEQsNkNBQStCO1FBQy9CLCtDQUEyQztRQUMzQywwQ0FBZ0M7UUFDaEMsdUNBQWlDO1FBQ2pDLGdEQUEwQztRQUMxQyxtREFBNkM7UUFFN0MsMERBQXlEO1FBQ3pELDZEQUE0RDtRQUM1RCx3REFBdUQ7UUFDdkQsOERBQTZEO1FBQzdELHlEQUFtRDtRQUNuRCxtREFBNkM7UUFDN0MsbURBQTZDO1FBQzdDLG9DQUFrQjtRQUVsQiwrQ0FBeUM7UUFDekMseURBQXdEO1FBQ3hELDREQUEyRDtRQUMzRCx1REFBc0Q7UUFDdEQsc0RBQXFEO1FBRXJELHdDQUEwQjtRQUMxQix5REFBcUU7UUFDckUs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
@@ -4,7 +4,7 @@ import { type L1NotePayload, Note, TxHash } from '@aztec/circuit-types';
4
4
  import { AztecAddress, Fr, type PublicKey } from '@aztec/circuits.js';
5
5
  import { NoteSelector } from '@aztec/foundation/abi';
6
6
  import { BufferReader } from '@aztec/foundation/serialize';
7
- import { type NoteInfo } from '../note_processor/utils/index.js';
7
+ import { type NoteInfo } from '../note_decryption_utils/index.js';
8
8
  /**
9
9
  * A note with contextual data which was decrypted as outgoing.
10
10
  */
@@ -52,7 +52,7 @@ export declare class OutgoingNoteDao {
52
52
  index: bigint,
53
53
  /** The public key with which the note was encrypted. */
54
54
  ovpkM: PublicKey);
55
- static fromPayloadAndNoteInfo(note: Note, payload: L1NotePayload, noteInfo: NoteInfo, dataStartIndexForTx: number, ivpkM: PublicKey): OutgoingNoteDao;
55
+ static fromPayloadAndNoteInfo(note: Note, payload: L1NotePayload, noteInfo: NoteInfo, dataStartIndexForTx: number, ovpkM: PublicKey): OutgoingNoteDao;
56
56
  toBuffer(): Buffer;
57
57
  static fromBuffer(buffer: Buffer | BufferReader): OutgoingNoteDao;
58
58
  toString(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"outgoing_note_dao.d.ts","sourceRoot":"","sources":["../../src/database/outgoing_note_dao.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAS,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE;;GAEG;AACH,qBAAa,eAAe;IAExB,kDAAkD;IAC3C,IAAI,EAAE,IAAI;IACjB,oDAAoD;IAC7C,eAAe,EAAE,YAAY;IACpC,iEAAiE;IAC1D,WAAW,EAAE,EAAE;IACtB,iDAAiD;IAC1C,UAAU,EAAE,YAAY;IAC/B,kDAAkD;IAC3C,MAAM,EAAE,MAAM;IACrB,6BAA6B;IACtB,KAAK,EAAE,EAAE;IAChB;;;OAGG;IACI,QAAQ,EAAE,EAAE;IACnB,+DAA+D;IACxD,KAAK,EAAE,MAAM;IACpB,wDAAwD;IACjD,KAAK,EAAE,SAAS;;IApBvB,kDAAkD;IAC3C,IAAI,EAAE,IAAI;IACjB,oDAAoD;IAC7C,eAAe,EAAE,YAAY;IACpC,iEAAiE;IAC1D,WAAW,EAAE,EAAE;IACtB,iDAAiD;IAC1C,UAAU,EAAE,YAAY;IAC/B,kDAAkD;IAC3C,MAAM,EAAE,MAAM;IACrB,6BAA6B;IACtB,KAAK,EAAE,EAAE;IAChB;;;OAGG;IACI,QAAQ,EAAE,EAAE;IACnB,+DAA+D;IACxD,KAAK,EAAE,MAAM;IACpB,wDAAwD;IACjD,KAAK,EAAE,SAAS;IAGzB,MAAM,CAAC,sBAAsB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,EAAE,SAAS;IAgBlB,QAAQ,IAAI,MAAM;IAalB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IA0B/C,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAK7B;;;OAGG;IACI,OAAO;CAIf"}
1
+ {"version":3,"file":"outgoing_note_dao.d.ts","sourceRoot":"","sources":["../../src/database/outgoing_note_dao.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAS,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE;;GAEG;AACH,qBAAa,eAAe;IAExB,kDAAkD;IAC3C,IAAI,EAAE,IAAI;IACjB,oDAAoD;IAC7C,eAAe,EAAE,YAAY;IACpC,iEAAiE;IAC1D,WAAW,EAAE,EAAE;IACtB,iDAAiD;IAC1C,UAAU,EAAE,YAAY;IAC/B,kDAAkD;IAC3C,MAAM,EAAE,MAAM;IACrB,6BAA6B;IACtB,KAAK,EAAE,EAAE;IAChB;;;OAGG;IACI,QAAQ,EAAE,EAAE;IACnB,+DAA+D;IACxD,KAAK,EAAE,MAAM;IACpB,wDAAwD;IACjD,KAAK,EAAE,SAAS;;IApBvB,kDAAkD;IAC3C,IAAI,EAAE,IAAI;IACjB,oDAAoD;IAC7C,eAAe,EAAE,YAAY;IACpC,iEAAiE;IAC1D,WAAW,EAAE,EAAE;IACtB,iDAAiD;IAC1C,UAAU,EAAE,YAAY;IAC/B,kDAAkD;IAC3C,MAAM,EAAE,MAAM;IACrB,6BAA6B;IACtB,KAAK,EAAE,EAAE;IAChB;;;OAGG;IACI,QAAQ,EAAE,EAAE;IACnB,+DAA+D;IACxD,KAAK,EAAE,MAAM;IACpB,wDAAwD;IACjD,KAAK,EAAE,SAAS;IAGzB,MAAM,CAAC,sBAAsB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,EAAE,SAAS;IAgBlB,QAAQ,IAAI,MAAM;IAalB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IA0B/C,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAK7B;;;OAGG;IACI,OAAO;CAIf"}
@@ -39,9 +39,9 @@ export class OutgoingNoteDao {
39
39
  this.index = index;
40
40
  this.ovpkM = ovpkM;
41
41
  }
42
- static fromPayloadAndNoteInfo(note, payload, noteInfo, dataStartIndexForTx, ivpkM) {
42
+ static fromPayloadAndNoteInfo(note, payload, noteInfo, dataStartIndexForTx, ovpkM) {
43
43
  const noteHashIndexInTheWholeTree = BigInt(dataStartIndexForTx + noteInfo.noteHashIndex);
44
- return new OutgoingNoteDao(note, payload.contractAddress, payload.storageSlot, payload.noteTypeId, noteInfo.txHash, noteInfo.nonce, noteInfo.noteHash, noteHashIndexInTheWholeTree, ivpkM);
44
+ return new OutgoingNoteDao(note, payload.contractAddress, payload.storageSlot, payload.noteTypeId, noteInfo.txHash, noteInfo.nonce, noteInfo.noteHash, noteHashIndexInTheWholeTree, ovpkM);
45
45
  }
46
46
  toBuffer() {
47
47
  return serializeToBuffer([
@@ -1,11 +1,10 @@
1
1
  import { type IncomingNotesFilter, type OutgoingNotesFilter } from '@aztec/circuit-types';
2
- import { type CompleteAddress, type ContractInstanceWithAddress, type Header, type PublicKey } from '@aztec/circuits.js';
2
+ import { type CompleteAddress, type ContractInstanceWithAddress, type Header, type IndexedTaggingSecret, type PublicKey } from '@aztec/circuits.js';
3
3
  import { type ContractArtifact } from '@aztec/foundation/abi';
4
4
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
5
5
  import { type Fr } from '@aztec/foundation/fields';
6
6
  import { type ContractArtifactDatabase } from './contracts/contract_artifact_db.js';
7
7
  import { type ContractInstanceDatabase } from './contracts/contract_instance_db.js';
8
- import { type DeferredNoteDao } from './deferred_note_dao.js';
9
8
  import { type IncomingNoteDao } from './incoming_note_dao.js';
10
9
  import { type OutgoingNoteDao } from './outgoing_note_dao.js';
11
10
  /**
@@ -72,22 +71,6 @@ export interface PxeDatabase extends ContractArtifactDatabase, ContractInstanceD
72
71
  * @remark - Will create a database for the scope if it does not already exist.
73
72
  */
74
73
  addNotes(incomingNotes: IncomingNoteDao[], outgoingNotes: OutgoingNoteDao[], scope?: AztecAddress): Promise<void>;
75
- /**
76
- * Add notes to the database that are intended for us, but we don't yet have the contract.
77
- * @param deferredNotes - An array of deferred notes.
78
- */
79
- addDeferredNotes(deferredNotes: DeferredNoteDao[]): Promise<void>;
80
- /**
81
- * Get deferred notes for a given contract address.
82
- * @param contractAddress - The contract address to get the deferred notes for.
83
- */
84
- getDeferredNotesByContract(contractAddress: AztecAddress): Promise<DeferredNoteDao[]>;
85
- /**
86
- * Remove deferred notes for a given contract address.
87
- * @param contractAddress - The contract address to remove the deferred notes for.
88
- * @returns an array of the removed deferred notes
89
- */
90
- removeDeferredNotesByContract(contractAddress: AztecAddress): Promise<DeferredNoteDao[]>;
91
74
  /**
92
75
  * Remove nullified notes associated with the given account and nullifiers.
93
76
  *
@@ -121,6 +104,23 @@ export interface PxeDatabase extends ContractArtifactDatabase, ContractInstanceD
121
104
  * @returns A Promise that resolves when the hash has been successfully updated in the database.
122
105
  */
123
106
  setHeader(header: Header): Promise<void>;
107
+ /**
108
+ * Adds contact address to the database.
109
+ * @param address - The address to add to the address book.
110
+ * @returns A promise resolving to true if the address was added, false if it already exists.
111
+ */
112
+ addContactAddress(address: AztecAddress): Promise<boolean>;
113
+ /**
114
+ * Retrieves the list of contact addresses in the address book.
115
+ * @returns An array of Aztec addresses.
116
+ */
117
+ getContactAddresses(): AztecAddress[];
118
+ /**
119
+ * Removes a contact address from the database.
120
+ * @param address - The address to remove from the address book.
121
+ * @returns A promise resolving to true if the address was removed, false if it does not exist.
122
+ */
123
+ removeContactAddress(address: AztecAddress): Promise<boolean>;
124
124
  /**
125
125
  * Adds complete address to the database.
126
126
  * @param address - The complete address to add.
@@ -156,7 +156,29 @@ export interface PxeDatabase extends ContractArtifactDatabase, ContractInstanceD
156
156
  * @returns The estimated size in bytes of this db.
157
157
  */
158
158
  estimateSize(): Promise<number>;
159
- getTaggingSecretsIndexes(appTaggingSecrets: Fr[]): Promise<number[]>;
160
- incrementTaggingSecretsIndexes(appTaggingSecrets: Fr[]): Promise<void>;
159
+ /**
160
+ * Returns the last seen indexes for the provided app siloed tagging secrets or 0 if they've never been seen.
161
+ * @param appTaggingSecrets - The app siloed tagging secrets.
162
+ * @returns The indexes for the provided secrets, 0 if they've never been seen.
163
+ */
164
+ getTaggingSecretsIndexesAsRecipient(appTaggingSecrets: Fr[]): Promise<number[]>;
165
+ /**
166
+ * Returns the last seen indexes for the provided app siloed tagging secrets or 0 if they've never been used
167
+ * @param appTaggingSecrets - The app siloed tagging secrets.
168
+ * @returns The indexes for the provided secrets, 0 if they've never been seen.
169
+ */
170
+ getTaggingSecretsIndexesAsSender(appTaggingSecrets: Fr[]): Promise<number[]>;
171
+ /**
172
+ * Increments the index for the provided app siloed tagging secrets in the senders database
173
+ * To be used when the generated tags have been used as sender
174
+ * @param appTaggingSecrets - The app siloed tagging secrets.
175
+ */
176
+ incrementTaggingSecretsIndexesAsSender(appTaggingSecrets: Fr[]): Promise<void>;
177
+ /**
178
+ * Sets the index for the provided app siloed tagging secrets
179
+ * To be used when the generated tags have been "seen" as a recipient
180
+ * @param appTaggingSecrets - The app siloed tagging secrets.
181
+ */
182
+ setTaggingSecretsIndexesAsRecipient(indexedTaggingSecrets: IndexedTaggingSecret[]): Promise<void>;
161
183
  }
162
184
  //# sourceMappingURL=pxe_database.d.ts.map