@aztec/accounts 0.20.0 → 0.21.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.
@@ -1,11 +1,11 @@
1
1
  {
2
- "noir_version": "0.23.0+602f23f4fb698cf6e37071936a2a46593a998d08",
2
+ "noir_version": "0.23.0+ea6aebcc4e190d9dbadaf1dd0f70950651eed615",
3
3
  "name": "SchnorrAccount",
4
4
  "functions": [
5
5
  {
6
- "name": "set_is_valid_storage",
6
+ "name": "is_valid_public",
7
7
  "function_type": "Open",
8
- "is_internal": true,
8
+ "is_internal": false,
9
9
  "abi": {
10
10
  "parameters": [
11
11
  {
@@ -65,18 +65,127 @@
65
65
  }
66
66
  },
67
67
  {
68
- "name": "block_header",
68
+ "name": "historical_header",
69
69
  "type": {
70
70
  "kind": "struct",
71
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
71
+ "path": "authwit::aztec::protocol_types::header::Header",
72
72
  "fields": [
73
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
74
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
75
- { "name": "contract_tree_root", "type": { "kind": "field" } },
76
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
77
- { "name": "archive_root", "type": { "kind": "field" } },
78
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
79
- { "name": "global_variables_hash", "type": { "kind": "field" } }
73
+ {
74
+ "name": "last_archive",
75
+ "type": {
76
+ "kind": "struct",
77
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
78
+ "fields": [
79
+ { "name": "root", "type": { "kind": "field" } },
80
+ {
81
+ "name": "next_available_leaf_index",
82
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
83
+ }
84
+ ]
85
+ }
86
+ },
87
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
88
+ {
89
+ "name": "state",
90
+ "type": {
91
+ "kind": "struct",
92
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
93
+ "fields": [
94
+ {
95
+ "name": "l1_to_l2_message_tree",
96
+ "type": {
97
+ "kind": "struct",
98
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
99
+ "fields": [
100
+ { "name": "root", "type": { "kind": "field" } },
101
+ {
102
+ "name": "next_available_leaf_index",
103
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
104
+ }
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ "name": "partial",
110
+ "type": {
111
+ "kind": "struct",
112
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
113
+ "fields": [
114
+ {
115
+ "name": "note_hash_tree",
116
+ "type": {
117
+ "kind": "struct",
118
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
119
+ "fields": [
120
+ { "name": "root", "type": { "kind": "field" } },
121
+ {
122
+ "name": "next_available_leaf_index",
123
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
124
+ }
125
+ ]
126
+ }
127
+ },
128
+ {
129
+ "name": "nullifier_tree",
130
+ "type": {
131
+ "kind": "struct",
132
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
133
+ "fields": [
134
+ { "name": "root", "type": { "kind": "field" } },
135
+ {
136
+ "name": "next_available_leaf_index",
137
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
138
+ }
139
+ ]
140
+ }
141
+ },
142
+ {
143
+ "name": "contract_tree",
144
+ "type": {
145
+ "kind": "struct",
146
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
147
+ "fields": [
148
+ { "name": "root", "type": { "kind": "field" } },
149
+ {
150
+ "name": "next_available_leaf_index",
151
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
152
+ }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ "name": "public_data_tree",
158
+ "type": {
159
+ "kind": "struct",
160
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
161
+ "fields": [
162
+ { "name": "root", "type": { "kind": "field" } },
163
+ {
164
+ "name": "next_available_leaf_index",
165
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
166
+ }
167
+ ]
168
+ }
169
+ }
170
+ ]
171
+ }
172
+ }
173
+ ]
174
+ }
175
+ },
176
+ {
177
+ "name": "global_variables",
178
+ "type": {
179
+ "kind": "struct",
180
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
181
+ "fields": [
182
+ { "name": "chain_id", "type": { "kind": "field" } },
183
+ { "name": "version", "type": { "kind": "field" } },
184
+ { "name": "block_number", "type": { "kind": "field" } },
185
+ { "name": "timestamp", "type": { "kind": "field" } }
186
+ ]
187
+ }
188
+ }
80
189
  ]
81
190
  }
82
191
  },
@@ -97,14 +206,9 @@
97
206
  },
98
207
  "visibility": "private"
99
208
  },
100
- { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" },
101
- { "name": "value", "type": { "kind": "boolean" }, "visibility": "private" }
209
+ { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
102
210
  ],
103
- "param_witnesses": {
104
- "inputs": [{ "start": 0, "end": 19 }],
105
- "message_hash": [{ "start": 19, "end": 20 }],
106
- "value": [{ "start": 20, "end": 21 }]
107
- },
211
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 30 }], "message_hash": [{ "start": 30, "end": 31 }] },
108
212
  "return_type": {
109
213
  "abi_type": {
110
214
  "kind": "struct",
@@ -233,18 +337,127 @@
233
337
  },
234
338
  { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
235
339
  {
236
- "name": "block_header",
340
+ "name": "historical_header",
237
341
  "type": {
238
342
  "kind": "struct",
239
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
343
+ "path": "authwit::aztec::protocol_types::header::Header",
240
344
  "fields": [
241
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
242
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
243
- { "name": "contract_tree_root", "type": { "kind": "field" } },
244
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
245
- { "name": "archive_root", "type": { "kind": "field" } },
246
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
247
- { "name": "global_variables_hash", "type": { "kind": "field" } }
345
+ {
346
+ "name": "last_archive",
347
+ "type": {
348
+ "kind": "struct",
349
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
350
+ "fields": [
351
+ { "name": "root", "type": { "kind": "field" } },
352
+ {
353
+ "name": "next_available_leaf_index",
354
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
355
+ }
356
+ ]
357
+ }
358
+ },
359
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
360
+ {
361
+ "name": "state",
362
+ "type": {
363
+ "kind": "struct",
364
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
365
+ "fields": [
366
+ {
367
+ "name": "l1_to_l2_message_tree",
368
+ "type": {
369
+ "kind": "struct",
370
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
371
+ "fields": [
372
+ { "name": "root", "type": { "kind": "field" } },
373
+ {
374
+ "name": "next_available_leaf_index",
375
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
376
+ }
377
+ ]
378
+ }
379
+ },
380
+ {
381
+ "name": "partial",
382
+ "type": {
383
+ "kind": "struct",
384
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
385
+ "fields": [
386
+ {
387
+ "name": "note_hash_tree",
388
+ "type": {
389
+ "kind": "struct",
390
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
391
+ "fields": [
392
+ { "name": "root", "type": { "kind": "field" } },
393
+ {
394
+ "name": "next_available_leaf_index",
395
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
396
+ }
397
+ ]
398
+ }
399
+ },
400
+ {
401
+ "name": "nullifier_tree",
402
+ "type": {
403
+ "kind": "struct",
404
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
405
+ "fields": [
406
+ { "name": "root", "type": { "kind": "field" } },
407
+ {
408
+ "name": "next_available_leaf_index",
409
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
410
+ }
411
+ ]
412
+ }
413
+ },
414
+ {
415
+ "name": "contract_tree",
416
+ "type": {
417
+ "kind": "struct",
418
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
419
+ "fields": [
420
+ { "name": "root", "type": { "kind": "field" } },
421
+ {
422
+ "name": "next_available_leaf_index",
423
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
424
+ }
425
+ ]
426
+ }
427
+ },
428
+ {
429
+ "name": "public_data_tree",
430
+ "type": {
431
+ "kind": "struct",
432
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
433
+ "fields": [
434
+ { "name": "root", "type": { "kind": "field" } },
435
+ {
436
+ "name": "next_available_leaf_index",
437
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
438
+ }
439
+ ]
440
+ }
441
+ }
442
+ ]
443
+ }
444
+ }
445
+ ]
446
+ }
447
+ },
448
+ {
449
+ "name": "global_variables",
450
+ "type": {
451
+ "kind": "struct",
452
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
453
+ "fields": [
454
+ { "name": "chain_id", "type": { "kind": "field" } },
455
+ { "name": "version", "type": { "kind": "field" } },
456
+ { "name": "block_number", "type": { "kind": "field" } },
457
+ { "name": "timestamp", "type": { "kind": "field" } }
458
+ ]
459
+ }
460
+ }
248
461
  ]
249
462
  }
250
463
  },
@@ -261,21 +474,22 @@
261
474
  "visibility": "public"
262
475
  },
263
476
  "return_witnesses": [
264
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
265
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
266
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
267
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
268
- 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
269
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
270
- 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
271
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210
477
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
478
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
479
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
480
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
481
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
482
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
483
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
484
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
485
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231
272
486
  ]
273
487
  },
274
- "bytecode": "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",
275
- "debug_symbols": "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X+J0f4nT/SVO95c43V/idH+J0/0lTveXuNxf4nJ/icv9JS73l7jcX+Jyf4nL/SUu95e43F/icn+J2/0lbveXuN1f4nZ/idv9JW73l7jdX+J2f4nb/SVu95d43F/icX+Jx/0lHveXeNxf4nF/icf9JR73l3jcX+Jxf4mv+0t83V/i6/4SX/eX+Lq/xNf9Jb7uL/F1f4mv+0t8zV/i9Zi/xOsxf4nXY/4Sr8f8JV6P+Uu8HvOXeD3mL/F6zF/i9Zi/xOtxf4mX+0u83F/i5f4SL/eXeLm/xMv9JV7uL/Fyf4mX+0u83F/i7f4Sb/eXeLu/xNv9Jd7uL/F2f4m3+0u83V9i98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2xt98bWdm9sbffG1nZvbO3H/CXe7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3j3tg67o2t497YOu6NrfOYv8THvbF13Btbx72xddwbW8e9sXXcG1vH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"
488
+ "bytecode": "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",
489
+ "debug_symbols": "5Z3NjmTZkZzfpdeEcN2P//JVBC0G0ggYYMARRO4IvrvuSBVZRTCb1ZaVEW2mWrFRiBvhhyfDPNvI76u//vLv//Hf/+Uv//Yff/rzL3/86y/Xf7HLf/njf/3rL3/+X//yp//8kz//5V/+919++eP1h1/+9U//4/7Pv/3hl//5b//+r7/80e3623/7w/994sBPBPxEwk8U/ETDT8xvf+IP//A667QvL7XufXt1nMfb71Pf3q7nvr099+39uW9/nvv28dy3z+e+fT337fu5b//cb60991vrz/3W+nO/tf7cb60/91vrz/3W+nO/tf7cb60/91vrP/at3X281C/zb9/+vVnivM0S8fbie98/hlmiYc7FNIwxDeNMwxymYYJpmGQappiGaaZhmBL4MCVwMCVwMCVwMCVwMCVwMCVwMCVwMCVwMCVwMCVwMCVwMiVwMiVwMiVwMiVwMiVwMiVwMiVwMiVwMiVwMiVwMSVwMSVwMSVwMSVwMSVwMSVwMSVwMSVwMSVwMSVwMyVwMyVwMyVwMyVwMyVwMyVwMyVwMyVwMyVwMyXwMCXwMCXwMCXwMCXwMCXwMCXwMCXwMCXwMCXwMCXwMiXwMiXwMiXwMiXwMiXwMiXwMiXwMiXwMiXwEiWwX0QJfL8F0zBECewXUQL7RZTAfhElsF+v/Gq/vfj+d0d7Zxi7mIZ53Q+wx9s13f/43jVZMA2TTMMU0zDNNMzrfoWYuObLiyfs+mYYfwyzRMP49cJr6scwnmf+7pqwV38Z3XRHd9LR7drOxzKw6+x7wx/l4UN5eJSadYTk+fLED6XT/ZOdj1Pc/zxfw7gfH/BjCM1v+YAfyoV7vvP2Afc/1zsf4M/+AJTydoQx+fJEwk8U/AT883rgn1cETvh/TyAEwZcnDH7C4SfgOw/4zgO+84DvPOA7D/jOA77zhO884TtP+M4TvvOE7zzhO0/4zhO+84TvPOE7L/jOC77zgu+84Dsv+M4LvvOC77zgOy/4zgu+84bvvOE7b/jOG77zhu+84Ttv+M4bvvOG77zhOx/4zge+84HvfOA7H/jOB77zge984Dsf+M4HvvOF73zhO1/4zhe+84XvfOE7X/jOF77zhe980Ts/1wU/YfATDj9x4CcCfiLhJwp+ouEnBn4CvnOD79zgOzf4zg2+c4Pv3OA7N/jODb5zg+/c4Dt3+M4dvnOH79zhO3f4zh2+c4fvHO4QD9whHofv/MB3fuA7P/Cdwz3cgXu4A/dwB+7hDtzDHbiHO3APd+Ae7sA93IF7uAP3cAfu4Q7cwx24hztwD3fgHu7APdyBe7gD93AH7uEO3MMduIc7cA934B7uwD3cgXu4A/dwB+7hDtzDHbiHO3APd+Ae7sA93IF7uAP3cAfu4Q7cwx24hztwD3fgHu7APdyBe7gD93AH7uEO3MMduIc7cA934B7uwD3cgXu4A/dwB+7hDtzDHbiHO3APd+Ae7sA93IF7uAP3cAfu4Q7cwx24hztwD3fgHu7APdyBe7gD93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AB93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AJ93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AF93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AN93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AD93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93AL93B2wUXc/Yjhjzj+yMEfCfyRxB8p/JHGHxn8Efz2Db99w2/f8Ns3/PYNv33Db9/w2zf89g2/fcNv3/Hbd/z2Hb99x2/f8dt3/PYdv33Hb9/x23f89g9++we//YPf/sFv/+C3f/DbP/jtH/z2D377B7/9wG8/8NsP/PYDv/3Abz/w2w/89gO//cBvP/DbT/z2E7/9xG8/8dtP/PYTv/3Ebz/x20/89hO//cJvv/DbL/z2C7/9wm+/8Nsv/PYLv/3Cb7/w22/89hu//cZvv/Hbb/z2G7/9xm+/8dtv/PYbv/3Bb3/w2x/89ge//cFvf/DbH/z2B7/9wW9/8Ntf/PYXv/3Fb3/x21/89he//cVvf/HbX/z28a7P8K7P8K7P8K7P8K7v/q0XfyTxRwp/pPFHBn8Ev3286zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO86zO863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863O863Ok6/vDP7wufb68MiPfXhv19u711Hfvp777PPXd90fe3Sfz8dr7n9veXt/vvfzuWh8vvr6+9Xn7IUAaz+cPY0zDONMw52nDPD4hnv4J+fRPqKd/Qv/gJ2y8fUJd84M/FMM0zBINsxfTMMY0jDMNc5iGCaZhkmmYYhqGKYGXKYGXKIHPRZTA5yJK4HMRJfC5iBL4XEQJfC6iBD4XUQKfiyiBz0WUwOdiSmBjSmBjSmBjSmBjSmBjSmBjSmBjSmBjSmBjSmBjSmBnSmBnSmBnSmBnSmBnSmBnSmBnSmBnSmBnSmBnSuDDlMCHKYEPUwIfpgQ+TAl8mBL4MCXwYUrgw5TAhymBgymBgymBgymBgymBgymBgymBgymBgymBgymBgymBkymBkymBkymBkymBkymBkymBkymBkymBkymBkymBiymBiymBiymBiymBiymBiymBiymBiymBiymBiymBmymBmymBmymBmymBmymBmymBmymBmymBmymBmymBhymBhymBhymBhymBhymBhymBhymBmZi4w8TEHSYm7jAxcYeJiTtMTNxhYuIOExN3mJi4w8TEHSYm7jAxcYeJiQsmJi6YmLhgYuKCiYmLiyiBg4mJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4YGLigomJCyYmLpiYuGBi4oKJiQsmJi6YmLhgYuKCiYkLJiYumJi4ZGLikomJSyYmLpmYuLyIEjiZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiUsmJi6ZmLhkYuKSiYlLJiYumZi4ZGLikomJSyYmLpmYuGRi4pKJiSsmJq6YmLhiYuKKiYmriyiBi4mJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4YmLiiomJKyYmrpiYuGJi4oqJiSsmJq6YmLhiYuKKiYkrJiaumJi4ZmLimomJayYmrpmYuL6IEriZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi4pqJiWsmJq6ZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi4pqJiWsmJq6ZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi4pqJiWsmJq6ZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi4pqJiWsmJq6ZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi4pqJiWsmJq6ZmLhmYuKaiYlrJiaumZi4ZmLimomJayYmrpmYuGZi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tYUErS0kaG0hQWsLCUZbSDDaQoLRFhKMtpBgLumtO9pCgtEWEoy2kGC0hQSjLSQYbSHBaAsJRltIMNpCgtEWEoy2kGC0hQSjLSQYbSHBaAsJRltIMORCgu+Or711ydUB3x1fe+uSQ/7fHV9765Lj+N8dX3vrkoPz3xufnIb/7vjaW/dob92jvXWP9tY92lv3aG/do711j/bWPdpbN7S3bmhv3dDeuqG9dXHxDtf42ls3tLduaG/d0N66ob11U3vrpvbWTe2tm9pb9/NtU68dX3vrpvbWTe2tm9pbN7W3bmlv3dLeuqW9dUt7636+T+q142tv3dLeuqW9dUt765b21m3trdvaW7e1t25rb93Pt169dnztrdvaW7e1t25rb93W3rqjvXVHe+uO9tYd7a37+U6m146vvXVHe+uO9tYd7a072ltX20012m6q0XZTjbabarTdVKPtphptN9Vou6lG20012m6q1XZTrbabarXdVKvtptpLeuuutptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXabqrVdlOttptqtd1Uq+2mWm031Wq7qVbbTbXSbqq4pN1U9/jKW/ceX3nr3uMrb917fOWte4+vvHXv8ZW37j2+8ta9x1feuvf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf42ltX2k11j6+9daXdVPf43Fv3LmG/vDZsvx3/nfftebzt9NtL87ydlHtBf+ZJuXf5J56UXI71mSfl/g3hM0/K/cvEZ56U+/eOzzxp/H940s33Tsr928xnnpT7F59PPOn7RpnH23/vjLn95ZVlX1+b+fbu9dR376e++zz13feZ7/6+bOTT3t2e+u7+1Hc/T333eOq7P/W7Wk/9rtZTv6v11O9qPfW72k/9rvZTv6v91O9qP/W72k/9rvZTv6v91O9qP/W72k/9rvZTv6vz1O/qPPW7Ok/9rs5Tv6sDfFcfjyT+SOGPNP7ID/38e4S//WvF/c/19vr++gn77E/Y6+mfYE/+hF/5CzZ/6yfY7uOlftk3/7523nvxRL91CDFf/1XwmrdpDtU0QTVNUk1TVNP0C6eZeusSvnnxt9MM1TTLNI1fVNMY1TRONc0Ls3h936apd7/hHlTTvC5v/Lr264uvd6cZqmmWaZpzUU1jVNM41TSHapqgmiappimqaaiy+FBl8aHK4qDK4qDK4qDK4qDK4qDK4qDK4qDK4qDK4qDK4qDK4qTK4qTK4qTK4qTK4qTK4qTK4qTK4qTK4qTK4qTK4qLK4qLK4qLK4qLK4qLK4qLK4qLK4qLK4qLK4qLK4qbK4qbK4qbK4qbK4qbK4qbK4qbK4qbK4qbK4qbK4qHK4qHK4qHK4qHK4qHK4qHK4qHK4qHK4qHK4qHK4qXK4qXK4qXK4qXK4qXK4qXK4qXK4qXK4qXK4iXK4vyVv2zhd5uGKIvzV/4qhN9tGqIszl/5iwp+t2mIsjh/5a8R+N2mIcri/BXJ/+82DVUWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWO1UWO1UWO1UWO1UWO1UWO1UWO1UWM3F3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd/c0VFnMxN3d01BlMRN3d09DlcVM3N09DVUWM3F3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5MXF3eTFxd3kxcXd5vZTmqjcP7fXNXx/z7TSHapoX/hR7+uPFnufdaZpqmqGaZpmmeSWx9Bumed1vFBPX42/Ymfi7vPG3aZxqmhfmzYl4vDgu+7ubeuetr+1HPJld3/6VSd/cbEhPn9LTl/T0LT39UEz/ZZpXMlG/YRqjmsappuFI+8c0HOn9mIYjjR/TvDBdI97+IsOIeHeapppmqKZZomnslUzUb5jGqKZxqmkO1TRBNU1STcOUxXYxZbFdTFlsF1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWG1UWO1UWO1UWO1UWO1UWO1UWO1UWO1UWO1UWO1UWO1UWH6osPlRZ/Eru5/7KPF5s7/4vp/ZK7uc3TFNU0zTVNEM1zTJN80ru5++m6XenMappnGqaQzVNUE3zyiyer/+fGnt3T72S+/kN0yzTNK9kW37DNEY1jVNNc6imeWHeeL7ljfe7W/OVbMtvmKaopmmqaYZqmmWapi6qaYxqGqea5lBNQ5XFRZXFRZXFRZXFRZXFRZXFTZXFTZXF/dIs/g4xYX2opgmqaZJqGiZCy6gILaMitIyK0DIqQsvGqKahyuKhyuKhyuKhyuKhyuKhyuKhyuKhyuKlyuKlyuKlyuKlyuKlyuKlyuKlyuKlyuKlyuJlymK/mLLYL6Ys9ospi/1iymK/mLLYL6Ys9osp/fxiSj9/n8q5/yt7PPfN/01w++0p/9BT50NPxYeeyg89VdhTf/vb/wE="
276
490
  },
277
491
  {
278
- "name": "is_valid",
492
+ "name": "entrypoint",
279
493
  "function_type": "Secret",
280
494
  "is_internal": false,
281
495
  "abi": {
@@ -337,18 +551,127 @@
337
551
  }
338
552
  },
339
553
  {
340
- "name": "block_header",
554
+ "name": "historical_header",
341
555
  "type": {
342
556
  "kind": "struct",
343
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
557
+ "path": "authwit::aztec::protocol_types::header::Header",
344
558
  "fields": [
345
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
346
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
347
- { "name": "contract_tree_root", "type": { "kind": "field" } },
348
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
349
- { "name": "archive_root", "type": { "kind": "field" } },
350
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
351
- { "name": "global_variables_hash", "type": { "kind": "field" } }
559
+ {
560
+ "name": "last_archive",
561
+ "type": {
562
+ "kind": "struct",
563
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
564
+ "fields": [
565
+ { "name": "root", "type": { "kind": "field" } },
566
+ {
567
+ "name": "next_available_leaf_index",
568
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
569
+ }
570
+ ]
571
+ }
572
+ },
573
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
574
+ {
575
+ "name": "state",
576
+ "type": {
577
+ "kind": "struct",
578
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
579
+ "fields": [
580
+ {
581
+ "name": "l1_to_l2_message_tree",
582
+ "type": {
583
+ "kind": "struct",
584
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
585
+ "fields": [
586
+ { "name": "root", "type": { "kind": "field" } },
587
+ {
588
+ "name": "next_available_leaf_index",
589
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
590
+ }
591
+ ]
592
+ }
593
+ },
594
+ {
595
+ "name": "partial",
596
+ "type": {
597
+ "kind": "struct",
598
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
599
+ "fields": [
600
+ {
601
+ "name": "note_hash_tree",
602
+ "type": {
603
+ "kind": "struct",
604
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
605
+ "fields": [
606
+ { "name": "root", "type": { "kind": "field" } },
607
+ {
608
+ "name": "next_available_leaf_index",
609
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
610
+ }
611
+ ]
612
+ }
613
+ },
614
+ {
615
+ "name": "nullifier_tree",
616
+ "type": {
617
+ "kind": "struct",
618
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
619
+ "fields": [
620
+ { "name": "root", "type": { "kind": "field" } },
621
+ {
622
+ "name": "next_available_leaf_index",
623
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
624
+ }
625
+ ]
626
+ }
627
+ },
628
+ {
629
+ "name": "contract_tree",
630
+ "type": {
631
+ "kind": "struct",
632
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
633
+ "fields": [
634
+ { "name": "root", "type": { "kind": "field" } },
635
+ {
636
+ "name": "next_available_leaf_index",
637
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
638
+ }
639
+ ]
640
+ }
641
+ },
642
+ {
643
+ "name": "public_data_tree",
644
+ "type": {
645
+ "kind": "struct",
646
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
647
+ "fields": [
648
+ { "name": "root", "type": { "kind": "field" } },
649
+ {
650
+ "name": "next_available_leaf_index",
651
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
652
+ }
653
+ ]
654
+ }
655
+ }
656
+ ]
657
+ }
658
+ }
659
+ ]
660
+ }
661
+ },
662
+ {
663
+ "name": "global_variables",
664
+ "type": {
665
+ "kind": "struct",
666
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
667
+ "fields": [
668
+ { "name": "chain_id", "type": { "kind": "field" } },
669
+ { "name": "version", "type": { "kind": "field" } },
670
+ { "name": "block_number", "type": { "kind": "field" } },
671
+ { "name": "timestamp", "type": { "kind": "field" } }
672
+ ]
673
+ }
674
+ }
352
675
  ]
353
676
  }
354
677
  },
@@ -398,9 +721,52 @@
398
721
  },
399
722
  "visibility": "private"
400
723
  },
401
- { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
724
+ {
725
+ "name": "payload",
726
+ "type": {
727
+ "kind": "struct",
728
+ "path": "authwit::entrypoint::EntrypointPayload",
729
+ "fields": [
730
+ {
731
+ "name": "function_calls",
732
+ "type": {
733
+ "kind": "array",
734
+ "length": 4,
735
+ "type": {
736
+ "kind": "struct",
737
+ "path": "authwit::entrypoint::FunctionCall",
738
+ "fields": [
739
+ { "name": "args_hash", "type": { "kind": "field" } },
740
+ {
741
+ "name": "function_selector",
742
+ "type": {
743
+ "kind": "struct",
744
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
745
+ "fields": [
746
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
747
+ ]
748
+ }
749
+ },
750
+ {
751
+ "name": "target_address",
752
+ "type": {
753
+ "kind": "struct",
754
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
755
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
756
+ }
757
+ },
758
+ { "name": "is_public", "type": { "kind": "boolean" } }
759
+ ]
760
+ }
761
+ }
762
+ },
763
+ { "name": "nonce", "type": { "kind": "field" } }
764
+ ]
765
+ },
766
+ "visibility": "public"
767
+ }
402
768
  ],
403
- "param_witnesses": { "inputs": [{ "start": 0, "end": 23 }], "message_hash": [{ "start": 23, "end": 24 }] },
769
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 34 }], "payload": [{ "start": 34, "end": 51 }] },
404
770
  "return_type": {
405
771
  "abi_type": {
406
772
  "kind": "struct",
@@ -471,6 +837,41 @@
471
837
  }
472
838
  }
473
839
  },
840
+ {
841
+ "name": "nullifier_key_validation_requests",
842
+ "type": {
843
+ "kind": "array",
844
+ "length": 1,
845
+ "type": {
846
+ "kind": "struct",
847
+ "path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
848
+ "fields": [
849
+ {
850
+ "name": "public_key",
851
+ "type": {
852
+ "kind": "struct",
853
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
854
+ "fields": [
855
+ { "name": "x", "type": { "kind": "field" } },
856
+ { "name": "y", "type": { "kind": "field" } }
857
+ ]
858
+ }
859
+ },
860
+ {
861
+ "name": "secret_key",
862
+ "type": {
863
+ "kind": "struct",
864
+ "path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
865
+ "fields": [
866
+ { "name": "high", "type": { "kind": "field" } },
867
+ { "name": "low", "type": { "kind": "field" } }
868
+ ]
869
+ }
870
+ }
871
+ ]
872
+ }
873
+ }
874
+ },
474
875
  {
475
876
  "name": "new_commitments",
476
877
  "type": {
@@ -520,18 +921,127 @@
520
921
  { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
521
922
  { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
522
923
  {
523
- "name": "block_header",
924
+ "name": "historical_header",
524
925
  "type": {
525
926
  "kind": "struct",
526
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
927
+ "path": "authwit::aztec::protocol_types::header::Header",
527
928
  "fields": [
528
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
529
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
530
- { "name": "contract_tree_root", "type": { "kind": "field" } },
531
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
532
- { "name": "archive_root", "type": { "kind": "field" } },
533
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
534
- { "name": "global_variables_hash", "type": { "kind": "field" } }
929
+ {
930
+ "name": "last_archive",
931
+ "type": {
932
+ "kind": "struct",
933
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
934
+ "fields": [
935
+ { "name": "root", "type": { "kind": "field" } },
936
+ {
937
+ "name": "next_available_leaf_index",
938
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
939
+ }
940
+ ]
941
+ }
942
+ },
943
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
944
+ {
945
+ "name": "state",
946
+ "type": {
947
+ "kind": "struct",
948
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
949
+ "fields": [
950
+ {
951
+ "name": "l1_to_l2_message_tree",
952
+ "type": {
953
+ "kind": "struct",
954
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
955
+ "fields": [
956
+ { "name": "root", "type": { "kind": "field" } },
957
+ {
958
+ "name": "next_available_leaf_index",
959
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
960
+ }
961
+ ]
962
+ }
963
+ },
964
+ {
965
+ "name": "partial",
966
+ "type": {
967
+ "kind": "struct",
968
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
969
+ "fields": [
970
+ {
971
+ "name": "note_hash_tree",
972
+ "type": {
973
+ "kind": "struct",
974
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
975
+ "fields": [
976
+ { "name": "root", "type": { "kind": "field" } },
977
+ {
978
+ "name": "next_available_leaf_index",
979
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
980
+ }
981
+ ]
982
+ }
983
+ },
984
+ {
985
+ "name": "nullifier_tree",
986
+ "type": {
987
+ "kind": "struct",
988
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
989
+ "fields": [
990
+ { "name": "root", "type": { "kind": "field" } },
991
+ {
992
+ "name": "next_available_leaf_index",
993
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
994
+ }
995
+ ]
996
+ }
997
+ },
998
+ {
999
+ "name": "contract_tree",
1000
+ "type": {
1001
+ "kind": "struct",
1002
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1003
+ "fields": [
1004
+ { "name": "root", "type": { "kind": "field" } },
1005
+ {
1006
+ "name": "next_available_leaf_index",
1007
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1008
+ }
1009
+ ]
1010
+ }
1011
+ },
1012
+ {
1013
+ "name": "public_data_tree",
1014
+ "type": {
1015
+ "kind": "struct",
1016
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1017
+ "fields": [
1018
+ { "name": "root", "type": { "kind": "field" } },
1019
+ {
1020
+ "name": "next_available_leaf_index",
1021
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1022
+ }
1023
+ ]
1024
+ }
1025
+ }
1026
+ ]
1027
+ }
1028
+ }
1029
+ ]
1030
+ }
1031
+ },
1032
+ {
1033
+ "name": "global_variables",
1034
+ "type": {
1035
+ "kind": "struct",
1036
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
1037
+ "fields": [
1038
+ { "name": "chain_id", "type": { "kind": "field" } },
1039
+ { "name": "version", "type": { "kind": "field" } },
1040
+ { "name": "block_number", "type": { "kind": "field" } },
1041
+ { "name": "timestamp", "type": { "kind": "field" } }
1042
+ ]
1043
+ }
1044
+ }
535
1045
  ]
536
1046
  }
537
1047
  },
@@ -573,21 +1083,22 @@
573
1083
  "visibility": "public"
574
1084
  },
575
1085
  "return_witnesses": [
576
- 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
577
- 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
578
- 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
579
- 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076,
580
- 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094,
581
- 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
582
- 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
583
- 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
584
- 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
585
- 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
586
- 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193
1086
+ 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169,
1087
+ 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187,
1088
+ 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205,
1089
+ 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223,
1090
+ 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241,
1091
+ 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259,
1092
+ 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277,
1093
+ 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295,
1094
+ 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313,
1095
+ 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331,
1096
+ 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349,
1097
+ 4350, 4351, 4352, 4353, 4354, 4355
587
1098
  ]
588
1099
  },
589
- "bytecode": "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",
590
- "debug_symbols": "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0pvecnrlviW96S0nWO5b0pvecorlviW96S0nWe5b0pvecprlviW96S0nWu5b0pvecqrlviW56W16rqXpuZam51qanmu5fyuvtyW56W16rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lq7nWrqea+l6rqXruZa+yU1v13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0Pdcy9FzL0HMtQ8+1DD3XMja56R16rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmW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"
1100
+ "bytecode": "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",
1101
+ "debug_symbols": "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OEchmeQd5zAk5R3nMCTlHecwJOUd5zAkq0lCJO04FEk7DkXSjkORtONQJO04EMlsx6FI2nEoknYciqQdhyJZTRIiacehSNpxKJJ2HIqkHYciaceBSBY7DkXSjkORtONQJO04FMlqkhBJOw5F0o5DkbTjUCTtOBRJOw5EstpxKJJ2HIqkHYciacehSFaThEjacSiSdhyKpB2HImnHoUjacSCSzY5DkbTjUCTtOBRJOw5FspokRNKOQ5G041Ak7TgUSTsORdKOA5HsdhyKpB2HImnHoUjacSiS1SQhknYciqQdhyJpx6FI2nEoknYciORqx6FI2nEoknYciqQdhyJZTRIiacehSNpxKJJ2HIqkHYciaceBSG52HIqkHYciacehSNpxKJLVJCGSdhyKpB2HImnHoUjacSiSdhyI5LDjUCTtOBRJOw5F0o5DkawmCZG041Ak7TgUSTsORdKOQ5G04zAk02LHoUjacSiSdhyKpB2HIllNEiJpx6FI2nEoknYciqQdhyJpx4FIJjsORdKOQ5G041Ak7TgUyWqSEEk7DkXSjkORtONQJO04FEk7DkQy23EoknYciqQdhyJpx6FIVpOESNpxKJJ2HIqkHYciacehSNpxIJLFjkORtONQJO04FEk7DkWymiRE0o5DkbTjUCTtOBRJOw5F0o4Dkax2HIqkHYciacehSNpxKJLVJCGSdhyKpB2HImnHoUjacSiSdhyIZLPjUCTtOBRJOw5F0o5DkawmCZG041Ak7TgUSTsORdKOQ5G040Akux2HImnHoUjacSiSdhyKZDVJiKQdhyJpx6FI2nEoknYciqQdByK52nEoknYciqQdhyJpx6FIVpOESNpxKJJ2HIqkHYciacehSNpxIJKbvOP01m5x7+C8mGQu5fo58uXsPiEp7ziHISnvOIchKe84hyFZTRIiKe84hyEp7ziHISnvOIchKe84hyEp7zhHITnsOBRJOw5F0o5DkbTjUCSrSUIk7TgUSTsORdKOQ5G041Ak7TgMybzYcSiSdhyKpB2HImnHoUhWk4RI2nEoknYciqQdhyJpx6FI2nEgksmOQ5G041Ak7TgUSTsORbKaJETSjkORtONQJO04FEk7DkXSjgORzHYciqQdhyJpx6FI2nEoktUkIZJ2HIqkHYciacehSNpxKJJ2HIhkseNQJO04FEk7DkXSjkORrCYJ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"
591
1102
  },
592
1103
  {
593
1104
  "name": "constructor",
@@ -652,18 +1163,127 @@
652
1163
  }
653
1164
  },
654
1165
  {
655
- "name": "block_header",
1166
+ "name": "historical_header",
656
1167
  "type": {
657
1168
  "kind": "struct",
658
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1169
+ "path": "authwit::aztec::protocol_types::header::Header",
659
1170
  "fields": [
660
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
661
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
662
- { "name": "contract_tree_root", "type": { "kind": "field" } },
663
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
664
- { "name": "archive_root", "type": { "kind": "field" } },
665
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
666
- { "name": "global_variables_hash", "type": { "kind": "field" } }
1171
+ {
1172
+ "name": "last_archive",
1173
+ "type": {
1174
+ "kind": "struct",
1175
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1176
+ "fields": [
1177
+ { "name": "root", "type": { "kind": "field" } },
1178
+ {
1179
+ "name": "next_available_leaf_index",
1180
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1181
+ }
1182
+ ]
1183
+ }
1184
+ },
1185
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1186
+ {
1187
+ "name": "state",
1188
+ "type": {
1189
+ "kind": "struct",
1190
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
1191
+ "fields": [
1192
+ {
1193
+ "name": "l1_to_l2_message_tree",
1194
+ "type": {
1195
+ "kind": "struct",
1196
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1197
+ "fields": [
1198
+ { "name": "root", "type": { "kind": "field" } },
1199
+ {
1200
+ "name": "next_available_leaf_index",
1201
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1202
+ }
1203
+ ]
1204
+ }
1205
+ },
1206
+ {
1207
+ "name": "partial",
1208
+ "type": {
1209
+ "kind": "struct",
1210
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
1211
+ "fields": [
1212
+ {
1213
+ "name": "note_hash_tree",
1214
+ "type": {
1215
+ "kind": "struct",
1216
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1217
+ "fields": [
1218
+ { "name": "root", "type": { "kind": "field" } },
1219
+ {
1220
+ "name": "next_available_leaf_index",
1221
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1222
+ }
1223
+ ]
1224
+ }
1225
+ },
1226
+ {
1227
+ "name": "nullifier_tree",
1228
+ "type": {
1229
+ "kind": "struct",
1230
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1231
+ "fields": [
1232
+ { "name": "root", "type": { "kind": "field" } },
1233
+ {
1234
+ "name": "next_available_leaf_index",
1235
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1236
+ }
1237
+ ]
1238
+ }
1239
+ },
1240
+ {
1241
+ "name": "contract_tree",
1242
+ "type": {
1243
+ "kind": "struct",
1244
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1245
+ "fields": [
1246
+ { "name": "root", "type": { "kind": "field" } },
1247
+ {
1248
+ "name": "next_available_leaf_index",
1249
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1250
+ }
1251
+ ]
1252
+ }
1253
+ },
1254
+ {
1255
+ "name": "public_data_tree",
1256
+ "type": {
1257
+ "kind": "struct",
1258
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1259
+ "fields": [
1260
+ { "name": "root", "type": { "kind": "field" } },
1261
+ {
1262
+ "name": "next_available_leaf_index",
1263
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1264
+ }
1265
+ ]
1266
+ }
1267
+ }
1268
+ ]
1269
+ }
1270
+ }
1271
+ ]
1272
+ }
1273
+ },
1274
+ {
1275
+ "name": "global_variables",
1276
+ "type": {
1277
+ "kind": "struct",
1278
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
1279
+ "fields": [
1280
+ { "name": "chain_id", "type": { "kind": "field" } },
1281
+ { "name": "version", "type": { "kind": "field" } },
1282
+ { "name": "block_number", "type": { "kind": "field" } },
1283
+ { "name": "timestamp", "type": { "kind": "field" } }
1284
+ ]
1285
+ }
1286
+ }
667
1287
  ]
668
1288
  }
669
1289
  },
@@ -717,9 +1337,9 @@
717
1337
  { "name": "signing_pub_key_y", "type": { "kind": "field" }, "visibility": "public" }
718
1338
  ],
719
1339
  "param_witnesses": {
720
- "inputs": [{ "start": 0, "end": 23 }],
721
- "signing_pub_key_x": [{ "start": 23, "end": 24 }],
722
- "signing_pub_key_y": [{ "start": 24, "end": 25 }]
1340
+ "inputs": [{ "start": 0, "end": 34 }],
1341
+ "signing_pub_key_x": [{ "start": 34, "end": 35 }],
1342
+ "signing_pub_key_y": [{ "start": 35, "end": 36 }]
723
1343
  },
724
1344
  "return_type": {
725
1345
  "abi_type": {
@@ -791,6 +1411,41 @@
791
1411
  }
792
1412
  }
793
1413
  },
1414
+ {
1415
+ "name": "nullifier_key_validation_requests",
1416
+ "type": {
1417
+ "kind": "array",
1418
+ "length": 1,
1419
+ "type": {
1420
+ "kind": "struct",
1421
+ "path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
1422
+ "fields": [
1423
+ {
1424
+ "name": "public_key",
1425
+ "type": {
1426
+ "kind": "struct",
1427
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1428
+ "fields": [
1429
+ { "name": "x", "type": { "kind": "field" } },
1430
+ { "name": "y", "type": { "kind": "field" } }
1431
+ ]
1432
+ }
1433
+ },
1434
+ {
1435
+ "name": "secret_key",
1436
+ "type": {
1437
+ "kind": "struct",
1438
+ "path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
1439
+ "fields": [
1440
+ { "name": "high", "type": { "kind": "field" } },
1441
+ { "name": "low", "type": { "kind": "field" } }
1442
+ ]
1443
+ }
1444
+ }
1445
+ ]
1446
+ }
1447
+ }
1448
+ },
794
1449
  {
795
1450
  "name": "new_commitments",
796
1451
  "type": {
@@ -840,18 +1495,127 @@
840
1495
  { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
841
1496
  { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
842
1497
  {
843
- "name": "block_header",
1498
+ "name": "historical_header",
844
1499
  "type": {
845
1500
  "kind": "struct",
846
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1501
+ "path": "authwit::aztec::protocol_types::header::Header",
847
1502
  "fields": [
848
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
849
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
850
- { "name": "contract_tree_root", "type": { "kind": "field" } },
851
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
852
- { "name": "archive_root", "type": { "kind": "field" } },
853
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
854
- { "name": "global_variables_hash", "type": { "kind": "field" } }
1503
+ {
1504
+ "name": "last_archive",
1505
+ "type": {
1506
+ "kind": "struct",
1507
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1508
+ "fields": [
1509
+ { "name": "root", "type": { "kind": "field" } },
1510
+ {
1511
+ "name": "next_available_leaf_index",
1512
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1513
+ }
1514
+ ]
1515
+ }
1516
+ },
1517
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1518
+ {
1519
+ "name": "state",
1520
+ "type": {
1521
+ "kind": "struct",
1522
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
1523
+ "fields": [
1524
+ {
1525
+ "name": "l1_to_l2_message_tree",
1526
+ "type": {
1527
+ "kind": "struct",
1528
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1529
+ "fields": [
1530
+ { "name": "root", "type": { "kind": "field" } },
1531
+ {
1532
+ "name": "next_available_leaf_index",
1533
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1534
+ }
1535
+ ]
1536
+ }
1537
+ },
1538
+ {
1539
+ "name": "partial",
1540
+ "type": {
1541
+ "kind": "struct",
1542
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
1543
+ "fields": [
1544
+ {
1545
+ "name": "note_hash_tree",
1546
+ "type": {
1547
+ "kind": "struct",
1548
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1549
+ "fields": [
1550
+ { "name": "root", "type": { "kind": "field" } },
1551
+ {
1552
+ "name": "next_available_leaf_index",
1553
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1554
+ }
1555
+ ]
1556
+ }
1557
+ },
1558
+ {
1559
+ "name": "nullifier_tree",
1560
+ "type": {
1561
+ "kind": "struct",
1562
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1563
+ "fields": [
1564
+ { "name": "root", "type": { "kind": "field" } },
1565
+ {
1566
+ "name": "next_available_leaf_index",
1567
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1568
+ }
1569
+ ]
1570
+ }
1571
+ },
1572
+ {
1573
+ "name": "contract_tree",
1574
+ "type": {
1575
+ "kind": "struct",
1576
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1577
+ "fields": [
1578
+ { "name": "root", "type": { "kind": "field" } },
1579
+ {
1580
+ "name": "next_available_leaf_index",
1581
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1582
+ }
1583
+ ]
1584
+ }
1585
+ },
1586
+ {
1587
+ "name": "public_data_tree",
1588
+ "type": {
1589
+ "kind": "struct",
1590
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1591
+ "fields": [
1592
+ { "name": "root", "type": { "kind": "field" } },
1593
+ {
1594
+ "name": "next_available_leaf_index",
1595
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1596
+ }
1597
+ ]
1598
+ }
1599
+ }
1600
+ ]
1601
+ }
1602
+ }
1603
+ ]
1604
+ }
1605
+ },
1606
+ {
1607
+ "name": "global_variables",
1608
+ "type": {
1609
+ "kind": "struct",
1610
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
1611
+ "fields": [
1612
+ { "name": "chain_id", "type": { "kind": "field" } },
1613
+ { "name": "version", "type": { "kind": "field" } },
1614
+ { "name": "block_number", "type": { "kind": "field" } },
1615
+ { "name": "timestamp", "type": { "kind": "field" } }
1616
+ ]
1617
+ }
1618
+ }
855
1619
  ]
856
1620
  }
857
1621
  },
@@ -893,69 +1657,31 @@
893
1657
  "visibility": "public"
894
1658
  },
895
1659
  "return_witnesses": [
896
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
897
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
898
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
899
- 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
900
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
901
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
902
- 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
903
- 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
904
- 228, 229
1660
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1661
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1662
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1663
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
1664
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
1665
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1666
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
1667
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
1668
+ 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
905
1669
  ]
906
1670
  },
907
- "bytecode": "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",
908
- "debug_symbols": "5ZbbSiNBEIbfpa9DqGNXVV5l8SLsuiBIXDa5C3l3R2N3j7FxcJRo9CoE/iq++evU+3R793u9u7nbbNNqnzStfu3T9t968/Bvu1v/36UVLNL15s/we1ikvze312lF4IfFCx0B6JOUgKyqBXtiFiliAaxiBOuoEcJKbkTgeKa/WqR8qeB2PnAxL2Jlfy+498Axew2yzJP4RBU/pOFTDwgJKk9QE+sc+rhoeoQPwEeofYwygW9k+CQ2isaT/REHvxYOfQSO1sli4CmcXGislda4I821DbK0rCY9hKgfycOcj4BjVs/wF3ZFiysG8LorTFFMGWfNsyyRM1viViyJcfX5EUY/EcZPYfKZYUIrzGie+83iVjZFDqDT4beLJfczkw9TEHU80F9nZ5WSmdVkYhsR1dQDx9TuUiiLTrUxx9GV+KmuGNalqDZ2pdODbhWZ2/ch8Zy1SPBjLbdiuY/u0LERCb+RK4yVQ3xKzbmIRUcPMzie0GX/YaFRWjJjs1K5BMmcoO6JlFoB1dbLTseduuzeA85laQvm043jS58REzNi+u/4qSB8axDhsn8WJZd+l/CTyj4E+ZygrhFai5RHzzYcpuzqcLgH"
1671
+ "bytecode": "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",
1672
+ "debug_symbols": "5ZfLTiMxEEX/xesoqqernF8ZsYhmGAkJhdEkuyj/Tgdiu2msWDQoEFglLd0qnb71aHsf7h9+r3d3D5ttWO0DYlj92oftv/Xm+Ljdrf/vwgoW4XbzZ/g9LMLfu/vbsCIc/r/SYUpZSoBU1MINMbFIFgtgESN4KzUk05McETi90N8sAtLVkvPlyMU8i5X93eTSIsfoJcrEOvxkmNVkKpVfWmKMxXkSPC/u4+t148ePwK9EDh18R8rd46ixiA2ecOxr4fgH4Hgtborcxck0VsfQtCFlID5pGbxOuMVWH5AUZIp+XkzJU8lMPHo/nNVi6duYWF+USc+LlfGkVZNO3p6DBBd2MFnMmUF4bOGRBj+Txqc0dGEaBK04KZ3vL7PSBmaaJuuF+IrZ5dLsaKmsMPTOXGssc62JOiuMKFnm4O7CUyiTrVU7uHl0RX+qK4b5BGlqY1ca8+xWth3XvEg6aznGH2u5ZcsdYNqI9o1cYeZy4YCemmOGlvFRmp4/pMv2RUmL7xGrlao5SOYENXeBlAroaKc6P+/UZbNsHPPWFozTQsvSZ8SkGTEIc4LwzUG2bF8DJOZ+l+TTyg5BPieoaYSWIsXRCRKHa/rN4fAI"
909
1673
  },
910
1674
  {
911
- "name": "compute_note_hash_and_nullifier",
912
- "function_type": "Unconstrained",
913
- "is_internal": false,
1675
+ "name": "set_is_valid_storage",
1676
+ "function_type": "Open",
1677
+ "is_internal": true,
914
1678
  "abi": {
915
1679
  "parameters": [
916
1680
  {
917
- "name": "contract_address",
1681
+ "name": "inputs",
918
1682
  "type": {
919
1683
  "kind": "struct",
920
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
921
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
922
- },
923
- "visibility": "private"
924
- },
925
- { "name": "nonce", "type": { "kind": "field" }, "visibility": "private" },
926
- { "name": "storage_slot", "type": { "kind": "field" }, "visibility": "private" },
927
- {
928
- "name": "serialized_note",
929
- "type": { "kind": "array", "length": 3, "type": { "kind": "field" } },
930
- "visibility": "private"
931
- }
932
- ],
933
- "param_witnesses": {
934
- "contract_address": [{ "start": 0, "end": 1 }],
935
- "nonce": [{ "start": 1, "end": 2 }],
936
- "serialized_note": [{ "start": 3, "end": 6 }],
937
- "storage_slot": [{ "start": 2, "end": 3 }]
938
- },
939
- "return_type": {
940
- "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } },
941
- "visibility": "public"
942
- },
943
- "return_witnesses": [6, 7, 8, 9]
944
- },
945
- "bytecode": "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",
946
- "debug_symbols": "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2oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK8WkFerSCvVpBXK8ir1cXJ3YK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1Qryag15tYa8WkNerSGv1hcndxvyag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIq23Iq23Iq23Iq23Iq+2Lk7sb8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8moH8moH8moH8moH8mrn4uTugbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbza+bu9Wq2vtfT5+2ppqJYN1XKcWv5ur3bLWgZUy4RqCaiWhGpZUC1Q7jaUuw3lbkO5u6Hc3VDubih3N5S7G8rdDeXuhnJ3Q7m7odzdUO4eKHcPlLsHyt0D5e6BcvdAuXug3D1Q7h4od4+Tu+NycYL3WoyTvNdinOi9FuNk77UYJ3yvxTjpey3Gid9rMU7+XotxAvhajJTAQ0rgISXwkBJ4SAk8pAQeUgIPKYGHlMBDSuAhJfCUEnhKCTylBJ5SAk8pgaeUwFNK4Ckl8JQSeEoJHFICh5TAISVwSAkcUgKHlMAhJXBICRxSAoeUwCklcEoJnFICp5TAKSVwSgmcUgKnlMApJXBKCbykBF5SAi8pgZeUwEtK4CUl8JISeEkJvKQEXlICl5TAJSVwSQlcUgKXlMAlJTBE3q7FSAkMobdrMVICQ+ztWoyUwBB8uxYjJTBE367FSAkM4bdrMVICQ/ztWoyUwBCAuxYjJTBE4K7FSAkMIbhrMVICQwzuWoyUwBCEuxYjJTBE4a7FSAkMYbhrMVICQxzuWoyUwBCIuxYjJTBE4q7FQAk8JBM3JBM3JBM3JBN3/VuyVAyUwEMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMy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"
947
- },
948
- {
949
- "name": "entrypoint",
950
- "function_type": "Secret",
951
- "is_internal": false,
952
- "abi": {
953
- "parameters": [
954
- {
955
- "name": "inputs",
956
- "type": {
957
- "kind": "struct",
958
- "path": "authwit::aztec::abi::PrivateContextInputs",
1684
+ "path": "authwit::aztec::abi::PublicContextInputs",
959
1685
  "fields": [
960
1686
  {
961
1687
  "name": "call_context",
@@ -1008,60 +1734,140 @@
1008
1734
  }
1009
1735
  },
1010
1736
  {
1011
- "name": "block_header",
1012
- "type": {
1013
- "kind": "struct",
1014
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1015
- "fields": [
1016
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1017
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1018
- { "name": "contract_tree_root", "type": { "kind": "field" } },
1019
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1020
- { "name": "archive_root", "type": { "kind": "field" } },
1021
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
1022
- { "name": "global_variables_hash", "type": { "kind": "field" } }
1023
- ]
1024
- }
1025
- },
1026
- {
1027
- "name": "contract_deployment_data",
1737
+ "name": "historical_header",
1028
1738
  "type": {
1029
1739
  "kind": "struct",
1030
- "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1740
+ "path": "authwit::aztec::protocol_types::header::Header",
1031
1741
  "fields": [
1032
1742
  {
1033
- "name": "deployer_public_key",
1743
+ "name": "last_archive",
1034
1744
  "type": {
1035
1745
  "kind": "struct",
1036
- "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1746
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1037
1747
  "fields": [
1038
- { "name": "x", "type": { "kind": "field" } },
1039
- { "name": "y", "type": { "kind": "field" } }
1748
+ { "name": "root", "type": { "kind": "field" } },
1749
+ {
1750
+ "name": "next_available_leaf_index",
1751
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1752
+ }
1040
1753
  ]
1041
1754
  }
1042
1755
  },
1043
- { "name": "constructor_vk_hash", "type": { "kind": "field" } },
1044
- { "name": "function_tree_root", "type": { "kind": "field" } },
1045
- { "name": "contract_address_salt", "type": { "kind": "field" } },
1756
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1046
1757
  {
1047
- "name": "portal_contract_address",
1758
+ "name": "state",
1048
1759
  "type": {
1049
1760
  "kind": "struct",
1050
- "path": "authwit::aztec::protocol_types::address::EthAddress",
1051
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1761
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
1762
+ "fields": [
1763
+ {
1764
+ "name": "l1_to_l2_message_tree",
1765
+ "type": {
1766
+ "kind": "struct",
1767
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1768
+ "fields": [
1769
+ { "name": "root", "type": { "kind": "field" } },
1770
+ {
1771
+ "name": "next_available_leaf_index",
1772
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1773
+ }
1774
+ ]
1775
+ }
1776
+ },
1777
+ {
1778
+ "name": "partial",
1779
+ "type": {
1780
+ "kind": "struct",
1781
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
1782
+ "fields": [
1783
+ {
1784
+ "name": "note_hash_tree",
1785
+ "type": {
1786
+ "kind": "struct",
1787
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1788
+ "fields": [
1789
+ { "name": "root", "type": { "kind": "field" } },
1790
+ {
1791
+ "name": "next_available_leaf_index",
1792
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1793
+ }
1794
+ ]
1795
+ }
1796
+ },
1797
+ {
1798
+ "name": "nullifier_tree",
1799
+ "type": {
1800
+ "kind": "struct",
1801
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1802
+ "fields": [
1803
+ { "name": "root", "type": { "kind": "field" } },
1804
+ {
1805
+ "name": "next_available_leaf_index",
1806
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1807
+ }
1808
+ ]
1809
+ }
1810
+ },
1811
+ {
1812
+ "name": "contract_tree",
1813
+ "type": {
1814
+ "kind": "struct",
1815
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1816
+ "fields": [
1817
+ { "name": "root", "type": { "kind": "field" } },
1818
+ {
1819
+ "name": "next_available_leaf_index",
1820
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1821
+ }
1822
+ ]
1823
+ }
1824
+ },
1825
+ {
1826
+ "name": "public_data_tree",
1827
+ "type": {
1828
+ "kind": "struct",
1829
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1830
+ "fields": [
1831
+ { "name": "root", "type": { "kind": "field" } },
1832
+ {
1833
+ "name": "next_available_leaf_index",
1834
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1835
+ }
1836
+ ]
1837
+ }
1838
+ }
1839
+ ]
1840
+ }
1841
+ }
1842
+ ]
1843
+ }
1844
+ },
1845
+ {
1846
+ "name": "global_variables",
1847
+ "type": {
1848
+ "kind": "struct",
1849
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
1850
+ "fields": [
1851
+ { "name": "chain_id", "type": { "kind": "field" } },
1852
+ { "name": "version", "type": { "kind": "field" } },
1853
+ { "name": "block_number", "type": { "kind": "field" } },
1854
+ { "name": "timestamp", "type": { "kind": "field" } }
1855
+ ]
1052
1856
  }
1053
1857
  }
1054
1858
  ]
1055
1859
  }
1056
1860
  },
1057
1861
  {
1058
- "name": "private_global_variables",
1862
+ "name": "public_global_variables",
1059
1863
  "type": {
1060
1864
  "kind": "struct",
1061
- "path": "authwit::aztec::abi::PrivateGlobalVariables",
1865
+ "path": "authwit::aztec::abi::PublicGlobalVariables",
1062
1866
  "fields": [
1063
1867
  { "name": "chain_id", "type": { "kind": "field" } },
1064
- { "name": "version", "type": { "kind": "field" } }
1868
+ { "name": "version", "type": { "kind": "field" } },
1869
+ { "name": "block_number", "type": { "kind": "field" } },
1870
+ { "name": "timestamp", "type": { "kind": "field" } }
1065
1871
  ]
1066
1872
  }
1067
1873
  }
@@ -1069,56 +1875,18 @@
1069
1875
  },
1070
1876
  "visibility": "private"
1071
1877
  },
1072
- {
1073
- "name": "payload",
1074
- "type": {
1075
- "kind": "struct",
1076
- "path": "authwit::entrypoint::EntrypointPayload",
1077
- "fields": [
1078
- {
1079
- "name": "function_calls",
1080
- "type": {
1081
- "kind": "array",
1082
- "length": 4,
1083
- "type": {
1084
- "kind": "struct",
1085
- "path": "authwit::entrypoint::FunctionCall",
1086
- "fields": [
1087
- { "name": "args_hash", "type": { "kind": "field" } },
1088
- {
1089
- "name": "function_selector",
1090
- "type": {
1091
- "kind": "struct",
1092
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
1093
- "fields": [
1094
- { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1095
- ]
1096
- }
1097
- },
1098
- {
1099
- "name": "target_address",
1100
- "type": {
1101
- "kind": "struct",
1102
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
1103
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1104
- }
1105
- },
1106
- { "name": "is_public", "type": { "kind": "boolean" } }
1107
- ]
1108
- }
1109
- }
1110
- },
1111
- { "name": "nonce", "type": { "kind": "field" } }
1112
- ]
1113
- },
1114
- "visibility": "public"
1115
- }
1878
+ { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" },
1879
+ { "name": "value", "type": { "kind": "boolean" }, "visibility": "private" }
1116
1880
  ],
1117
- "param_witnesses": { "inputs": [{ "start": 0, "end": 23 }], "payload": [{ "start": 23, "end": 40 }] },
1881
+ "param_witnesses": {
1882
+ "inputs": [{ "start": 0, "end": 30 }],
1883
+ "message_hash": [{ "start": 30, "end": 31 }],
1884
+ "value": [{ "start": 31, "end": 32 }]
1885
+ },
1118
1886
  "return_type": {
1119
1887
  "abi_type": {
1120
1888
  "kind": "struct",
1121
- "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
1889
+ "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
1122
1890
  "fields": [
1123
1891
  {
1124
1892
  "name": "call_context",
@@ -1171,20 +1939,40 @@
1171
1939
  { "name": "args_hash", "type": { "kind": "field" } },
1172
1940
  { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
1173
1941
  {
1174
- "name": "read_requests",
1942
+ "name": "contract_storage_update_requests",
1175
1943
  "type": {
1176
1944
  "kind": "array",
1177
- "length": 32,
1945
+ "length": 16,
1178
1946
  "type": {
1179
1947
  "kind": "struct",
1180
- "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
1948
+ "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
1181
1949
  "fields": [
1182
- { "name": "value", "type": { "kind": "field" } },
1183
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1950
+ { "name": "storage_slot", "type": { "kind": "field" } },
1951
+ { "name": "old_value", "type": { "kind": "field" } },
1952
+ { "name": "new_value", "type": { "kind": "field" } }
1184
1953
  ]
1185
1954
  }
1186
1955
  }
1187
1956
  },
1957
+ {
1958
+ "name": "contract_storage_reads",
1959
+ "type": {
1960
+ "kind": "array",
1961
+ "length": 16,
1962
+ "type": {
1963
+ "kind": "struct",
1964
+ "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
1965
+ "fields": [
1966
+ { "name": "storage_slot", "type": { "kind": "field" } },
1967
+ { "name": "current_value", "type": { "kind": "field" } }
1968
+ ]
1969
+ }
1970
+ }
1971
+ },
1972
+ {
1973
+ "name": "public_call_stack_hashes",
1974
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1975
+ },
1188
1976
  {
1189
1977
  "name": "new_commitments",
1190
1978
  "type": {
@@ -1216,96 +2004,167 @@
1216
2004
  }
1217
2005
  }
1218
2006
  },
1219
- {
1220
- "name": "private_call_stack_hashes",
1221
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1222
- },
1223
- {
1224
- "name": "public_call_stack_hashes",
1225
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1226
- },
1227
2007
  { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1228
- { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
1229
- { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1230
2008
  {
1231
2009
  "name": "unencrypted_logs_hash",
1232
2010
  "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1233
2011
  },
1234
- { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
1235
2012
  { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1236
2013
  {
1237
- "name": "block_header",
2014
+ "name": "historical_header",
1238
2015
  "type": {
1239
2016
  "kind": "struct",
1240
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1241
- "fields": [
1242
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1243
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1244
- { "name": "contract_tree_root", "type": { "kind": "field" } },
1245
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1246
- { "name": "archive_root", "type": { "kind": "field" } },
1247
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
1248
- { "name": "global_variables_hash", "type": { "kind": "field" } }
1249
- ]
1250
- }
1251
- },
1252
- {
1253
- "name": "contract_deployment_data",
1254
- "type": {
1255
- "kind": "struct",
1256
- "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
2017
+ "path": "authwit::aztec::protocol_types::header::Header",
1257
2018
  "fields": [
1258
2019
  {
1259
- "name": "deployer_public_key",
2020
+ "name": "last_archive",
1260
2021
  "type": {
1261
2022
  "kind": "struct",
1262
- "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2023
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1263
2024
  "fields": [
1264
- { "name": "x", "type": { "kind": "field" } },
1265
- { "name": "y", "type": { "kind": "field" } }
2025
+ { "name": "root", "type": { "kind": "field" } },
2026
+ {
2027
+ "name": "next_available_leaf_index",
2028
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2029
+ }
1266
2030
  ]
1267
2031
  }
1268
2032
  },
1269
- { "name": "constructor_vk_hash", "type": { "kind": "field" } },
1270
- { "name": "function_tree_root", "type": { "kind": "field" } },
1271
- { "name": "contract_address_salt", "type": { "kind": "field" } },
2033
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1272
2034
  {
1273
- "name": "portal_contract_address",
2035
+ "name": "state",
1274
2036
  "type": {
1275
2037
  "kind": "struct",
1276
- "path": "authwit::aztec::protocol_types::address::EthAddress",
1277
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2038
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
2039
+ "fields": [
2040
+ {
2041
+ "name": "l1_to_l2_message_tree",
2042
+ "type": {
2043
+ "kind": "struct",
2044
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2045
+ "fields": [
2046
+ { "name": "root", "type": { "kind": "field" } },
2047
+ {
2048
+ "name": "next_available_leaf_index",
2049
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2050
+ }
2051
+ ]
2052
+ }
2053
+ },
2054
+ {
2055
+ "name": "partial",
2056
+ "type": {
2057
+ "kind": "struct",
2058
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
2059
+ "fields": [
2060
+ {
2061
+ "name": "note_hash_tree",
2062
+ "type": {
2063
+ "kind": "struct",
2064
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2065
+ "fields": [
2066
+ { "name": "root", "type": { "kind": "field" } },
2067
+ {
2068
+ "name": "next_available_leaf_index",
2069
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2070
+ }
2071
+ ]
2072
+ }
2073
+ },
2074
+ {
2075
+ "name": "nullifier_tree",
2076
+ "type": {
2077
+ "kind": "struct",
2078
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2079
+ "fields": [
2080
+ { "name": "root", "type": { "kind": "field" } },
2081
+ {
2082
+ "name": "next_available_leaf_index",
2083
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2084
+ }
2085
+ ]
2086
+ }
2087
+ },
2088
+ {
2089
+ "name": "contract_tree",
2090
+ "type": {
2091
+ "kind": "struct",
2092
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2093
+ "fields": [
2094
+ { "name": "root", "type": { "kind": "field" } },
2095
+ {
2096
+ "name": "next_available_leaf_index",
2097
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2098
+ }
2099
+ ]
2100
+ }
2101
+ },
2102
+ {
2103
+ "name": "public_data_tree",
2104
+ "type": {
2105
+ "kind": "struct",
2106
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2107
+ "fields": [
2108
+ { "name": "root", "type": { "kind": "field" } },
2109
+ {
2110
+ "name": "next_available_leaf_index",
2111
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2112
+ }
2113
+ ]
2114
+ }
2115
+ }
2116
+ ]
2117
+ }
2118
+ }
2119
+ ]
2120
+ }
2121
+ },
2122
+ {
2123
+ "name": "global_variables",
2124
+ "type": {
2125
+ "kind": "struct",
2126
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
2127
+ "fields": [
2128
+ { "name": "chain_id", "type": { "kind": "field" } },
2129
+ { "name": "version", "type": { "kind": "field" } },
2130
+ { "name": "block_number", "type": { "kind": "field" } },
2131
+ { "name": "timestamp", "type": { "kind": "field" } }
2132
+ ]
1278
2133
  }
1279
2134
  }
1280
2135
  ]
1281
2136
  }
1282
2137
  },
1283
- { "name": "chain_id", "type": { "kind": "field" } },
1284
- { "name": "version", "type": { "kind": "field" } }
2138
+ {
2139
+ "name": "prover_address",
2140
+ "type": {
2141
+ "kind": "struct",
2142
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
2143
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2144
+ }
2145
+ }
1285
2146
  ]
1286
2147
  },
1287
2148
  "visibility": "public"
1288
2149
  },
1289
2150
  "return_witnesses": [
1290
- 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954,
1291
- 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972,
1292
- 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990,
1293
- 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
1294
- 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026,
1295
- 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044,
1296
- 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062,
1297
- 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080,
1298
- 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098,
1299
- 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116,
1300
- 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125
2151
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
2152
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
2153
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
2154
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2155
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2156
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
2157
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
2158
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
2159
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232
1301
2160
  ]
1302
2161
  },
1303
- "bytecode": "H4sIAAAAAAAA/+ydC5iV0/fH36ammel+v1+m+z3nzEzNTFIpkiRJktyamWYUqaRCQkKShNxCkiRJkiQkSUiS3BJC5ZZb7vdL+e+d9bJ7zc9/5jfftX97Pe/7Ps969tnv2bPOWnuttd/Pec8+Z66s4XlX1/T2H6WUJCgprSTV+/ucPnpQGyvZES+jdJQpRG96rHNGRn5mWn48PZ4TS8vOzeoUy+iU2zkrnhXvlNVpeFpWenp+VkZWZnZudmYsO56Rnh8v6JSdXkCKy+BsjHH4nah0JDL4nei432WVjrIMfpcF+u3nfRLlvd+v4/HVQT2lox7DvNRjmJcGjPPQSOloxDAPjRjmIZVxHpoqHU0Z5qEpwzw0Z5yHlkpHS4Z5aOlh10nvP/hfUjtbg+OVbMSqtpJ93p/rmm7rUluP2vrUNqC2IbWNqG1MbSq1TahtSm0zaptT24LaltS2orb1/6htr6QNxUzPSxWalzYO2NXWsKuqY/HS49t5f3Jhivefjx7Uxkp2xPl0Zw5n1J3PqLuAT3dWjFE3Yyyz0hh1pzPqzkgydLantgO1Hak9yH8tav2J1E5vL/3n4xTvn/Wo++XocSnjXHl6nGCcq0CPSxvnKtLjMsa5SvQ40ThXmR6XNc7562mScc5fy5ID4/XRg9pYCY/C3l/ESnikBObKb/25Kmec8+eqvHHOn6sKxjnf94rGOX+uKhnn/LmqbJzzbahinPNt8OdYv2ZD43n/MP3w58mMuf+8GfPShk7/nP+8GXP/eTPm/vPJhm/6nD8/PaiNlfAo6/09byidZl34R6lAv4fxuJIxJxWxtux/71wZq3P/nFVlmLPKXtHnrKoxZ1UY5qwaVuf+OavBMGfVvKLPWQ1jzqozzFlNrM79c1abYc5qekWfs9rGnNVimLM6WJ0xBp377azLYGcDrM4sHdt6XtFj28CIbX2GOWuI1bl/zhqBdWodjY058efPt7288XwjY74ag+erlPGavl6/35jvdff7n/r/+J9aiB2pFv1PNc5Htka2Rrb+b21t9D+2Vb9uE+jrxjNTAq+rj3+7djZhnAOtsylW5/51vplhv++r/zrljefNXGwG9q2U8Zq+Xr9v2hfZGtka2RrZGtka2RrZGtka2RrZGtka2RrZGtkqxdbyxvMJhi3g9/bxf7tP0bQQW1IcsqWsQ7aUdsiWcg7ZkuSQLWUcsiXZIVsSHbKl1P/YFnOPjmec859PMM75a7W5l6c5PTb38rSgx+ZenpaGn/65VvTY3MvTmh4nG+faGI/9ti09NvdFtaPH5r4of7+buS/K3/tm7ovy98GZe6D8PXHmHih/f1w145y/V666cc7fLFjTOOdv8qtlnMugx3WMc53ocV3jXGd6XM84l0mP6xvnsuixuS8rmx6nGuf8uJp54Me1mXHOj2tz45wf1xbGOT+uLY1zflxbGef8uLY2zvlxNePsx7Wtcc6PazvjnB/X9sY5P64djHP+vqmOxjk/1gcZ5/xYx4xz/v6huHHOj3+acc6Pf7pxzt9Hk2Gc83Oik3HOz4nOxjl/P0mmcc7PkyzjnJ8nfpx1fIaW+vt5/+/NWvZfx6zl7EJeL6sQu/zH5trl/00PamMlO/avXebr9DD6/muVM2zo7IAtiQ7ZkuyQLWUcsiXJIVvKOWRLaYdsKeuQLSkO2ZJQiC2dsLbsv+z51yp9+NeEToYdvk0Zhh3pDHPi6/e/x+y/rv9apY0xnelCUJHsSQPbo3XEC5mXNGNefFvixrzEsHbsf7mDCrEjZtjhv/5Bhh0dsXbsD0GHQuzoaNjhv34Hw472WDv2T3m7Quxob9jhv347w462WDv2l0ebQuww36f4r9/GsKM11o79S0OrQuxobdjhv34rw46WWDv2l2qLQuxoadjhv775PsJ/bPKy/97D5G//PYrJ7v57GZP7u9Bj8z3DwfTYfL/R1TtwTsz3SKZ9/nXSfD/k8435vslnQfP9lX9d62Kc83nkYOOcz26+TUn0t+A9wmn6tfx9zf7xb/cMzP1t/t+Z72X9vW7mXmmOvb+NAvb5/caGff45c08+eD/0flsqBmzx+42YX7dy4HUrW3rdqoHXrWrpdasHXre6pdetG3jduoHX/U+fW3DY4gVs8f7FlnoO2VLHIVvqOmRLDYdsqeSQLZUdsqWcQ7YkOWRLGYdsqeWQLdy8URxbqjlkS3WHbKngkC0VHbIlxSFbyjpkS2mHbGngkC31HbKlpkO2VHHIlqoO2VLeIVuSHbIl0SFbSv2PbflP+1H8583PsM37Pf65VHps7vdoQo/N/R7+fTnzd3D8+3fmHhD/Pp+5B8S/H1jVOOff1zT3hfj3Es19If592BrGOf8+pLlXxL9vbO4L8e9hmvtC/Pkw58+/XjU2zvm8nmqc8/OuiXHOv+6a9y399x3m/U2/fsz7oD4/mPdL/fdP5r4QP17mvVY/Xua+ED9e5n1aP17mvhA/Xv78aL+eNn6zyv97M3f81zH3P7Qr5PXaFmKX/9isFf9velAbK9mxv1bM1+lh9P3XMvc/tHbAlkSHbEl2yJbyDtlS1SFbqjhkS02HbKnvkC0NHLKltEO2lHXIlhSHbKnokC0VHLKlukO2VHPIltoO2VLLIVvKOGRLkkO2lHPIlsoO2VLJIVtqOGRLXYdsqeOQLfUcsiXBki3+e3lfb9uALfp1W2Ffd/+2zJbG6/r3GFoZ/vuvb35HqgXYjlIBO1KN1y1s/51pC/r7wFpHU++fc9LMmBP/vlJTw46mYDv0nNQ27Ohh9M37X36t+DHT1+beCX/bBd7Dud8uMycv9v5Zr6WNMYMS/rarb8Lfc+jv12tg+NI4cE7rT2Wwv3FgXv2+/1ravuC+PdM+8/tr/t+Y9zgTCvnb0oHX8PdNguMTM+Pjv14wPuZ9Qn+s/jtzz22qMcavu9LGmKFGXG8s/fffgf05YO9yglf4tQG8P3j/PnZzn3LLwFzpo7A1wlw3mwXGaTubYO38x1rlv34T41zjQuxsatiZGhjH8NlKLFhzpbzC66ZRITY3LMQ/c/0H79n/12txe+N1O2Bfd/9+5/begce/fSZlfm8B/D2OdG1Lx2LYEjNsOQhry/7f0IxjdcYYvoOzfwrMf5Tiz59ve3nj+TRjvji+mxQPxMnvm/ZFtuJt1ba0D9iZYoxr74B9we9fafvqB+ZPX9On8TFkemEMGfxcwWTIW0r/bdcMgyHbBObV/FzbnGswH8RNVvL1Bq9N5QxfTK4Cv4c74H2sr9el1wXP/f511mSeNoXMu//63OyVWogdTQw7/NdPNewAf+dof8k2LMSOxoYd/us3NOwA80s8xSve726b/IJmhuLyi/ldVDBr7LclVgxbzO/noq8R2pa0YtiSbtgC/i73flsyimFLJ8MW9HfctS2di2FLpmFLNoMtWcWwxX99fW3366+Vcc6vg6bGOT8fU41zfl40N8758TF/B8+fpwTjnG+v//5Nrzn+90jN+ztdA+f0/B3iHehTrGTH/uuS/zq+Xr9/iGGf/53Wrny2ZJn6zXsXhxiv2Q3sv9Z5KNgPrbMn2E6toxfpKmPEw3+d0sbzzxr3mp6jxzqfutPzXQw92wp53j/+rY4ONWJyONbX/fc/ehv6exivYb7uEdjXjZuvW4rEfw3/fGnj8et+URvj9OHPr2+zrp/DChlnPu4e+JvyxvOHMft8uGFHD6Pvv5bOk01GTm0z3uv0ANtj+mvOS1djXvznuxnjehmP/bFNjHk7DGtnFkPe7/e9tzHnvl7/dczc22nE4z2jhnsG5k0//3Uhz/vHv9W4mXd9sL7ur/EjDf09jNcwX7cv9nXj5uv6Ne6/hn++tPH4K6PG+/798K/59W3WNX5EIePMxz0Df1PeeP4IZp/7GHb0MPr+a+k8+dDIqa+NGgdfH+Omv+a89DLmxX/evG/Q23jsjzVrHLw2ZjHk/X7fjzTm3J9b/3XM3PvFiMdvRg0fHpg3/Xy50v983j/+rcbNvDsK6+v+Gu9n6O9hvIb5ukdjXzduvq5f4/5r+OdLG49T/A8bjXH68OfXt1nXeN9CxpmPDw/8TXnj+b7MPh9l2NHD6PuvpfNkn5FT5YzPIcHXx7jprzkvvY158Z9vaow70njsjzVrHLw2ZjHk/X7f+xlz7s+t/zpm7lU37tXWNGq4T2De9PPNC3neP/6txs2864/1dX+NH2Po72G8hvm6A7CvGzdf169x/zX886WNx82MGh/w98O/5te3Wdf40YWMMx/3CfxNeeP5o5l97m/Y0cPo+6+l86SOkVPNjRpHv3cw/TXn5UhjXvznU41x/YzH/lizxsFrYxZD3u/3/Rhjzv259V/HzL0ORjwOMmr4qMC86ee7FfK8f/xbjZt5dyzW1/01PtDQ38N4DfN1j8O+btx8Xb/G/dfwz5c2Hh9i1Phxfz/8a359m3WNDyhknPn4qMDflDeeH8Ds87GGHT2Mvv9aOk/SjJzqZtQ4+r2D6a85L/2MefGfb26MO8Z47I81axy8NmYx5P1+3wcac+7Prf86Zu4dYcTjSKOG+wfmTT8/pJDn/ePfatzMu0FYX/fX+PGG/h7Ga5ivOxj7unHzdf0a91/DP1/aeHyCUeOD/3741/z6NusaP66Qcebj/oG/KW88fxyzz4MMO3oYff+1dJ70M3JqiFHj6PcOpr/mvBxjzIv/fDNj3EDjsT/WrHHw2pjFkPf7fT/emHN/bv3XMXMvx4hHnlHDxwbmTT8/rpDn/ePfatzMuxOwvu6v8SGG/h7Ga5iveyL2dePm6/o17r+Gf7608fhso8ZP/PvhX/Pr26xrfHAh48zHxwb+przx/GBmn08w7Ohh9P3X0nlSYOTUOKPG0e8dTH/NeRlozIv/vHHL86/cN8eaNQ5eG7MY8n6/70OMOffn1n8dM/cuMOJxoVHDgwLzpp+fWcjz/vFvNW7m3VCsr/tr/CRDfw/jNczXPRn7unHzdf0a91/DP1/aeHyVUeMn//3wr/n1bdY1fmIh48zHgwJ/U954/kRmn4cadvQw+v5r6TyZYuTUTKPG0e8dTH/NeTnemBf/efP3ghoExut89uvB3HuArkvzuuDr9fvmeu2fM9//MH6HYv88mt9dKOz7IP65NoZN/veIJO61DD7295eae9TM+7TtAn9TztDf1PAvFetfOsOewP3x9vfXlTHmxn+d0sbzi4xaXmys/77PZj48Usjz/vFv14dUY/7Ae/32Xx/M7x/0MF7DfF30vj7zdf3rg/8a/vnSxuNVxvXB3Kftz69vs867joWMMx83DfyNua+7I7PP5v/36GH0/dfSeXKfkVOPGOsaxx7cjoXMS31jXvznze8Mcdab+frmb8C1D9hofnfQXD/B/wslbn7Xytfr9zsa9vnnmhj2+X6Ya4n5vYAqDLb+p/8dYP5uJcfrJgZeN9HS6yYFXjfJ0uumBF43xdLrlg+8bnlLr2s/r+KZWmd1sE4dp6regce/XXvN37auBrUlFk/2/v4tu9Pzx/cfMz7/nFKGTb6d/vfWyxl2me/JSxt/U8b7p29lCzmXXMi5ct4/jwrGY/P/oVQx/q5SwE49x/7vhJi/o+n/Dpv5O5q+H+ZvZvr++OOTvH/GCHrx8Y+EgO70WOeMjPzMtPx4ejwnlpadm9UpltEpt3NWPCveKavT8LSs9PT8rIyszOzc7MxYdjwjPT9e0Ck7vYCUlwLaeRBO1wHfpygFns84eP6SjYTQF/p93p8XVN12pHb/a3kHHqXAsczwsAtqspFvGeRHuuFPJ/L7H4nPELMYTlfMtFd/2cFfkApbsMoy+OIFXic4f5U85sWEIzidGfRmerji4PI7Ex+jAxY/9IKfBtSV5eEXnKIspNne34QQXKCyjXFdChlXip7vQq35zRSuOUfmcdf/0Zwf8i9zfogxrtu/zHk3Y867FzIuRs93p7a04SvH2nKwh78IN6qCXQfQfvv5g/a7cRWe9a802M5DgXMJjHWca/6Ca1msZEc8CRiLnh52LdO+ap2pnj0wbYfTFTPfWfs6e3l/7sbWu357e3/u2tS7A/UuVL27S+8i0rvV9C4QvdtA72rRnxbrTyX1p9/6Eyj9KZn+RE1/mqo/pdKfTulP1fQnf/rTTf3J3ylKTlVympJhSnKU5CrJUzJcSb6SAiWnKxmhZKSSM5ScqWSUkrOUjFYyRslYJWcrGafkHCXjlUxQMlHJuUrOU3K+kklKLlAyWcmFSi7y/vylkClKLlEy1Tvw3bkJ6Pow7xr0AMWAAfhjpu1+q+8+Jhm+eYHnK5F/iVBbMmLm3Qv/+Le7S+Z/hykDteXPu0v+nRl1d+nQCeNHnDBy/Oj8cw64xxS8ApQqZLZSvL+zwfyfGv4MlzHOJRge+ef8v0kyWra3YKW9f6ay6RjqdXp5PJcU6HzEYzFzLi6l9jLv79Tzl3Z96ED+UciclTIeJ9CYhH8ZU+o/6PlPpciWDL5z2vEfDWf1BATvgJYGv7aZIP/ttTy/QB+x+KUejgsu83gSF81CSJ8vP0CXGpuTltE5v1Osc35WdlZ+dmZBp8xYXk5BwfDMWEZebiw3N6NzLD2eXpCbmRbLTctWL5ud3ykvvt8uW+xzOU7XATflpnnRTTlIcKYx6L3Cc/umnPb7CnyMCrUVsdBdwaB3uoctTF2EWqePSjbo5TCP5yIAzYsAvVxJ7QwvZPSiHTfpRU8AN72YCVJSernSwxXfDE8GvSB9vsqTRy9XedhF0j9mehG9QIIzk0Hv1Z7b9KL9vhofIxZ6mUG2ovXO8rCFqYtQ67RJL4d7PBcBaF4E6OUaaq/1QkYv2nGTXvQEcNOLmSAlpZdrPFzxXevJoBekz9d58ujlOg+7SPrHbC+iF0hwZjPovd5zm16039fjY8RCL9eSrWi9N3jYwtRFqHXapJfeHs9FAJoXAXq5kdqbvJDRi3bcpBc9Adz0YiZISenlRg9XfDd5MugF6fPNnjx6udnDLpL+MceL6AUSnDkMem/x3KYX7fct+Bix0MtNZCta760etjB1EWqdNunlCI/nIgDNiwC93EbtXC9k9KIdN+lFTwA3vZgJUlJ6uc3DFd9cTwa9IH2+3ZNHL7d72EXSP+Z5Eb1AgjOPQe8dntv0ov2+Ax8jFnqZS7ai9c73sIWpi1DrtEkvfTyeiwA0LwL0cie1C7yQ0Yt23KQXPQHc9GImSEnp5U4PV3wLPBn0gvT5Lk8evdzlYRdJ/1joRfQCCc5CBr13e27Ti/b7bnyMWOhlAdmK1rvIwxamLkKt0ya9HOnxXASgeRGgl3uoXeyFjF604ya96AngphczQUpKL/d4uOJb7MmgF6TP93ry6OVeD7tI+scSL6IXSHCWMOi9z3ObXrTf9+FjxEIvi8lWtN6lHrYwdRFqnTbppa/HcxGA5kWAXu6ndpkXMnrRjpv0oieAm17MBCkpvdzv4YpvmSeDXpA+P+DJo5cHPOwi6R/LvYheIMFZzqD3Qc9tetF+P4iPEQu9LCNb0XpXeNjC1EWoddqkl6M8nosANC8C9PIQtSu9kNGLdtykFz0B3PRiJkhJ6eUhD1d8Kz0Z9IL0+WFPHr087GEXSf9Y5UX0AgnOKga9j3hu04v2+xF8jFjoZSXZitb7qIctTF2EWqdNeunn8VwEoHkRoJfHqF3thYxetOMmvegJ4KYXM0FKSi+PebjiW+3JoBekz4978ujlcQ+7SPrHGi+iF0hw1jDofcJzm16030/gY8RCL6vJVrTetR62MHURap026eVoj+ciAM2LAL08Se06L2T0oh036WWdx08vZoKUlF6e9HDFt86TQS9In5/y5NHLUx52kfSP9V5EL5DgrGfQ+7TnNr1ov5/Gx4iFXtaRrWi9z3jYwtRFqHXapJf+Hs9FAJoXAXp5ltoNXsjoRTtu0oueAG56MROkpPTyrIcrvg2eDHpB+vycJ49envOwi6R/bPQieoEEZyOD3uc9t+lF+/08PkYs9LKBbEXr3eRhC1MXodZpk16O8XguAtC8CNDLC9Ru9kJGL9pxk170BHDTi5kgJaWXFzxc8W32ZNAL0ucXPXn08qKHXST9Y4sX0QskOFsY9L7kuU0v2u+X8DFioZfNZCta78setjB1EWqdNullgMdzEYDmRYBeXqH2VS9k9KIdN+lFTwA3vZgJUlJ6ecXDFd+rngx6Qfr8miePXl7zsIukf2z1InqBBGcrg97XPbfpRfv9Oj5GLPTyKtmK1rvNwxamLkKt0ya9HOvxXASgeRGglzeofdMLGb1ox0160RPATS9mgpSUXt7wcMX3pieDXpA+v+XJo5e3POwi6R/bvYheIMHZzqD3bc9tetF+v42PEQu9vEm2ovW+42ELUxeh1mmTXgZ6PBcBaF4E6OVdand4IaMX7bhJL3oCuOnFTJCS0su7Hq74dngy6AXp805PHr3s9LCLpH/s8iJ6gQRnF4Pe9zy36UX7/R4+Riz0soNsRet938MWpi5CrdMmvRzn8VwEoHkRoJcPqP3QCxm9aMdNetETwE0vZoKUlF4+8HDF96Eng16QPn/kyaOXjzzsIukfu72IXiDB2c2g92PPbXrRfn+MjxELvXxItqL1fuJhC1MXodZpk14GeTwXAWheBOjlU2o/80JGL9pxk170BHDTi5kgJaWXTz1c8X3myaAXpM+fe/Lo5XMPu0j6xx4vohdIcPYw6P3Cc5tetN9f4GPEQi+fka1ovV962MLURah12qSX4z2eiwA0LwL08hW1X3shoxftuEkvegK46cVMkJLSy1cervi+9mTQC9Lnbzx59PKNh10k/eNbL6IXSHC+ZdD7nec2vWi/v8PHiIVeviZb0Xq/97CFqYtQ67RJL4M9nosANC8C9PIDtfpCHip6+cE7kF70Y256MROkpPTyg4crvh89GfSC9PknTx69/ORhF0n/+NmL6AUSnJ8Z9P7iuU0v2u9f8DFioZcfyVa03l89bGHqItQ6bdLLCR7PRQCaFwF6+Y3a372Q0Yt23KQXPQHc9GImSEnp5TcPV3y/ezLoBenzXk8evez1sIukf+zzInqBBGcfg94/PLfpRfv9Bz5GLPTyO9mK1qsVovz+6+pbyi69DPF4LgLQvAjQSymahIRSIaMX7bhJL3oCuOnFTJCS0kupUrjiSyjFk7hoekH6XLqUPHopDV4k/aNMqYheIMHRE4nWmwhMei6/E0vBY8RCLwlkK1pvWQZ6KWuZXk70eC4C0LwI0EsSTUJy2OglKUAvyRboxUyQktJLEnBRSxZCL0ifUwTSSwoTvZSL6AUTnHIM9FLecXrRfpcXQi/JZCtabwUGeqlgmV6GejwXAWheBOilIk1CpbDRS8UAvVSyQC9mgpSUXioCF7VKQugF6XNlgfRSmYleqkT0gglOFQZ6qeo4vWi/qwqhl0pkK1pvNQZ6qWaZXk7yeC4C0LwI0Et1moQaYaOX6gF6qWGBXswEKSm9VAcuajWE0AvS55oC6aUmE73UiugFE5xaDPRS23F60X7XFkIvNchWtN46DPRSxzK9nOzxXASgeRGgl7o0CfXCRi91A/RSzwK9mAlSUnqpC1zU6gmhF6TP9QXSS30memkQ0QsmOA0Y6KWh4/Si/W4ohF7qka1ovY0Y6KWRZXo5xeO5CEDzIkAvjWkSUsNGL40D9JJqgV7MBCkpvTQGLmqpQugF6XMTgfTShIlemkb0gglOUwZ6aeY4vWi/mwmhl1SyFa23OQO9NLdML6d6PBcBaF4E6KUFTULLsNFLiwC9tLRAL2aClJReWgAXtZZC6AXpcyuB9NKKiV5aR/SCCU5rBnpp4zi9aL/bCKGXlmQrWm9bBnppa5leTvN4LgLQvAjQSzuahPZho5d2AXppb4FezAQpKb20Ay5q7YXQC9LnDgLppQMTvXSM6AUTnI4M9HKQ4/Si/T5ICL20J1vRemMM9BKzTC/DPJ6LADQvAvQSp0lICxu9xAP0kmaBXoZ5OHqJAxe1NCH0gvQ5XSC9pDPRS0ZEL5jgZDDQSyfH6UX73UkIvaSRrWi9nRnopbNlesnxeC4C0LwI0EsmTUJW2OglM0AvWRboxUyQktJLJnBRyxJCL0ifswXSSzYTvXSJ6AUTnC4M9HKw4/Si/T5YCL1kka1ovV0Z6KWrZXrJ9XguAtC8CNDLITQJ3cJGL4cE6KWbBXoxE6Sk9HIIcFHrJoRekD53F0gv3ZnopUdEL6DgMNDLoY7Ti/b7UCH00o1sRevtyUAvPS3TS57HcxGA5kWAXnrRJBwWNnrpFaCXwyzQi5kgJaWXXsBF7TAh9IL0+XCB9HI4E730jugFE5zeDPRyhOP0ov0+Qgi9HEa2ovX2YaCXPpbpZbjHcxGA5kWAXo6kSegbNno5MkAvfS3Qi5kgJaWXI4GLWl8h9IL0+SiB9HIUE730i+gFE5x+DPRytOP0ov0+Wgi99CVb0Xr7M9BLf8v0ku/xXASgeRGgl2NoEgaEjV6OCdDLAAv0YiZISenlGOCiNkAIvSB9PlYgvRzLRC8DI3rBBGcgA70c5zi9aL+PE0IvA8hWtN5BDPQyyDK9FHg8FwFoXgTo5XiahMFho5fjA/Qy2AK9mAlSUno5HrioDRZCL0ifTxBILycw0cuQiF4wwRnCQC8nOk4v2u8ThdDLYLIVrXcoA70MtUwvp3s8FwFoXgTo5SSahJPDRi8nBejlZAv0YiZISenlJOCidrIQekH6fIpAejmFiV5OjegFE5xTGejlNMfpRft9mhB6OZlsResdxkAvwyzTywiP5yLgIe0M0EsOTUJu2OglJ0AvuRboxUyQktJLDnBRyxVCL0if8wTSSx4TvQyP6AUTnOEM9JLvOL1ov/OF0Esu2YrWW8BALwWW6WWkx3MRgOZFgF5Op0kYETZ6OT1ALyMs0IuZICWll9OBi9oIIfSC9HmkQHoZyUQvZ0T0ggnOGQz0cqbj9KL9PlMIvYwgW9F6RzHQyyjL9HKGx3MRgOZFgF7OokkYHTZ6OStAL6Mt0IuZICWll7OAi9poIfSC9HmMQHoZw0QvYyN6wQRnLAO9nO04vWi/zxZCL6PJVrTecQz0Ms4yvZzp8VwEoHkRoJdzaBLGh41ezgnQy3gL9GImSEnp5RzgojZeCL0gfZ4gkF4mMNHLxIheMMGZyEAv5zpOL9rvc4XQy3iyFa33PAZ6Oc8yvYzyeC4C0LwI0Mv5NAmTwkYv5wfoZZIFejETpKT0cj5wUZskhF6QPl8gkF4uYKKXyRG9YIIzmYFeLnScXrTfFwqhl0lkK1rvRQz0cpFlejnL47kIQPMiQC8X0yRMCRu9XByglykW6MVMkJLSy8XARW2KEHpB+nyJQHq5hIlepkb0ggnOVAZ6udRxetF+XyqEXqaQrWi9lzHQy2WW6WW0x3MRgOZFgF4up0mYFjZ6uTxAL9Ms0IuZICWll8uBi9o0IfSC9PkKgfRyBRO9TI/oBROc6Qz0cqXj9KL9vlIIvUwjW9F6ZzDQywzL9DLG47kIQPMiQC9X0STMDBu9XBWgl5kW6MVMkJLSy1XARW2mEHpB+ny1QHq5moleZkX0ggnOLAZ6ucZxetF+XyOEXmaSrWi91zLQy7WW6WWsx3MRgOZFgF6uo0mYHTZ6uS5AL7Mt0IuZICWll+uAi9psIfSC9Pl6gfRyPRO93BDRCyY4NzDQy42O04v2+0Yh9DKbbEXrvYmBXm6yTC9nezwXAWheBOjlZpqEOWGjl5sD9DLHAr2YCVJSerkZuKjNEUIvSJ9vEUgvtzDRy60RvWCCcysDvdzmOL1ov28TQi9zyFa03rkM9DLXMr2M83guAtC8CNDL7TQJ88JGL7cH6GWeBXoxE6Sk9HI7cFGbJ4RekD7fIZBe7mCil/kRvWCCM5+BXu50nF6033cKoZd5ZCta7wIGellgmV7O8XguAtC8CNDLXTQJC8NGL3cF6GWhBXoxE6Sk9HIXcFFbKIRekD7fLZBe7mail0URvWCCs4iBXu5xnF603/cIoZeFZCta72IGellsmV7GezwXAWheBOjlXpqEJWGjl3sD9LLEAr2YCVJSerkXuKgtEUIvSJ/vE0gv9zHRy9KIXjDBWcpAL/c7Ti/a7/uF0MsSshWtdxkDvSyzTC8TPJ6LADQvAvTyAE3C8rDRywMBellugV7MBCkpvTwAXNSWC6EXpM8PCqSXB5noZUVEL5jgrGCgl4ccpxft90NC6GU52YrWu5KBXlZappeJHs9FAJoXAXp5mCZhVdjo5eEAvayyQC9mgpSUXh4GLmqrhNAL0udHBNLLI0z08mhEL5jgPMpAL485Ti/a78eE0MsqshWtdzUDvay2TC/nejwXAWheBOjlcZqENWGjl8cD9LLGAr2YCVJSenkcuKitEUIvSJ+fEEgvTzDRy9qIXjDBWctAL086Ti/a7yeF0MsashWtdx0DvayzTC/neTwXAWheBOjlKZqE9WGjl6cC9LLeAr2YCVJSenkKuKitF0IvSJ+fFkgvTzPRyzMRvWCC8wwDvTzrOL1ov58VQi/ryVa03g0M9LLBMr2c7/FcBKB5EaCX52gSNoaNXp4L0MtGC/RiJkhJ6eU54KK2UQi9IH1+XiC9PM9EL5siesEEZxMDvbzgOL1ov18QQi8byVa03s0M9LLZMr1M8nguAtC8CNDLizQJW8JGLy8G6GWLBXoxE6Sk9PIicFHbIoRekD6/JJBeXmKil5cjesEE52UGennFcXrRfr8ihF62kK1ova8y0MurlunlAo/nIgDNiwC9vEaTsDVs9PJagF62WqAXM0FKSi+vARe1rULoBenz6wLp5XUmetkW0QsmONsY6OUNx+lF+/2GEHrZSrai9b7JQC9vWqaXyR7PRQCaFwF6eYsmYXvY6OWtAL1st0AvZoKUlF7eAi5q24XQC9LntwXSy9tM9PJORC+Y4LzDQC/vOk4v2u93hdDLdrIVrXcHA73ssEwvF3o8FwFoXgToZSdNwq6w0cvOAL3sskAvZoKUlF52Ahe1XULoBenzewLp5T0menk/ohdMcN5noJcPHKcX7fcHQuhlF9mK1vshA718aJleLvJ4LgLQvAjQy0c0CbvDRi8fBehltwV6MROkpPTyEXBR2y2EXpA+fyyQXj5mopdPInrBBOcTBnr51HF60X5/KoRedpOtaL2fMdDLZ5bp5WKP5yIAzYsAvXxOk7AnbPTyeYBe9ligFzNBSkovnwMXtT1C6AXp8xcC6eULJnr5MqIXTHC+ZKCXrxynF+33V0LoZQ/Zitb7NQO9fG2ZXqZ4PBcBaF4E6OUbmoRvw0Yv3wTo5VsL9DLFw9HLN8BF7Vsh9IL0+TuB9PIdE718H9ELJjjfM9DLD47Ti/b7ByH08i3Zitb7IwO9/GiZXi7xeC4C0LwI0MtPNAk/h41efgrQy88W6MVMkJLSy0/ARe1nIfSC9PkXgfTyCxO9/BrRCyY4vzLQy2+O04v2+zch9PIz2YrW+zsDvfxumV6mejwXAWheBOhlL03CvrDRy94AveyzQC9mgpSUXvYCF7V9QugF6fMfAunlDyZ60YGK6KWEOv+glQStt1SC2/Si/S6VAI8RC73sI1vRehMS8PSidaZ4/yQXdPzaAWOWSnpK6wVFSaKSskqSlCRrf5SUU1JeSQUlFZVUUlJZSRUlVZVUU1JdSQ0lNZXUUlJbSR0ldZXUU1JfSQMlDZU0UtJYSaqSJkqaJvw5Sf48aluSvb/7ZQL9xEC/bKCfFOgnB/opgX65QL98oF8h0K8Y6FcK9CsH+lUC/aqBfrVAv3qgXyPQrxno1wr0awf6dQL9uoF+vUC/fqDfINBvGOg3CvQbB/qpgX6TQL9pAj/ImTVT0rWjNHB9b1qFB+SC81dSeC2TgNGlY5EInL9mzs/fftXxsiX3OY18jicB56+5y/OX8Zed8eSS+RwzfI6nAOevhavzl3aAnfFy/73PsYDP8fLA+Wvp4Px1LviHnfEK/53PWYX4HK8InL9Wrs1fVqF2xisV3+fM/+BzvDJw/lq7NH+Z/9HOeJXi+Zz2Lz7HqwLnr40r85f5r3bGqxXd57z/x+d4deD8tXVh/jL/XzvjNYrmc6wIPsdrAuev3f96/mJFsjNe6//3uVMRfY7XBs5f+//l/GUU2c54nX/1OaOgGD7H6wLnr8P/av4yi2VnvN5/9jmrmD7H6wPnr+P/YP6yC4ptZ7xB4T7H/guf4w2B83eQ7fmL/Vd2xhv90+f4f+lzvDFw/mI252/4f21nPPVAn9NL4HO8CXD+4pbmL62gRHbGmybg7iWa9+xKOn9pluYvVrIjDrzPFm8OnL90IfMHvE8Ubwmcvwwh8we8zxFvDZy/TkLmD/g+Pd4WOH+dhcwf8H1mvD1w/jKFzB/wfVK8I3D+soTMH5Dz4zHg/GULmT8gp8bTgPPXRcj8ATkrngGcv4OFzB+QE+KdgfPXVcj8Aa9z8Szg/B0iZP6A63S8C3D+ugmZP+A6E+8KnL/uQuYPWCdxYM7EkfOn97PpjdftlexT0oFaX/9l3p/73GZQey21N1E7l9oF1C6mdhm1K6ldTe06ajdQu5naV6l9k9od1H5I7WfUfk3tj9T+Tm0CfbEimdpK1Nagth61qdS2pLY9tWnUZlHbjdrDqO1L7QBqB1N7MrW51I6gdjS146mdRO0UaqdRO5Pa2dTOoXYetQupXULtcmpXUbuG2vXUbqTW/8fC/r/o8//ZzS5q/R9g9X/KzP9REP/rtf4XVVIpD/z9jv4+yFRq/X2T/n5Kf5+lv//S35fp79f093H6+zv9fZ/+flB/n6i/f9TfV+rvN/X3ofr7U/19q/5+Vn+fq7//1d8X6++X9ffR+vtr/X23/n5cf5+uv3/X39fbLME74EDvj24GvL9t64sidT3sOuQfzROiL4pAgqMnEq23BTBRufxukQCP0b9+46zEGzKBc9oS+KGRLoQy3j8PlxcSTjvrCLGzthA7e3r4C4huK9HjVqoWWitpo6StknZK2ivpoKSjkoOU6O8px5WkKUlXkqGkNv29/mJUMP/1ucTAfOhzZelxgnEuiR6bFy4PO4cxhothzPxCWBnDH9+PxELmp2wh85NkjK9oPO8F5qoS/X0y1o98My7+EbyI9zAeJxu+JGFtie+HX9KVP/rsCfkT8gdMyB01Mq/3hNF540eOGd0rZ9QoM4nLGpOjjzKFTJw+ShuPzTFmkFIMx/xz5ehxknHOTF6/9fWb40uhVwJ91apnGA/SG7P1owytE3hWXNB8xP0H5lx0ok7nhJD9KIN2fIfhrJ6A1MBrou8ltS454v31XapOQFzszJS4CeD5Q/qcWYiu3Fje8E7x3M7DM+P5OZ2y8vKy0+PxtJzOOZ1z07IK8nM7xbM6ZSmdeTlpWerl0nLy4vmxnM75tt5rZybgUUkfWdF7bUxwshjea2c7/l5b+53N9F4b/eMJnclWtN5THf8w469ND8Bc6gK8x3Aq+MMMnY7aviaevZ/kauM2/flHmjkXB1Ona9joTzu+N2AM6jX0ZHZlWGS6Jri9yNBxQCGU7NcbCgoOTnB//tCUi/T5EENXPCs9LS0zXY/LGh6LZwzPS8tKSxuemxHLi+XkpeVnZ8SzCzLSMtLzhuflKp058YJYQU5edkHWn3bZotxDmCi3W0S5mOB0Y6Dc7o5Trva7uxDK7Uq2ovX2ABemnk6tM8GzR2ltBVLaodTpGTZKO5SR0vRk9mQokp5CKK0tkNIOTXB//tCUhvS5l0BK68VEaYdFlIYJzmEMlHa445Sm/T5cCKX1JFvRenszUFpvy5TWTiClHUGdPmGjtCMYKU1PZh+GIukjhNLaASntiAT35w9NaUifjxRIaUcyUVrfiNIwwenLQGlHOU5p2u+jhFBaH7IVrbcfA6X1s0xpB7lNaYXudzuaOv3DRmnacXO/m56A1MBrwn/7oeQL0V/73Y4GLmr9hdAL0udjCtHl+n63Y5joZUBEL5jgDGCgl2Mdpxft97FC6KU/2YrWO0zIfjdkLg3ELUbxYQz73bR9TTx79Bdzm/7844B7dMdRZ1DY6O84xnt0ejIHMSwyg4Tco4sB79Edl+D+/KEpF+nz8QLv0R3PRLmDI8rFBGcwA+We4Djlar9PEEK5g8hWtN4hDPfohli+RxcXSGknUmdo2CjtREZK05M5lKFIhgqhtDiQ0k5McH/+0JSG9PkkgZR2EhOlnRxRGiY4JzNQ2imOU5r2+xQhlDaUbEXrPZWB0k61TGlpAintNOoMCxulncZIaXoyhzEUyTAhlJYGpLTTEtyfPzSlIX3OEUhpOUyUlhtRGiY4uQyUluc4pWm/84RQ2jCyFa13OAOlDbdMaeluU1qh+93yqVMQNkrTjpv73fQEpAZeE/6/Zkq+EP213y0fuKgVCKEXpM+nF6LL9f1upzPRy4iIXjDBGcFALyMdpxft90gh9FJAtqL15grZ74bMpTNwi1E8l2G/m7avCelE57z+FeKWDHl0ZgJv/cRKduz/Df4zOei/itvrhv6NeA6/86vIAC9gfOL5jse6DlOOj6jidm13ZsrxkUJyHBif+EjHc7wnU46PcjzHC5hy/CwhOQ6MT1yKzz2R+Q1kXo781rk9iiO/wTcedIzPMm64oedB/28ejjof6/i6nsG0vp0tpNaB8Ymf7fi1bBDF2sPqZbF1qCBbh1m0taR1qfVx1Pt4x3O/PdM6N0HIOgeMT3yC47HuwBTr8yzF2qF7Y3Gkzzoe+/8JMunT9w/0PwXvSm1PavtQq/813GiKY7L39//Ra0/Pd6C2I7X9qR1E7VBqh1FbQG1VJWMMvf4989ben88HW/2J89hijj+7mOPHFXP8OcUcP76Y4ycUc/zEYo4/t5jjzyvm+POLOX5SMcdfUMzxk4s5/sJijr+omOMvNsYn/Ifx+rkpRRx3SRHHTS3iuEuLOO6yIo67vIjjphVx3BVFHDe9iOOuLOK4GUUcd1URx80s4ririzhuVhHHXVOEcQ2VXFvEcdcVcdzsIo67vojjbijiuBuLOO6mIo67uYjj5hRx3C1FHHdrEcfdVsRxc4s47vYijptXxHF3FGO91OPnF3P8ncUcv6CY4+8q5viFxRx/dzHHLyrm+HuKOX5xMcffW8zxS4o5/r5ijl9azPH3F3P8smKOf8AYfwKNH0N8nJFQ+N8F27E07mxqx1F7DrXjqZ1A7URqz6X2PGrPp3YStRdQO5naC6m9iNqLqZ1C7SXUTqX2Umovo/ZyaqdRewW106m9ktoZ1F5F7Uxqr6Z2FrXXFHF+rqVx11E7m9rrqb2B2hupvYnam6mdQ+0t1N5K7W3UzqX2dmrnUXsHtfOpvZPaBdTeRe1Cau+mdhG191C7mNp7qV1C7X3ULqX2fmqXUftAEecH1bZTsryQ/G9Fdoymdjm11ZQ86F8c6PC7Pagt6XvwekBdKxJw7+f13JTx/nlw7PsB6Ypx2llHiJ21hdjZE2in+U2Ap+nxQ6oWVip5WMkqJY8oeVTJY0pWK3lcyRolTyhZq+RJJeuUPKVkvZKnlTyj5FklG5Q8p2SjkueVbFLygpLNSl5UskXJS0peVvKKkleVvKZkq5LXlWxT8oaSN5W8pWS7kreVvKPkXSU7lOxUskvJe0reV/KBkg+VfKRkt5KPlXyi5FMlnyn5XMkeJV8o+VLJV0q+VvKNkm+VfKfkeyU/KPlRyU9Kflbyi5Jflfym5Hcle/Vap+QPvbCpoi+lJEFJaSVllCQqKaskSUmykhQl5ZSUV1JBSUUllZRUVlJFSVUl1ZRUV1JDSU0ltZTUVlJHSV0l9ZTUV9JASUMljZQ0VpKqpImSpkqaKWmupIWSlkpaKWmtpI2StkraKWmvpIOSjkoOUhJToheuNCXpSjKUdFLSWUmmkiwl2Uq6KDlYSVclhyjppqS7kh5KDlXSU0kvJYcpOVxJbyVHKOmj5EglfZUcpaSfkqOV9FdyjJIBSo5VMlDJcUoGKTleyWAlJygZouREJUOVnKTkZCWnKDlVyWlKhinJUZKrJE/JcCX6GwAFSk5XMkLJSCVnKDlTySglZykZrWSMkrFKzlYyTsk5SsYrmaDnnmpC388Jrun6XGKgxvW5svQ4wTiXRI/962ZZQ08PUC0zfCEgluId+K0j3x/fj8RC5qdsIfOTZIyvaDzvBeaqEv19MtSPvHQzLv4R/CJDD+NxsuFLEtSWWFzrrk668nJGjRowbuTEnPH5vSeMzhs/csxoc0n2TX6a2jKFTJk+ShuPzTFmeFIMl/xz5ehxknHOTFu/9fWb40uhr2t67/YKwyuQXr20eQEU3X+g7V+ZwMMPoPko9JuGEymy55YO2TcNteM7DGf1BKQGXrM0+LXNBCnpNw21/SXU9debn3NLy/iAHenzeYXocv2bhucB42Tae37p6JuGkODoiUTrnQRMei6/J5WGx4hlZ9a5ZCta7yQh3zRE5tIFpYE5zvBNQ21fE8/e70w87Db9+ccBvwY2mRLswrDRn3ac69fA9GReyLDIXFja7UWGjgMKoaS/Bja5tPvzh6ZcpM8XGbqk/BrYRUyUe3FEuZjgXMxAuVMcp1zt9xQhlHsh2YrWewm4MHURap308YkVSlslkNKmUt5dGjZKm8pIaXoyL2UokkuFUNoqIKVNLe3+/KEpDenzZQIp7TImSrs8ojRMcC5noLRpjlOa9nuaEEq7lGxF672CgdKusExpjwiktOmUd1eGjdKmM1KanswrGYrkSiGU9giQ0qaXdn/+0JSG9HmGQEqbwURpV0WUhgnOVQyUNtNxStN+zxRCaVeSrWi9VzNQ2tWWKe1xtymt0P1usyjvrgkbpc0K7He7xsJ+t8dLTi9/7XebBVzUrhFCL0ifrxW43+1aJnq5LqIXTHCuY6CX2Y7Ti/Z7thB6uYZsReudLGS/GzKXrgfud5vMsN/tesv73dYIvEd3AyXYjWGjvxsY79HpybyRYZG5Ucg9ujXAe3Q3lHZ//tCUi/T5JoH36G5iotybI8rFBOdmBsqd4zjlar/nCKHcG8lWtN5bGO7R3WL5Ht0TAintVsq728JGabcyUpqezNsYiuQ2IZT2BJDSbi3t/vyhKQ3p81yBlDaXidJujygNE5zbGShtnuOUpv2eJ4TSbiNb0XrvYKC0OyxT2lqBlDaf8u7OsFHafEZK05N5J0OR3CmE0tYCKW1+affnD01pSJ8XCKS0BUyUdldEaZjg3MVAaQsdpzTt90IhlHYn2YrWezcDpd1tmdKedJvSCt3vtojy7p6wUdqiwH63eyzsd3uy5PTy1363RcBF7R4h9IL0ebHA/W6Lmejl3oheMMG5l4FeljhOL9rvJULo5R6yFa33IiH73ZC5dB9wv9tFDPvd7rO8322DQPpbSgl2f9job2mA/u63QH8bgPS3FFjI9wuhP6TPywTS3zIm+nsgoj9McB5goL/ljtOf9nu5EPq7n2xF650ihP6QufQgkP6mMNDfg5bpb6NA+ltBCfZQ2OhvRYD+HrJAfxuB9LcCWMgPCaE/pM8rBdLfSib6eziiP0xwHmagv1WO05/2e5UQ+nuIbEXrnSqE/pC59AiQ/qYy0N8jlulvk0D6e5QS7LGw0d+jAfp7zAL9bQLS36PAQn5MCP0hfV4tkP5WM9Hf4xH9YYLzOAP9rXGc/rTfa4TQ32NkK1rvZULoD5lLTwDp7zIG+nvCMv1tFkh/aynBngwb/a0N0N+TFuhvM5D+1gIL+Ukh9If0eZ1A+lvHRH9PRfSHCc5TDPS33nH6036vF0J/T5KtaL3ThNAfMpeeBtLfNAb6e9oy/W0RSH/PUII9Gzb6eyZAf89aoL8tQPp7BljIzwqhP6TPGwTS3wYm+nsuoj9McJ5joL+NjtOf9nujEPp7lmxF650uhP6QufQ8kP6mM9Df85bp72WB9LeJEuyFsNHfpgD9vWCB/l4G0t8mYCG/IIT+kD5vFkh/m5no78WI/jDBeZGB/rY4Tn/a7y1C6O8FshWtd4YQ+kPm0ktA+pvBQH8vWaa/VwXS38uUYK+Ejf5eDtDfKxbo71Ug/b0MLORXhNAf0udXBdLfq0z091pEf5jgvMZAf1sdpz/t91Yh9PcK2YrWO1MI/SFz6XUg/c1koL/XLdPfVoH0t40S7I2w0d+2AP29YYH+tgLpbxuwkN8QQn9In98USH9vMtHfWxH9YYLzFgP9bXec/rTf24XQ3xtkK1rvLCH0h8ylt4H0N4uB/t62TH/bBNLfO5Rg74aN/t4J0N+7FuhvG5D+3gEW8rtC6A/p8w6B9LeDif52RvSHCc5OBvrb5Tj9ab93CaG/d8lWtN5rhdAfMpfeA9LftQz0955l+ntTIP29Twn2Qdjo7/0A/X1ggf7eBNLf+8BC/kAI/SF9/lAg/X3IRH8fRfSHCc5HDPS323H6037vFkJ/H5CtaL2zhdAfMpc+BtLfbAb6+9gy/W0XSH+fUIJ9Gjb6+yRAf59aoL/tQPr7BFjInwqhP6TPnwmkv8+Y6O/ziP4wwfmcgf72OE5/2u89QujvU7IVrfcGIfSHzKUvgPR3AwP9fWGZ/t4RSH9fUoJ9FTb6+zJAf19ZoL93gPT3JbCQvxJCf0ifvxZIf18z0d83Ef1hgvMNA/196zj9ab+/FUJ/X5GtaL03CaE/ZC59B6S/mxjo7zvL9LdDIP19Twn2Q9jo7/sA/f1ggf52AOnve2Ah/yCE/pA+/yiQ/n5kor+fIvrDBOcnBvr72XH6037/LIT+fiBb0XrnCKE/ZC79AqS/OQz094tl+tslkP5+pQT7LWz092uA/n6zQH+7gPT3K7CQfxNCf0iffxdIf78z0d/eiP4wwdnLQH/7HKc/7fc+IfT3G9mK1nurEPpD5tIfQPq7lYH+/rBMf+8LpD9/1S9VJmT0pz0z6U9PQGrgNdH09z6Q/rT9JdT1VyGXKiOD/pA+J5SRR38JZbCL5F95XiaiP0hw9ESi9ZYBJj2X32XKwGPEQn+lyFa03rlC6A+ZS4m4xSg+l4H+tH026e9DgfRXluo2KWz0VzZAf0kW6O9DIP2VBRZykhD6Q/qcLJD+kpnoLyWiP0xwUhjor5zj9Kf9LieE/pLIVrTeeULoD5lL5YH0N4+B/spbpr/dAumvAtVtxbDRX4UA/VW0QH+7gfRXAVjIFYXQH9LnSgLprxIT/VWO6A8TnMoM9FfFcfrTflcRQn8VyVa03vlC6A+ZS1WB9Defgf6qWqa/TwTSXzWq2+pho79qAfqrboH+PgHSXzVgIVcXQn9In2sIpL8aTPRXM6I/THBqMtBfLcfpT/tdSwj9VSdb0XoXCKE/ZC7VBtLfAgb6q22Z/j4TSH91qG7rho3+6gTor64F+vsMSH91gIVcVwj9IX2uJ5D+6jHRX/2I/jDBqc9Afw0cpz/tdwMh9FeXbEXrXSiE/pC51BBIfwsZ6K+hZfrbI5D+GlHdNg4b/TUK0F9jC/S3B0h/jYCF3FgI/SF9ThVIf6lM9Nckoj9McJow0F9Tx+lP+91UCP01JlvRehcJoT9kLjUD0t8iBvprZpn+vhRIf82pbluEjf6aB+ivhQX6+xJIf82BhdxCCP0hfW4pkP5aMtFfq4j+MMFpxUB/rR2nP+13ayH014JsRetdLIT+kLnUBkh/ixnor41l+vtaIP21pbptFzb6axugv3YW6O9rIP21BRZyOyH0h/S5vUD6a89Efx0i+sMEpwMD/XV0nP603x2F0F87shWtd4kQ+kPm0kFA+lvCQH8HWaa/bwXSX4zqNh42+osF6C9ugf6+BdJfDFjIcSH0h/Q5TSD9pTHRX3pEf5jgpDPQX4bj9Kf9zhBCf3GyFa13qRD6Q+ZSJyD9LWWgv06W6e97gfTXmeo2M2z01zlAf5kW6O97IP11BhZyphD6Q/qcJZD+spjoLzuiP0xwshnor4vj9Kf97iKE/jLJVrTeZULoD5lLBwPpbxkD/R1smf5+FEh/XaluDwkb/XUN0N8hFujvRyD9dQUW8iFC6A/pczeB9NeNif66R/SHCU53Bvrr4Tj97U9KIfR3CNmK1rtcCP0hc+lQIP0tZ6C/Qy3T388C6a8n1W2vsNFfzwD99bJAfz8D6a8nsJB7CaE/pM+HCaS/w5jo7/CI/jDBOZyB/no7Tn/a795C6K8X2YrWu0II/SFz6Qgg/a1goL8jLNPfrwLprw/V7ZFho78+Afo70gL9/Qqkvz7AQj5SCP0hfe4rkP76MtHfURH9YYJzFAP99XOc/rTf/YTQ35FkK1rvSiH0h8ylo4H0t5KB/o62TH+/C6S//lS3x4SN/voH6O8YC/T3O5D++gML+Rgh9If0eYBA+hvARH/HRvSHCc6xDPQ30HH6034PFEJ/x5CtaL2rhNAfMpeOA9LfKgb6O84y/e0TSH+DqG6PDxv9DQrQ3/EW6G8fkP4GAQv5eCH0h/R5sED6G8xEfydE9IcJzgkM9DfEcfrTfg8RQn/Hk61ovY8KoT9kLp0IpL9HGejvRMv0p18I5UMh5rLQ31Cq25PCRn9DA/R3kgX6MxOkpPQ3FFjIJwmhP6TPJwukv5OZ6O+UiP4wwTmFgf5OdZz+tN+nCqG/k8hWtN7VQugPmUunAelvNQP9nWaZ/hIE0t8wqtucsNHfsAD95VigvwQg/Q0DFnKOEPpD+pwrkP5ymegvL6I/THDyGOhvuOP0p/0eLoT+cshWtN41QugPmUv5QPpbw0B/+Zbpr4xA+iuguj09bPRXEKC/0y3QXxkg/RUAC/l0IfSH9HmEQPobwUR/IyP6wwRnJAP9neE4/Wm/zxBCf6eTrWi9a4XQHzKXzgTS31oG+jvTMv2VFUh/o6huzwob/Y0K0N9ZFuivLJD+RgEL+Swh9If0ebRA+hvNRH9jIvrDBGcMA/2NdZz+tN9jhdDfWWQrWu86IfSHzKWzgfS3joH+zrZMf8kC6W8c1e05YaO/cQH6O8cC/SUD6W8csJDPEUJ/SJ/HC6S/8Uz0NyGiP0xwJjDQ30TH6U/7PVEI/Z1DtqL1rhdCf8hcOhdIf+sZ6O9cy/RXTiD9nUd1e37Y6O+8AP2db4H+ygHp7zxgIZ8vhP6QPk8SSH+TmOjvgoj+MMG5gIH+JjtOf9rvyULo73yyFa33GSH0h8ylC4H09wwD/V1omf4qCKS/i6huLw4b/V0UoL+LLdBfBSD9XQQs5IuF0B/S5ykC6W8KE/1dEtEfJjiXMNDfVMfpT/s9VQj9XUy2ovVuEEJ/yFy6FEh/Gxjo71LL9FdJIP1dRnV7edjo77IA/V1ugf4qAenvMmAhXy6E/pA+TxNIf9OY6O+KiP4wwbmCgf6mO05/2u/pQujvcrIVrXejEPpD5tKVQPrbyEB/V1qmvyoC6W8G1e1VYaO/GQH6u8oC/VUB0t8MYCFfJYT+kD7PFEh/M5no7+qI/jDBuZqB/mY5Tn/a71lC6O8qshWtd5MQ+kPm0jVA+tvEQH/XWKa/agLp71qq2+vCRn/XBujvOgv0Vw1If9cCC/k6IfSH9Hm2QPqbzUR/10f0hwnO9Qz0d4Pj9Kf9vkEI/V1HtqL1bhZCf8hcuhFIf5sZ6O9Gy/RXQyD93UR1e3PY6O+mAP3dbIH+agDp7yZgId8shP6QPs8RSH9zmOjvloj+MMG5hYH+bnWc/rTftwqhv5vJVrTeLULoD5lLtwHpbwsD/d1mmf5qCaS/uVS3t4eN/uYG6O92C/RXC0h/c4GFfLsQ+kP6PE8g/c1jor87IvrDBOcOBvqb7zj9ab/nC6G/28lWtN6XhdAfMpfuBNLfywz0d6dl+qsjkP4WUN3eFTb6WxCgv7ss0F8dIP0tABbyXULoD+nzQoH0t5CJ/u6O6A8TnLsZ6G+R4/Sn/V4khP7uIlvRel8VQn/IXLoHSH+vMtDfPZbpr55A+ltMdXtv2OhvcYD+7rVAf/WA9LcYWMj3CqE/pM9LBNLfEib6uy+iP0xw7mOgv6WO05/2e6kQ+ruXbEXr3SqE/pC5dD+Q/rYy0N/9lumvgUD6W0Z1+0DY6G9ZgP4esEB/DYD0twxYyA8IoT+kz8sF0t9yJvp7MKI/THAeZKC/FY7Tn/Z7hRD6e4BsRevdJoT+kLn0EJD+tjHQ30OW6a+RQPpbSXX7cNjob2WA/h62QH+NgPS3EljIDwuhP6TPqwTS3yom+nskoj9McB5hoL9HHac/7fejQujvYbIVrfdNIfSHzKXHgPT3JgP9PWaZ/lIF0t9qqtvHw0Z/qwP097gF+ksF0t9qYCE/LoT+kD6vEUh/a5jo74mI/jDBeYKB/tY6Tn/a77VC6O9xshWtd7sQ+kPm0pNA+tvOQH9PWqa/pgLpbx3V7VNho791Afp7ygL9NQXS3zpgIT8lhP6QPq8XSH/rmejv6Yj+MMF5moH+nnGc/rTfzwihv6fIVrTed4TQHzKXngXS3zsM9PesZfprLpD+NlDdPhc2+tsQoL/nLNBfcyD9bQAW8nNC6A/p80aB9LeRif6ej+gPE5znGehvk+P0p/3eJIT+niNb0Xp3CKE/ZC69AKS/HQz094Jl+mslkP42U92+GDb62xygvxct0F8rIP1tBhbyi0LoD+nzFoH0t4WJ/l6K6A8TnJcY6O9lx+lP+/2yEPp7kWxF690lhP6QufQKkP52MdDfK5bpr61A+nuV6va1sNHfqwH6e80C/bUF0t+rwEJ+TQj9IX3eKpD+tjLR3+sR/WGC8zoD/W1znP6039uE0N9rZCta7/tC6A+ZS28A6e99Bvp7wzL9dRBIf29S3b4VNvp7M0B/b1mgvw5A+nsTWMhvCaE/pM/bBdLfdib6ezuiP0xw3magv3ccpz/t9ztC6O8tshWt90Mh9IfMpXeB9PchA/29a5n+YgLpbwfV7c6w0d+OAP3ttEB/MSD97QAW8k4h9If0eZdA+tvFRH/vRfSHCc57DPT3vuP0p/1+Xwj97SRb0Xp3C6E/ZC59AKS/3Qz094Fl+ksXSH8fUt1+FDb6+zBAfx9ZoL90IP19CCzkj4TQH9Ln3QLpbzcT/X0c0R8mOB8z0N8njtOf9vsTIfT3EdmK1vuJEPpD5tKnQPr7hIH+PrVMf50F0t9nVLefh43+PgvQ3+cW6K8zkP4+Axby50LoD+nzHoH0t4eJ/r6I6A8TnC8Y6O9Lx+lP+/2lEPr7nGxF6/1MCP0hc+krIP19xkB/X1mmv2yB9Pc11e03YaO/rwP0940F+ssG0t/XwEL+Rgj9IX3+ViD9fctEf99F9IcJzncM9Pe94/Sn/f5eCP19Q7ai9e4RQn/IXPoBSH97GOjvB8v011Ug/f1IdftT2OjvxwD9/WSB/roC6e9HYCH/JIT+kD7/LJD+fmaiv18i+sME5xcG+vvVcfrTfv8qhP5+IlvRer8UQn/IXPoNSH9fMtDfb5bpr7tA+vud6nZv2Ojv9wD97bVAf92B9Pc7sJD3CqE/pM/7BNLfPib6+yOiP0xw/mCgP70s+7pcpD/t91+XDg+7kKApbS/Zitb7tRD6Q+ZSqUTghzoM9Kfts0l/PQXSXwLVbenEkNGfdtykPz0BqYHXRNNfTyD9JQALuXQiT+Ki6Q/pc5lEefRXJhG7SPpHYmJEf5DgJCbi9ZZ1nP6032WF0F9pshWt91sh9IfMpSQg/X3LQH9JlunvcIH0l0x1mxI2+ksO0F+KBfo7HEh/ycBCThFCf0ifywmkv3JM9Fc+oj9McMoz0F8Fx+lP+11BCP2lkK1ovd8LoT9kLlUE0t/3DPRX0TL99RFIf5WobiuHjf4qBeivsgX66wOkv0rAQq4shP6QPlcRSH9VmOivakR/mOBUZaC/ao7Tn/a7mhD6q0y2ovX+KIT+kLlUHUh/PzLQX3XL9HeUQPqrQXVbM2z0VyNAfzUt0N9RQPqrASzkmkLoD+lzLYH0V4uJ/mpH9IcJTm0G+qvjOP1pv+sIob+aZCta789C6A+ZS3WB9PczA/3VtUx//QXSXz2q2/pho796Afqrb4H++gPprx6wkOsLoT+kzw0E0l8DJvprGNEfJjgNGeivkeP0p/1uJIT+6pOtaL2/CqE/ZC41BtLfrwz019gy/R0rkP5SqW6bhI3+UgP018QC/R0LpL9UYCE3EUJ/SJ+bCqS/pkz01yyiP0xwmjHQX3PH6U/73VwI/TUhW9F6fxdCf8hcagGkv98Z6K+FZfobJJD+WlLdtgob/bUM0F8rC/Q3CEh/LYGF3EoI/SF9bi2Q/loz0V+biP4wwWnDQH9tHac/7XdbIfTXimxF690nhP6QudQOSH/7GOivnWX6O00g/bWnuu0QNvprH6C/Dhbo7zQg/bUHFnIHIfSH9LmjQPrryER/B0X0hwnOQQz0F3Oc/rTfMSH014FsRev1qsqgP2QuxYH0h5w//4Iet0x/E9ymP/9IM+cijeo2PWz0px3fGzAG9Rp6MtMZFpn0RLcXGToOKIT/1uf8gj+PtET35w9NuUifMwxd8az0tLTMdD0ua3gsnjE8Ly0rLW14bkYsL5aTl5afnRHPLshIy0jPG56Xq3TmxAtiBTl52QVZf9pli3IzmCi3U0S5mOB0YqDczo5Trva7sxDKTSdb0XozwYWpi1DrDJIDKmYtleIVCfh5yEp0O/49lY4shvgnVOX1O1ayI35PaR6/S1eVAQ7A+MSl+NwBeN3IRr6jZchvndvZDPndhWFd72LcTkfPQ12Pp87LVnV7XX8ogcfvJCG1DoxPPMnxWNdhyvFyjl/Dz2W6hpcXkuPA+MTLOx7r2kw5Xsnx2l7HtI5XFpLjwPjEKzue4/q9eJal+waxkh3xG0vLsfU2QbbeadHWEv8XL49nbarmeJ0+yrQmVxeyJgPjE6/ueKwfY4p1LUuxduh9brwW+JP7ZO/vD2n0e4F9qr2Q2kupvZLackoOpjgmk+hD17J+/jFqV1N7Df3djdTeRu2d1N5DrXLJ62roLUt6z6LnR1M7htqx1J5N7ThqKyg5xNDzIOnRuvXz68iup6hdT+3T1D5D7bPU3k96n6P+Q9R/3veX+i9Q/0nqv+jrof5L1H+B+q9Q/xXqv0b9N6j/OvXfpf4b1P+A+m9R/1Pqv039r6j/LvV/oP5O6v9G/feoX6oM6aV+EvU/on5F6n9M/erU/5T6dan/OfUbU/8L6reg/lfUb0f9b6gfp/531M+k/g/UP4T6P1G/F/V/of6R1P+N+sdQfy/1j6f+H9Q/ifqlaB5yqF+a+qdTP5H6Z1E/ifrnUD+F+udTvzz1L6Z+RepfTv3K1L+K+lWpfx31q1P/ZurXpP7t1K9N/buoX5f691K/PvUfoH5D6j9M/cbUf5z6Taj/FPWb+XlO/RbUb+nnM51vTf02ft7S+XbUb+/nJ53vSP2D/Dyk83Hqp1H7EZ3PoH4naj+n85nUz6L2GzrfhfoHU/sTnT+E+t2o3Uvne1D/UGpL07rQi/qHUZtC53tT/whqK9P5I6nfl9qadL4f9Y+mtj6dP4b6A6htQucHUv84alvR+eOpP5jaE6gdQu2J1A6l9iRqT6b2FGpPpbYD6R3m5z21udTmUTuc2nxqC/y6oHYEtSOpPYPaM6kdRe0h9HrnUH88tW11TIz12d8I8BDV58H0d92oraakO3E8mknSdJ55DPcRHWexLJ3/DH7XtbQjs6R29gB+5gSMdbyu43mTpHTUY8ibBgL85tjT0FBIvRwKrBdgrOMNHc8bXSujGPIm1XG/da1wfGbeREi99ATWCzDW8SYC6qUHQ940F1AvHH63EFIvvYD1Aox1vIWAvOnOkDeHJbq/TjzIcF09HOi3rY37DXG6Dti43zvauI8JTm+GjftHOL5xX/t9BNOHr/6B/oAGOad9gBc0XQhlvH8eLi8knHY2EGJnfbCd6A+fWyiFPYH69Bc/ejLUvPl11kr0+Ej1On2VHKWkn5KjlfRXcoySAUqOVTJQyXFKBik5XslgJbXp7/VXYIM1pc+ZX8f1z/kfRCYY55LosXkxRPvNcIGNpXgHfs3Y98f3I7GQ+SlbyPwkGeMrGs97gbmqRH+fjPUj34yLfwTBoIfxONnwJQlrS1zrrku68kefPSF/Qv6ACbmjRub1njA6b/zIMaN75YwaZSZxWWNy9FGmkInTR2njsTnGDFKK4Zh/rhw9TjLOmcnrt75+c3wp9Cqor4SNDONBemO2fmCgL9P3l0HzUejPS51AGTIkbD8wcELg56WGWPh5qb4lx8a/fl7qBCCCDhHyxXukzycK/HmpE5m+eD80ev+OCc5QhvfvJzn+/l37fZKQzdNDyFa03tZCfl4KmUsnA+9btAZvUtWL2MmWf17qKLfpzz8O+HmpU6huTw0b/Z3C+PNSejJPZVhkThXy81JHARYZ/+elTkl0f/7QlIv0+TSBPy91GhPlDosoFxOcYQyUm+M45Wq/c4RQ7qlkK1pvLsPPkOTSz0vZorR+Aiktj/JueNgoLY+R0vRkDmcokuFCKK0fkNLyEt2fPzSlIX3OF0hp+UyUVhBRGiY4BQyUdrrjlKb9Pl0IpQ0nW9F6RzBQ2gjLlHa0QEobSXl3RtgobSQjpenJPIOhSM4QQmlHAyltZKL784emNKTPZwqktDOZKG1URGmY4IxioLSzHKc07fdZQijtDLIVrXc0A6WNtkxpxwrc7zaG8m5s2ChtTGC/21gL+92OBe53GwNc1MYKoRekz2cL3O92NhO9jIvoBROccQz0co7j9KL9PkcIvYwlW9F62wrZ74bMpfHA/W5tGfa7jbe8322gwHt0E6huJ4aN/iYw3qPTkzmRYZGZKOQe3UDgPboJie7PH5pykT6fK/Ae3blMlHteRLmY4JzHQLnnO0652u/zhVDuRLIVrXcSwz26SZbv0R0nkNIuoLybHDZKu4CR0vRkTmYokslCKO04IKVdkOj+/KEpDenzhQIp7UImSrsoojRMcC5ioLSLHac07ffFQihtMtmK1juFgdKmWKa0QQIp7RLKu6lho7RLGClNT+ZUhiKZKoTSBgEp7ZJE9+cPTWlIny8VSGmXMlHaZRGlYYJzGQOlXe44pWm/LxdCaVPJVrTeaQyUNs0ypR0vcL/bFZR308NGaVcE9rtNt7Df7XjgfrcrgIvadCH0gvT5SoH73a5kopcZEb1ggjODgV6ucpxetN9XCaGX6WQrWm97IfvdkLk0E7jfrT3DfreZtN+NI+f1rxD3YcijqxN56ydWsmP/7/pfzeB3x6purxv6N+I5/D5IyD+XB8YnfpDjsW7AlONpjv8DqCFMOZ4uJMeB8YmnOx7rnkqH/p8d6Fh3dtxv//+KoP3OFPLP8WYBmQ0Y63im43kznWlt7OL4tVD7PIvB74OFXBOA8YlL8XkW8D3iNcD1prD8jpXsiOv8voYhv69l+DTjWuMGNXoe9P8X41jfujm+vg1mWte7C6l1YHzi3R2/hk+kWHtYvSy2ThZk61SLtpa0LrU+jnrv6Xju92da53oJWeeA8Yn3cjzWxzDFurelWDt0LzneG/y5hP7/jv4Hrfp+2z7vz38Fotvh1J5Brf5XitdRHJO9v//vZH96/hhqB1A7ltqJ1E6mdiq106lVLnmzDb3+PYbW3p/PB1u9Q+P6Yo6/oZjjbyzm+JuKOf7mYo6fU8zxtxRz/K3FHH9bMcfPLeb424s5fl4xx99RzPHzizn+zmKOX2CMT/gP4/VzdxVx3MIijru7iOMWFXHcPUUct7iI4+4t4rglRRx3XxHHLS3iuPuLOG5ZEcc9UMRxy4s47sEijltRhHH6s9aHijhuZRHHPVzEcauKOO6RIo57tIjjHiviuNVFHPd4EcetKeK4J4o4bm0Rxz1ZxHHrijjuqSKOW1+M9VKPf7qY458p5vhnizl+QzHHP1fM8RuLOf75Yo7fVMzxLxRz/OZijn+xmOO3FHP8S8Uc/3Ixx79SzPGvGuNPoPGziY8HJxb+d8H2ehp3A7U3UnsTtTdTO4faW6i9ldrbqJ1L7e3UzqP2DmrnU3sntQuovYvahdTeTe0iau+hdjG191K7hNr7qF1K7f3ULqP2AWqXU/sgtSuKOD8P0biV1D5M7SpqH6H2UWofo3Y1tY9Tu4baJ6hdS+2T1K6j9ilq11P7NLXPUPsstRuofY7ajdQ+T+0mal+gdjO1L1K7hdqXqH2Z2leofbWI84Nq2yl5rZD8P5LsuI7a16itpmRr4j+/FcHxWXs9Qz9IL/KbEfHgCXM+Xk/8s92WGLJvRmjH1xrO6gnoETAO9Zo6QVoybETp4+aGjFjAzvjriTifzTjFSnbE+wi5sYucvzf+RVdWZn5uQWZGek4soyBX6elckJ+ek5YdL8hKV+rTM+K5Ofmx4Rm5mZ0zOmcVZMZsfSPkDVzMD/hGyJuJ0TdCIMF5MxGv9y1g0nP5/VYiPEYsnwhuI1vRevs6+o2QoJ3IXNoOvAD1BX/yohcxbd+hnr3vA5fkglxw4JFXiLks1Ps21e07/0K9PQuZsyD19vT+f+otTI916jVfHKVTT+LbDIvK24n4onjH0Okf6O89b/vvF5l/EPPbwAXrHaYCRX+kjfT53US3a0dvXXiXoXZc/2qdfhd8OIPfO4B+6wuCJn//nYHWrW9D+cIxL1x3CHY6ng86X3cy5MMuoN9lKB+CB3JeOeZ2V6L7Nr7HYOP+A31xuhp4cXpfwMVpK0NR9nN8T6FOxvcZ/D5ayPfmPgDmJTDWceT8MS/mf93eC+Ni/oGUxbwRUNeHwKLRBV3G++eBDlRDjydQaDsbCLGzvhA7Z4HvrPg2Pk2PP1L6dyv5WMknSj5V8pmSz5XsUfKFki+VfKXkayXfKPlWyXdKvlfyg5Iflfyk5Gclvyj5VclvSn5Xsld/uK/kD3qLVkpJgpLSSsooSVRSVkmSkmQlKUrKKSmvpIKSikoqKamspIqSqkqqKamupIaSmkpqKamtpI6SukrqKamvpIGShkoaKWmsJFVJEyVNlTRT0lxJCyUtlbRS0lpJGyVtlbRT0l5JByUdlRykJKYkriRNSbqSDCWdlHRWkqkkS0m2ki5KDlbSVckhSrop6a6kh5JDlfRU0kvJYUoOV9JbyRFK+ig5UklfJUcp6afkaCX9lRyjZICSY5UMVHKckkFKjlcyWMkJSoYoOVHJUCUnKTlZySlKTlVympJhSnKU5CrJUzJcSb6SAiWnKxmhZKSSM5ScqWSUkrOUjFYyRslYJWcrGafkHCXjlUxQMlHJuUrOU3K+kklKLlAyWcmFSi5ScrGSKUouUTJVyaVKLlNyuZJpSq5QMl3JlUpmKLlKyUwlVyuZpeQaJdcquU7JbCXXK7lByY1KblJys5I5Sm5RcquS25TMVXK7knlK7lAyX8mdShYouUvJQiV3K1mk5B4ltakm9K3e4JquzyUGajzF+xtMEoxzSfTY/EzSw64LOhXRa00sxTvwdrrvj+9HYiHzU7aQ+Ukyxlc0nvcCc1WJ/j4Z6kdeuhkX/wjepu9hPE42fEmC2hKLa93VSVdezqhRA8aNnJgzPr/3hNF540eOGW0uyb7J/tJcppAp00dp47E5xgxPiuGSf64cPU4yzplp67e+fnN8KfR1Tf9I2YeJfxsP0huz9RHabi5wxthZ6E/qLqZsuLdsyDaOacd3GM7qCUgNvCb6o6XdJb/79NdP6mr7S6jrrzc/95blSdwE8PwhfV5SiC7Xf1J3CTBOpr33lY02UEGCoycSrXcpMOm5/F5aFh4jlg1U95KtaL0DhPykLjKX7sctRvEBDBuotH1NPHsbqD52m/7844B/e7WM6vaBsNGfdpzr317pyXyAYZF5oKzbiwwdBxRCSf/t1bKy7s8fmnKRPi83dEn5t1fLmSj3wYhyMcF5kIFyVzhOudrvFUIo9wGyFa33IXBh6iLUOhM8e5T2iUBKW0l593DYKG0lI6XpyXyYoUgeFkJpnwApbWVZ9+cPTWlIn1cJpLRVTJT2SERpmOA8wkBpjzpOadrvR4VQ2sNkK1rvYwyU9phlSvtUIKWtprx7PGyUtpqR0vRkPs5QJI8LobRPgZS2uqz784emNKTPawRS2homSnsiojRMcJ5goLS1jlOa9nutEEp7nGxF632SgdKetExpXwjc77aO8u6psFHausB+t6cs7Hf7ArjfbR1wUXtKCL0gfV4vcL/beiZ6eTqiF0xwnmagl2ccpxft9zNC6OUpshWtd6CQ/W7IXHoWuN9tIMN+t2ct73f7UuA9ug1Ut8+Fjf42MN6j05P5HMMi85yQe3RfAu/RbSjr/vyhKRfp80aB9+g2MlHu8xHlYoLzPAPlbnKccrXfm4RQ7nNkK1rvCwz36F6wfI/uK4GUtpny7sWwUdpmRkrTk/kiQ5G8KITSvgJS2uay7s8fmtKQPm8RSGlbmCjtpYjSMMF5iYHSXnac0rTfLwuhtBfJVrTeVxgo7RXLlPa1QEp7lfLutbBR2quMlKYn8zWGInlNCKV9DaS0V8u6P39oSkP6vFUgpW1lorTXI0rDBOd1Bkrb5jilab+3CaG018hWtN43GCjtDcuU9o3A/W5vUt69FTZKezOw3+0tC/vdvgHud3sTuKi9JYRekD5vF7jfbTsTvbwd0QsmOG8z0Ms7jtOL9vsdIfTyFtmK1jtIyH43ZC69C9zvNohhv9u7lve7/SyQ/nZQ3e4MG/3tCNDfTgv09zOQ/nYAC3mnEPpD+rxLIP3tYqK/9yL6wwTnPQb6e99x+tN+vy+E/naSrWi9g4XQHzKXPgDS32AG+vvAMv39KpD+PqS6/Shs9PdhgP4+skB/vwLp70NgIX8khP6QPu8WSH+7mejv44j+MMH5mIH+PnGc/rTfnwihv4/IVrTeIULoD5lLnwLpbwgD/X1qmf5+F0h/n1Hdfh42+vssQH+fW6C/34H09xmwkD8XQn9In/cIpL89TPT3RUR/mOB8wUB/XzpOf9rvL4XQ3+dkK1rvUCH0h8ylr4D0N5SB/r6yTH/7BNLf11S334SN/r4O0N83FuhvH5D+vgYW8jdC6A/p87cC6e9bJvr7LqI/THC+Y6C/7x2nP+3390Lo7xuyFa33ZCH0h8ylH4D0dzID/f1gmf48pouoh7GzUPr7ker2p7DR348B+vvJAv15JS++v+jvR2Ah/ySE/pA+/yyQ/n5mor9fIvrDBOcXBvr71XH6037/KoT+fiJb0XpPFUJ/yFz6DUh/pzLQ32+W6S9BIP39TnW7N2z093uA/vZaoL8EIP39DizkvULoD+nzPoH0Z9ocK+Fh2vtH2Yj+IMHREwmfqCS36U/7rW0Ex4iF/vaSrWi9w4TQHzKXSiXhcmgYA/1p+2zSX5myPDngYewslP4SqG5LJ4WM/rTjJv3pCUgNvCaa/swEKSn9JQALuXQST+Ki6Q/pc5kkefRXJgm7SPpHYlJEf5DgJCbh9ZZ1nP6032WF0F9pshWtN1cI/SFzKQlIf7kM9Jdkmf7KCqS/ZKrblLDRX3KA/lIs0F9ZIP0lAws5RQj9IX0uJ5D+yjHRX/mI/jDBKc9AfxUcpz/tdwUh9JdCtqL1DhdCf8hcqgikv+EM9FfRMv0lC6S/SlS3lcNGf5UC9FfZAv0lA+mvErCQKwuhP6TPVQTSXxUm+qsa0R8mOFUZ6K+a4/Sn/a4mhP4qk61ovQVC6A+ZS9WB9FfAQH/VLdNfOYH0V4PqtmbY6K9GgP5qWqC/ckD6qwEs5JpC6A/pcy2B9FeLif5qR/SHCU5tBvqr4zj9ab/rCKG/mmQrWu8IIfSHzKW6QPobwUB/dS3TXwWB9FeP6rZ+2OivXoD+6lugvwpA+qsHLOT6QugP6XMDgfTXgIn+Gkb0hwlOQwb6a+Q4/Wm/Gwmhv/pkK1rvGULoD5lLjYH0dwYD/TW2TH+VBNJfKtVtk7DRX2qA/ppYoL9KQPpLBRZyEyH0h/S5qUD6a8pEf80i+sMEpxkD/TV3nP60382F0F8TshWtd5QQ+kPmUgsg/Y1ioL8WlumvikD6a0l12yps9NcyQH+tLNBfFSD9tQQWcish9If0ubVA+mvNRH9tIvrDBKcNA/21dZz+tN9thdBfK7IVrXe0EPpD5lI7IP2NZqC/dpbpr5pA+mtPddshbPTXPkB/HSzQXzUg/bUHFnIHIfSH9LmjQPrryER/B0X0hwnOQQz0F3Oc/rTfMSH014FsResdK4T+kLkUB9LfWAb6i1umvxoC6S+N6jY9bPSXFqC/dAv0VwNIf2nAQk4XQn9InzME0l8GE/11iugPE5xODPTX2XH60353FkJ/6WQrWu84IfSHzKVMIP2NY6C/TMv0V0sg/WVR3WaHjf6yAvSXbYH+agHpLwtYyNlC6A/pcxeB9NeFif4OjugPE5yDGeivq+P0p/3uKoT+sslWtN7xQugPmUuHAOlvPAP9HWKZ/uoIpL9uVLfdw0Z/3QL0190C/dUB0l83YCF3F0J/SJ97CKS/Hkz0d2hEf5jgHMpAfz0dpz/td08h9NedbEXrnSiE/pC51AtIfxMZ6K+XZfqrJ5D+DqO6PTxs9HdYgP4Ot0B/9YD0dxiwkA8XQn9In3sLpL/eTPR3RER/mOAcwUB/fRynP+13HyH0dzjZitZ7nhD6Q+bSkUD6O4+B/o60TH8NBNJfX6rbo8JGf30D9HeUBfprAKS/vsBCPkoI/SF97ieQ/vox0d/REf1hgnM0A/31d5z+tN/9hdDfUWQrWu8kIfSHzKVjgPQ3iYH+jrFMf40E0t8Aqttjw0Z/AwL0d6wF+msEpL8BwEI+Vgj9IX0eKJD+BjLR33ER/WGCcxwD/Q1ynP6034OE0N+xZCta72Qh9IfMpeOB9DeZgf6Ot0x/qQLpbzDV7Qlho7/BAfo7wQL9pQLpbzCwkE8QQn9In4cIpL8hTPR3YkR/mOCcyEB/Qx2nP+33UCH0dwLZitZ7kRD6Q+bSSUD6u4iB/k6yTH9NBdLfyVS3p4SN/k4O0N8pFuivKZD+TgYW8ilC6A/p86kC6e9UJvo7LaI/THBOY6C/YY7Tn/Z7mBD6O4VsReudIoT+kLmUA6S/KQz0l2OZ/poLpL9cqtu8sNFfboD+8izQX3Mg/eUCCzlPCP0hfR4ukP6GM9FffkR/mODkM9BfgeP0p/0uEEJ/eWQrWu9UIfSHzKXTgfQ3lYH+TrdMfy0F0t8IqtuRYaO/EQH6G2mB/loC6W8EsJBHCqE/pM9nCKS/M5jo78yI/jDBOZOB/kY5Tn/a71FC6G8k2YrWe5kQ+kPm0llA+ruMgf7Oskx/rQXS32iq2zFho7/RAfobY4H+WgPpbzSwkMcIoT+kz2MF0t9YJvo7O6I/THDOZqC/cY7Tn/Z7nBD6G0O2ovVOE0J/yFw6B0h/0xjo7xzL9NdWIP2Np7qdEDb6Gx+gvwkW6K8tkP7GAwt5ghD6Q/o8USD9TWSiv3Mj+sME51wG+jvPcfrTfp8nhP4mkK1ovdOF0B8yl84H0t90Bvo73zL9tRdIf5Oobi8IG/1NCtDfBRborz2Q/iYBC/kCIfSH9HmyQPqbzER/F0b0hwnOhQz0d5Hj9Kf9vkgI/V1AtqL1zhBCf8hcuhhIfzMY6O9iy/TXUSD9TaG6vSRs9DclQH+XWKC/jkD6mwIs5EuE0B/S56kC6W8qE/1dGtEfJjiXMtDfZY7Tn/b7MiH0dwnZitY7Uwj9IXPpciD9zWSgv8st019MIP1No7q9Imz0Ny1Af1dYoL8YkP6mAQv5CiH0h/R5ukD6m85Ef1dG9IcJzpUM9DfDcfrTfs8QQn9XkK1ovbOE0B8yl64C0t8sBvq7yjL9pQmkv5lUt1eHjf5mBujvagv0lwakv5nAQr5aCP0hfZ4lkP5mMdHfNRH9YYJzDQP9Xes4/Wm/rxVCf1eTrWi91wqhP2QuXQekv2sZ6O86y/SXIZD+ZlPdXh82+psdoL/rLdBfBpD+ZgML+Xoh9If0+QaB9HcDE/3dGNEfJjg3MtDfTY7Tn/b7JiH0dz3ZitY7Wwj9IXPpZiD9zWagv5st019ngfQ3h+r2lrDR35wA/d1igf46A+lvDrCQbxFCf0ifbxVIf7cy0d9tEf1hgnMbA/3NdZz+tN9zhdDfLWQrWu8NQugPmUu3A+nvBgb6u90y/WUJpL95VLd3hI3+5gXo7w4L9JcFpL95wEK+Qwj9IX2eL5D+5jPR350R/WGCcycD/S1wnP603wuE0N8dZCta701C6A+ZS3cB6e8mBvq7yzL9dRFIfwupbu8OG/0tDNDf3RborwuQ/hYCC/luIfSH9HmRQPpbxER/90T0hwnOPQz0t9hx+tN+LxZCf3eTrWi9c4TQHzKX7gXS3xwG+rvXMv11FUh/S6hu7wsb/S0J0N99FuivK5D+lgAL+T4h9If0ealA+lvKRH/3R/SHCc79DPS3zHH6034vE0J/95GtaL23CqE/ZC49AKS/Wxno7wHL9NdNIP0tp7p9MGz0tzxAfw9aoL9uQPpbDizkB4XQH9LnFQLpbwUT/T0U0R8mOA8x0N9Kx+lP+71SCP09SLai9c4VQn/IXHoYSH9zGejvYcv010Mg/a2iun0kbPS3KkB/j1igvx5A+lsFLORHhNAf0udHBdLfo0z091hEf5jgPMZAf6sdpz/t92oh9PcI2YrWO08I/SFz6XEg/c1joL/HLdNfT4H0t4bq9omw0d+aAP09YYH+egLpbw2wkJ8QQn9In9cKpL+1TPT3ZER/mOA8yUB/6xynP+33OiH09wTZitY7Xwj9IXPpKSD9zWegv6cs099hAulvPdXt02Gjv/UB+nvaAv0dBqS/9cBCfloI/SF9fkYg/T3DRH/PRvSHCc6zDPS3wXH6035vEEJ/T5OtaL0LhNAfMpeeA9LfAgb6e84y/fUWSH8bqW6fDxv9bQzQ3/MW6K83kP42Agv5eSH0h/R5k0D628REfy9E9IcJzgsM9LfZcfrTfm8WQn/Pk61ovQuF0B8yl14E0t9CBvp70TL99RFIf1uobl8KG/1tCdDfSxborw+Q/rYAC/klIfSH9PllgfT3MhP9vRLRHyY4rzDQ36uO05/2+1Uh9PcS2YrWu0gI/SFz6TUg/S1ioL/XLNNfX4H0t5Xq9vWw0d/WAP29boH++gLpbyuwkF8XQn9In7cJpL9tTPT3RkR/mOC8wUB/bzpOf9rvN4XQ3+tkK1rvYiH0h8ylt4D0t5iB/t6yTH/9BNLfdqrbt8NGf9sD9Pe2BfrrB6S/7cBCflsI/SF9fkcg/b3DRH/vRvSHCc67DPS3w3H6037vEEJ/b5OtaL1LhNAfMpd2AulvCQP97bRMf/0F0t8uqtv3wkZ/uwL0954F+usPpL9dwEJ+Twj9IX1+XyD9vc9Efx9E9IcJzgcM9Peh4/Sn/f5QCP29R7ai9S4VQn/IXPoISH9LGejvI8v0N0Ag/e2muv04bPS3O0B/H1ugvwFA+tsNLOSPhdAf0udPBNLfJ0z092lEf5jgfMpAf585Tn/a78+E0N/HZCta7zIh9IfMpc+B9LeMgf4+t0x/AwXS3x6q2y/CRn97AvT3hQX6Gwikvz3AQv5CCP0hff5SIP19yUR/X0X0hwnOVwz097Xj9Kf9/loI/X1BtqL1LhdCf8hc+gZIf8sZ6O8by/Q3SCD9fUt1+13Y6O/bAP19Z4H+BgHp71tgIX8nhP6QPn8vkP6+Z6K/HyL6wwTnBwb6+9Fx+tN+/yiE/r4jW9F6VwihP2Qu/QSkvxUM9PeTZfobLJD+fqa6/SVs9PdzgP5+sUB/g4H09zOwkH8RQn9In38VSH+/MtHfbxH9YYLzGwP9/e44/Wm/fxdCf7+QrWi9K4XQHzKX9gLpbyUD/e21TH8nCqS/fVS3f4SN/vYF6O8PC/R3IpD+9gEL+Q8h9If02UuWR3+mzbESHqa9pZIj+oMER08kWm9Cstv0p/3WNoJjxEJ/eqFLSMbrXSWE/pC5VBq3GMVXMdCfts8m/Z0skP7KUN0mJoeM/rTjJv3pCUgNvCaa/k4G0l8ZYCEnJvMkLpr+kD6XFUh/ZZnoLymiP0xwkhjoL9lx+tN+Jwuhv0SyFa33USH0h8ylFCD9PcpAfymW6e80gfRXjuq2fNjor1yA/spboL/TgPRXDljI5YXQH9LnCgLprwIT/VWM6A8TnIoM9FfJcfrTflcSQn/lyVa03tVC6A+ZS5WB9Leagf4qW6a/XIH0V4XqtmrY6K9KgP6qWqC/XCD9VQEWclUh9If0uZpA+qvGRH/VI/rDBKc6A/3VcJz+tN81hNBfVbIVrXeNEPpD5lJNIP2tYaC/mpbpL18g/dWiuq0dNvqrFaC/2hboLx9If7WAhVxbCP0hfa4jkP7qMNFf3Yj+MMGpy0B/9RynP+13PSH0V5tsRetdK4T+kLlUH0h/axnor75l+hshkP4aUN02DBv9NQjQX0ML9DcCSH8NgIXcUAj9IX1uJJD+GjHRX+OI/jDBacxAf6mO05/2O1UI/TUkW9F61wmhP2QuNQHS3zoG+mtimf7OFEh/Talum4WN/poG6K+ZBfo7E0h/TYGF3EwI/SF9bi6Q/poz0V+LiP4wwWnBQH8tHac/7XdLIfTXjGxF610vhP6QudQKSH/rGeivlWX6Gy2Q/lpT3bYJG/21DtBfGwv0NxpIf62BhdxGCP0hfW4rkP7aMtFfu4j+MMFpx0B/7R2nP+13eyH014ZsRet9Rgj9IXOpA5D+nmGgvw6W6e9sgfTXker2oLDRX8cA/R1kgf7OBtJfR2AhHySE/pA+xwTSX4yJ/uIR/WGCE2egvzTH6U/7nSaE/g4iW9F6NwihP2QupQPpbwMD/aVbpr/xAukvg+q2U9joLyNAf50s0N94IP1lAAu5kxD6Q/rcWSD9dWaiv8yI/jDByWSgvyzH6U/7nSWE/jqRrWi9G4XQHzKXsoH0t5GB/rIt09+5AumvC9XtwWGjvy4B+jvYAv2dC6S/LsBCPlgI/SF97iqQ/roy0d8hEf1hgnMIA/11c5z+tN/dhNDfwWQrWu8mIfSHzKXuQPrbxEB/3S3T3ySB9NeD6vbQsNFfjwD9HWqB/iYB6a8HsJAPFUJ/SJ97CqS/nkz01yuiP0xwejHQ32GO05/2+zAh9Hco2YrWu1kI/SFz6XAg/W1moL/DLdPfhQLprzfV7RFho7/eAfo7wgL9XQikv97AQj5CCP0hfe4jkP76MNHfkRH9YYJzJAP99XWc/rTffYXQ3xFkK1rvFiH0h8ylo4D0t4WB/o6yTH9TBNJfP6rbo8NGf/0C9He0BfqbAqS/fsBCPloI/SF97i+Q/voz0d8xEf1hgnMMA/0NcJz+tN8DhNDf0WQrWu/LQugPmUvHAunvZQb6O9Yy/V0qkP4GUt0eFzb6Gxigv+Ms0N+lQPobCCzk44TQH9LnQQLpbxAT/R0f0R8mOMcz0N9gx+lP+z1YCP0dR7ai9b4qhP6QuXQCkP5eZaC/EyzT3zSB9DeE6vbEsNHfkAD9nWiB/qYB6W8IsJBPFEJ/SJ+HCqS/oUz0d1JEf5jgnMRAfyc7Tn/a75OF0N+JZCta71Yh9IfMpVOA9LeVgf5OsUx/1wmkv1Opbk8LG/2dGqC/0yzQ33VA+jsVWMinCaE/pM/DBNLfMCb6y4noDxOcHAb6y3Wc/rTfuULo7zSyFa13mxD6Q+ZSHpD+tjHQX55l+rvHbfrzjzRzLoZT3eaHjf6043sDxqBeQ09mPsMik5/s9iJDxwGF8N/6nF/w5zE82f35Q1Mu0ucCQ1c8Kz0tLTNdj8saHotnDM9Ly0pLG56bEcuL5eSl5WdnxLMLMtIy0vOG5+UqnTnxglhBTl52Qdafdtmi3AImyj09olxMcE5noNwRjlOu9nuEEMrNJ1vRekeCC1MXodYZJAdUzPoopPkwET8PZyS7Hf9ZyuczGOL/ZlVev2MlO+JvleXx+62qMsABGJ+4FJ9PA143zkx2+9qrc/tMhvwexbCujzJup6PnoaHHU+fvVHV7Xf+IaV1/V0itA+MTf9fxWDdgyvFdjl/D72W6hr8nJMeB8Ym/53is6zPl+IeO1/a3TOv4R0JyHBif+EeO57h+L36GpfsGsZId8efKyrH1RUG2vmbR1pKuIVofx9r0ieN1+hnTmvypkDUZGJ/4p47H+nOmWO+xFGuH3ufG94A/udfLpP8hjX4vsE+1D1D7MLWPU1tOyVkUx2QSfeha1s9/Tu0eap+iv3uO2hepfY3at6hVLnmjDb1lSe8d9Px8au+kdgG1d1G7kNoKSsYYeh4kPVq3fv5bsus7ar+n9gdqf6T2J2p3kt5fqP8R9X/z/aX+Xup/Q/0/fD3UL+WPo7a03yb92SZSP4X6SdSvTP0U6tekfnnq16d+Reo3oX5l6reiflXqd6B+deqnU78m9bOpX5v63alfl/qHU78+9Y+ifkPqH0v9xtQ/gfpNqH8K9ZtRP4/6Lag/kvqtqD+G+m2oP4H67ah/AfU7UP8S6h9E/SuoH6f+1dRPp/711O9E/Vuon0n9O6ifTf27qX8w9e+j/iHUf5D63an/CPUPpf4T1O9F/aepfzj1n6f+EdR/ifpHUv916h9F/bepfzT136P+MdT/mPrHUv8L6h9H/e+of7yf59Q/gfpD/Hym80OpfxK1iVRXp1D/VGrL0/lh1M/x65zO51F/OLW16XwB9U+ntiGdH0n9M6htRudHUf8satvQ+THUH0vtQXR+HPXPobYTnZ9A/YnUHkznz6P++dQeSucvoP5kao+g8xdR/2Jqj6bzl1B/KrXH0fnLqH85tSfS+SuoP53aK6mdQe1V1M7085raWdReQ+211J5Gemf7eU/tDdTeSO1N1N5M7Ry/Lqi9ldrbqJ1L7e3UzvPrll7vbuovoratjomxPvsbAT6i9fIs+rux1FZTcnbyP3eUofmkpVK+wngBkF7krrJ48IQ5H+PoQnxO2HaVacfXGs6eY3ywwpUkaIj90tJW1mLaGQvYGR8H/ODvHOAHf18KecOHnL/x/6IrKzM/tyAzIz0nllGQq/R0LshPz0nLjhdkpSv16Rnx3Jz82PCM3MzOGZ2zCjJjtnaZjWfaZTYh2mWGCc4Ehl1mEx3fZab9nijkTuE5ZCta79eOfpciaCcyl84FXoC+Bt+R0YuYtu9Qz953KUpyQS448MgrxFwW6j2P6vb8f6HenoXMWZB6e3r/P/UWpsc69ZovjtKpJ/E8hkXlPIYtTucbOv0D/V2Kc/77ReYfxHwecME6n6lA0be6kT5PErA9cBJD7XBvd46V7Nj/Tvgwhm3eFwD91hcE86MNrbu197dwzQvHHYLJjueDztfJDHVwIdDvMt7fH1eZB3JeOeb2wmT3bbyIwcb9B/ridAbw4nSxgIvT2QxF+a3jew10Ml7M4Pd3bt6m/YedU4B5CYx1HDl/zIv5X7f3wriYT0HbiDawhboq9GCgzx8dX9g0XfZi8PsnIQvbJcCFDRjr+E+O502S0tGC4V3JrwLq5VCGevlNSL1MBdYLMNbx3+SAANtFtrUAGy9FgoDUQOlfNHDdxstsvf2OlexIMyezpKvb5dG9ofjlAt5OTBOSnOnI5LwiSs74FQKSc7qQ5IxPBt64vBLIhTo5y3ryklMCf81A85fEQEngr6vCyF8zwZc4ick5U8Al7uow8tesKDnjswQk5zVS+GsnMDmvdfyD40ZKxzUM9033OX6/WP9wJcePvf0h5H7xdcC8BMY6/ofjeaPr5RKGvEmo5n69cPhdupqMepkNrBdgrOOlHc8bXS9TGfKmrIB64fA7SUi9XA+sF2Cs40kC6uUChrwpJ6BeLmXwu7yQerkBWC/AWMfLC8ibyxjy5kbHd+Frv6cx+H2TAL+nM/h9s+N+6+sCx7cuKgmo7ysZ/K4s5LowB3hdAMY6XlkAR81gyJtqjvu9g+mfslQXUi+3AOsFGOt4dQH1chVDvdwq4Lp6NYPftwnw+xoGv+cK8PtaBr9rOV7fO5muC7WFXBduB14XgLGOI+fP1m97NcHpOuC3veZFv+2FCc48ht/2usPx3/bSft/B9Nte/hHcaFDSeUDO6XzgAqcLoYz3z8PlhYTTzlQhdjYG24neWHOEApBZuD2e+/eLXsdQ8+ZvgVWix3eq11mg5C4lC5XcrWSRknuULFZyr5IlSu5TslTJ/UqWKalNf69/PyxYU/qc+Vtm/jl/B1qCcS6JHpsXQ7TfDBfYWIp34G+0+f74fiQWMj9lC5mfJGN8ReN5LzBXlejvk7F+5Jtx8Y8gGPQwHicbviRhbYlr3XVJV/7osyfkT8gfMCF31Mi83hNG540fOWZ0r5xRo8wkLmtMjj7KFDJx+ihtPDbHmEFKMRzzz5Wjx0nGOTN5/dbXb44vhV4F9ZWwqWE8SG/M1q8zLuDaJ4mx869faTTn4gFK9+XJIftNcu34DsNZPQGpgddE/2rhgpJjY5r/q4UPABF0OVPiojEE6fODhejKjeUN7xTP7Tw8M56f0ykrLy87PR5Py+mc0zk3LasgP7dTPKtTltKZl5OWpV4uLScvnh/L6Zxv6/37g+Bf6/SPFdH7d0xwVjC8f3/I8ffv2u+HmN6/o296Lidb0XrrWbqZGvsvD99OZC6tBN63QM6ff0HX9jXx7P02911u059/pJlz8TDV7aqw0Z92fG/AGNRr6MlcxbDIrEp2e5Gh44BC+G99zqcfwX442f35Q1Mu0udHDF3xrPS0tMx0PS5reCyeMTwvLSstbXhuRiwvlpOXlp+dEc8uyEjLSM8bnperdObEC2IFOXnZBVl/2mWLch9hotxHI8rFBOdRBsp9zHHK1X4/JoRyV5GtaL2rwYWpi1DrTPDsUdpCgZT2OOXdmrBR2uOMlKYncw1DkawRQmkLgZT2eLL784emNKTPTwiktCeYKG1tRGmY4KxloLQnHac07feTQihtDdmK1ruOgdLWWaa0uwVS2lOUd+vDRmlPMVKansz1DEWyXgil3Q2ktKeS3Z8/NKUhfX5aIKU9zURpz0SUhgnOMwyU9qzjlKb9flYIpa0nW9F6NzBQ2gbLlHavwP1uz1HebQwbpT0X2O+20cJ+t3uB+92eAy5qG4XQC9Ln5wXud3ueiV42RfSCCc4mBnp5wXF60X6/IIReNpKtaL0NhOx3Q+bSZuB+twYM+902W97vtkTgPboXqW63hI3+XmS8R6cncwvDIrNFyD26JcB7dC8muz9/aMpF+vySwHt0LzFR7ssR5WKC8zID5b7iOOVqv18RQrlbyFa03lcZ7tG9avke3X0CKe01yrutYaO01xgpTU/mVoYi2SqE0u4DUtprye7PH5rSkD6/LpDSXmeitG0RpWGCs42B0t5wnNK0328IobStZCta75sMlPamZUpbKpDS3qK82x42SnuLkdL0ZG5nKJLtQihtKZDS3kp2f/7QlIb0+W2BlPY2E6W9E1EaJjjvMFDau45Tmvb7XSGUtp1sRevdwUBpOyxT2v0C97vtpLzbFTZK2xnY77bLwn63+4H73XYCF7VdQugF6fN7Ave7vcdEL+9H9IIJzvsM9PKB4/Si/f5ACL3sIlvRehsJ2e+GzKUPgfvdGjHsd/uQ9rtx5HxTpWM+Qx59lMxbP7GSHft/1/8jBr9Tq7m9bujfiOfwu0k1GeAFjE+8ieOxTmXK8eaO/yOp5Uw53kJIjgPjE2/heKz9/9eBjnVrx/32/68I2u82Qv5Z2m4gswFjHW/jeN7sYlob2zt+LdQ+72bwu4OQawIwPnEpPu8Gvkf8GLjeFJbfsZIdcZ3fHzPk9ycMn2Z8YtygRs+D/v9iHOtbzPH1bRnTuh4XUuvA+MTjjl/Dt1CsPaxeFlu3CrJ1u0VbS1qXWh9HvWc4nvuLmNa5TkLWOWB84p0cj/U9TLHOshRrh+4lx7PAn0voZdL/oFXfb9vn/fmvQHS7htr11Op/pfgpxTHZ+/v/Ti6i5++hdjG1G6ndQu1WardTu4vaqko+M/T69xhae38+H2z1Do3Pizl+TzHHf1HM8V8Wc/xXxRz/dTHHf1PM8d8Wc/x3xRz/fTHH/1DM8T8Wc/xPxRz/czHH/1LM8b8a4xP+w3j93G9FHPd7EcftLeK4fUUc90cRx2mnizKuVBHHJRRxXOkijitTxHGJRRxXtojjkoo4LrmI41KKOK5cEcY1VFK+iOMqFHFcxSKOq1TEcZWLOK5KEcdVLeK4akUcV72I42oUcVzNIo6rVcRxtYs4rk4Rx9Ut4rh6KUVfL/X4+sUc36CY4xsWc3yjYo5vXMzxqcUc36SY45sWc3yzYo5vXszxLYo5vmUxx7cq5vjWxRzfppjj2xrjT6Dxmon188uSC/+7YPs5jdtD7RfUfkntV9R+Te031H5L7XfUfk/tD9T+SO1P1P5M7S/U/krtb9T+Tu1eavdR+we1+tqv21LUJlBbmtoy1CZSW5baJGqTqU2htlxK0eanPI2rQG1FaitRW5naKtRWpbYatdWprUFtTWprUVub2jrU1qW2HrX1qW1AbUNqG1HbmNpUaptQ25TaZtQ2p7YFtS2pbeXPA7VtqG1bxPlBte20FJL/d1L8P6W2nT+/Stqn/PNbEeh7LnqPwc5E7Gf3tyf/bS9IL/KbFvHgCXN+O9BXHTqmhOybFtrxtYazegJ6BIxDvaafdOibX10EbGzRxYH2+2A3N7bEAnbGO6TgfO4I1NXV8Y3hdMSB+R0H5ky8q5APGJD5d9C/6MrKzM8tyMxIz4llFOQqPZ0L8tNz0rLjBVnpSn16Rjw3Jz82PCM3s3NG56yCzJitbyaZNsdKeJj2xlKibyZBghNLweuNA5Oey+94CjxGLJ9MdyRb0Xp7OHoB+seOGWAupeEWo3gP8CeAehHT9h3q2fteescSzEfBgUdeIeayvFtKp7rN+Jd3Sz0LmbPgu6We3v//bqkwPdbfLZkvjtKpJzGdYVFJT8EXRYah0z/QlFsCsv/HO4504IKVwVSg6K0VSJ87pbhdO3oLTSeG2nH9K576DsoOhjsoPQXcQbmF4Q5KLyFfDeoMrEdgrOO9BOTNrQx5k5nivt+3MfidJcDvuQx+ZwP91sCstw/6d050bet80nObbZKth19HugDXEUfvSrLkleaCLgy8cTAwr8pQXgUP5LxyzO3BKe7b2JXBxv0H+k2ACbAl1XWIgDcB7RmKsrfji5FOxkMY/D5CCAx3A+YlMNZx5PwxL+Z/fYwSxsW8m5TFvClQV3dg0eiCLuP980AHqonHEyi0nalC7GwsxE7gD6HEzI8Snvbt1B/xKOmppJeSw5QcrqS3kiOU9FFypJK+So5S0k/J0Ur6KzlGyQAlxyoZqOQ4JYOUHK9ksJITlAxRcqKSoUpOUnKyklOUnKrkNCXDlOQoyVWSp2S4knwlBUpOVzJCyUglZyg5U8koJWcpGa1kjJKxSs5WMk7JOUrGK5mgZKKSc5Wcp+R8JZOUXKBkspILlVyk5GIlU5RcomSqkkuVXKbkciXTlFyhZLqSK5XMUHKVkplKrlYyS8k1Sq5Vcp2S2UquV3KDkhuV3KTkZiVzlNyi5FYltymZq+R2JfOU3KFkvpI7lSxQcpeShUruVrJIyT1KFiu5V8kSJfcpWarkfiXLlDygZLmSB5WsUPKQkpVKHlaySskjSh5V8piS1UoeV7JGyRNK1ip5Usk6JU8pWa/kaSXPKHlWyQYlzynZqOR5JZuUvKBks5IXlWxR8pKSl5W8ouRVJa8p2arkdSXblLyh5E0lbynZruRtJe8oeVfJDiU7lexS8p6S95V8oORDJR8p2a3kYyWfKPlUyWdKPleyR8kXSr5U8pWSr5V8o+RbJd8p+V7JD0p+VPKTkp+V/KLkVyW/KfldyV4l+5T8oUSTRSklCUpqU03o08E1XZ9LDNS4PleWHicY55Losbn3w8OuCzGG/SR658UBH1v6/vh+JBYyP2ULmZ8kY3xF43kvMFeV6O+ToX7kpZtx8Y/gx6E9jMfJhi9JUFtica27OunKyxk1asC4kRNzxuf3njA6b/zIMaPNJdk32V+ayxQyZfoobTw2x5jhSTFc8s/5DJ1knDPT1m99/eb4Uujr2nw1Md2NpADpjdnaqqCvmSibCzG3pLoL/Qn90hTRMuVCtrFbO77DcFZPQGrgNdEf4ZsJUtKf0Nf2l1DXX29+ypTjSdwE8PwhfU4sRJfrP6GfCIyTaW/ZctFGVUhw9ESi9SYBk57L76Ry8BixbFQtQ7ai9fYV8hP6yFxKxi1G8b4MG1W1fU08extVe7pNf/5xwL+5TKG6LRc2+tOOc/2bSz2Z5RgWmXLl3F5k6DigEEr6by5Tyrk/f2jKRfpc3tAl5d9clmei3AoR5WKCU4GBcis6Trna74pCKLcc2YrWWwlcmLoItc79t2M8O5TWSyClVaa8qxI2SqvMSGl6MqswFEkVIZTWC0hplcu5P39oSkP6XFUgpVVlorRqEaVhglONgdKqO05p2u/qQiitCtmK1luDgdJqWKa0wwRSWk3Ku1pho7SajJSmJ7MWQ5HUEkJphwEprWY59+cPTWlIn2sLpLTaTJRWJ6I0THDqMFBaXccpTftdVwil1SJb0XrrMVBaPcuU1kfgfrf6lHcNwkZp9QP73RpY2O/WB7jfrT5wUWsghF6QPjcUuN+tIRO9NIroBROcRgz00thxetF+NxZCLw3IVrTefkL2uyFzKRW4360fw363VMv73Y4UeI+uCdVt07DRXxPGe3R6MpsyLDJNhdyjOxJ4j65JOffnD025SJ+bCbxH14yJcptHlIsJTnMGym3hOOVqv1sIodymZCtab0uGe3QtLd+j6yuQ0lpR3rUOG6W1YqQ0PZmtGYqktRBK6wuktFbl3J8/NKUhfW4jkNLaMFFa24jSMMFpy0Bp7RynNO13OyGU1ppsRettz0Bp7S1T2lECKa0D5V3HsFFaB0ZK05PZkaFIOgqhtKOAlNahnPvzh6Y0pM8HCaS0g5goLRZRGiY4MQZKiztOadrvuBBK60i2ovWmMVBammVK6ydwv1s65V1G2CgtPbDfLcPCfrd+wP1u6cBFLUMIvSB97iRwv1snJnrpHNELJjidGegl03F60X5nCqGXDLIVrbe/kP1uyFzKAu5368+w3y3L8n634wTSXzbVbZew0V92gP66WKC/44D0lw0s5C5C6A/p88EC6e9gJvrrGtEfJjhdGejvEMfpT/t9iBD660K2ovUOEEJ/yFzqBqS/AQz0180y/R0vkP66U932CBv9dQ/QXw8L9Hc8kP66Awu5hxD6Q/p8qED6O5SJ/npG9IcJTk8G+uvlOP1pv3sJob8eZCta70Ah9IfMpcOA9DeQgf4Os0x/Jwikv8OpbnuHjf4OD9Bfbwv0dwKQ/g4HFnJvIfSH9PkIgfR3BBP99YnoDxOcPgz0d6Tj9Kf9PlII/fUmW9F6BwmhP2Qu9QXS3yAG+utrmf5OFEh/R1Hd9gsb/R0VoL9+FujvRCD9HQUs5H5C6A/p89EC6e9oJvrrH9EfJjj9GejvGMfpT/t9jBD660e2ovUOFkJ/yFwaAKS/wQz0N8Ay/Z0kkP6OpbodGDb6OzZAfwMt0N9JQPo7FljIA4XQH9Ln4wTS33FM9Dcooj9McAYx0N/xjtOf9vt4IfQ3kGxF6x0ihP6QuTQYSH9DGOhvsGX6O0Ug/Z1AdTskbPR3QoD+hligv1OA9HcCsJCHCKE/pM8nCqS/E5nob2hEf5jgDGWgv5Mcpz/t90lC6G8I2YrWO1QI/SFz6WQg/Q1loL+TLdPfaQLp7xSq21PDRn+nBOjvVAv0dxqQ/k4BFvKpQugP6fNpAunvNCb6GxbRHyY4wxjoL8dx+tN+5wihv1PJVrTek4XQHzKXcoH0dzID/eVapr8cgfSXR3U7PGz0lxegv+EW6C8HSH95wEIeLoT+kD7nC6S/fCb6K4joDxOcAgb6O91x+tN+ny6E/oaTrXCqFEJ/yFwaAaS/Uxnob4Rl+ssTSH8jqW7PCBv9jQzQ3xkW6C8PSH8jgYV8hhD6Q/p8pkD6O5OJ/kZF9IcJzigG+jvLcfrTfp8lhP7OIFvReocJoT9kLo0G0t8wBvobbZn+8gXS3xiq27Fho78xAfoba4H+8oH0NwZYyGOF0B/S57MF0t/ZTPQ3LqI/THDGMdDfOY7Tn/b7HCH0N5ZsRevNFUJ/yFwaD6S/XAb6G2+Z/k4XSH8TqG4nho3+JgTob6IF+jsdSH8TgIU8UQj9IX0+VyD9nctEf+dF9IcJznkM9He+4/Sn/T5fCP1NJFvhnygLoT9kLk0C0t9wBvqbZJn+RgqkvwuobieHjf4uCNDfZAv0NxJIfxcAC3myEPpD+nyhQPq7kIn+LoroDxOcixjo72LH6U/7fbEQ+ptMtqL1FgihP2QuTQHSXwED/U2xTH9nCqS/S6hup4aN/i4J0N9UC/R3JpD+LgEW8lQh9If0+VKB9HcpE/1dFtEfJjiXMdDf5Y7Tn/b7ciH0N5VsResdIYT+kLk0DUh/Ixjob5pl+jtLIP1dQXU7PWz0d0WA/qZboL+zgPR3BbCQpwuhP6TPVwqkvyuZ6G9GRH+Y4MxgoL+rHKc/7fdVQuhvOtmK1nuGEPpD5tJMIP2dwUB/My3T3xiB9Hc11e2ssNHf1QH6m2WB/sYA6e9qYCHPEkJ/SJ+vEUh/1zDR37UR/WGCcy0D/V3nOP1pv68TQn+zyFa03lFC6A+ZS7OB9DeKgf5mW6a/swXS3/VUtzeEjf6uD9DfDRbo72wg/V0PLOQbhNAf0ucbBdLfjUz0d1NEf5jg3MRAfzc7Tn/a75uF0N8NZCta72gh9IfMpTlA+hvNQH9zLNPfOQLp7xaq21vDRn+3BOjvVgv0dw6Q/m4BFvKtQugP6fNtAunvNib6mxvRHyY4cxno73bH6U/7fbsQ+ruVbEXrHSuE/pC5NA9If2MZ6G+eZfqbIJD+7qC6nR82+rsjQH/zLdDfBCD93QEs5PlC6A/p850C6e9OJvpbENEfJjgLGOjvLsfpT/t9lxD6m0+2ovWOE0J/yFxaCKS/cQz0t9Ay/Z0rkP7uprpdFDb6uztAf4ss0N+5QPq7G1jIi4TQH9LnewTS3z1M9Lc4oj9McBYz0N+9jtOf9vteIfS3iGxF6x0vhP6QubQESH/jGehviWX6O18g/d1Hdbs0bPR3X4D+llqgv/OB9HcfsJCXCqE/pM/3C6S/+5nob1lEf5jgLGOgvwccpz/t9wNC6G8p2YrWO1EI/SFzaTmQ/iYy0N9yy/R3gUD6e5DqdkXY6O/BAP2tsEB/FwDp70FgIa8QQn9Inx8SSH8PMdHfyoj+MMFZyUB/DztOf9rvh4XQ3wqyFa33PCH0h8ylVUD6O4+B/lZZpr8LBdLfI1S3j4aN/h4J0N+jFujvQiD9PQIs5EeF0B/S58cE0t9jTPS3OqI/THBWM9Df447Tn/b7cSH09yjZitY7SQj9IXNpDZD+JjHQ3xrL9HexQPp7gup2bdjo74kA/a21QH8XA+nvCWAhrxVCf0ifnxRIf08y0d+6iP4wwVnHQH9POU5/2u+nhNDfWrIVrXeyEPpD5tJ6IP1NZqC/9Zbp7xKB9Pc01e0zYaO/pwP094wF+rsESH9PAwv5GSH0h/T5WYH09ywT/W2I6A8TnA0M9Pec4/Sn/X5OCP09Q7ai9V4khP6QubQRSH8XMdDfRsv0d6lA+nue6nZT2Ojv+QD9bbJAf5cC6e95YCFvEkJ/SJ9fEEh/LzDR3+aI/jDB2cxAfy86Tn/a7xeF0N8mshWtd4oQ+kPm0hYg/U1hoL8tlunvcoH09xLV7ctho7+XAvT3sgX6uxxIfy8BC/llIfSH9PkVgfT3ChP9vRrRHyY4rzLQ32uO05/2+zUh9Pcy2YrWO1UI/SFzaSuQ/qYy0N9Wy/R3hUD6e53qdlvY6O/1AP1ts0B/VwDp73VgIW8TQn9In98QSH9vMNHfmxH9YYLzJgP9veU4/Wm/3xJCf9vIVrTey4TQHzKXtgPp7zIG+ttumf6uFEh/b1PdvhM2+ns7QH/vWKC/K4H09zawkN8RQn9In98VSH/vMtHfjoj+MMHZwUB/Ox2nP+33TiH09w7ZitY7TQj9IXNpF5D+pjHQ3y7L9HeVQPp7j+r2/bDR33sB+nvfAv1dBaS/94CF/L4Q+kP6/IFA+vuAif4+jOgPE5wPGejvI8fpT/v9kRD6e59sReudLoT+kLm0G0h/0xnob7dl+rtaIP19THX7Sdjo7+MA/X1igf6uBtLfx8BC/kQI/SF9/lQg/X3KRH+fRfSHCc5nDPT3ueP0p/3+XAj9fUK2ovXOEEJ/yFzaA6S/GQz0t8cy/V0jkP6+oLr9Mmz090WA/r60QH/XAOnvC2AhfymE/pA+fyWQ/r5ior+vI/rDBOdrBvr7xnH6035/I4T+viRb0XpnCqE/ZC59C6S/mQz0961l+rtOIP19R3X7fdjo77sA/X1vgf6uA9Lfd8BC/l4I/SF9/kEg/f3ARH8/RvSHCc6PDPT3k+P0p/3+SQj9fU+2ovXOEkJ/yFz6GUh/sxjo72fL9He9QPr7her217DR3y8B+vvVAv1dD6S/X4CF/KsQ+kP6/JtA+vuNif5+j+gPE5zfGehvr+P0p/3eK4T+fiVb0XqvFUJ/yFzaB6S/axnob59l+rtRIP394ddt+ZDR3x8B+tMTkBp4TTT93Qikvz+QF4XyMugP6XOp8vLor1R57CL5V5zKR/QHCY6eSLTe0uXdpj/tt7YRHCMW+vPIVrTe2ULoD5lLZXCLUXw2A/1p+2zS380C6S+R6rZs2OhPO27SX1kL9HczkP4SgYVcVgj9IX1OEkh/SUz0lxzRHyY4yQz0l+I4/Wm/U4TQX1myFa33BiH0h8ylckD6u4GB/spZpr9bBNJfearbCmGjv/IB+qtggf5uAdJfeWAhVxBCf0ifKwqkv4pM9Fcpoj9McCox0F9lx+lP+11ZCP1VIFvRem8SQn/IXKoCpL+bGOivimX6u00g/VWluq0WNvqrGqC/ahbo7zYg/VUFFnI1IfSH9Lm6QPqrzkR/NSL6wwSnBgP91XSc/rTfNYXQXzWyFa13jhD6Q+ZSLSD9zWGgv1qW6e92gfRXm+q2Ttjor3aA/upYoL/bgfRXG1jIdYTQH9LnugLpry4T/dWL6A8TnHoM9FffcfrTftcXQn91yFa03luF0B8ylxoA6e9WBvprYJn+7hBIfw2pbhuFjf4aBuivkQX6uwNIfw2BhdxICP0hfW4skP4aM9FfakR/mOCkMtBfE8fpT/vdRAj9NSJb0XrnCqE/ZC41BdLfXAb6a2qZ/u4USH/NqG6bh43+mgXor7kF+rsTSH/NgIXcXAj9IX1uIZD+WjDRX8uI/jDBaclAf60cpz/tdysh9NecbEXrnSeE/pC51BpIf/MY6K+1Zfq7SyD9taG6bRs2+msToL+2FujvLiD9tQEWclsh9If0uZ1A+mvHRH/tI/rDBKc9A/11cJz+tN8dhNBfW7IVrXe+EPpD5lJHIP3NZ6C/jpbp726B9HcQ1W0sbPR3UID+Yhbo724g/R0ELOSYEPpD+hwXSH9xJvpLi+gPE5w0BvpLd5z+tN/pQugvRrai9S4QQn/IXMoA0t8CBvrLsEx/9wikv05Ut53DRn+dAvTX2QL93QOkv07AQu4shP6QPmcKpL9MJvrLiugPE5wsBvrLdpz+tN/ZQuivM9mK1rtQCP0hc6kLkP4WMtBfF8v0d69A+juY6rZr2Ojv4AD9dbVAf/cC6e9gYCF3FUJ/SJ8PEUh/hzDRX7eI/jDB6cZAf90dpz/td3ch9NeVbEXrXSSE/pC51ANIf4sY6K+HZfq7TyD9HUp12zNs9HdogP56WqC/+4D0dyiwkHsKoT+kz70E0l8vJvo7LKI/THAOY6C/wx2nP+334ULoryfZita7WAj9IXOpN5D+FjPQX2/L9He/QPo7guq2T9jo74gA/fWxQH/3A+nvCGAh9xFCf0ifjxRIf0cy0V/fiP4wwenLQH9HOU5/2u+jhNBfH7IVrXeJEPpD5lI/IP0tYaC/fpbp7wGB9Hc01W3/sNHf0QH662+B/h4A0t/RwELuL4T+kD4fI5D+jmGivwER/WGCM4CB/o51nP6038cKob/+ZCta71Ih9IfMpYFA+lvKQH8DLdPfgwLp7ziq20Fho7/jAvQ3yAL9PQikv+OAhTxICP0hfT5eIP0dz0R/gyP6wwRnMAP9neA4/Wm/TxBCf4PIVrTeZULoD5lLQ4D0t4yB/oZYpr+VAunvRKrboWGjvxMD9DfUAv2tBNLficBCHiqE/pA+nySQ/k5ior+TI/rDBOdkBvo7xXH6036fIoT+hpKtaL3LhdAfMpdOBdLfcgb6O9Uy/T0ikP5Oo7odFjb6Oy1Af8Ms0N8jQPo7DVjIw4TQH9LnHIH0l8NEf7kR/WGCk8tAf3mO05/2O08I/Q0jW9F6VwihP2QuDQfS3woG+htumf5WC6S/fKrbgrDRX36A/gos0N9qIP3lAwu5QAj9IX0+XSD9nc5EfyMi+sMEZwQD/Y10nP603yOF0F8B2YrWu1II/SFz6Qwg/a1koL8zLNPfEwLp70yq21Fho78zA/Q3ygL9PQGkvzOBhTxKCP0hfT5LIP2dxUR/oyP6wwRnNAP9jXGc/rTfY4TQ3yiyFa13lRD6Q+bSWCD9rWKgv7GW6W+dQPo7m+p2XNjo7+wA/Y2zQH/rgPR3NrCQxwmhP6TP5wikv3OY6G98RH+Y4IxnoL8JjtOf9nuCEPobR7ai9T4qhP6QuTQRSH+PMtDfRMv097RA+juX6va8sNHfuQH6O88C/T0NpL9zgYV8nhD6Q/p8vkD6O5+J/iZF9IcJziQG+rvAcfrTfl8ghP7OI1vRelcLoT9kLk0G0t9qBvqbbJn+Ngikvwupbi8KG/1dGKC/iyzQ3wYg/V0ILOSLhNAf0ueLBdLfxUz0NyWiP0xwpjDQ3yWO05/2+xIh9HcR2YrWu0YI/SFzaSqQ/tYw0N9Uy/T3vED6u5Tq9rKw0d+lAfq7zAL9PQ+kv0uBhXyZEPpD+ny5QPq7nIn+pkX0hwnONAb6u8Jx+tN+XyGE/i4jW9F61wqhP2QuTQfS31oG+ptumf42C6S/K6luZ4SN/q4M0N8MC/S3GUh/VwILeYYQ+kP6fJVA+ruKif5mRvSHCc5MBvq72nH6035fLYT+ZpCtaL3rhNAfMpdmAelvHQP9zbJMfy8JpL9rqG6vDRv9XROgv2st0N9LQPq7BljI1wqhP6TP1wmkv+uY6G92RH+Y4MxmoL/rHac/7ff1QujvWrIVrXe9EPpD5tINQPpbz0B/N1imv1cF0t+NVLc3hY3+bgzQ300W6O9VIP3dCCzkm4TQH9LnmwXS381M9Dcnoj9McOYw0N8tjtOf9vsWIfR3E9mK1vuMEPpD5tKtQPp7hoH+brVMf68LpL/bqG7nho3+bgvQ31wL9Pc6kP5uAxbyXCH0h/T5doH0dzsT/c2L6A8TnHkM9HeH4/Sn/b5DCP3NJVvRejcIoT9kLs0H0t8GBvqbb5n+3hRIf3dS3S4IG/3dGaC/BRbo700g/d0JLOQFQugP6fNdAunvLib6WxjRHyY4Cxno727H6U/7fbcQ+ltAtqL1bhRCf8hcWgSkv40M9LfIMv29LZD+7qG6XRw2+rsnQH+LLdDf20D6uwdYyIuF0B/S53sF0t+9TPS3JKI/THCWMNDffY7Tn/b7PiH0t5hsRevdJIT+kLm0FEh/mxjob6ll+tshkP7up7pdFjb6uz9Af8ss0N8OIP3dDyzkZULoD+nzAwLp7wEm+lse0R8mOMsZ6O9Bx+lP+/2gEPpbRrai9W4WQn/IXFoBpL/NDPS3wjL9vSeQ/h6iul0ZNvp7KEB/Ky3Q33tA+nsIWMgrhdAf0ueHBdLfw0z0tyqiP0xwVjHQ3yOO05/2+xEh9LeSbEXr3SKE/pC59CiQ/rYw0N+jlulvj0D6e4zqdnXY6O+xAP2ttkB/e4D09xiwkFcLoT+kz48LpL/HmehvTUR/mOCsYaC/JxynP+33E0LobzXZitb7shD6Q+bSWiD9vcxAf2st019COafpzz/SzLl4kup2XdjoTzu+N2AM6jX0ZK5jWGTWlXd7kaHjgEL4b33OL/jzeLK8+/OHplykz08ZuuJZ6Wlpmel6XNbwWDxjeF5aVlra8NyMWF4sJy8tPzsjnl2QkZaRnjc8L1fpzIkXxApy8rILsv60yxblPsVEuesjysUEZz0D5T7tOOVqv58WQrnryFa03mfAhamLUOsMkgMqZvOTPa97Cn4eni3vdvx3K7+fZYj/q9V4/Y6V7IhnlOPx+7VqMsABGJ+4FJ9XA68bG8q7fe3Vub2BIb+fY1jXnzNup6PnQb+r56jzbdXcXtd7pPD4/YaQWgfGJ/6G47FOZcrx7Y5fw8swXcPfFpLjwPjE33Y81o2ZcnyH47V9NNM6vlNIjgPjE9/peI7r9+LPWrpvECvZEW9aTo6trQXZ2tGirSVdQ7Q+jrXpfcfr9HCmNfkDIWsyMD7xDxyPdW+mWO+2FGuH3ufGd4M/uVe3Lv/6kEa/F9in2nLUVqG2ln9eyUaKYzKJPnQt6+d7U3sEtQ3o75pS25rajtRmUFtVyfOG3rKk91fS8xu1v1O7l9p91P5BbQUlmww9D5IerVs/fzSN60/tMdQOoPZYagdS24XsG0T9HtQf7PtL/SHU70f9ob4e6p9M/SHUP5X6p1J/GPWHUz+X+mdQfzj1x1K/gPoTqT+C+pOpfwb1p1J/FPWnU3809WdRfyz1b6D+OOrfSv3x1J9P/YnUX0T986i/lPqTqL+C+pOp/yj1L6L+WupPof4z1J9K/U3Uv4z6L1N/GvW3UX869d+h/gzqv0/9mdT/hPqzqP8l9a+l/vfUn039X6l/A/U9yqObqF+W+nP8/KP+rdSvRv251K9D/XnUb0T9+dRvTv0F1G9L/YXUj1F/EfU7U38x9btSfwn1e1J/KfX7UH+ZXwfUX079QdRfQf2HqB1K5x+m/ipqh9H5R6n/GLUFdP5x6q+hdhSdX0v9J6kdR+efov56as+j889Q/1lqL6Lzz1F/I7WX0flN1H+B2hl0/kXqb6H2Wjr/MvVfofYmOv8a9bdSO5fOb6P+G9QuoPNvUX87tYvp/DvUf5faZXR+J/V3UbuSzr9P/Q+o/ZDaj6jdTe3Hfl5T+ym1n1H7ObWrSe8Xft5T+xW1X1P7DbXfUvudXxfU/kDtj9T+RO3P1P7i1y29nkf1U4ratjomxvr810YYP470dy9Qqy513uby/9xRhmaxIxLVGpWM09dH6ZuT/Le9IL3IXWrx4Alzfl+k905bwrZLTTu+1nB2i/FBDRqK/aRDQ/Enjr8Z8IsD7fenlrYEF9POWMDO+IvAD1C3AHV95viWajriwPyOA3Mm/pmQGw/I/HvpX3RlZebnFmRmpOfEMgpylZ7OBfnpOWnZ8YKsdKU+PSOem5MfG56Rm9k5o3NWQWbM1m7Hl5h2O74c7XbEBOdlht2Orzi+21H7/YqQO9ZbyFa03i8dvQAF7UTm0qvAHVBfMnynR9t3qGfvOz1bSjAfBQceeYWYy/Ju6TWq263/8m6pZyFzFny31NP7/98tFabH+rsl88VROvUkvsaxlZRhq91WQ6d/oCm3BGT/j3ccrwEXrK1MBYr+yAXp8+sCtqm+zlA73NvuYyU79t9BuYDhTsLXAu6g3MDg9zdu3kH558epwHoExjr+jYC8uZEhb95wfJ3Qft/E4PebAvy+mcHvt4B+a2DWH9v7d050bet80nP7lvGGWB/odWQ7cB1x9K4kS15pLtjOsWUcmFdlKK+CB3JeOeb27fLu2/gOg437D/SbgGeBbwLeFfAmYDNDUX7v+GKkk/FdBr9/EALDO4B5CYx1HDl/zIv5Xx+jhHEx34G2keNd/iUMFPuzgHdrsxn8/kXIwrYTuLABYx3/xfG80fUylSFvfhdQL9cz+L1XSL3sAtYLMNbxvXJAgO0i21qAje8hQUBqoOYnu2/j+7befsdKdqSZk1nir/VF94biHwh4O/GhkORMRybnR1Fyxj8SkJy7hSRnfDvwxuXHQC7UyVnOk5ecEvjrEzR/SQyUBP76NIz89Rn4EicxOT8TcIn7PIz8tSdKzvgeAcn5hRT+6pKCS84vHf/guKnS8THDfVOvutv3i/UPVXP8uGup6jxJjr5f/BUyL3E+x0s5nje6XnYy5E0ZAfXC4XeikHr5Gvk+GlgviQLqZRdD3iQLqBcOv1OE1Ms3wHoBxjqeIqBetjHkTQUB9fIeg98VhdTLt8B6AcY6XlFAvbzBkDdVBNTL+wx+VxVSL98B6wUY63hVAfXyJkPe1BBQLx8y+F1TSL18D6wXYKzjNQXUy1sMeVNHQL3sZvC7rpB6+QFYL8BYx+sKqBeObwc2EFAvHzP43VBIvfwIrBdgrOMNBdTLJwx5k+q4351TeP5ZaBMh9fITsF6AsY43EVAvnzLUS3PH/c5kqpcWQurlZ2C9AGMdbyGgXj5nqJfWjvudxVQvbYTUyy/AegHGOt5GQL18wVAv7R33O5upXjoIqZdfgfUCjHW8g4B6+ZKhXmKO+92FqV7iQurlN2C9AGMdR86frd+kb4HTdcBv0v8e/SY9Jji/M/wm/V7Hf5Ne+72X6Tfp/SMhoLvEP9YAnNN9wAVOF0IZ75+HywsJp53NhdjZDGxnAti+O5LVh3TA/1ymv5XzFUPNm79hX4ke/6Ffp4I6pyRBSWklZZQkKimrJElJspIUJeWUlFdSQUlt+nv9u/fBmtLnzN/g98/5/1E0wTiXRI/NiyHab4YLbCzFO/B/C/j++H4kFjI/ZQuZnyRjfEXjeS8wV5Xo75OxfuSbcfGPIBj0MB4nG74kYW2Ja911SVf+6LMn5E/IHzAhd9TIvN4TRueNHzlmdK+cUaPMJC5rTI4+yhQycfoobTw2x5hBSjEc88/5X0FLMs6Zyeu3vn5zfCn0KqivhC0N40F6Y7b+q4heZVA2F2JuSXX/9d9FzLmoSD8CUalCyP4Ho3Z8h+GsnoDUwGui/9uGmSD/JTam+f9to2LJdf2FoJWYEheNIUifKxeiKzeWN7xTPLfz8Mx4fk6nrLy87PR4PC2nc07n3LSsgvzcTvGsTllKZ15OWpZ6ubScvHh+LKdzvq3375Ur4FFJH1UqRO/fIcHRE4nWWxWY9Fx+V60AjxHL/5SrRLai9WZYupka+y+PvzbdA3OpGm4xiiPnz7+ga/uaePb+p1wpt+nPP9LMuahOdVsjbPSnHd8bMAb1GnoyazAsMjUquL3I0HFAIfy3PufTP2+rXsH9+UNTLtLnmoaueFZ6Wlpmuh6XNVytucPz0rLS0obnZsTyYjl5afnZGfHsgoy0jPS84Xm5SmdOvCBWkJOXXZD1p122KLcmE+XWiigXE5xaDJRb23HK1X7XFkK5NchW+FeJwIWpi1DrTPDsUVqCQEqrS3lXL2yUVpeR0vRk1mMoknpCKC0BSGl1K7g/f2hKQ/pcXyCl1WeitAYRpWGC04CB0ho6Tmna74ZCKK0e2YrW24iB0hpZprTSAimtMeVdatgorTEjpenJTGUoklQhlFYaSGmNK7g/f2hKQ/rcRCClNWGitKYRpWGC05SB0po5Tmna72ZCKC2VbEXrbc5Aac0tU1qSwP1uLSjvWoaN0loE9ru1tLDfLQm4360FcFFrKYRekD63ErjfrRUTvbSO6AUTnNYM9NLGcXrRfrcRQi8tyVa03s5C9rshc6ktcL9bZ4b9bm0t73dLFniPrh3Vbfuw0V87xnt0ejLbMywy7YXco0sG3qNrV8H9+UNTLtLnDgLv0XVgotyOEeVigtORgXIPcpxytd8HCaHc9mQrWm+M4R5dzPI9uhSBlBanvEsLG6XFGSlNT2YaQ5GkCaG0FCClxSu4P39oSkP6nC6Q0tKZKC0jojRMcDIYKK2T45Sm/e4khNLSyFb4vUgGSutsmdLKCaS0TMq7rLBRWiYjpenJzGIokiwhlFYOSGmZFdyfPzSlIX3OFkhp2UyU1iWiNExwujBQ2sGOU5r2+2AhlJZFtqL1dmWgtK6WKa28wP1uh1DedQsbpR0S2O/WzcJ+t/LA/W6HABe1bkLoBelzd4H73boz0UuPiF5AwWGgl0Mdpxft96FC6KUb2QqnIiH73ZC51BO43y2LYb9bT9rvxpHz+leI9zH8s5leFXjrJ1ayY//v+vdiqJ8u1d1eN/RvxHP4fXB1GeAFjE/8YMdj3Zwpx7s5/o+k9G+fcvjdXUiOA+MT7+54rP3/14GOdU/H/fb/rwj8ui3kn6UdBmQ2YKzjvRzPm25Ma2Nvx6+F2ufDGPw+Qsg1ARifuBSfDwO+RzwcuN4Ult+xkh1xnd+Hc9Q1w6cZvY0b1Oh5aObxrG99HV/fKjCt60cJqXVgfOJHOX4Nb0+x9rB6WWxNE2RrlkVbS1qXWh9Hvfd3PPfLMK1zxwhZ54DxiR/jeKwTmWI90FKsHbqXHB8I/lxC/39H/4NWfb9tn/fnvwLRbT1qU6nV/0rxCIpjsvf3/50sQ88nUluW2pbUtqc2jdosartRW1VJH0Ovf4+htffn88FW79A4spjj+xZz/FHFHN+vmOOPLub4/sUcf0wxxw8o5vhjizl+YDHHH1fM8YOKOf74Yo4fXMzxJxRz/BBjfMJ/GK+fO7GI44YWcdxJRRx3chHHnVLEcacWcdxpRRw3rIjjcoo4LreI4/KKOG54EcflF3FcQRHHnV7EcSOKMK6hkpFFHHdGEcedWcRxo4o47qwijhtdxHFjijhubBHHnV3EceOKOO6cIo4bX8RxE4o4bmIRx51bxHHnFWO91OPPL+b4ScUcf0Exx08u5vgLizn+omKOv7iY46cUc/wlxRw/tZjjLy3m+MuKOf7yYo6fVszxVxRz/HRj/Ak0vg/xcYUKhf9dsD2SxvWl9ihq+1F7NLX9qT2G2gHUHkvtQGqPo3YQtcdTO5jaE6gdQu2J1A6l9iRqT6b2FGpPpfY0aodRm0NtLrV51A6nNp/aAmpPp3ZEEednJI07g9ozqR1F7VnUjqZ2DLVjqT2b2nHUnkPteGonUDuR2nOpPY/a86mdRO0F1E6m9kJqL6L2YmqnUHsJtVOpvZTay6i9nNpp1F5B7fQizg+qbafkykLyX+9Z0s8fQfZcSW01JTMq/PNbEeh7LnqPQZcU7Gf3v5X/216QXuQ3LeLBE+b8XlXhz3ZmhZB900I7vtZwVk9Aj4BxqNf0kw5982uQgI0tvzFsbDnezY0tsYCd8asq4HyeCdQ12PGN4XTEgfkdB+ZMfLCQDxiQ+Xf1v+jKyszPLcjMSM+JZRTkKj2dC/LTc9Ky4wVZ6Up9ekY8Nyc/NjwjN7NzRuesgsyYrW8mmTbHSniY9s6qEH0zCRKcWRXweq8BJj2X39dUgMeI5ZPpmWQrWu9QRy9AQTuRuXQtbjGKDwV/AqgXMW3foZ6976XPLMF8FBx45BViLsu7peuobmf/y7ulnoXMWfDdUk/v/3+3VJge6++WzBdH6dSTeB3DonJdBXxRzDZ0+geacktA9v94x3EdcMGazVSg6K0VSJ+vr+B27egtNNcz1I7rX/HUd1A6M9xBOVnAHZSfGO6gnCLkq0E3AOsRGOv4KQK+SpfJUC/DBNTLzwz1kiOkXm4E1gsw1vEcAfWSxVAvwwXUyy8M9ZIvpF5uAtYLMNbxfAH1ks1QLyME1MuvDPUyUki93AysF2Cs48j50zd29E0V/w6/ZlB9XdVrxc0VPI9zfucA59fRT89Y6lK/f53D8L74FuD74jKUV8EDOa8cc3tLBfdtvJXBxv0H+mZVL+DNqtsE3KyawVCUoxxfjHQy3sbg91lCIGEuMC+BsY4j5495Mf/r4/4wLuZzpSzmLYG6bgcWjS7oMt4/D3SgWng8gULb2VyInc2E2An8wa6Y+ZH30/R4ntJ/h5L5Su5UskDJXUoWKrlbySIl9yhZrOReJUuU3KdkqZL7lSxT8oCS5UoeVLJCyUNKVip5WMkqJY8oeVTJY0pWK3lcyRolT+h9wUqeVLJOyVNK1it5WskzSp5VskHJc0o2KnleySYlLyjZrORFJVuUvKTkZSWvKHlVyWtKtip5Xck2JW8oeVPJW0q2K3lbyTtK3lWyQ8lOJbuUvKfkfSUfKPlQyUdKdiv5WMknSj5V8pmSz5XsUfKFki+VfKXkayXfKPlWyXdKvlfyg5Iflfyk5Gclvyj5VclvSn5XslfJPiV/6He6FVVclCQoKa2kjJJEJWWVJClJVpKipJyS8koqKKmopJKSykqqKKmqpJqS6kpqKKmppJaS2krqKKmrpJ6S+koaKGmopJGSxkpSlTRR0lRJMyXNlbRQ0lJJKyWtlbRR0lZJOyXtlXRQ0lHJQUpiSuJK0pSkK8lQ0klJZyWZSrKUZCvpouRgJV2VHKKkm5LuSnooOVRJTyW9lBym5HAlvZUcoaSPkiOV9FVylJJ+So5W0l/JMUoGKDlWyUAlxykZpOR4JYOVnKBkiJITlQxVcpKSk5WcouRUJacpGabniWpCb/0Irun6XGKgxvW5svQ4wTiXRI/NPYoedl2IMex7jKV4B26v8f3x/UgsZH7KFjI/Scb4isbzXmCuKtHfJ0P9yEs34+IfwW07PYzHyYYvSVBbYnGtuzrpyssZNWrAuJETc8bn954wOm/8yDGjzSXZN9lfmssUMmX6KG08NseY4UkxXPLPlaPHScY5M2391tdvji+Fvq7pH8++3bjDB9Ibs7Wl7g4ucMbYWei/esmhYsytGLIvIGnHdxjO6glIDbwmeqvZHSW/+/TXv3rR9pdQ119vfnIr8iRuAnj+kD7nFaLL9X/1kgeMk2nv8IrRFyogwdETidabD0x6Lr/zK8JjxPKFilyyFa13rJB/9YLMpQLcYhQfy/CFCm1fE8/eFyrmu01//nHAv2M+nep2RNjoTzvO9e+Y9WSOYFhkRlR0e5Gh44BCKOm/Yz69ovvzh6ZcpM8jDV1S/h3zSCbKPSOiXExwzmCg3DMdp1zt95lCKHcE2Qrf+AEuTF2EWmeCZ4/S7hRIaWdR3o0OG6WdxUhpejJHMxTJaCGUdieQ0s6q6P78oSkN6fMYgZQ2honSxkaUhgnOWAZKO9txStN+ny2E0kaTrWi94xgobZxlSlsgkNLOobwbHzZKO4eR0vRkjmcokvFCKG0BkNLOqej+/KEpDenzBIGUNoGJ0iZGlIYJzkQGSjvXcUrTfp8rhNLGk61ovecxUNp5liltkcD9budT3k0KG6WdH9jvNsnCfrdFwP1u5wMXtUlC6AXp8wUC97tdwEQvkyN6wQRnMgO9XOg4vWi/LxRCL5PIVvg9JiH73ZC5dBFwv9s4hv1uF1ne73aPwHt0F1PdTgkb/V3MeI9OT+YUhkVmipB7dPcA79FdXNH9+UNTLtLnSwTeo7uEiXKnRpSLCc5UBsq91HHK1X5fKoRyp5CtaL2XMdyju8zyPbrFAintcsq7aWGjtMsZKU1P5jSGIpkmhNIWAynt8oruzx+a0pA+XyGQ0q5gorTpEaVhgjOdgdKudJzStN9XCqG0aWQrWu8MBkqbYZnS7hVIaVdR3s0MG6VdxUhpejJnMhTJTCGUdi+Q0q6q6P78oSkN6fPVAintaiZKmxVRGiY4sxgo7RrHKU37fY0QSptJtqL1XstAaddaprQlAve7XUd5NztslHZdYL/bbAv73ZYA97tdB1zUZguhF6TP1wvc73Y9E73cENELJjg3MNDLjY7Ti/b7RiH0MptsResdL2S/GzKXbgLudxvPsN/tJsv73R4USH83U93OCRv93RygvzkW6O9BIP3dDCzkOULoD+nzLQLp7xYm+rs1oj9McG5loL/bHKc/7fdtQuhvDtmK1jtRCP0hc2kukP4mMtDfXMv095BA+rud6nZe2Ojv9gD9zbNAfw8B6e92YCHPE0J/SJ/vEEh/dzDR3/yI/jDBmc9Af3c6Tn/a7zuF0N88shWt9zwh9IfMpQVA+juPgf4WWKa/hwXS311UtwvDRn93BehvoQX6exhIf3cBC3mhEPpD+ny3QPq7m4n+FkX0hwnOIgb6u8dx+tN+3yOE/haSrWi9k4TQHzKXFgPpbxID/S22TH+PCKS/e6lul4SN/u4N0N8SC/T3CJD+7gUW8hIh9If0+T6B9HcfE/0tjegPE5ylDPR3v+P0p/2+Xwj9LSFb0XonC6E/ZC4tA9LfZAb6W2aZ/h4TSH8PUN0uDxv9PRCgv+UW6O8xIP09ACzk5ULoD+nzgwLp70Em+lsR0R8mOCsY6O8hx+lP+/2QEPpbTrai9V4khP6QubQSSH8XMdDfSsv097hA+nuY6nZV2Ojv4QD9rbJAf48D6e9hYCGvEkJ/SJ8fEUh/jzDR36MR/WGC8ygD/T3mOP1pvx8TQn+ryFa03ilC6A+ZS6uB9DeFgf5WW6a/JwTS3+NUt2vCRn+PB+hvjQX6ewJIf48DC3mNEPpD+vyEQPp7gon+1kb0hwnOWgb6e9Jx+tN+PymE/taQrWi9U4XQHzKX1gHpbyoD/a2zTH9PCqS/p6hu14eN/p4K0N96C/T3JJD+ngIW8noh9If0+WmB9Pc0E/09E9EfJjjPMNDfs47Tn/b7WSH0t55sReu9TAj9IXNpA5D+LmOgvw2W6e8pgfT3HNXtxrDR33MB+ttogf6eAtLfc8BC3iiE/pA+Py+Q/p5nor9NEf1hgrOJgf5ecJz+tN8vCKG/jWQrWu80IfSHzKXNQPqbxkB/my3T39MC6e9FqtstYaO/FwP0t8UC/T0NpL8XgYW8RQj9IX1+SSD9vcREfy9H9IcJzssM9PeK4/Sn/X5FCP1tIVvReqcLoT9kLr0KpL/pDPT3qmX6e1Yg/b1Gdbs1bPT3WoD+tlqgv2eB9PcasJC3CqE/pM+vC6S/15nob1tEf5jgbGOgvzccpz/t9xtC6G8r2YrWO0MI/SFz6U0g/c1goL83LdPfcwLp7y2q2+1ho7+3AvS33QL9PQekv7eAhbxdCP0hfX5bIP29zUR/70T0hwnOOwz0967j9Kf9flcI/W0nW9F6ZwqhP2Qu7QDS30wG+tthmf6eF0h/O6lud4WN/nYG6G+XBfp7Hkh/O4GFvEsI/SF9fk8g/b3HRH/vR/SHCc77DPT3geP0p/3+QAj97SJb0XpnCaE/ZC59CKS/WQz096Fl+ntBIP19RHW7O2z091GA/nZboL8XgPT3EbCQdwuhP6TPHwukv4+Z6O+TiP4wwfmEgf4+dZz+tN+fCqG/3WQrWu+1QugPmUufAenvWgb6+8wy/b0okP4+p7rdEzb6+zxAf3ss0N+LQPr7HFjIe4TQH9LnLwTS3xdM9PdlRH+Y4HzJQH9fOU5/2u+vhNDfHrIVrXe2EPpD5tLXQPqbzUB/X1umv5cE0t83VLffho3+vgnQ37cW6O8lIP19Ayzkb4XQH9Ln7wTS33dM9Pd9RH+Y4HzPQH8/OE5/2u8fhNDft2QrWu8NQugPmUs/AunvBgb6+9Ey/b0ikP5+orr9OWz091OA/n62QH+vAOnvJ2Ah/yyE/pA+/yKQ/n5hor9fI/rDBOdXBvr7zXH6037/JoT+fiZb0XpvEkJ/yFz6HUh/NzHQ3++W6e81gfS3l+p2X9job2+A/vZZoL/XgPS3F1jI+4TQH9LnPwTS3x9M9KcrLqK/EurUwdFWo/WWquQ2/Wm/tY3gGLHQ3z6yFa13jhD6Q+ZSQiVcDs1hoD9tn036e10g/ZWmui1TKWT0px036U9PQGrgNdH09zqQ/koDC7lMJZ7ERdMf0ufESvLoL7ESdpH0j7IR/WGCU5aB/pIcpz/td5IQ+itDtqL13iqE/pC5lAykv1sZ6C/ZMv29IZD+Uqhuy4WN/lIC9FfOAv29AaS/FGAhlxNCf0ifywukv/JM9Fchoj9McCow0F9Fx+lP+11RCP2VI1vReucKoT9kLlUC0t9cBvqrZJn+3hJIf5WpbquEjf4qB+ivigX6ewtIf5WBhVxFCP0hfa4qkP6qMtFftYj+MMGpxkB/1R2nP+13dSH0V4VsReudJ4T+kLlUA0h/8xjor4Zl+ntbIP3VpLqtFTb6qxmgv1oW6O9tIP3VBBZyLSH0h/S5tkD6q81Ef3Ui+sMEpw4D/dV1nP6033WF0F8tshWtd74Q+kPmUj0g/c1noL96lunvXYH0V5/qtkHY6K9+gP4aWKC/d4H0Vx9YyA2E0B/S54YC6a8hE/01iugPE5xGDPTX2HH60343FkJ/DchWtN4FQugPmUupQPpbwEB/qZbpb6dA+mtCdds0bPTXJEB/TS3Q304g/TUBFnJTIfSH9LmZQPprxkR/zSP6wwSnOQP9tXCc/rTfLYTQX1OyFa13oRD6Q+ZSSyD9LWSgv5aW6e89gfTXiuq2ddjor1WA/lpboL/3gPTXCljIrYXQH9LnNgLprw0T/bWN6A8TnLYM9NfOcfrTfrcTQn+tyVa03kVC6A+ZS+2B9LeIgf7aW6a/DwTSXweq245ho78OAfrraIH+PgDSXwdgIXcUQn9Inw8SSH8HMdFfLKI/THBiDPQXd5z+tN9xIfTXkWxF610shP6QuZQGpL/FDPSXZpn+PhJIf+lUtxlho7/0AP1lWKC/j4D0lw4s5Awh9If0uZNA+uvERH+dI/rDBKczA/1lOk5/2u9MIfSXQbai9S4RQn/IXMoC0t8SBvrLskx/Hwukv2yq2y5ho7/sAP11sUB/HwPpLxtYyF2E0B/S54MF0t/BTPTXNaI/THC6MtDfIY7Tn/b7ECH014VsRetdKoT+kLnUDUh/Sxnor5tl+vtUIP11p7rtETb66x6gvx4W6O9TIP11BxZyDyH0h/T5UIH0dygT/fWM6A8TnJ4M9NfLcfrTfvcSQn89yFa03mVC6A+ZS4cB6W8ZA/0dZpn+PhdIf4dT3fYOG/0dHqC/3hbo73Mg/R0OLOTeQugP6fMRAunvCCb66xPRHyY4fRjo70jH6U/7faQQ+utNtqL1LhdCf8hc6gukv+UM9NfXMv19IZD+jqK67Rc2+jsqQH/9LNDfF0D6OwpYyP2E0B/S56MF0t/RTPTXP6I/THD6M9DfMY7Tn/b7GCH0149sRetdIYT+kLk0AEh/Kxjob4Bl+vtKIP0dS3U7MGz0d2yA/gZaoL+vgPR3LLCQBwqhP6TPxwmkv+OY6G9QRH+Y4AxioL/jHac/7ffxQuhvINmK1rtSCP0hc2kwkP5WMtDfYMv0941A+juB6nZI2OjvhAD9DbFAf98A6e8EYCEPEUJ/SJ9PFEh/JzLR39CI/jDBGcpAfyc5Tn/a75OE0N8QshWtd5UQ+kPm0slA+lvFQH8nW6a/7wTS3ylUt6eGjf5OCdDfqRbo7zsg/Z0CLORThdAf0ufTBNLfaUz0NyyiP0xwhjHQX47j9Kf9zhFCf6eSrWi9jwqhP2Qu5QLp71EG+su1TH8/CKS/PKrb4WGjv7wA/Q23QH8/AOkvD1jIw4XQH9LnfIH0l89EfwUR/WGCU8BAf6c7Tn/a79OF0N9wshWtd7UQ+kPm0ggg/a1moL8RlunvJ4H0N5Lq9oyw0d/IAP2dYYH+fgLS30hgIZ8hhP6QPp8pkP7OZKK/URH9YYIzioH+znKc/rTfZwmhvzPIVrTeNULoD5lLo4H0t4aB/kZbpr9fBNLfGKrbsWGjvzEB+htrgf5+AdLfGGAhjxVCf0ifzxZIf2cz0d+4iP4wwRnHQH/nOE5/2u9zhNDfWLIVrXetEPpD5tJ4IP2tZaC/8Zbp7zeB9DeB6nZi2OhvQoD+Jlqgv9+A9DcBWMgThdAf0udzBdLfuUz0d15Ef5jgnMdAf+c7Tn/a7/OF0N9EshWtd50Q+kPm0iQg/a1joL9Jlulvr0D6u4DqdnLY6O+CAP1NtkB/e4H0dwGwkCcLoT+kzxcKpL8Lmejvooj+MMG5iIH+Lnac/rTfFwuhv8lkK1rveiH0h8ylKUD6W89Af1Ms098fAunvEqrbqWGjv0sC9DfVAv39AaS/S4CFPFUI/SF9vlQg/V3KRH+XRfSHCc5lDPR3ueP0p/2+XAj9TSVb0XqfEUJ/yFyaBqS/Zxjob5pl+itVUR79XUF1Oz1s9HdFgP6mW6A/M0FKSn9XAAt5uhD6Q/p8pUD6u5KJ/mZE9IcJzgwG+rvKcfrTfl8lhP6mk61ovRuE0B8yl2YC6W8DA/3NtEx/pQXS39VUt7PCRn9XB+hvlgX6Kw2kv6uBhTxLCP0hfb5GIP1dw0R/10b0hwnOtQz0d53j9Kf9vk4I/c0iW9F6NwqhP2QuzQbS30YG+pttmf4SBdLf9VS3N4SN/q4P0N8NFugvEUh/1wML+QYh9If0+UaB9HcjE/3dFNEfJjg3MdDfzY7Tn/b7ZiH0dwPZita7SQj9IXNpDpD+NjHQ3xzL9JckkP5uobq9NWz0d0uA/m61QH9JQPq7BVjItwqhP6TPtwmkv9uY6G9uRH+Y4MxloL/bHac/7fftQujvVrIVrXezEPpD5tI8IP1tZqC/eZbpL0Ug/d1BdTs/bPR3R4D+5lugvxQg/d0BLOT5QugP6fOdAunvTib6WxDRHyY4Cxjo7y7H6U/7fZcQ+ptPtqL1bhFCf8hcWgikvy0M9LfQMv2VF0h/d1PdLgob/d0doL9FFuivPJD+7gYW8iIh9If0+R6B9HcPE/0tjugPE5zFDPR3r+P0p/2+Vwj9LSJb0XpfFkJ/yFxaAqS/lxnob4ll+qsokP7uo7pdGjb6uy9Af0st0F9FIP3dByzkpULoD+nz/QLp734m+lsW0R8mOMsY6O8Bx+lP+/2AEPpbSrai9b4qhP6QubQcSH+vMtDfcsv0V1kg/T1IdbsibPT3YID+Vligv8pA+nsQWMgrhNAf0ueHBNLfQ0z0tzKiP0xwVjLQ38OO05/2+2Eh9LeCbEXr3SqE/pC5tApIf1sZ6G+VZfqrJpD+HqG6fTRs9PdIgP4etUB/1YD09wiwkB8VQn9Inx8TSH+PMdHf6oj+MMFZzUB/jztOf9rvx4XQ36NkK1rvNiH0h8ylNUD628ZAf2ss019NgfT3BNXt2rDR3xMB+ltrgf5qAunvCWAhrxVCf0ifnxRIf08y0d+6iP4wwVnHQH9POU5/2u+nhNDfWrIVrfdNIfSHzKX1QPp7k4H+1lumvzoC6e9pqttnwkZ/Twfo7xkL9FcHSH9PAwv5GSH0h/T5WYH09ywT/W2I6A8TnA0M9Pec4/Sn/X5OCP09Q7ai9W4XQn/IXNoIpL/tDPS30TL91RdIf89T3W4KG/09H6C/TRborz6Q/p4HFvImIfSH9PkFgfT3AhP9bY7oDxOczQz096Lj9Kf9flEI/W0iW9F63xFCf8hc2gKkv3cY6G+LZfprJJD+XqK6fTls9PdSgP5etkB/jYD09xKwkF8WQn9In18RSH+vMNHfqxH9YYLzKgP9veY4/Wm/XxNCfy+TrWi9O4TQHzKXtgLpbwcD/W21TH9NBNLf61S328JGf68H6G+bBfprAqS/14GFvE0I/SF9fkMg/b3BRH9vRvSHCc6bDPT3luP0p/1+Swj9bSNb0Xp3CaE/ZC5tB9LfLgb6226Z/poLpL+3qW7fCRv9vR2gv3cs0F9zIP29DSzkd4TQH9LndwXS37tM9Lcjoj9McHYw0N9Ox+lP+71TCP29Q7ai9b4vhP6QubQLSH/vM9DfLsv010og/b1Hdft+2OjvvQD9vW+B/loB6e89YCG/L4T+kD5/IJD+PmCivw8j+sME50MG+vvIcfrTfn8khP7eJ1vRej8UQn/IXNoNpL8PGehvt2X6ayuQ/j6muv0kbPT3cYD+PrFAf22B9PcxsJA/EUJ/SJ8/FUh/nzLR32cR/WGC8xkD/X3uOP1pvz8XQn+fkK1ovbuF0B8yl/YA6W83A/3tsUx/HQTS3xdUt1+Gjf6+CNDflxborwOQ/r4AFvKXQugP6fNXAunvKyb6+zqiP0xwvmagv28cpz/t9zdC6O9LshVOlULoD5lL3wLp7xMG+vvWMv3FBNLfd1S334eN/r4L0N/3FugvBqS/74CF/L0Q+kP6/INA+vuBif5+jOgPE5wfGejvJ8fpT/v9kxD6+55sRev9TAj9IXPpZyD9fcZAfz9bpr90gfT3C9Xtr2Gjv18C9PerBfpLB9LfL8BC/lUI/SF9/k0g/f3GRH+/R/SHCc7vDPS313H6037vFUJ/v5KtaL17hNAfMpf2AelvDwP97bNMf50F0t8fft1WDhn9/RGgPz0BqYHXRNNfZyD9/YG8KFSWQX9In0tVlkd/pSpjF8m/4lQ5oj9IcPREovWWruw2/Wm/tY3gGLHQn0e2wj9RFkJ/yFwqg1uM4l8y0J+2zyb9ZQukv0Sq27Jhoz/tuEl/ZS3QXzaQ/hKBhVxWCP0hfU4SSH9JTPSXHNEfJjjJDPSX4jj9ab9ThNBfWbIVrfdrIfSHzKVyQPr7moH+ylmmv64C6a881W2FsNFf+QD9VbBAf12B9FceWMgVhNAf0ueKAumvIhP9VYroDxOcSgz0V9lx+tN+VxZCfxXIVrTeb4XQHzKXqgDp71sG+qtimf66C6S/qlS31cJGf1UD9FfNAv11B9JfVWAhVxNCf0ifqwukv+pM9Fcjoj9McGow0F9Nx+lP+11TCP1VI1vRer8XQn/IXKoFpL/vGeivlmX66yuQ/mpT3dYJG/3VDtBfHQv01xdIf7WBhVxHCP0hfa4rkP7qMtFfvYj+MMGpx0B/9R2nP+13fSH0V4dsRev9UQj9IXOpAZD+fmSgvwaW6W+Y2/TnH2nmXDSkum0UNvrTju8NGIN6DT2ZjRgWmUaV3V5k6DigEP5bn/ML/jwaVnZ//tCUi/S5saErnpWelpaZrsdlDY/FM4bnpWWlpQ3PzYjlxXLy0vKzM+LZBRlpGel5w/Nylc6ceEGsICcvuyDrT7tsUW5jJspNjSgXE5xUBspt4jjlar+bCKHcRmQrWm9TcGHqItQ6g+SAitm+8p53ewX8PDSr7Hb8D1M+N2OI/8/Vef2OleyIz67I4/cv1WWAAzA+cSk+1wFeN5pXdvvaq3O7OUN+t2BY11sYt9PR89DC46nz36u7va7PY1rX9wqpdWB84nsdj3Vzphz3arh9Dc9luoaXqiEjx4HxiZdyPNbNmHK8TA23a/s+pnU8UUiOA+MTT3Q8x/V78WaW7hvESnbEp1SUY+s0QbbOtGhria+THs/alOx4nd7FtCanCFmTgfGJpzge64VMsa5gKdYOvc+NI33W8Uj2/v6QRr8X2KfaEdSOpnY8teWUtKQ4JpPoQ9eyfn4htXdTO4n+bgq106idSe1saqsqaWXoLUt6h9DzJ1I7lNqTqD2Z2lOoVS/rtTb0PEh6tG79/H1k11Jq76d2GbUPULuc2jmkdwX151F/pe8v9VdRfwn1H/X1UH819VdRfw3111B/LfXXU38d9TdSfz31t1D/Gepvpf4G6m+n/kbq76L+Jurvpv5m6u+h/pb/a+9MoKq6rjCMgjhggCgBB4xUGyRCgAMIKHECBRUVBRWHBML0nMUogUSNJpqomcyEmqRtYqd0Sud5SDrPU5qmxlibWJOmNk2tMcRam9juP92voehKy2If1ttr89ba66z/+rzc757z33fOuWdgfYr1k6zPsH6K9TnWT7OOiP53epD1ANaHWMeyPsw6nvUR1omsn2M9ivVR1imsj7FOZ/0i6xzWL7GewPo46ymsX2ZdzPoV1rNZn2Bdzvok68WsT7GuYt3Gup71adarWJ9hvZ71WdbNrN9gvYX1OdbbWYfxfd7NujfrPawjWLeyjmT9EOt+rA+wHsD6UdYDWT/GOjpYzlnHBn0ZLM98fDDruGC55ePxrBOC5ZOPD2U9LFgO+Xgi6xHB8sbHR7JO4vQgHx/FejSnR/j4ZayTOT3Gx1NYX87pcT6eyjqN0xN8PJ11BqdtfNyxzuL0LB/PYT2O0zB+vuSxzuc0ko9PYF0QfE7x8YmsJ3E6iI9PYT2V00JOizidxul0Tos5LeF0BqczOR3C5y1lPZvTOZzO5bSM03mczue0nNMKThdwupDTRZxWcprCf6+KdTWnY5En7Z7PwYEAD3P5T+b/dzmng/B/Ys4fUSZdF3uELuZwlNz5DtD5Tke9fb1C55UcpeY6Hmh/f1O57ZRmbZQawJ9oB5vW7kWNdKU4WOikK8XRId4YCJpDmjvGU2MgvGvXmdnhOl2q4AvUNMmlBbrp/mV27eMEy7cTLDMuVknHg2T5u+IdzpWf11AbyMvJrsnMCdTSeXIDDdk1WeNdID+bTp+d42prGjLrc2rzcnNy8wN5md012vEKT6Md03tGO8pkTrqH0Y4ZIT7aEdwZSnqs0/hapc8bF6I/QB2vU7IsZQqOgIoT7hnEQwzXNzWs++b0pHXhfgT++1N3gcv10lpy7Nusd2gtFV7gnnVsLRWG/e/W0oXO0+2tpfZ/XOqcuInOw0PFeRhql9XunMGPdC23CzX781ocTvCBleXJoNKvXCSZsxUMU8324B3fw+4zu/Z5qwfloIeehHgFPSinPHAnhGYPynnXmSPoR8G8dgkhXm7gl2c8lJthCvzymgfu4Ur8Mk7QL4J57YYr8MshD+XmUgV+afPAPVKJX3IF/SKY126kAr8866HcjFLgl9c9cI9W4pc8Qb8I5rWTvH/o2IkNe7uHH3VQ/K7iWZEXExbm8/7mC97fEH175me6C923fA/t4vGC7eIILlcdP5L31ce9HR8T+tc4wcM1vvWR7qwaLdhZVaCgs2qsB1Mmh/jDCIWxwAP3GCWVhCsFy6VgXjvJ++f5Yf6f1/0WH+ZXSl+jj9bP8x5aAWMVtH5OeuBOVfJgmyj4YBPMa5eqoLfgqIdyk67AL6964M5Q4pdJgn4RzGuXoaci4O1HNkXBNU6WrAhozahzUaF/jVO6q/md2bVPVvub2dWn29SeviE3VUFzolBJ4cyWLJxFPYXTFSkonNOkf+KiFWaUhrrI9J6M0lEXKbZYFykRftxrLJwlCh73MyzWRWb2FE43U0HhnBXq/e7JdI7pHhadzwrxfkQstO9jcepsJf2IpYL9iIJ57bJDvNzALxM9lJtcBX7xwZ2nxC+zBf0imNcuT4FfJnkoNxMU+MUHd4ESv8wR9ItgXrsCBX7J8VBuJinwy2QP3JOV+GWuoF8E89pNVuCXcR7KTaECv0zxwF2kxC9lgn4RzGtXpMAvuR7KTbECvxR64C5R4pd5gn4RzGtXosAveR7KzSwFfpnmgbtUiV/mC/pFMK9dqQK/TPdQbuaGOHfrQD+bt5Yp8Uu5oF8E89qVKfBLsQe/lIc4915PfqlQ4pcKQb8I5rWrUOCXGR78sijEufd58kulEr8sEPSLYF67SgV+meXBL0tDnHu/J78sU+KXhYJ+EcxrtyzEy82bUX7ec1eFODcGp832wF2txC+LBP0imNeuWoFffLznrlXglzkeuOuU+KVS0C+Cee3qFPjFx/v9gAK/zPXAvVyJXxYL+kUwr91yBX7x8X5/lQK/lHngXq3EL0sE/SKY1261Ar/4eL+/ToFf5nngblTil6WCfhHMa9eowC8+3u9vUOCX+R64NyrxyzJBvwjmtduowC+tHvpVmxX4pdyDX1qU+OUqQb8I5rVrUeCXvR78skmBXyo8+GWzEr9cLegXwbx2mxX4ZZ8Hv2xV4JcFHvyyTYlfqgT9IpjXbpsCv+z34JftCvyy0INfdijxS7WgXwTz2u1Q4JdpHvyyU4FfSj34ZZcSv1wj6BfBvHa+7l9v4fIjmRc1MTqYewky1yph7i3IXKeEOVyQuV4Jc4Qgc4MS5j6CzAElzJGCzMuVMPcVZF6hhHmsIPNKJcwpgsyrDDKvNsi8xiDzWiXMiwQ38lunhLlSkLnRYNleb5D5WoPMGwwybzTI3GSQ+TqDzM0GmVsMMl9vkPkGg8ybDDJvNsi8xSDzjQaZtxpk3maQ+SaDzDcbZN5ukHmHQeZbDDLfapB5p0HmXQaZdxtkvs0g8+0Gme8wyHynQea7DDLvMch8t0Hmewwy32uQ+T6DzPcbZG41yLzXIPM+g8z7DTI/YJD5QYPMDxlkfo9B5vcaZH6fQeaHDTI/YpD5gEHm9xtk/oBB5g8aZP6QQeYPG2R+1CDzRwwyf9Qg88cMMn/cIPMnDDI/ZpD5kwaZP2WQ+dMGmT9jkPmzBpk/Z5D58waZv2CQ+YsGmb9kkPnLBpm/YpD5qwaZv2aQ+esGmb9hkPlxg8xPGGT+pkHmbxlk/rZB5u8YZP6uQebvGWT+vkHmHxhk/qFB5h8ZZP6xQeafGGT+qUHmnxlk/rlB5l8YZP6lQeYnDTL/yiDzUwaZf22Q+WmDzL8xyHzQIPMzBpkPGWR+1iDzYYPMvzXIfMQg8+8MMj9nkPl5g8xHDTL/3iDzMYPMLxhkftEg8x8MMr9kkPmPBpmPG2T+k0Hmlw0y/9kg8ysGmf9ikPmEQea/GmQ+aZD5VYPMpwwyv2aQuc0g8+sGmU8bZP6bQeYzBpn/bpD5rEHmfxhkfsMg85tKmBfHyDGfU8K8RJD5n0qYlwoyh8XqYF4myNxLCfNVgsy9lTBfLcgcroS5SpA5QglztSBzHyXMknWSSIPMfZUwXyNYtvsZzOf+BpkHGGSOMsg80CDzRQaZo5Uw9xNkjlHC3F+QOVYJ8wBB5ouVMEcJMg9SwjxQkHmwEuaLBJnjlDBHCzJfooQ5RpA5XglzrCBzghLmiwWZhyhhHiTIPFQJ82BB5mFKmOMEmYcrYb5EkDlRCXO8IPMIQeaEdsy9mDucIoKiD0UkRV8KtAvRTkK7AfVo1CtRz0K9A7/D+F3CcxrPLfgY5Rr5HM/H8cHfGkIxlGIYxXCKRIoRFJdSjKRIongXxSiK0RTvpriMIpliDMXjfK4a+qO1FHUU9RQNFAGK5RQrKFZSrKJYTbGGYi3FOopGivUU11JsoNhI0URxHUUzRQvF9RQ3UGyi2EyxheJGiq0U2yhuoriZYjvFDopbKG6l2Emxi2I3xW0Ut1PcQXEnxV0UeyjupriH4l6K+yjup2il2Euxj2I/xQMUD1JgD3vs6Y49zrHnN/bAxp7Q2CMZewZjD13sKYs9VrHnKPbgxJ6U2KMRexZiDz/saYc93rDnGfYAw55Y2CMKeyZhDyHsqYM9ZrDnCvYgwZ4c2KMCezZgDwOs6Y817rHmO9ZAx5rgWCMba0ZjDWWsKYw1drHmLNZgxZqkWKMTa1ZiDUesaYg1/rDmHdaAw5poWCMMa2ZhDSmsqYQ1hrDmDtagwZosWKMEa3ZgDQus6YA1DjDnH3PgMSccc6QxZxhzaDGnFHMsMecQc/AwJw1ztDBnCXN4MKcFczww5wFzADAmHmPEMWYaY4gxphZjTDHmEmMQMSYPY9QwZgtjmDCmB2NcMOYDYyAwJgCFHe+M8Q4V7xTxjg3vnPAOBu8k0EePPmv04aJPE3186PNCHxD6RNBHgDYz2pBoU6GNgTo36qCok6GOgt9s/IbhmY5nHDzfv51Xx3CaGPRDU1PD2vVNSU2NSTX19UktK5tWJDU2N2wIrGlswb8vCe/c91+I7Nz3N/Xt3PeTojr3/bZOfh/+6Mz3d8d27vsFcf//9/8F4L+JOu/5EwA=",
1304
- "debug_symbols": "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djsORdKOQ5G041Ak7TgUyTBJiKQdhyJpx6FI2nEoknYciqQdByI57DgUSTsORdKOQ5G041AkwyQhknYciqQdhyJpx6FI2nEoknYciORqx6FI2nEoknYciqQdhyIZJgmRtONQJO04FEk7DkXSjkORtONAJDc7DkXSjkORtONQJO04FMlQJ7mV7SC510WXpLzjvAxJecd5GZLyjvMyJOUd52VIyjvOq5Dc5R3nZUjKO87LkJR3nJchKe84L0MyTBIiacehSNpxKJJ2HIqkHYciacdhSMZix6FI2nEoknYciqQdhyIZJgmRtONQJO04FEk7DkXSjkORtONAJIsdhyJpx6FI2nEoknYcimSYJETSjkORtONQJO04FEk7DkXSjgORrHYciqQdhyJpx6FI2nEokmGSEEk7DkXSjkORtONQJO04FEk7DkSy2XEoknYciqQdhyJpx6FIhklCJO04FEk7DkXSjkORtONQJO04EMmw41Ak7TgUSTsORdKOQ5EMk4RI2nEoknYciqQdhyJpx6FI2nEgkt2OQ5G041Ak7TgUSTsORTJMEiJpx6FI2nEoknYciqQdhyJpx4FIDjsORdKOQ5G041Ak7TgUyTBJiKQdhyJpx6FI2nEoknYciqQdByK52nEoknYciqQdhyJpx6FIhklCJO04FEk7DkXSjkORtONQJO04EMnNjkORtONQJO04FEk7DkUyTBIiacehSNpxKJJ2HIqkHYciaceBSO52HIqkHYciacehSNpxKJJhkhBJOw5F0o5DkbTjUCTtOBRJOw5Dsi92HIqkHYciacehSNpxKJJhkhBJOw5F0o5DkbTjUCTtOBRJOw5EsthxKJJ2HIqkHYciacehSIZJQiTtOBRJOw5F0o5DkbTjUCTtOBDJasehSNpxKJJ2HIqkHYciGSYJkbTjUCTtOBRJOw5F0o5DkbTjQCSbHYciacehSNpxKJJ2HIpkmCRE0o5DkbTjUCTtOBRJOw5F0o4DkQw7DkXSjkORtONQJO04FMkwSYikHYciacehSNpxKJJ2HIqkHQci2e04FEk7DkXSjkORtONQJMMkIZJ2HIqkHYciacehSNpxKJJ2HIjkkHecvcflyT9efn0WydpavyBpvTwgKe84L0NS3nFehqS847wMyTBJiKS847wMSXnHeRmS8o7zMiTlHedlSMo7zquQXO04FEk7DkXS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JXtuley5VbLnVsmeWyVlWZLHleRxNXlcSx4XyeN68riRPG5NHrclj0uul5JcLyW5XkpyvZTkeinJ9VKS66Uk10tJrpeSXC8luV5qcr3U5HqpyfVSk+ulJtdLTa6XmlwvNbleanK9JHdmS3JrtiT3Zktyc7Ykd2dLcnu2JPdnS3KDtiR3aEtyi7Yk92hLcpO2JHdpS3KbtiT3aUtyo7Ykd2pLcqu2JPdqS3KztiR3a0tyu7Yk92tLcsO2JHdsS3LLtiT3bEty07Ykd21Lctu2JPdtS3LjtiR3bkty67Yk925LcvO2JHdvS3L7tiT3b0tyA7ckd3BLcgu3JPdwS3ITtyR3cUtyG7ck93FLciO3JHdyS3IrtyT3cktyM7ckd3NLcju3JPdzS3JDtyR3dEtyS7ck93RLclO3JHd1S3JbtyT3dUtyY7ckd3ZLcmu3JPd2S3JztyR3d0tye7ck93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/t+7ZSdbkKGtyf7cl93fb39nfXR8dF8njevK4+XrZx+1x93PLY1wGqMd6vTlK3Y6XWL/+Jbavf4n9y1/i7+xFP/ob/p296IfH1eRxybVdkmu7JNf239mLfnjcmjxuSx63546ryfVSk+ulJtdLTa6XmlwvNbleanK91OR6qcn1UpPrpSXXS/xsjbgctyaP25LH7bnj/sYe2uPjSvK4mjyuJY+L5HE9eVxyvfTkeunJ9dKT62Uk18tIrpeRXC8juV7+4kI5H3sz34/72OW+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"
2162
+ "bytecode": "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",
2163
+ "debug_symbols": "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uYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYcruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYdruYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYcbuYe7cg935R7uyj3clXu4K/dwV+7hrtzDXbmHu3IPd+Ue7so93JV7uCv3cFfu4a7cw125h7tyD3flHu7KPdyVe7gr93BX7uGu3MNduYe7cg935R7uyj3clXu4K/dwV+7hrtzDXbmHu3IPd+Ue7so93JV7uCv3cFfu4a7cw125h7tyD3flHu7KPdyVe7gr93BX7uGu3MNduYe7cg935R7uyj3clXu4K/dwV+7hrtzDXbmHu3IPd+Ue7so93JV7uCv3cFfu4a7cw125h7tyD3flHu7KPdyVe7gr93BX7uGu3MNduYe7cg935R7uyj3clXu4K/dwV+7hrtzDXbmHu3IPd+Ue7so93JV7uCv3cFfu4a7cw125h7tyD3flHu7KPdyVe7gr93BX7uGu3MNduYe7cg935R7uyj3clXu49ZKLuOeRpT8S+iNbf+Toj6T+SOmPtP7I6I/o21/69pe+/aVvf+nbX/r2l779pW9/6dtf+vaXvv3Qtx/69kPffujbD337oW8/9O2Hvv3Qtx/69re+/a1vf+vb3/r2t779rW9/69vf+va3vv2tb//o2z/69o++/aNv/+jbP/r2j779o2//6Ns/+vZT337q2099+6lvP/Xtp7791Lef+vZT337q2y99+6Vvv/Ttl7790rdf+vZL337p2y99+6Vvv/Xtt7791rff+vZb337r2299+61vv/Xtt7790bc/+vZH3/7o2x99+6Nvf/Ttj7790bc/+vavvv2rb//q27/69q++/atv/+rbv/r2r759vetbete39K5v6V3f0ru+50+9+iOpP1L6I60/Mvoj+vb1rm/pXd/Su76ld31L7/qW3vUtvetbete39K5v6V3f0ru+pXd9S+/6lt71Lb3rW3rXt/Sub+ld39K7vqV3fUvv+pbe9S2961t617f0rm/pXd/Su76ld31L7/qW3vUtvetbete39K5v6V3f0ru+pXd9S+/6lt71Lb3rW3rXt/Sub+ld39K7vqV3fUvv+pbe9S2961t617f0rm/pXd/Su76ld31L7/qW3vUtvetbete39K5v6V3f0ru+pXd9S+/6lt71Lb3rW3rXt/Sub+ld39K7vqV3fUvv+pbe9S2961t617f0rm/pXd/Su76ld31L7/qW3vUtvetbete39K5v6V3f0ru+pXd9S+/6lt71Lb3rW3rXt/Sub+ldX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hdX+hd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"
1305
2164
  },
1306
2165
  {
1307
- "name": "is_valid_public",
1308
- "function_type": "Open",
2166
+ "name": "is_valid",
2167
+ "function_type": "Secret",
1309
2168
  "is_internal": false,
1310
2169
  "abi": {
1311
2170
  "parameters": [
@@ -1313,7 +2172,7 @@
1313
2172
  "name": "inputs",
1314
2173
  "type": {
1315
2174
  "kind": "struct",
1316
- "path": "authwit::aztec::abi::PublicContextInputs",
2175
+ "path": "authwit::aztec::abi::PrivateContextInputs",
1317
2176
  "fields": [
1318
2177
  {
1319
2178
  "name": "call_context",
@@ -1366,31 +2225,169 @@
1366
2225
  }
1367
2226
  },
1368
2227
  {
1369
- "name": "block_header",
2228
+ "name": "historical_header",
1370
2229
  "type": {
1371
2230
  "kind": "struct",
1372
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
2231
+ "path": "authwit::aztec::protocol_types::header::Header",
1373
2232
  "fields": [
1374
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1375
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1376
- { "name": "contract_tree_root", "type": { "kind": "field" } },
1377
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1378
- { "name": "archive_root", "type": { "kind": "field" } },
1379
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
1380
- { "name": "global_variables_hash", "type": { "kind": "field" } }
2233
+ {
2234
+ "name": "last_archive",
2235
+ "type": {
2236
+ "kind": "struct",
2237
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2238
+ "fields": [
2239
+ { "name": "root", "type": { "kind": "field" } },
2240
+ {
2241
+ "name": "next_available_leaf_index",
2242
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2243
+ }
2244
+ ]
2245
+ }
2246
+ },
2247
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2248
+ {
2249
+ "name": "state",
2250
+ "type": {
2251
+ "kind": "struct",
2252
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
2253
+ "fields": [
2254
+ {
2255
+ "name": "l1_to_l2_message_tree",
2256
+ "type": {
2257
+ "kind": "struct",
2258
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2259
+ "fields": [
2260
+ { "name": "root", "type": { "kind": "field" } },
2261
+ {
2262
+ "name": "next_available_leaf_index",
2263
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2264
+ }
2265
+ ]
2266
+ }
2267
+ },
2268
+ {
2269
+ "name": "partial",
2270
+ "type": {
2271
+ "kind": "struct",
2272
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
2273
+ "fields": [
2274
+ {
2275
+ "name": "note_hash_tree",
2276
+ "type": {
2277
+ "kind": "struct",
2278
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2279
+ "fields": [
2280
+ { "name": "root", "type": { "kind": "field" } },
2281
+ {
2282
+ "name": "next_available_leaf_index",
2283
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2284
+ }
2285
+ ]
2286
+ }
2287
+ },
2288
+ {
2289
+ "name": "nullifier_tree",
2290
+ "type": {
2291
+ "kind": "struct",
2292
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2293
+ "fields": [
2294
+ { "name": "root", "type": { "kind": "field" } },
2295
+ {
2296
+ "name": "next_available_leaf_index",
2297
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2298
+ }
2299
+ ]
2300
+ }
2301
+ },
2302
+ {
2303
+ "name": "contract_tree",
2304
+ "type": {
2305
+ "kind": "struct",
2306
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2307
+ "fields": [
2308
+ { "name": "root", "type": { "kind": "field" } },
2309
+ {
2310
+ "name": "next_available_leaf_index",
2311
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2312
+ }
2313
+ ]
2314
+ }
2315
+ },
2316
+ {
2317
+ "name": "public_data_tree",
2318
+ "type": {
2319
+ "kind": "struct",
2320
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2321
+ "fields": [
2322
+ { "name": "root", "type": { "kind": "field" } },
2323
+ {
2324
+ "name": "next_available_leaf_index",
2325
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2326
+ }
2327
+ ]
2328
+ }
2329
+ }
2330
+ ]
2331
+ }
2332
+ }
2333
+ ]
2334
+ }
2335
+ },
2336
+ {
2337
+ "name": "global_variables",
2338
+ "type": {
2339
+ "kind": "struct",
2340
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
2341
+ "fields": [
2342
+ { "name": "chain_id", "type": { "kind": "field" } },
2343
+ { "name": "version", "type": { "kind": "field" } },
2344
+ { "name": "block_number", "type": { "kind": "field" } },
2345
+ { "name": "timestamp", "type": { "kind": "field" } }
2346
+ ]
2347
+ }
2348
+ }
1381
2349
  ]
1382
2350
  }
1383
2351
  },
1384
2352
  {
1385
- "name": "public_global_variables",
2353
+ "name": "contract_deployment_data",
1386
2354
  "type": {
1387
2355
  "kind": "struct",
1388
- "path": "authwit::aztec::abi::PublicGlobalVariables",
2356
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
2357
+ "fields": [
2358
+ {
2359
+ "name": "deployer_public_key",
2360
+ "type": {
2361
+ "kind": "struct",
2362
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2363
+ "fields": [
2364
+ { "name": "x", "type": { "kind": "field" } },
2365
+ { "name": "y", "type": { "kind": "field" } }
2366
+ ]
2367
+ }
2368
+ },
2369
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
2370
+ { "name": "function_tree_root", "type": { "kind": "field" } },
2371
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
2372
+ {
2373
+ "name": "portal_contract_address",
2374
+ "type": {
2375
+ "kind": "struct",
2376
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
2377
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2378
+ }
2379
+ }
2380
+ ]
2381
+ }
2382
+ },
2383
+ {
2384
+ "name": "private_global_variables",
2385
+ "type": {
2386
+ "kind": "struct",
2387
+ "path": "authwit::aztec::abi::PrivateGlobalVariables",
1389
2388
  "fields": [
1390
2389
  { "name": "chain_id", "type": { "kind": "field" } },
1391
- { "name": "version", "type": { "kind": "field" } },
1392
- { "name": "block_number", "type": { "kind": "field" } },
1393
- { "name": "timestamp", "type": { "kind": "field" } }
2390
+ { "name": "version", "type": { "kind": "field" } }
1394
2391
  ]
1395
2392
  }
1396
2393
  }
@@ -1400,11 +2397,11 @@
1400
2397
  },
1401
2398
  { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
1402
2399
  ],
1403
- "param_witnesses": { "inputs": [{ "start": 0, "end": 19 }], "message_hash": [{ "start": 19, "end": 20 }] },
2400
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 34 }], "message_hash": [{ "start": 34, "end": 35 }] },
1404
2401
  "return_type": {
1405
2402
  "abi_type": {
1406
2403
  "kind": "struct",
1407
- "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
2404
+ "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
1408
2405
  "fields": [
1409
2406
  {
1410
2407
  "name": "call_context",
@@ -1457,40 +2454,55 @@
1457
2454
  { "name": "args_hash", "type": { "kind": "field" } },
1458
2455
  { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
1459
2456
  {
1460
- "name": "contract_storage_update_requests",
2457
+ "name": "read_requests",
1461
2458
  "type": {
1462
2459
  "kind": "array",
1463
- "length": 16,
2460
+ "length": 32,
1464
2461
  "type": {
1465
2462
  "kind": "struct",
1466
- "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
2463
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
1467
2464
  "fields": [
1468
- { "name": "storage_slot", "type": { "kind": "field" } },
1469
- { "name": "old_value", "type": { "kind": "field" } },
1470
- { "name": "new_value", "type": { "kind": "field" } }
2465
+ { "name": "value", "type": { "kind": "field" } },
2466
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1471
2467
  ]
1472
2468
  }
1473
2469
  }
1474
2470
  },
1475
2471
  {
1476
- "name": "contract_storage_reads",
2472
+ "name": "nullifier_key_validation_requests",
1477
2473
  "type": {
1478
2474
  "kind": "array",
1479
- "length": 16,
2475
+ "length": 1,
1480
2476
  "type": {
1481
2477
  "kind": "struct",
1482
- "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
2478
+ "path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
1483
2479
  "fields": [
1484
- { "name": "storage_slot", "type": { "kind": "field" } },
1485
- { "name": "current_value", "type": { "kind": "field" } }
2480
+ {
2481
+ "name": "public_key",
2482
+ "type": {
2483
+ "kind": "struct",
2484
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2485
+ "fields": [
2486
+ { "name": "x", "type": { "kind": "field" } },
2487
+ { "name": "y", "type": { "kind": "field" } }
2488
+ ]
2489
+ }
2490
+ },
2491
+ {
2492
+ "name": "secret_key",
2493
+ "type": {
2494
+ "kind": "struct",
2495
+ "path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
2496
+ "fields": [
2497
+ { "name": "high", "type": { "kind": "field" } },
2498
+ { "name": "low", "type": { "kind": "field" } }
2499
+ ]
2500
+ }
2501
+ }
1486
2502
  ]
1487
2503
  }
1488
2504
  }
1489
2505
  },
1490
- {
1491
- "name": "public_call_stack_hashes",
1492
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1493
- },
1494
2506
  {
1495
2507
  "name": "new_commitments",
1496
2508
  "type": {
@@ -1522,219 +2534,414 @@
1522
2534
  }
1523
2535
  }
1524
2536
  },
2537
+ {
2538
+ "name": "private_call_stack_hashes",
2539
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
2540
+ },
2541
+ {
2542
+ "name": "public_call_stack_hashes",
2543
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
2544
+ },
1525
2545
  { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2546
+ { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
2547
+ { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1526
2548
  {
1527
2549
  "name": "unencrypted_logs_hash",
1528
2550
  "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1529
2551
  },
2552
+ { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
1530
2553
  { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1531
2554
  {
1532
- "name": "block_header",
2555
+ "name": "historical_header",
1533
2556
  "type": {
1534
2557
  "kind": "struct",
1535
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
2558
+ "path": "authwit::aztec::protocol_types::header::Header",
1536
2559
  "fields": [
1537
- { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1538
- { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1539
- { "name": "contract_tree_root", "type": { "kind": "field" } },
1540
- { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1541
- { "name": "archive_root", "type": { "kind": "field" } },
1542
- { "name": "public_data_tree_root", "type": { "kind": "field" } },
1543
- { "name": "global_variables_hash", "type": { "kind": "field" } }
2560
+ {
2561
+ "name": "last_archive",
2562
+ "type": {
2563
+ "kind": "struct",
2564
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2565
+ "fields": [
2566
+ { "name": "root", "type": { "kind": "field" } },
2567
+ {
2568
+ "name": "next_available_leaf_index",
2569
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2570
+ }
2571
+ ]
2572
+ }
2573
+ },
2574
+ { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2575
+ {
2576
+ "name": "state",
2577
+ "type": {
2578
+ "kind": "struct",
2579
+ "path": "authwit::aztec::protocol_types::state_reference::StateReference",
2580
+ "fields": [
2581
+ {
2582
+ "name": "l1_to_l2_message_tree",
2583
+ "type": {
2584
+ "kind": "struct",
2585
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2586
+ "fields": [
2587
+ { "name": "root", "type": { "kind": "field" } },
2588
+ {
2589
+ "name": "next_available_leaf_index",
2590
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2591
+ }
2592
+ ]
2593
+ }
2594
+ },
2595
+ {
2596
+ "name": "partial",
2597
+ "type": {
2598
+ "kind": "struct",
2599
+ "path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
2600
+ "fields": [
2601
+ {
2602
+ "name": "note_hash_tree",
2603
+ "type": {
2604
+ "kind": "struct",
2605
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2606
+ "fields": [
2607
+ { "name": "root", "type": { "kind": "field" } },
2608
+ {
2609
+ "name": "next_available_leaf_index",
2610
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2611
+ }
2612
+ ]
2613
+ }
2614
+ },
2615
+ {
2616
+ "name": "nullifier_tree",
2617
+ "type": {
2618
+ "kind": "struct",
2619
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2620
+ "fields": [
2621
+ { "name": "root", "type": { "kind": "field" } },
2622
+ {
2623
+ "name": "next_available_leaf_index",
2624
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2625
+ }
2626
+ ]
2627
+ }
2628
+ },
2629
+ {
2630
+ "name": "contract_tree",
2631
+ "type": {
2632
+ "kind": "struct",
2633
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2634
+ "fields": [
2635
+ { "name": "root", "type": { "kind": "field" } },
2636
+ {
2637
+ "name": "next_available_leaf_index",
2638
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2639
+ }
2640
+ ]
2641
+ }
2642
+ },
2643
+ {
2644
+ "name": "public_data_tree",
2645
+ "type": {
2646
+ "kind": "struct",
2647
+ "path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2648
+ "fields": [
2649
+ { "name": "root", "type": { "kind": "field" } },
2650
+ {
2651
+ "name": "next_available_leaf_index",
2652
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2653
+ }
2654
+ ]
2655
+ }
2656
+ }
2657
+ ]
2658
+ }
2659
+ }
2660
+ ]
2661
+ }
2662
+ },
2663
+ {
2664
+ "name": "global_variables",
2665
+ "type": {
2666
+ "kind": "struct",
2667
+ "path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
2668
+ "fields": [
2669
+ { "name": "chain_id", "type": { "kind": "field" } },
2670
+ { "name": "version", "type": { "kind": "field" } },
2671
+ { "name": "block_number", "type": { "kind": "field" } },
2672
+ { "name": "timestamp", "type": { "kind": "field" } }
2673
+ ]
2674
+ }
2675
+ }
1544
2676
  ]
1545
2677
  }
1546
2678
  },
1547
2679
  {
1548
- "name": "prover_address",
2680
+ "name": "contract_deployment_data",
1549
2681
  "type": {
1550
2682
  "kind": "struct",
1551
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
1552
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2683
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
2684
+ "fields": [
2685
+ {
2686
+ "name": "deployer_public_key",
2687
+ "type": {
2688
+ "kind": "struct",
2689
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2690
+ "fields": [
2691
+ { "name": "x", "type": { "kind": "field" } },
2692
+ { "name": "y", "type": { "kind": "field" } }
2693
+ ]
2694
+ }
2695
+ },
2696
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
2697
+ { "name": "function_tree_root", "type": { "kind": "field" } },
2698
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
2699
+ {
2700
+ "name": "portal_contract_address",
2701
+ "type": {
2702
+ "kind": "struct",
2703
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
2704
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2705
+ }
2706
+ }
2707
+ ]
1553
2708
  }
1554
- }
2709
+ },
2710
+ { "name": "chain_id", "type": { "kind": "field" } },
2711
+ { "name": "version", "type": { "kind": "field" } }
1555
2712
  ]
1556
2713
  },
1557
2714
  "visibility": "public"
1558
2715
  },
1559
2716
  "return_witnesses": [
1560
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1561
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1562
- 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
1563
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
1564
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
1565
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
1566
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1567
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209
2717
+ 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065,
2718
+ 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
2719
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
2720
+ 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
2721
+ 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137,
2722
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155,
2723
+ 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
2724
+ 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191,
2725
+ 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
2726
+ 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227,
2727
+ 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
2728
+ 1246, 1247, 1248, 1249, 1250, 1251
1568
2729
  ]
1569
2730
  },
1570
- "bytecode": "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",
1571
- "debug_symbols": "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nLhkcuKKyYkrJieumJy4YnLi6kE0gYvJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGZy4prJiWsmJ66ZnLh+EE3gZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJidumJy4YXLihsmJGyYnbh5EE3iYnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy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"
2731
+ "bytecode": "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",
2732
+ "debug_symbols": "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"
2733
+ },
2734
+ {
2735
+ "name": "compute_note_hash_and_nullifier",
2736
+ "function_type": "Unconstrained",
2737
+ "is_internal": false,
2738
+ "abi": {
2739
+ "parameters": [
2740
+ {
2741
+ "name": "contract_address",
2742
+ "type": {
2743
+ "kind": "struct",
2744
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
2745
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2746
+ },
2747
+ "visibility": "private"
2748
+ },
2749
+ { "name": "nonce", "type": { "kind": "field" }, "visibility": "private" },
2750
+ { "name": "storage_slot", "type": { "kind": "field" }, "visibility": "private" },
2751
+ {
2752
+ "name": "serialized_note",
2753
+ "type": { "kind": "array", "length": 3, "type": { "kind": "field" } },
2754
+ "visibility": "private"
2755
+ }
2756
+ ],
2757
+ "param_witnesses": {
2758
+ "contract_address": [{ "start": 0, "end": 1 }],
2759
+ "nonce": [{ "start": 1, "end": 2 }],
2760
+ "serialized_note": [{ "start": 3, "end": 6 }],
2761
+ "storage_slot": [{ "start": 2, "end": 3 }]
2762
+ },
2763
+ "return_type": {
2764
+ "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } },
2765
+ "visibility": "public"
2766
+ },
2767
+ "return_witnesses": [6, 7, 8, 9]
2768
+ },
2769
+ "bytecode": "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",
2770
+ "debug_symbols": "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tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQF5tQl5tQl5tQl5tQl5tXlzcndCXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1CXm1BXm1BXm1BXm1BXm3dnNxdkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFdbkFfbkFfbkFfbkFfbkFfbNyd3N+TVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVNuTVCvJqBXm1grxaQV6tbk7uFuTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXazcIrB3FOMl7FONE71GMk71HMU74HsU46XsU48TvUYyTv0cxTgAfxUgJDNG1oxgpgSG8dhQjJTDE145ipASGANtRjJTAEGE7ipESGEJsRzFSAkOM7ShGSmAIsh3FSAkMUbajGCmBIcx2FCMlMMTZjmKkBIZA21GMlMAQaTuKkRIYQm1HMVICQ6ztKEZKYAi2HcVICQzRtqMYKYEh3HYUIyUwxNuOYqQEhoDbUYyUwBBxO4qREhhCbkcxUgJDzO0oRkpgCLodxUgJDFG3oxgpgSHsdhQjJTDE3Y5ipASGwNtRjJTAEHk7ipESGEJvRzFSAkPs7ShGSmAIvh3FSAkM0bejGCmB/1H8tqJ/KybnP1jMkorZUjEFFfOPArj7FtOkYrpUTEjFpFTMkIqREnhLCbylBN5SApeUwCUlcEkJXFICl5TAJSVwSQlcUgKXlMAFJXC7QQncblACtxuUwO0GJfDxu2SpGCiB2w1K4HaDErjdoARuNymBm5TATUrgJiVwkxK4SQncpARuUgI3KYGblMBNSuAuJXCXErhLCdylBO5SAncpgbuUwF1K4C4lcJcSOKQEDimBQ0rgkBI4pAQOKYFDSuCQEjikBA4pgVNK4JQSOKUETimBU0rglBI4pQROKYFTSuCUEnhICTykBB5SAg8pgYeUwENK4CEl8JASeEgJPKQEnlICTymBp5TAU0rgKSXwlBJ4Sgk8pQSeUgJPKYGXlMBLSuAlJfCSEnhJCbykBJZMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJNMXJdMXJdMXJdMXJdMXL9BCdwlE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clE9clExeSiQvJxIVk4kIycXGDEjgkExeSiQvJxIVk4kIycSGZuJBMXEgmLiQTF5KJC8nEhWTiQjJxIZm4kExcSCYuJBMXkokLycSFZOJCMnEhmbiQTFxIJi4kExeSiQvJxIVk4kIycSGZuJBMXEgmLiQTF5KJC8nEhWTiQjJxIZm4kExcSCYuJBMXkokLycSFZOJCMnEhmbiQTFxIJi4kExeSiQvJxIVk4kIycSGZuJBMXEgmLiQTF5KJC8nEhWTiQjJxIZm4kExcSCYuJBMXkokLycSFZOJCMnEhmbiQTFxIJi4kExeSiQvJxIVk4kIycSGZuJBMXEgmLiQTF5KJC8nEhWTiQjJxIZm4kExcSCYuJBMXkokLycSFZOJCMnEhmbiQTFxKJi4lE5eSiUvJxOUNSuCUTFxKJi4lE5eSiUvJxKVk4lIycSmZuJRMXEomLiUTl5KJS8nEpWTiUjJxKZm4lExcSiYuJROXkolLycSlZOJSMnEpmbiUTFxKJi4lE5eSiUvJxKVk4lIycSmZuJRMXEomLiUTl5KJS8nEpWTiUjJxKZm4lExcSiYuJROXkolLycSlZOJSMnEpmbiUTFxKJi4lE5eSiUvJxKVk4lIycSmZuJRMXEomLiUTl5KJS8nEpWTiUjJxKZm4lExc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"
1572
2771
  }
1573
2772
  ],
1574
2773
  "events": [],
1575
2774
  "file_map": {
1576
- "16": {
2775
+ "18": {
1577
2776
  "source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n \n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(_self: Self, _bit_size: u32) -> [u1] {}\n \n #[builtin(to_be_bits)]\n fn __to_be_bits(_self: Self, _bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(_self: Self, _bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n \n #[builtin(to_be_radix)]\n fn __to_be_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> Field {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n",
1578
2777
  "path": "std/field.nr"
1579
2778
  },
1580
- "28": {
2779
+ "30": {
1581
2780
  "source": "struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some {\n self._value\n } else {\n default\n }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some {\n self\n } else {\n other\n }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some {\n self\n } else {\n default()\n }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some {\n Option::none()\n } else {\n self\n }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n",
1582
2781
  "path": "std/option.nr"
1583
2782
  },
1584
- "40": {
2783
+ "42": {
1585
2784
  "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log);\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n",
1586
2785
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/log.nr"
1587
2786
  },
1588
- "41": {
1589
- "source": "use dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::hash_args,\n};\n\n// docs:start:private-global-variables\nstruct PrivateGlobalVariables {\n chain_id: Field,\n version: Field,\n}\n// docs:end:private-global-variables\n\nimpl PrivateGlobalVariables {\n fn serialize(self) -> [Field; 2] {\n [self.chain_id, self.version]\n }\n}\n\n// docs:start:public-global-variables\nstruct PublicGlobalVariables {\n chain_id: Field,\n version: Field,\n block_number: Field,\n timestamp: Field,\n}\n// docs:end:public-global-variables\n\nimpl PublicGlobalVariables {\n fn serialize(self) -> [Field; 4] {\n [self.chain_id, self.version, self.block_number, self.timestamp]\n }\n}\n\n// PrivateContextInputs are expected to be provided to each private function\n// docs:start:private-context-inputs\nstruct PrivateContextInputs {\n call_context : CallContext,\n block_header: BlockHeader,\n contract_deployment_data: ContractDeploymentData,\n private_global_variables: PrivateGlobalVariables,\n}\n// docs:end:private-context-inputs\n\n// PublicContextInputs are expected to be provided to each public function\n// docs:start:public-context-inputs\nstruct PublicContextInputs {\n call_context: CallContext,\n block_header: BlockHeader,\n\n public_global_variables: PublicGlobalVariables,\n}\n// docs:end:public-context-inputs\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hasher {\n pub fn new()-> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n\n pub fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n",
2787
+ "43": {
2788
+ "source": "use dep::protocol_types::{\n abis::{\n call_context::CallContext,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::hash_args,\n header::Header,\n};\n\n// docs:start:private-global-variables\nstruct PrivateGlobalVariables {\n chain_id: Field,\n version: Field,\n}\n// docs:end:private-global-variables\n\nimpl PrivateGlobalVariables {\n fn serialize(self) -> [Field; 2] {\n [self.chain_id, self.version]\n }\n}\n\n// docs:start:public-global-variables\nstruct PublicGlobalVariables {\n chain_id: Field,\n version: Field,\n block_number: Field,\n timestamp: Field,\n}\n// docs:end:public-global-variables\n\nimpl PublicGlobalVariables {\n fn serialize(self) -> [Field; 4] {\n [self.chain_id, self.version, self.block_number, self.timestamp]\n }\n}\n\n// PrivateContextInputs are expected to be provided to each private function\n// docs:start:private-context-inputs\nstruct PrivateContextInputs {\n call_context : CallContext,\n historical_header: Header,\n contract_deployment_data: ContractDeploymentData,\n private_global_variables: PrivateGlobalVariables,\n}\n// docs:end:private-context-inputs\n\n// PublicContextInputs are expected to be provided to each public function\n// docs:start:public-context-inputs\nstruct PublicContextInputs {\n call_context: CallContext,\n historical_header: Header,\n\n public_global_variables: PublicGlobalVariables,\n}\n// docs:end:public-context-inputs\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hasher {\n pub fn new()-> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n\n pub fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n",
1590
2789
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
1591
2790
  },
1592
- "42": {
1593
- "source": "use dep::std::option::Option;\nuse dep::protocol_types::{\n address::AztecAddress,\n};\n\nuse crate::context::{PrivateContext, Context};\nuse crate::note::{\n lifecycle::create_note,\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::singleton::compute_singleton_initialization_nullifier;\n\n// docs:start:struct\nstruct ImmutableSingleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>, Option<&mut PrivateContext>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> ImmutableSingleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n ImmutableSingleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, Option::none());\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note, \n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, self.context);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(\n context,\n self.storage_slot,\n note,\n self.note_interface,\n broadcast,\n );\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note(self) -> Note {\n let context = self.context.unwrap();\n let storage_slot = self.storage_slot;\n get_note(context, storage_slot, self.note_interface)\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
2791
+ "44": {
2792
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n },\n hash::pedersen_hash,\n};\n\nuse crate::context::{PrivateContext, Context};\nuse crate::note::{\n lifecycle::create_note,\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\n\n// docs:start:struct\nstruct ImmutableSingleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n}\n// docs:end:struct\n\nimpl<Note, N> ImmutableSingleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self {\n context: context.private,\n storage_slot,\n note_interface,\n }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, ImmutableSingleton>` type (for example), because the storage slot often also identifies an actor. \n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n pedersen_hash([self.storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER)\n }\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note, \n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n context.push_new_nullifier(nullifier, 0);\n\n create_note(\n context,\n self.storage_slot,\n note,\n self.note_interface,\n broadcast,\n );\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note(self) -> Note {\n let context = self.context.unwrap();\n let storage_slot = self.storage_slot;\n get_note(context, storage_slot, self.note_interface)\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
1594
2793
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr"
1595
2794
  },
1596
- "43": {
2795
+ "45": {
1597
2796
  "source": "use crate::context::{Context};\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse crate::types::type_serialization::TypeSerializationInterface;\nuse dep::std::option::Option;\n\n// docs:start:public_state_struct\nstruct PublicState<T, T_SERIALIZED_LEN> {\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n}\n// docs:end:public_state_struct\n\nimpl<T, T_SERIALIZED_LEN> PublicState<T, T_SERIALIZED_LEN> {\n // docs:start:public_state_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicState {\n context,\n storage_slot,\n serialization_methods,\n }\n }\n // docs:end:public_state_struct_new\n\n // docs:start:public_state_struct_read\n pub fn read(self) -> T {\n assert(self.context.private.is_none(), \"Public state reads only supported in public functions\");\n storage_read(self.storage_slot, self.serialization_methods.deserialize)\n }\n // docs:end:public_state_struct_read\n\n // docs:start:public_state_struct_write\n pub fn write(self, value: T) {\n assert(self.context.private.is_none(), \"Public state writes only supported in public functions\");\n let serialize = self.serialization_methods.serialize;\n let fields = serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_state_struct_write\n}\n",
1598
2797
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr"
1599
2798
  },
1600
- "44": {
2799
+ "46": {
1601
2800
  "source": "use crate::context::{PrivateContext, PublicContext, Context};\nuse dep::std::option::Option;\nuse dep::protocol_types::{\n hash::pedersen_hash,\n traits::{ToField}\n};\n\n// docs:start:map\nstruct Map<K, V> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, V> Map<K, V> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map {\n context,\n storage_slot,\n state_var_constructor,\n }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = pedersen_hash([self.storage_slot, key.to_field()],0);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n",
1602
2801
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/map.nr"
1603
2802
  },
1604
- "45": {
1605
- "source": "use dep::std::option::Option;\n\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n },\n hash::pedersen_hash,\n};\n\nuse crate::context::{PrivateContext, PublicContext, Context};\nuse crate::note::{\n lifecycle::{create_note, destroy_note},\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::{\n nullifier_key::get_nullifier_secret_key,\n notes::check_nullifier_exists,\n};\n\npub fn compute_singleton_initialization_nullifier(\n storage_slot: Field,\n owner: Option<AztecAddress>,\n context: Option<&mut PrivateContext>\n) -> Field {\n if owner.is_some() {\n let secret = if context.is_some() {\n context.unwrap_unchecked().request_nullifier_secret_key(owner.unwrap_unchecked())\n } else {\n get_nullifier_secret_key(owner.unwrap_unchecked())\n };\n pedersen_hash(\n [storage_slot, secret.low, secret.high],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n } else {\n pedersen_hash([storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER)\n }\n}\n\n// docs:start:struct\nstruct Singleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>, Option<&mut PrivateContext>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> Singleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Singleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, Option::none());\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note,\n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, self.context);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(context, self.storage_slot, note, self.note_interface, broadcast);\n }\n // docs:end:initialize\n\n // docs:start:replace\n pub fn replace(\n self,\n new_note: &mut Note,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n let prev_note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify previous note.\n destroy_note(context, prev_note, self.note_interface);\n\n // Add replacement note.\n create_note(context, self.storage_slot, new_note, self.note_interface, broadcast);\n }\n // docs:end:replace\n\n // docs:start:get_note\n pub fn get_note(self, broadcast: bool) -> Note {\n let context = self.context.unwrap();\n let mut note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify current note to make sure it's reading the latest note.\n destroy_note(context, note, self.note_interface);\n\n // Add the same note again.\n // Because a nonce is added to every note in the kernel, its nullifier will be different.\n create_note(context, self.storage_slot, &mut note, self.note_interface, broadcast);\n\n note\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
1606
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr"
1607
- },
1608
- "51": {
2803
+ "53": {
1609
2804
  "source": "use crate::types::type_serialization::TypeSerializationInterface;\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\n\nfn deserializeBool(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n}\n\nfn serializeBool(value: bool) -> [Field; BOOL_SERIALIZED_LEN] {\n [value as Field]\n}\n\nglobal BoolSerializationMethods = TypeSerializationInterface {\n deserialize: deserializeBool,\n serialize: serializeBool,\n};\n",
1610
2805
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr"
1611
2806
  },
1612
- "53": {
2807
+ "55": {
1613
2808
  "source": "struct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: Field,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new(initial_value: T) -> Self {\n BoundedVec { storage: [initial_value; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: Field) -> T {\n assert(index as u64 < self.len as u64);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: Field) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len as u64 < MaxLen as u64);\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn push_array<Len>(&mut self, array: [T; Len]) {\n let newLen = self.len + array.len();\n assert(newLen as u64 <= MaxLen as u64);\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = newLen;\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len as u64 > 0);\n\n let elem = self.storage[self.len - 1];\n self.len -= 1;\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if (!exceeded_len) {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n\n#[test]\nfn test_vec_push_pop() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n assert(vec.len == 0);\n vec.push(2);\n assert(vec.len == 1);\n vec.push(4);\n assert(vec.len == 2);\n vec.push(6);\n assert(vec.len == 3);\n let x = vec.pop();\n assert(x == 6);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test]\nfn test_vec_push_array() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test(should_fail)]\nfn test_vec_get_out_of_bound() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n let _x = vec.get(2);\n}\n\n#[test(should_fail)]\nfn test_vec_get_not_declared() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2]);\n let _x = vec.get(1);\n}\n\n#[test(should_fail)]\nfn test_vec_get_uninitialized() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n let _x = vec.get(0);\n}\n\n#[test(should_fail)]\nfn test_vec_push_overflow() {\n let mut vec: BoundedVec<Field, 1> = BoundedVec::new(0);\n vec.push(1);\n vec.push(2);\n}\n\n#[test]\nfn test_vec_any() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4, 6]);\n assert(vec.any(|v| v == 2) == true);\n assert(vec.any(|v| v == 4) == true);\n assert(vec.any(|v| v == 6) == true);\n assert(vec.any(|v| v == 3) == false);\n}\n\n#[test]\nfn test_vec_any_not_default() {\n let default_value = 1;\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(default_value);\n vec.push_array([2, 4]);\n assert(vec.any(|v| v == default_value) == false);\n}\n",
1614
2809
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/vec.nr"
1615
2810
  },
1616
- "66": {
2811
+ "68": {
1617
2812
  "source": "pub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: Field) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n\n// TODO(#3470): Copied over from https://github.com/AztecProtocol/aztec-packages/blob/a07c4bd47313be6aa604a63f37857eb0136b41ba/yarn-project/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr#L599\n// move to a shared place?\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\nstruct Reader<N> {\n data: [Field; N],\n offset: Field,\n}\n\nimpl<N> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_array<K>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, K>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, K, C>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n } \n}\n",
1618
2813
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/utils.nr"
1619
2814
  },
1620
- "68": {
1621
- "source": "use crate::{\n abi::{\n PrivateContextInputs,\n PublicContextInputs,\n },\n key::nullifier_key::validate_nullifier_key_against_address,\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n public_call::call_public_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal,\n context::get_portal_address,\n get_block_header::get_block_header,\n nullifier_key::get_nullifier_key_pair,\n },\n types::vec::BoundedVec,\n utils::Reader,\n};\nuse dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_stack_item::PrivateCallStackItem,\n call_stack_item::PublicCallStackItem,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::{\n AztecAddress,\n EthAddress,\n },\n constants::{\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_READ_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n },\n contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n hash::hash_args,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::{\n grumpkin_scalar::GrumpkinScalar,\n option::Option,\n};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n read_requests: BoundedVec<SideEffect, MAX_READ_REQUESTS_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n block_header: BlockHeader,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n read_requests: BoundedVec::new(SideEffect::empty()),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n block_header: inputs.block_header,\n\n private_call_stack_hashes: BoundedVec::new(0),\n public_call_stack_hashes: BoundedVec::new(0),\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_block_header(self, block_number: u32) -> BlockHeader {\n get_block_header(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n read_requests: self.read_requests.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash: encrypted_logs_hash,\n unencrypted_logs_hash: unencrypted_logs_hash,\n encrypted_log_preimages_length: encrypted_log_preimages_length,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n block_header: self.block_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version,\n };\n priv_circuit_pub_inputs\n }\n\n pub fn push_read_request(&mut self, read_request: Field) {\n let side_effect = SideEffect {\n value: read_request,\n counter: self.side_effect_counter,\n };\n self.read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter,\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: nullified_commitment,\n counter: self.side_effect_counter,\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_nullifier_secret_key(&mut self, account: AztecAddress) -> GrumpkinScalar {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key, key_pair.secret_key);\n // TODO: Add request to context.\n // self.context.push_nullifier_key_validation_request(public_key, secret_key);\n key_pair.secret_key\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, content: Field) \n // docs:end:context_message_portal\n {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n msg_key: Field,\n content: Field,\n secret: Field\n ) \n // docs:end:context_consume_l1_to_l2_message\n {\n let nullifier = process_l1_to_l2_message(self.block_header.l1_to_l2_message_tree_root, self.this_address(), self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let fields = call_private_function_internal(\n contract_address,\n function_selector, \n args_hash,\n self.side_effect_counter,\n );\n let mut reader = Reader::new(fields);\n\n let item = PrivateCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PrivateCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]), // +1\n read_requests: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_READ_REQUESTS_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialise, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n block_header: BlockHeader{\n // Must match order in `private_circuit_public_inputs.hpp`\n note_hash_tree_root : reader.read(),\n nullifier_tree_root : reader.read(),\n contract_tree_root : reader.read(),\n l1_to_l2_message_tree_root : reader.read(),\n archive_root : reader.read(),\n public_data_tree_root: reader.read(),\n global_variables_hash: reader.read(),\n },\n contract_deployment_data: ContractDeploymentData {\n deployer_public_key: GrumpkinPoint {\n x: reader.read(), \n y: reader.read()\n },\n constructor_vk_hash : reader.read(),\n function_tree_root : reader.read(),\n contract_address_salt : reader.read(),\n portal_contract_address : EthAddress::from_field(reader.read()),\n },\n chain_id: reader.read(),\n version: reader.read(),\n },\n is_execution_request: reader.read() as bool,\n };\n\n reader.finish();\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1;\n \n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n assert(item.is_execution_request == false);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) {\n let fields = enqueue_public_function_call_internal(\n contract_address, \n function_selector, \n args_hash,\n self.side_effect_counter\n );\n\n let mut reader = Reader::new(fields);\n\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PublicCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs:[0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash:[0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n block_header: BlockHeader::empty(),\n prover_address: AztecAddress::zero(),\n },\n is_execution_request: true,\n };\n reader.finish();\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n self.side_effect_counter = self.side_effect_counter + 1;\n \n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n block_header: BlockHeader,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n contract_storage_update_requests: BoundedVec::new(empty_storage_update),\n contract_storage_reads: BoundedVec::new(empty_storage_read),\n public_call_stack_hashes: BoundedVec::new(0),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n \n unencrypted_logs_hash: BoundedVec::new(0),\n unencrypted_logs_preimages_length: 0,\n\n block_header: inputs.block_header,\n prover_address: AztecAddress::zero(),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.public_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n unencrypted_logs_hash: unencrypted_logs_hash,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n block_header: self.inputs.block_header,\n prover_address: self.prover_address,\n };\n pub_circuit_pub_inputs\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.side_effect_counter\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn message_portal(&mut self, content: Field) {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n pub fn consume_l1_to_l2_message(&mut self, msg_key: Field, content: Field, secret: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(self.block_header.l1_to_l2_message_tree_root, this, self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(\n contract_address, \n function_selector, \n args_hash,\n )\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(\n contract_address, \n function_selector, \n 0,\n )\n }\n\n}\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context {\n private: Option::some(context),\n public: Option::none()\n }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context {\n public: Option::some(context),\n private: Option::none()\n }\n }\n\n pub fn none() -> Context {\n Context {\n public: Option::none(),\n private: Option::none()\n }\n }\n}\n",
2815
+ "70": {
2816
+ "source": "use crate::{\n abi::{\n PrivateContextInputs,\n PublicContextInputs,\n },\n key::nullifier_key::validate_nullifier_key_against_address,\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n public_call::call_public_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal,\n context::get_portal_address,\n header::get_header_at,\n nullifier_key::{get_nullifier_key_pair, NullifierKeyPair},\n },\n types::vec::BoundedVec,\n utils::Reader,\n};\nuse dep::protocol_types::{\n abis::{\n append_only_tree_snapshot::AppendOnlyTreeSnapshot,\n call_context::CallContext,\n global_variables::GlobalVariables,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_stack_item::PrivateCallStackItem,\n call_stack_item::PublicCallStackItem,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::{\n AztecAddress,\n EthAddress,\n },\n constants::{\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n },\n contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n grumpkin_point::GrumpkinPoint,\n grumpkin_private_key::GrumpkinPrivateKey,\n hash::hash_args,\n header::Header,\n state_reference::StateReference,\n};\nuse dep::std::{\n option::Option,\n};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n read_requests: BoundedVec<SideEffect, MAX_READ_REQUESTS_PER_CALL>,\n nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n historical_header: Header,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n\n nullifier_key: Option<NullifierKeyPair>,\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n read_requests: BoundedVec::new(SideEffect::empty()),\n nullifier_key_validation_requests: BoundedVec::new(NullifierKeyValidationRequest::empty()),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n historical_header: inputs.historical_header,\n\n private_call_stack_hashes: BoundedVec::new(0),\n public_call_stack_hashes: BoundedVec::new(0),\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n\n nullifier_key: Option::none(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n // Returns the header of a block whose state is used during private execution\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n read_requests: self.read_requests.storage,\n nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash: encrypted_logs_hash,\n unencrypted_logs_hash: unencrypted_logs_hash,\n encrypted_log_preimages_length: encrypted_log_preimages_length,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n historical_header: self.historical_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version,\n };\n priv_circuit_pub_inputs\n }\n\n pub fn push_read_request(&mut self, read_request: Field) {\n let side_effect = SideEffect {\n value: read_request,\n counter: self.side_effect_counter,\n };\n self.read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter,\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: nullified_commitment,\n counter: self.side_effect_counter,\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_nullifier_secret_key(&mut self, account: AztecAddress) -> GrumpkinPrivateKey {\n let key_pair = if self.nullifier_key.is_none() {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key);\n let request = NullifierKeyValidationRequest { public_key: key_pair.public_key, secret_key: key_pair.secret_key };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(key_pair);\n key_pair\n } else {\n let key_pair = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(key_pair.account == account, \"Cannot query nullifier key for more than one account per call\");\n key_pair\n };\n key_pair.secret_key\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, content: Field) \n // docs:end:context_message_portal\n {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n msg_key: Field,\n content: Field,\n secret: Field\n ) \n // docs:end:context_consume_l1_to_l2_message\n {\n let nullifier = process_l1_to_l2_message(self.historical_header.state.l1_to_l2_message_tree.root, self.this_address(), self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let fields = call_private_function_internal(\n contract_address,\n function_selector, \n args_hash,\n self.side_effect_counter,\n );\n let mut reader = Reader::new(fields);\n\n let item = PrivateCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PrivateCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]), // +1\n read_requests: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_READ_REQUESTS_PER_CALL]),\n nullifier_key_validation_requests: reader.read_struct_array(NullifierKeyValidationRequest::deserialise, [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialise, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n contract_deployment_data: ContractDeploymentData {\n deployer_public_key: GrumpkinPoint {\n x: reader.read(), \n y: reader.read()\n },\n constructor_vk_hash : reader.read(),\n function_tree_root : reader.read(),\n contract_address_salt : reader.read(),\n portal_contract_address : EthAddress::from_field(reader.read()),\n },\n chain_id: reader.read(),\n version: reader.read(),\n },\n is_execution_request: reader.read() as bool,\n };\n\n reader.finish();\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1;\n \n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n assert(item.is_execution_request == false);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) {\n let fields = enqueue_public_function_call_internal(\n contract_address, \n function_selector, \n args_hash,\n self.side_effect_counter\n );\n\n let mut reader = Reader::new(fields);\n\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PublicCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs:[0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash:[0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero(),\n },\n is_execution_request: true,\n };\n reader.finish();\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n self.side_effect_counter = self.side_effect_counter + 1;\n \n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n historical_header: Header,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n contract_storage_update_requests: BoundedVec::new(empty_storage_update),\n contract_storage_reads: BoundedVec::new(empty_storage_read),\n public_call_stack_hashes: BoundedVec::new(0),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n \n unencrypted_logs_hash: BoundedVec::new(0),\n unencrypted_logs_preimages_length: 0,\n\n historical_header: inputs.historical_header,\n prover_address: AztecAddress::zero(),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.public_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n unencrypted_logs_hash: unencrypted_logs_hash,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n historical_header: self.inputs.historical_header,\n prover_address: self.prover_address,\n };\n pub_circuit_pub_inputs\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.side_effect_counter\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn message_portal(&mut self, content: Field) {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n pub fn consume_l1_to_l2_message(&mut self, msg_key: Field, content: Field, secret: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(self.historical_header.state.l1_to_l2_message_tree.root, this, self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(\n contract_address, \n function_selector, \n args_hash,\n )\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(\n contract_address, \n function_selector, \n 0,\n )\n }\n\n}\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context {\n private: Option::some(context),\n public: Option::none()\n }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context {\n public: Option::some(context),\n private: Option::none()\n }\n }\n\n pub fn none() -> Context {\n Context {\n public: Option::none(),\n private: Option::none()\n }\n }\n}\n",
1622
2817
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/context.nr"
1623
2818
  },
1624
- "73": {
1625
- "source": "use crate::abi::PublicContextInputs;\nuse crate::context::{\n PrivateContext,\n PublicContext,\n};\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_inner_note_hash,\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>,\n broadcast: bool\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n let serialize = note_interface.serialize;\n let serialized_note = serialize(*note);\n assert(notify_created_note(storage_slot, serialized_note, inner_note_hash) == 0);\n\n context.push_new_note_hash(inner_note_hash);\n\n if broadcast {\n let broadcast = note_interface.broadcast;\n broadcast(context, storage_slot, *note);\n }\n}\n\npub fn create_note_hash_from_public<Note, N>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n context.push_new_note_hash(inner_note_hash);\n}\n\npub fn destroy_note<Note, N>(\n context: &mut PrivateContext,\n note: Note,\n note_interface: NoteInterface<Note, N>\n) {\n let mut nullifier = 0;\n let mut nullified_commitment: Field = 0;\n let compute_nullifier = note_interface.compute_nullifier;\n nullifier = compute_nullifier(note, context);\n\n // We also need the note commitment corresponding to the \"nullifier\"\n let get_header = note_interface.get_header;\n let header = get_header(note);\n // `nullified_commitment` is used to inform the kernel which pending commitment\n // the nullifier corresponds to so they can be matched and both squashed/deleted.\n // nonzero nonce implies \"persistable\" nullifier (nullifies a persistent/in-tree\n // commitment) in which case `nullified_commitment` is not used since the kernel\n // just siloes and forwards the nullifier to its output.\n if (header.is_transient) {\n // TODO(1718): Can we reuse the note commitment computed in `compute_nullifier`?\n nullified_commitment = compute_inner_note_hash(note_interface, note);\n }\n assert(notify_nullified_note(nullifier, nullified_commitment) == 0);\n\n context.push_new_nullifier(nullifier, nullified_commitment)\n}\n",
2819
+ "75": {
2820
+ "source": "use crate::abi::PublicContextInputs;\nuse crate::context::{\n PrivateContext,\n PublicContext,\n};\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>,\n broadcast: bool\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n // As `is_transient` is true, this will compute the inner note hsah\n let inner_note_hash = compute_note_hash_for_read_or_nullify(note_interface, *note);\n\n let serialize = note_interface.serialize;\n let serialized_note = serialize(*note);\n assert(notify_created_note(storage_slot, serialized_note, inner_note_hash) == 0);\n\n context.push_new_note_hash(inner_note_hash);\n\n if broadcast {\n let broadcast = note_interface.broadcast;\n broadcast(context, storage_slot, *note);\n }\n}\n\npub fn create_note_hash_from_public<Note, N>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_note_hash_for_read_or_nullify(note_interface, *note);\n\n context.push_new_note_hash(inner_note_hash);\n}\n\npub fn destroy_note<Note, N>(\n context: &mut PrivateContext,\n note: Note,\n note_interface: NoteInterface<Note, N>\n) {\n let mut nullifier = 0;\n let mut nullified_commitment: Field = 0;\n let compute_nullifier = note_interface.compute_nullifier;\n nullifier = compute_nullifier(note, context);\n\n // We also need the note commitment corresponding to the \"nullifier\"\n let get_header = note_interface.get_header;\n let header = get_header(note);\n // `nullified_commitment` is used to inform the kernel which pending commitment\n // the nullifier corresponds to so they can be matched and both squashed/deleted.\n // nonzero nonce implies \"persistable\" nullifier (nullifies a persistent/in-tree\n // commitment) in which case `nullified_commitment` is not used since the kernel\n // just siloes and forwards the nullifier to its output.\n if (header.is_transient) {\n // TODO(1718): Can we reuse the note commitment computed in `compute_nullifier`?\n nullified_commitment = compute_note_hash_for_read_or_nullify(note_interface, note);\n }\n assert(notify_nullified_note(nullifier, nullified_commitment) == 0);\n\n context.push_new_nullifier(nullifier, nullified_commitment)\n}\n",
1626
2821
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr"
1627
2822
  },
1628
- "74": {
1629
- "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__OUTER_NULLIFIER,\n hash::pedersen_hash,\n};\nuse crate::{\n context::PrivateContext,\n note::{\n note_hash::{compute_inner_hash, compute_siloed_hash, compute_unique_hash},\n note_header::NoteHeader,\n note_interface::NoteInterface,\n },\n utils::arr_copy_slice,\n};\n\npub fn compute_inner_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n\n compute_inner_hash(header.storage_slot, note_hash)\n}\n\npub fn compute_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let inner_note_hash = compute_inner_note_hash(note_interface, note_with_header);\n\n compute_siloed_hash(header.contract_address, inner_note_hash)\n}\n\npub fn compute_unique_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let siloed_note_hash = compute_siloed_note_hash(note_interface, note_with_header);\n\n compute_unique_hash(header.nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier<Note, N>(\n note_interface: NoteInterface<Note, N>,\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note_with_header, context);\n\n let input = [header.contract_address.to_field(), inner_nullifier];\n pedersen_hash(input, GENERATOR_INDEX__OUTER_NULLIFIER)\n}\n\npub fn compute_note_hash_for_read_or_nullify<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386)\n if (header.is_transient) {\n // If a note is transient, we just read the inner_note_hash (kernel will silo by contract address).\n compute_inner_note_hash(note_interface, note_with_header)\n } else if (header.nonce == 0) {\n // If not transient and nonce is zero, that means we are reading a public note.\n compute_siloed_note_hash(note_interface, note_with_header)\n } else {\n // When nonce is nonzero, that means we are reading a settled note (from tree) created in a\n // previous TX. So we need the unique_siloed_note_hash which has already been hashed with\n // contract address and then nonce. This hash will match the existing leaf in the private\n // data tree, so the kernel can just perform a membership check directly on this hash/leaf.\n compute_unique_siloed_note_hash(note_interface, note_with_header)\n }\n}\n\npub fn compute_note_hash_and_nullifier<Note, N, S>(\n note_interface: NoteInterface<Note, N>,\n note_header: NoteHeader,\n serialized_note: [Field; S]\n) -> [Field; 4] {\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0));\n set_header(&mut note, note_header);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n let inner_note_hash = compute_inner_hash(note_header.storage_slot, note_hash);\n\n let siloed_note_hash = compute_siloed_hash(note_header.contract_address, inner_note_hash);\n\n let unique_siloed_note_hash = compute_unique_hash(note_header.nonce, siloed_note_hash);\n\n let compute_nullifier_without_context = note_interface.compute_nullifier_without_context;\n let inner_nullifier = compute_nullifier_without_context(note);\n\n [inner_note_hash, siloed_note_hash, unique_siloed_note_hash, inner_nullifier]\n}\n",
1630
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/utils.nr"
1631
- },
1632
2823
  "76": {
1633
- "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n },\n hash::pedersen_hash,\n};\n\npub fn compute_inner_hash(storage_slot: Field, note_hash: Field) -> Field {\n // TODO(#1205) Do we need a generator index here?\n pedersen_hash([storage_slot, note_hash], 0)\n}\n\npub fn compute_siloed_hash(contract_address: AztecAddress, inner_note_hash: Field) -> Field {\n let inputs = [contract_address.to_field(), inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__SILOED_COMMITMENT)\n}\n\npub fn compute_unique_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_COMMITMENT)\n}\n",
1634
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_hash.nr"
2824
+ "source": "use crate::{\n context::PrivateContext,\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n },\n utils::arr_copy_slice,\n};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n },\n hash::pedersen_hash,\n};\n\nfn compute_inner_hash(storage_slot: Field, note_hash: Field) -> Field {\n // TODO(#1205) Do we need a generator index here?\n pedersen_hash([storage_slot, note_hash], 0)\n}\n\nfn compute_siloed_hash(contract_address: AztecAddress, inner_note_hash: Field) -> Field {\n let inputs = [contract_address.to_field(), inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__SILOED_COMMITMENT)\n}\n\nfn compute_unique_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_COMMITMENT)\n}\n\nfn compute_inner_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n\n compute_inner_hash(header.storage_slot, note_hash)\n}\n\nfn compute_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let inner_note_hash = compute_inner_note_hash(note_interface, note_with_header);\n\n compute_siloed_hash(header.contract_address, inner_note_hash)\n}\n\nfn compute_unique_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let siloed_note_hash = compute_siloed_note_hash(note_interface, note_with_header);\n\n compute_unique_hash(header.nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier<Note, N>(\n note_interface: NoteInterface<Note, N>,\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note_with_header, context);\n\n let input = [header.contract_address.to_field(), inner_nullifier];\n pedersen_hash(input, GENERATOR_INDEX__OUTER_NULLIFIER)\n}\n\npub fn compute_note_hash_for_read_or_nullify<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386)\n if (header.is_transient) {\n // If a note is transient, we just read the inner_note_hash (kernel will silo by contract address).\n compute_inner_note_hash(note_interface, note_with_header)\n } else if (header.nonce == 0) {\n // If not transient and nonce is zero, that means we are reading a public note.\n compute_siloed_note_hash(note_interface, note_with_header)\n } else {\n // When nonce is nonzero, that means we are reading a settled note (from tree) created in a\n // previous TX. So we need the unique_siloed_note_hash which has already been hashed with\n // contract address and then nonce. This hash will match the existing leaf in the private\n // data tree, so the kernel can just perform a membership check directly on this hash/leaf.\n compute_unique_siloed_note_hash(note_interface, note_with_header)\n }\n}\n\npub fn compute_note_hash_and_nullifier<Note, N, S>(\n note_interface: NoteInterface<Note, N>,\n note_header: NoteHeader,\n serialized_note: [Field; S]\n) -> [Field; 4] {\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0));\n set_header(&mut note, note_header);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n let inner_note_hash = compute_inner_hash(note_header.storage_slot, note_hash);\n\n let siloed_note_hash = compute_siloed_hash(note_header.contract_address, inner_note_hash);\n\n let unique_siloed_note_hash = compute_unique_hash(note_header.nonce, siloed_note_hash);\n\n let compute_nullifier_without_context = note_interface.compute_nullifier_without_context;\n let inner_nullifier = compute_nullifier_without_context(note);\n\n [inner_note_hash, siloed_note_hash, unique_siloed_note_hash, inner_nullifier]\n}\n",
2825
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/utils.nr"
1635
2826
  },
1636
- "79": {
1637
- "source": "use dep::std::option::Option;\nuse dep::protocol_types::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n GET_NOTE_ORACLE_RETURN_LENGTH,\n GET_NOTES_ORACLE_RETURN_LENGTH,\n MAX_NOTES_PER_PAGE,\n VIEW_NOTE_ORACLE_RETURN_LENGTH,\n};\nuse crate::context::PrivateContext;\nuse crate::note::{\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle;\nuse crate::types::vec::BoundedVec;\n\nfn check_note_header<Note, N>(\n context: PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n note: Note\n) {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address));\n assert(header.storage_slot == storage_slot);\n}\n\nfn check_note_fields<N>(fields: [Field; N], selects: BoundedVec<Option<Select>, N>) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n assert(fields[select.field_index] == select.value, \"Mismatch return note field.\");\n }\n}\n\nfn check_notes_order<N>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let eq = fields_0[sort.field_index] == fields_1[sort.field_index];\n let lt = fields_0[sort.field_index] as u120 < fields_1[sort.field_index] as u120;\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>\n) -> Note {\n let note = get_note_internal(storage_slot, note_interface);\n\n check_note_header(*context, storage_slot, note_interface, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n\n context.push_read_request(note_hash_for_read_request);\n note\n}\n\npub fn get_notes<Note, N, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let opt_notes = get_notes_internal(storage_slot, note_interface, options);\n let mut num_notes = 0;\n let mut prev_fields = [0; N];\n for i in 0..opt_notes.len() {\n let opt_note = opt_notes[i];\n if opt_note.is_some() {\n let note = opt_note.unwrap_unchecked();\n let serialize = note_interface.serialize;\n let fields = serialize(note);\n check_note_header(*context, storage_slot, note_interface, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_read_request(note_hash_for_read_request);\n\n num_notes += 1;\n };\n }\n if options.limit != 0 {\n assert(num_notes <= options.limit, \"Invalid number of return notes.\");\n }\n opt_notes\n}\n\nunconstrained fn get_note_internal<Note, N>(storage_slot: Field, note_interface: NoteInterface<Note, N>) -> Note {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n 0,\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n placeholder_note,\n placeholder_fields\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, N, FILTER_ARGS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n );\n\n let filter = options.filter;\n let filter_args = options.filter_args;\n filter(opt_notes, filter_args)\n}\n\nunconstrained pub fn view_notes<Note, N>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteViewerOptions<Note, N>\n) -> [Option<Note>; MAX_NOTES_PER_PAGE] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n )\n}\n\nunconstrained fn flatten_options<Note, N>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) {\n let mut num_selects = 0;\n let mut select_by = [0; N];\n let mut select_values = [0; N];\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by[num_selects] = select.unwrap_unchecked().field_index;\n select_values[num_selects] = select.unwrap_unchecked().value;\n num_selects += 1;\n };\n }\n\n let mut sort_by = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by[i] = sort.unwrap_unchecked().field_index;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (num_selects, select_by, select_values, sort_by, sort_order)\n}\n",
2827
+ "80": {
2828
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n GET_NOTE_ORACLE_RETURN_LENGTH,\n GET_NOTES_ORACLE_RETURN_LENGTH,\n MAX_NOTES_PER_PAGE,\n VIEW_NOTE_ORACLE_RETURN_LENGTH,\n};\nuse crate::context::PrivateContext;\nuse crate::note::{\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, Comparator},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle;\nuse crate::types::vec::BoundedVec;\n\nfn check_note_header<Note, N>(\n context: PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n note: Note\n) {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address));\n assert(header.storage_slot == storage_slot);\n}\n\nfn check_note_fields<N>(fields: [Field; N], selects: BoundedVec<Option<Select>, N>) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n\n // Values are computed ahead of time because circuits evaluate all branches\n let isEqual = fields[select.field_index] == select.value;\n let isLt = fields[select.field_index].lt(select.value);\n\n if (select.comparator == Comparator.EQ) {\n assert(isEqual, \"Mismatch return note field.\");\n } else if (select.comparator == Comparator.NEQ) {\n assert(!isEqual, \"Mismatch return note field.\");\n } else if (select.comparator == Comparator.LT) {\n assert(isLt, \"Mismatch return note field.\");\n } else if (select.comparator == Comparator.LTE) {\n assert(isLt | isEqual, \"Mismatch return note field.\");\n } else if (select.comparator == Comparator.GT) {\n assert(!isLt & !isEqual, \"Mismatch return note field.\");\n } else if (select.comparator == Comparator.GTE) {\n assert(!isLt, \"Mismatch return note field.\");\n }\n }\n}\n\nfn check_notes_order<N>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let eq = fields_0[sort.field_index] == fields_1[sort.field_index];\n let lt = fields_0[sort.field_index] as u120 < fields_1[sort.field_index] as u120;\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>\n) -> Note {\n let note = get_note_internal(storage_slot, note_interface);\n\n check_note_header(*context, storage_slot, note_interface, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n\n context.push_read_request(note_hash_for_read_request);\n note\n}\n\npub fn get_notes<Note, N, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let opt_notes = get_notes_internal(storage_slot, note_interface, options);\n let mut num_notes = 0;\n let mut prev_fields = [0; N];\n for i in 0..opt_notes.len() {\n let opt_note = opt_notes[i];\n if opt_note.is_some() {\n let note = opt_note.unwrap_unchecked();\n let serialize = note_interface.serialize;\n let fields = serialize(note);\n check_note_header(*context, storage_slot, note_interface, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_read_request(note_hash_for_read_request);\n\n num_notes += 1;\n };\n }\n if options.limit != 0 {\n assert(num_notes <= options.limit, \"Invalid number of return notes.\");\n }\n opt_notes\n}\n\nunconstrained fn get_note_internal<Note, N>(storage_slot: Field, note_interface: NoteInterface<Note, N>) -> Note {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n 0,\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n placeholder_note,\n placeholder_fields\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, N, FILTER_ARGS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let (num_selects, select_by, select_values, select_comparators, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n select_comparators,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n );\n\n let filter = options.filter;\n let filter_args = options.filter_args;\n filter(opt_notes, filter_args)\n}\n\nunconstrained pub fn view_notes<Note, N>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteViewerOptions<Note, N>\n) -> [Option<Note>; MAX_NOTES_PER_PAGE] {\n let (num_selects, select_by, select_values, select_comparators, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n select_comparators,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n )\n}\n\nunconstrained fn flatten_options<Note, N>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [Field; N], [u3; N], [u8; N], [u2; N]) {\n let mut num_selects = 0;\n let mut select_by = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by[num_selects] = select.unwrap_unchecked().field_index;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by[i] = sort.unwrap_unchecked().field_index;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (num_selects, select_by, select_values, select_comparators, sort_by, sort_order)\n}\n",
1638
2829
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_getter.nr"
1639
2830
  },
1640
- "82": {
1641
- "source": "use dep::std::option::Option;\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n};\nuse crate::utils::arr_copy_slice;\n\nuse dep::protocol_types::address::AztecAddress;\n\n#[oracle(notifyCreatedNote)]\nfn notify_created_note_oracle<N>(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_created_note<N>(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field {\n notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash)\n}\n\n#[oracle(notifyNullifiedNote)]\nfn notify_nullified_note_oracle<N>(_nullifier: Field, _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_nullified_note<N>(nullifier: Field, inner_note_hash: Field) -> Field {\n notify_nullified_note_oracle(nullifier, inner_note_hash)\n}\n\n#[oracle(getNotes)]\nfn get_notes_oracle<N, S>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by: [u8; N],\n _select_values: [Field; N],\n _sort_by: [u8; N],\n _sort_order: [u2; N],\n _limit: u32,\n _offset: u32,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<N, S>(\n storage_slot: Field,\n num_selects: u8,\n select_by: [u8; N],\n select_values: [Field; N],\n sort_by: [u8; N],\n sort_order: [u2; N],\n limit: u32,\n offset: u32,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, N, M, S, NS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n num_selects: u8,\n select_by: [u8; M],\n select_values: [Field; M],\n sort_by: [u8; M],\n sort_order: [u2; M],\n limit: u32,\n offset: u32,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array.\n) -> [Option<Note>; S] {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n for i in 0..placeholder_opt_notes.len() {\n if i as u32 < num_notes {\n // lengths named as per typescript.\n let return_header_length: Field = 2; // num_notes & contract_address.\n let extra_preimage_length: Field = 2; // nonce & is_transient.\n let read_offset: Field = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let is_transient = fields[read_offset + 1] as bool;\n let header = NoteHeader { contract_address, nonce, storage_slot, is_transient };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = deserialize(serialized_note);\n set_header(&mut note, header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n#[oracle(checkNullifierExists)]\nfn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n",
2831
+ "83": {
2832
+ "source": "use dep::std::option::Option;\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n};\nuse crate::utils::arr_copy_slice;\n\nuse dep::protocol_types::address::AztecAddress;\n\n#[oracle(notifyCreatedNote)]\nfn notify_created_note_oracle<N>(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_created_note<N>(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field {\n notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash)\n}\n\n#[oracle(notifyNullifiedNote)]\nfn notify_nullified_note_oracle<N>(_nullifier: Field, _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_nullified_note<N>(nullifier: Field, inner_note_hash: Field) -> Field {\n notify_nullified_note_oracle(nullifier, inner_note_hash)\n}\n\n#[oracle(getNotes)]\nfn get_notes_oracle<N, S>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u3; N],\n _sort_by: [u8; N],\n _sort_order: [u2; N],\n _limit: u32,\n _offset: u32,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<N, S>(\n storage_slot: Field,\n num_selects: u8,\n select_by: [u8; N],\n select_values: [Field; N],\n select_comparators: [u3; N],\n sort_by: [u8; N],\n sort_order: [u2; N],\n limit: u32,\n offset: u32,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n select_comparators,\n sort_by,\n sort_order,\n limit,\n offset,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, N, M, S, NS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n num_selects: u8,\n select_by: [u8; M],\n select_values: [Field; M],\n select_comparators: [u3; M],\n sort_by: [u8; M],\n sort_order: [u2; M],\n limit: u32,\n offset: u32,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array.\n) -> [Option<Note>; S] {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n select_comparators,\n sort_by,\n sort_order,\n limit,\n offset,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n for i in 0..placeholder_opt_notes.len() {\n if i as u32 < num_notes {\n // lengths named as per typescript.\n let return_header_length: Field = 2; // num_notes & contract_address.\n let extra_preimage_length: Field = 2; // nonce & is_transient.\n let read_offset: Field = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let is_transient = fields[read_offset + 1] as bool;\n let header = NoteHeader { contract_address, nonce, storage_slot, is_transient };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = deserialize(serialized_note);\n set_header(&mut note, header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n#[oracle(checkNullifierExists)]\nfn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n",
1642
2833
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/notes.nr"
1643
2834
  },
1644
- "83": {
2835
+ "84": {
1645
2836
  "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n};\n\n// contract_address + \n// args_hash +\n// crate::abi::FUNCTION_DATA_SIZE +\n// crate::abi::CALL_CONTEXT_SIZE\n// = 2 + 4 + 8\nglobal ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: Field = 14;\n\n#[oracle(enqueuePublicFunctionCall)]\nfn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter\n )\n}\n",
1646
2837
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr"
1647
2838
  },
1648
- "87": {
1649
- "source": "use dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::grumpkin_scalar::GrumpkinScalar;\n\nstruct KeyPair {\n public_key: GrumpkinPoint,\n secret_key: GrumpkinScalar,\n}\n\n#[oracle(getNullifierKeyPair)]\nfn get_nullifier_key_pair_oracle(_account: AztecAddress) -> [Field; 4] {}\n\nunconstrained fn get_nullifier_key_pair_internal(account: AztecAddress) -> KeyPair {\n let result = get_nullifier_key_pair_oracle(account);\n KeyPair {\n public_key: GrumpkinPoint { x: result[0], y: result[1] },\n secret_key: GrumpkinScalar { high: result[2], low: result[3] }\n }\n}\n\npub fn get_nullifier_key_pair(account: AztecAddress) -> KeyPair {\n get_nullifier_key_pair_internal(account)\n}\n\npub fn get_nullifier_secret_key(account: AztecAddress) -> GrumpkinScalar {\n get_nullifier_key_pair_internal(account).secret_key\n}\n",
2839
+ "89": {
2840
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n grumpkin_private_key::GrumpkinPrivateKey,\n};\n\nstruct NullifierKeyPair {\n account: AztecAddress,\n public_key: GrumpkinPoint,\n secret_key: GrumpkinPrivateKey,\n}\n\n#[oracle(getNullifierKeyPair)]\nfn get_nullifier_key_pair_oracle(_account: AztecAddress) -> [Field; 4] {}\n\nunconstrained fn get_nullifier_key_pair_internal(account: AztecAddress) -> NullifierKeyPair {\n let result = get_nullifier_key_pair_oracle(account);\n NullifierKeyPair {\n account,\n public_key: GrumpkinPoint { x: result[0], y: result[1] },\n secret_key: GrumpkinPrivateKey { high: result[2], low: result[3] }\n }\n}\n\npub fn get_nullifier_key_pair(account: AztecAddress) -> NullifierKeyPair {\n get_nullifier_key_pair_internal(account)\n}\n\npub fn get_nullifier_secret_key(account: AztecAddress) -> GrumpkinPrivateKey {\n get_nullifier_key_pair_internal(account).secret_key\n}\n",
1650
2841
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/nullifier_key.nr"
1651
2842
  },
1652
- "89": {
2843
+ "91": {
1653
2844
  "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::CALL_PRIVATE_FUNCTION_RETURN_SIZE,\n};\n\n#[oracle(callPrivateFunction)]\nfn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {\n call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter\n )\n}\n",
1654
2845
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr"
1655
2846
  },
1656
- "96": {
2847
+ "97": {
1657
2848
  "source": "#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<T, N>(storage_slot: Field, deserialize: fn([Field; N]) -> T) -> T {\n let fields = storage_read_oracle_wrapper(storage_slot);\n deserialize(fields)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\n// TODO: Remove return value.\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n",
1658
2849
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/storage.nr"
1659
2850
  },
1660
- "98": {
2851
+ "99": {
1661
2852
  "source": "use dep::protocol_types::{\n address::{\n AztecAddress,\n PartialAddress,\n },\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getPublicKeyAndPartialAddress)]\nfn get_public_key_and_partial_address_oracle(_address: AztecAddress) -> [Field; 3] {}\n\nunconstrained fn get_public_key_and_partial_address_internal(address: AztecAddress) -> [Field; 3] {\n get_public_key_and_partial_address_oracle(address)\n}\n\npub fn get_public_key(address: AztecAddress) -> GrumpkinPoint {\n let result = get_public_key_and_partial_address_internal(address);\n let pub_key = GrumpkinPoint::new(result[0], result[1]);\n let partial_address = PartialAddress::from_field(result[2]);\n\n let calculated_address = AztecAddress::compute(pub_key, partial_address);\n assert(calculated_address.eq(address));\n\n pub_key\n}\n",
1662
2853
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr"
1663
2854
  },
1664
- "100": {
2855
+ "101": {
1665
2856
  "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::NUM_FIELDS_PER_SHA256,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(_contract_address: AztecAddress, _event_selector: Field, _message: T) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n",
1666
2857
  "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/logs.nr"
1667
2858
  },
1668
- "101": {
1669
- "source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 16;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue bellow is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field = 26;\nglobal MAX_NOTE_FIELDS_LENGTH: Field = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: Field = 23;\nglobal MAX_NOTES_PER_PAGE: Field = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: Field = 212;\nglobal CALL_CONTEXT_LENGTH: Field = 8;\nglobal BLOCK_HEADER_LENGTH: Field = 7;\nglobal FUNCTION_DATA_LENGTH: Field = 4;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we\n// should change this constant as well as the offsets in private_call_stack_item.nr\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 189;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 3;\nglobal CONTRACT_STORAGE_READ_LENGTH: Field = 2;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 190;\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674;\nglobal CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 195;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 87;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 177;\nglobal COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__COMMITMENT = 1;\nglobal GENERATOR_INDEX__COMMITMENT_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_COMMITMENT = 3;\nglobal GENERATOR_INDEX__SILOED_COMMITMENT = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\n",
2859
+ "102": {
2860
+ "source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL: Field = 1;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX: Field = 4;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 16;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue bellow is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field = 25;\nglobal MAX_NOTE_FIELDS_LENGTH: Field = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: Field = 23;\nglobal MAX_NOTES_PER_PAGE: Field = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: Field = 212;\nglobal CALL_CONTEXT_LENGTH: Field = 8;\nglobal HEADER_LENGTH: Field = 18; // 2 for last_archive, 2 for body hash, 10 for state reference, 4 for global vars \nglobal FUNCTION_DATA_LENGTH: Field = 4;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we should change this\n// constant as well CALL_PRIVATE_FUNCTION_RETURN_SIZE and PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 200;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 3;\nglobal CONTRACT_STORAGE_READ_LENGTH: Field = 2;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 190;\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674;\nglobal CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 210;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 98;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 188;\nglobal COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__COMMITMENT = 1;\nglobal GENERATOR_INDEX__COMMITMENT_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_COMMITMENT = 3;\nglobal GENERATOR_INDEX__SILOED_COMMITMENT = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\n",
1670
2861
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/constants.nr"
1671
2862
  },
2863
+ "103": {
2864
+ "source": "use crate::{\n abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot,\n traits::Empty,\n};\n\nstruct PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot,\n nullifier_tree: AppendOnlyTreeSnapshot,\n contract_tree: AppendOnlyTreeSnapshot,\n public_data_tree: AppendOnlyTreeSnapshot,\n}\n\nglobal PARTIAL_STATE_REFERENCE_LENGTH: Field = 8; // APPEND_ONLY_TREE_SNAPSHOT_LENGTH * 4;\n\nimpl PartialStateReference {\n pub fn eq(self, other: PartialStateReference) -> bool {\n self.note_hash_tree.eq(other.note_hash_tree) &\n self.nullifier_tree.eq(other.nullifier_tree) &\n self.contract_tree.eq(other.contract_tree) &\n self.public_data_tree.eq(other.public_data_tree)\n }\n\n pub fn serialize(self) -> [Field; PARTIAL_STATE_REFERENCE_LENGTH] {\n let serialized_note_hash_tree = self.note_hash_tree.serialize();\n let serialized_nullifier_tree = self.nullifier_tree.serialize();\n let serialized_contract_tree = self.contract_tree.serialize();\n let serialized_public_data_tree = self.public_data_tree.serialize();\n\n [\n serialized_note_hash_tree[0],\n serialized_note_hash_tree[1],\n serialized_nullifier_tree[0],\n serialized_nullifier_tree[1],\n serialized_contract_tree[0],\n serialized_contract_tree[1],\n serialized_public_data_tree[0],\n serialized_public_data_tree[1],\n ]\n }\n\n pub fn deserialize(serialized: [Field; PARTIAL_STATE_REFERENCE_LENGTH]) -> PartialStateReference {\n PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[0], serialized[1]]\n ),\n nullifier_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[2], serialized[3]]\n ),\n contract_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[4], serialized[5]]\n ),\n public_data_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[6], serialized[7]]\n ),\n }\n }\n}\n\nimpl Empty for PartialStateReference {\n fn empty() -> Self {\n Self {\n note_hash_tree: AppendOnlyTreeSnapshot::zero(),\n nullifier_tree: AppendOnlyTreeSnapshot::zero(),\n contract_tree: AppendOnlyTreeSnapshot::zero(),\n public_data_tree: AppendOnlyTreeSnapshot::zero(),\n }\n }\n}\n",
2865
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/partial_state_reference.nr"
2866
+ },
2867
+ "104": {
2868
+ "source": "use crate::{\n abis::append_only_tree_snapshot::{\n AppendOnlyTreeSnapshot,\n APPEND_ONLY_TREE_SNAPSHOT_LENGTH,\n },\n partial_state_reference::{\n PartialStateReference,\n PARTIAL_STATE_REFERENCE_LENGTH,\n },\n traits::Empty,\n utils::{\n arr_copy_slice,\n bounded_vec::BoundedVec,\n },\n};\n\nstruct StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot,\n partial: PartialStateReference,\n}\n\nglobal STATE_REFERENCE_LENGTH: Field = 10; // 2 for snap + 8 for partial\n\nimpl StateReference {\n fn eq(self, other: StateReference) -> bool {\n self.l1_to_l2_message_tree.eq(other.l1_to_l2_message_tree) &\n self.partial.eq(other.partial)\n }\n\n fn serialize(self) -> [Field; STATE_REFERENCE_LENGTH] {\n let mut fields: BoundedVec<Field, STATE_REFERENCE_LENGTH> = BoundedVec::new(0);\n\n fields.push_array(self.l1_to_l2_message_tree.serialize());\n fields.push_array(self.partial.serialize());\n\n fields.storage\n }\n\n fn deserialize(serialized: [Field; STATE_REFERENCE_LENGTH]) -> StateReference {\n let mut offset = 0;\n\n let l1_to_l2_message_tree_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let partial_fields = arr_copy_slice(serialized, [0; PARTIAL_STATE_REFERENCE_LENGTH], offset);\n\n StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::deserialize(l1_to_l2_message_tree_fields),\n partial: PartialStateReference::deserialize(partial_fields),\n }\n }\n}\n\nimpl Empty for StateReference {\n fn empty() -> Self {\n Self {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::zero(),\n partial: PartialStateReference::empty(),\n }\n }\n}\n",
2869
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/state_reference.nr"
2870
+ },
1672
2871
  "107": {
2872
+ "source": "use crate::{\n abis::{\n append_only_tree_snapshot::{\n AppendOnlyTreeSnapshot,\n APPEND_ONLY_TREE_SNAPSHOT_LENGTH,\n },\n global_variables::{\n GlobalVariables,\n GLOBAL_VARIABLES_LENGTH,\n },\n },\n constants::{\n GENERATOR_INDEX__BLOCK_HASH,\n HEADER_LENGTH,\n NUM_FIELDS_PER_SHA256,\n },\n hash::pedersen_hash,\n state_reference::{\n StateReference,\n STATE_REFERENCE_LENGTH,\n },\n traits::Empty,\n utils::{\n arr_copy_slice,\n bounded_vec::BoundedVec,\n },\n};\n\n// docs:start:header\nstruct Header {\n last_archive: AppendOnlyTreeSnapshot,\n body_hash: [Field; NUM_FIELDS_PER_SHA256],\n state: StateReference,\n global_variables: GlobalVariables,\n}\n// docs:end:header\n\nimpl Header {\n\n pub fn serialize(self) -> [Field; HEADER_LENGTH] {\n let mut fields: BoundedVec<Field, HEADER_LENGTH> = BoundedVec::new(0);\n\n fields.push_array(self.last_archive.serialize());\n fields.push_array(self.body_hash);\n fields.push_array(self.state.serialize());\n fields.push_array(self.global_variables.serialize());\n\n fields.storage\n }\n\n pub fn deserialize(serialized: [Field; HEADER_LENGTH]) -> Self {\n let mut offset = 0;\n\n let last_archive_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let body_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset);\n offset = offset + NUM_FIELDS_PER_SHA256;\n\n let state_fields = arr_copy_slice(serialized, [0; STATE_REFERENCE_LENGTH], offset);\n offset = offset + STATE_REFERENCE_LENGTH;\n\n let global_variables_fields = arr_copy_slice(serialized, [0; GLOBAL_VARIABLES_LENGTH], offset);\n\n Header {\n last_archive: AppendOnlyTreeSnapshot::deserialize(last_archive_fields),\n body_hash,\n state: StateReference::deserialize(state_fields),\n global_variables: GlobalVariables::deserialize(global_variables_fields),\n }\n }\n\n // TODO(#3941) Rename this as hash() and make it hash the whole header\n pub fn block_hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n pedersen_hash([\n self.global_variables.hash(),\n self.state.partial.note_hash_tree.root,\n self.state.partial.nullifier_tree.root,\n self.state.partial.contract_tree.root,\n self.state.l1_to_l2_message_tree.root,\n self.state.partial.public_data_tree.root,\n ], GENERATOR_INDEX__BLOCK_HASH)\n }\n}\n\nimpl Empty for Header {\n fn empty() -> Self {\n Self {\n last_archive: AppendOnlyTreeSnapshot::zero(),\n body_hash: [0; NUM_FIELDS_PER_SHA256],\n state: StateReference::empty(),\n global_variables: GlobalVariables::empty(),\n }\n }\n}\n",
2873
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/header.nr"
2874
+ },
2875
+ "108": {
1673
2876
  "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::FunctionLeafPreimage;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint256::U256;\nuse crate::utils::bounded_vec::BoundedVec;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT,\n ARGS_HASH_CHUNK_LENGTH,\n CONTRACT_TREE_HEIGHT, \n FUNCTION_TREE_HEIGHT, \n NOTE_HASH_TREE_HEIGHT,\n NUM_FIELDS_PER_SHA256,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK,\n GENERATOR_INDEX__CONSTRUCTOR,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__COMMITMENT_NONCE,\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__FUNCTION_ARGS,\n};\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < (args.len() as u32) {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < (args.len() as u32) {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like \n// this because it means we never even need to consider cases where \n// the index is greater than p.\npub fn root_from_sibling_path<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n function_tree_root: Field,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, function_tree_root };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn read_request_root_from_siblings(\n read_request: Field,\n leaf_index: Field,\n sibling_path: [Field; NOTE_HASH_TREE_HEIGHT]\n) -> Field {\n root_from_sibling_path(read_request, leaf_index, sibling_path)\n}\n\npub fn silo_commitment(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_COMMITMENT\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n portal_contract_address: EthAddress,\n chain_id: Field,\n content: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new(0);\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, portal_contract_address.to_field(), chain_id, content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n //\n // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_integer(previous_log_hash[0]),\n U128::from_integer(previous_log_hash[1]),\n U128::from_integer(current_log_hash[0]),\n U128::from_integer(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_commitment_nonce(first_nullifier: Field, commitment_index: Field) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index\n ],\n GENERATOR_INDEX__COMMITMENT_NONCE\n )\n}\n\npub fn compute_unique_siloed_commitment(nonce: Field, siloed_commitment: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_commitment\n ],\n GENERATOR_INDEX__UNIQUE_COMMITMENT\n )\n}\n\npub fn compute_unique_siloed_commitments<N>(\n first_nullifier: Field,\n siloed_commitments: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_commitments = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_commitment = siloed_commitments[i];\n if siloed_commitment.value != 0 {\n let nonce = compute_commitment_nonce(first_nullifier, i);\n unique_siloed_commitments[i] = SideEffect {\n value: compute_unique_siloed_commitment(nonce, siloed_commitment.value),\n counter: siloed_commitment.counter\n };\n }\n }\n unique_siloed_commitments\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n",
1674
2877
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
1675
2878
  },
1676
- "123": {
2879
+ "125": {
1677
2880
  "source": "use crate::{\n constants::{\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n },\n hash::pedersen_hash,\n utils,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, ToField};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(pub_key: GrumpkinPoint, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_key.x, pub_key.y, partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n \n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs : Self, rhs : Self) -> Self{\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self {\n inner : result\n }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl EthAddress{\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs : Self, rhs : Self) -> Self{\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self {\n inner : result\n }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(contract_address_salt : Field, function_tree_root : Field, constructor_hash : Field) -> Self {\n PartialAddress::from_field(\n pedersen_hash([\n // TODO why the zeroes?\n 0,\n 0,\n contract_address_salt,\n function_tree_root,\n constructor_hash\n ], GENERATOR_INDEX__PARTIAL_ADDRESS)\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n",
1678
2881
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/address.nr"
1679
2882
  },
1680
- "128": {
2883
+ "130": {
1681
2884
  "source": "use crate::address::EthAddress;\nuse crate::constants::{\n CONTRACT_DEPLOYMENT_DATA_LENGTH,\n GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA,\n};\nuse crate::hash::pedersen_hash;\nuse crate::grumpkin_point::GrumpkinPoint;\nuse crate::traits::Hash;\n\n// docs:start:contract-deployment-data\nstruct ContractDeploymentData {\n deployer_public_key : GrumpkinPoint,\n constructor_vk_hash : Field,\n function_tree_root : Field,\n contract_address_salt : Field,\n portal_contract_address : EthAddress,\n}\n// docs:end:contract-deployment-data\n\nimpl Hash for ContractDeploymentData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA)\n }\n}\n\nimpl ContractDeploymentData {\n fn serialize(self) -> [Field; CONTRACT_DEPLOYMENT_DATA_LENGTH] {\n [\n self.deployer_public_key.x,\n self.deployer_public_key.y,\n self.constructor_vk_hash,\n self.function_tree_root,\n self.contract_address_salt,\n self.portal_contract_address.to_field(),\n ]\n }\n\n fn assert_is_zero(self) {\n self.deployer_public_key.assert_is_zero();\n assert(self.constructor_vk_hash == 0);\n assert(self.function_tree_root == 0);\n assert(self.contract_address_salt == 0);\n self.portal_contract_address.assert_is_zero();\n }\n\n}\n",
1682
2885
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"
1683
2886
  },
1684
- "129": {
2887
+ "131": {
1685
2888
  "source": "use crate::{\n constants::{\n CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Hash, Empty};\n\nstruct StorageUpdateRequest{\n storage_slot : Field,\n old_value : Field,\n new_value : Field,\n}\n\nimpl Eq for StorageUpdateRequest {\n fn eq(self, request: Self) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n (request.storage_slot == self.storage_slot)\n & (request.old_value == self.old_value)\n & (request.new_value == self.new_value)\n }\n}\n\nimpl Empty for StorageUpdateRequest {\n fn empty() -> Self {\n StorageUpdateRequest {\n storage_slot: 0,\n old_value: 0,\n new_value: 0,\n }\n }\n}\n\nimpl Hash for StorageUpdateRequest {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST)\n }\n}\n\nimpl StorageUpdateRequest {\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH] {\n [self.storage_slot, self.old_value, self.new_value]\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
1686
2889
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr"
1687
2890
  },
1688
- "130": {
2891
+ "132": {
1689
2892
  "source": "use crate::{\n constants::{\n CONTRACT_STORAGE_READ_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_READ,\n },\n hash::pedersen_hash,\n};\nuse crate::traits::Empty;\n\nstruct StorageRead {\n storage_slot: Field,\n current_value: Field,\n}\n\nimpl Empty for StorageRead { \n fn empty() -> Self {\n Self {\n storage_slot: 0,\n current_value: 0,\n }\n }\n}\n\nimpl StorageRead {\n\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_READ_LENGTH] {\n [self.storage_slot, self.current_value]\n }\n\n pub fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
1690
2893
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr"
1691
2894
  },
1692
- "138": {
2895
+ "140": {
1693
2896
  "source": "use crate::abis::{\n function_data::FunctionData,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{\n GENERATOR_INDEX__CALL_STACK_ITEM,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCallStackItem {\n // This is the _actual_ contract address relating to where this function's code resides in the\n // contract tree. Regardless of whether this is a call or delegatecall, this\n // `contract_address` _does not change_. Amongst other things, it's used as a lookup for\n // getting the correct code from the tree. There is a separate `storage_contract_address`\n // within a CallStackItem which varies depending on whether this is a call or delegatecall.\n contract_address: AztecAddress,\n public_inputs: PrivateCircuitPublicInputs,\n function_data: FunctionData,\n // Not really needed for PrivateCallStackItem.\n is_execution_request: bool,\n}\n\nimpl Hash for PrivateCallStackItem {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.contract_address.to_field(),\n self.function_data.hash(),\n self.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs,\n };\n call_stack_item\n }\n}\n",
1694
2897
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_stack_item.nr"
1695
2898
  },
1696
- "143": {
2899
+ "144": {
1697
2900
  "source": "use crate::constants::{GENERATOR_INDEX__SIDE_EFFECT};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\nstruct SideEffect{\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffect {\n pub fn serialize(self) -> [Field; 2] {\n [self.value, self.counter as Field]\n }\n\n pub fn deserialise(values: [Field; 2]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.counter == 0)\n }\n}\n\nstruct SideEffectLinkedToNoteHash{\n value: Field,\n note_hash: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffectLinkedToNoteHash {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffectLinkedToNoteHash {\n fn eq(self, side_effect: SideEffectLinkedToNoteHash) -> bool {\n (self.value == side_effect.value)\n & (self.note_hash == side_effect.note_hash) \n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffectLinkedToNoteHash {\n fn empty() -> Self {\n SideEffectLinkedToNoteHash {\n value: 0,\n note_hash: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffectLinkedToNoteHash {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffectLinkedToNoteHash{\n pub fn serialize(self) -> [Field; 3] {\n [self.value, self.note_hash, self.counter as Field]\n }\n\n pub fn deserialise(values: [Field; 3]) -> Self {\n Self {\n value: values[0],\n note_hash: values[1],\n counter: values[2] as u32,\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.note_hash == 0)\n & (self.counter == 0)\n }\n}\n\n",
1698
2901
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"
1699
2902
  },
1700
- "146": {
1701
- "source": "use crate::constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n};\nuse crate::{\n abis::{\n call_context::CallContext,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n block_header::BlockHeader,\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n utils::bounded_vec::BoundedVec,\n};\n\nstruct PublicCircuitPublicInputs{\n call_context: CallContext,\n\n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n block_header: BlockHeader,\n\n prover_address: AztecAddress,\n}\n\nimpl PublicCircuitPublicInputs{\n fn hash(self) -> Field { \n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595) have mercy por favor \n let mut inputs: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0);\n inputs.push(self.call_context.hash());\n inputs.push(self.args_hash);\n inputs.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n inputs.push(self.contract_storage_update_requests[i].hash());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n inputs.push(self.contract_storage_reads[i].hash());\n }\n inputs.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n inputs.push(self.new_commitments[i].hash());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n inputs.push(self.new_nullifiers[i].hash());\n }\n inputs.push_array(self.new_l2_to_l1_msgs);\n inputs.push_array(self.unencrypted_logs_hash);\n inputs.push(self.unencrypted_log_preimages_length);\n inputs.push_array(self.block_header.serialize());\n inputs.push(self.prover_address.to_field());\n\n assert_eq(inputs.len(), PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PublicCircuitPublicInputs\");\n\n dep::std::hash::pedersen_hash_with_separator(inputs.storage, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n\n pub fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize()); \n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.push_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.push_array(self.contract_storage_reads[i].serialize());\n }\n fields.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
2903
+ "147": {
2904
+ "source": "use crate::constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n};\nuse crate::{\n abis::{\n call_context::CallContext,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n header::Header,\n utils::bounded_vec::BoundedVec,\n};\n\nstruct PublicCircuitPublicInputs{\n call_context: CallContext,\n\n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n historical_header: Header,\n\n prover_address: AztecAddress,\n}\n\nimpl PublicCircuitPublicInputs{\n fn hash(self) -> Field { \n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595) have mercy por favor \n let mut inputs: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0);\n inputs.push(self.call_context.hash());\n inputs.push(self.args_hash);\n inputs.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n inputs.push(self.contract_storage_update_requests[i].hash());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n inputs.push(self.contract_storage_reads[i].hash());\n }\n inputs.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n inputs.push(self.new_commitments[i].hash());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n inputs.push(self.new_nullifiers[i].hash());\n }\n inputs.push_array(self.new_l2_to_l1_msgs);\n inputs.push_array(self.unencrypted_logs_hash);\n inputs.push(self.unencrypted_log_preimages_length);\n inputs.push_array(self.historical_header.serialize());\n inputs.push(self.prover_address.to_field());\n\n assert_eq(inputs.len(), PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PublicCircuitPublicInputs\");\n\n dep::std::hash::pedersen_hash_with_separator(inputs.storage, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n\n pub fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize()); \n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.push_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.push_array(self.contract_storage_reads[i].serialize());\n }\n fields.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
1702
2905
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr"
1703
2906
  },
1704
- "148": {
1705
- "source": "use crate::{\n abis::{\n call_context::CallContext,\n block_header::BlockHeader,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n pedersen_hash,\n },\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n \n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n read_requests: [SideEffect; MAX_READ_REQUESTS_PER_CALL],\n\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n end_side_effect_counter : u32,\n\n encrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n block_header: BlockHeader,\n\n contract_deployment_data: ContractDeploymentData,\n\n chain_id: Field,\n version: Field,\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0); \n fields.push(self.call_context.hash());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push(self.contract_deployment_data.hash());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PrivateCircuitPublicInputs\");\n\n pedersen_hash(fields.storage, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push_array(self.contract_deployment_data.serialize());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\n#[test]\nfn serialization_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _serialized = pcpi.serialize();\n}\n\n#[test]\nfn hash_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _hashed = pcpi.hash();\n}\n",
2907
+ "150": {
2908
+ "source": "use crate::{\n abis::{\n call_context::CallContext,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n pedersen_hash,\n },\n header::Header,\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n \n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n read_requests: [SideEffect; MAX_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest; MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n end_side_effect_counter : u32,\n\n encrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n // Header of the block the transaction is executing against (not the block the transaction is included in).\n historical_header: Header,\n\n contract_deployment_data: ContractDeploymentData,\n\n chain_id: Field,\n version: Field,\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0); \n fields.push(self.call_context.hash());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push(self.contract_deployment_data.hash());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PrivateCircuitPublicInputs\");\n\n pedersen_hash(fields.storage, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push_array(self.contract_deployment_data.serialize());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\n#[test]\nfn serialization_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _serialized = pcpi.serialize();\n}\n\n#[test]\nfn hash_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _hashed = pcpi.hash();\n}\n",
1706
2909
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/private_circuit_public_inputs.nr"
1707
2910
  },
1708
- "151": {
2911
+ "153": {
1709
2912
  "source": "use crate::abis::function_selector::FunctionSelector;\nuse crate::constants::GENERATOR_INDEX__FUNCTION_DATA;\n\nstruct FunctionData {\n // First four bytes of the abi encoding \n // of a function. \n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n is_constructor : bool,\n}\n\nimpl FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.is_constructor as Field,\n ], GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n",
1710
2913
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"
1711
2914
  },
1712
- "156": {
2915
+ "154": {
2916
+ "source": "use dep::std::cmp::Eq;\n\nstruct AppendOnlyTreeSnapshot {\n root : Field,\n next_available_leaf_index : u32\n}\n\nglobal APPEND_ONLY_TREE_SNAPSHOT_LENGTH: Field = 2;\n\nimpl AppendOnlyTreeSnapshot {\n pub fn serialize(self) -> [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH] {\n [self.root, self.next_available_leaf_index as Field]\n }\n\n pub fn deserialize(serialized: [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH]) -> AppendOnlyTreeSnapshot {\n AppendOnlyTreeSnapshot {\n root : serialized[0],\n next_available_leaf_index : serialized[1] as u32\n }\n }\n\n pub fn zero() -> Self {\n Self {\n root: 0,\n next_available_leaf_index: 0,\n }\n }\n}\n\nimpl Eq for AppendOnlyTreeSnapshot {\n fn eq(self, other : AppendOnlyTreeSnapshot) -> bool {\n (self.root == other.root) & (self.next_available_leaf_index == other.next_available_leaf_index)\n }\n}\n",
2917
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/append_only_tree_snapshot.nr"
2918
+ },
2919
+ "158": {
1713
2920
  "source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{EthAddress,AztecAddress},\n constants::{\n CALL_CONTEXT_LENGTH,\n GENERATOR_INDEX__CALL_CONTEXT,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::Hash;\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n portal_contract_address : EthAddress,\n\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n is_contract_deployment : bool,\n\n start_side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl Eq for CallContext {\n fn eq(self, call_context: CallContext) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n call_context.msg_sender.eq(self.msg_sender)\n & call_context.storage_contract_address.eq(self.storage_contract_address)\n & call_context.portal_contract_address.eq(self.portal_contract_address)\n & call_context.function_selector.eq(self.function_selector)\n & (call_context.is_delegate_call == self.is_delegate_call)\n & (call_context.is_static_call == self.is_static_call)\n & (call_context.is_contract_deployment == self.is_contract_deployment)\n & (call_context.start_side_effect_counter == self.start_side_effect_counter)\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n [\n self.msg_sender.to_field(),\n self.storage_contract_address.to_field(),\n self.portal_contract_address.to_field(),\n self.function_selector.to_field(),\n self.is_delegate_call as Field,\n self.is_static_call as Field,\n self.is_contract_deployment as Field,\n self.start_side_effect_counter as Field,\n ]\n }\n\n fn assert_is_zero(self) {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n assert(self.msg_sender.to_field() == 0);\n assert(self.storage_contract_address.to_field() == 0);\n assert(self.portal_contract_address.to_field() == 0);\n assert(self.function_selector.to_field() == 0);\n assert(self.is_delegate_call == false);\n assert(self.is_static_call == false);\n assert(self.is_contract_deployment == false);\n assert(self.start_side_effect_counter == 0);\n }\n}\n",
1714
2921
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr"
1715
2922
  },
1716
- "162": {
2923
+ "164": {
1717
2924
  "source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_u32(value: u32) -> Self {\n Self {\n inner : value,\n }\n }\n\n pub fn from_field(value : Field) -> Self {\n Self {\n inner : value as u32,\n }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n",
1718
2925
  "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"
1719
2926
  },
1720
- "186": {
2927
+ "188": {
1721
2928
  "source": "use dep::aztec::abi;\nuse dep::aztec::types::vec::BoundedVec;\nuse dep::aztec::context::PrivateContext;\nuse dep::aztec::protocol_types::{\n abis::{\n call_stack_item::{\n PrivateCallStackItem,\n PublicCallStackItem,\n },\n function_selector::FunctionSelector,\n },\n address::AztecAddress,\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::pedersen_hash,\n};\n\nglobal ACCOUNT_MAX_CALLS: Field = 4;\n// 1 (ARGS_HASH) + 1 (FUNCTION_SELECTOR) + 1 (TARGET_ADDRESS) + 1 (IS_PUBLIC)\nglobal FUNCTION_CALL_SIZE: Field = 4;\n// 3 * 32 + 1\nglobal FUNCTION_CALL_SIZE_IN_BYTES: Field = 97;\n\nstruct FunctionCall {\n args_hash: Field,\n function_selector: FunctionSelector,\n target_address: AztecAddress,\n is_public: bool,\n}\n\nimpl FunctionCall {\n fn serialize(self) -> [Field; FUNCTION_CALL_SIZE] {\n [self.args_hash, self.function_selector.to_field(), self.target_address.to_field(), self.is_public as Field]\n }\n\n fn to_be_bytes(self) -> [u8; FUNCTION_CALL_SIZE_IN_BYTES] {\n let mut bytes: [u8; FUNCTION_CALL_SIZE_IN_BYTES] = [0; FUNCTION_CALL_SIZE_IN_BYTES];\n let args_hash_bytes = self.args_hash.to_be_bytes(32);\n for i in 0..32 { bytes[i] = args_hash_bytes[i]; }\n let function_selector_bytes = self.function_selector.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 32] = function_selector_bytes[i]; }\n let target_address_bytes = self.target_address.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 64] = target_address_bytes[i]; }\n bytes[96] = self.is_public as u8;\n bytes\n }\n}\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal ENTRYPOINT_PAYLOAD_SIZE: Field = 17;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES: Field = 420;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:entrypoint-struct\nstruct EntrypointPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:entrypoint-struct\n\nimpl EntrypointPayload {\n fn hash(self) -> Field {\n pedersen_hash(\n self.serialize(), \n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; ENTRYPOINT_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, ENTRYPOINT_PAYLOAD_SIZE> = BoundedVec::new(0); \n for call in self.function_calls {\n fields.push_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] = [0; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES];\n\n for i in 0..ACCOUNT_MAX_CALLS {\n let item_bytes = self.function_calls[i].to_be_bytes();\n for j in 0..FUNCTION_CALL_SIZE_IN_BYTES { \n bytes[i * FUNCTION_CALL_SIZE_IN_BYTES + j] = item_bytes[j];\n }\n }\n\n let nonce_bytes = self.nonce.to_be_bytes(32);\n let nonce_offset = FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS;\n for j in 0..32 {\n bytes[nonce_offset + j] = nonce_bytes[j];\n }\n \n bytes\n }\n\n // Executes all private and public calls \n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n",
1722
2929
  "path": "/usr/src/yarn-project/aztec-nr/authwit/src/entrypoint.nr"
1723
2930
  },
1724
- "187": {
2931
+ "189": {
1725
2932
  "source": "use dep::aztec::context::{PrivateContext, PublicContext, Context};\nuse dep::aztec::state_vars::{map::Map, public_state::PublicState};\nuse dep::aztec::types::type_serialization::bool_serialization::{BoolSerializationMethods,BOOL_SERIALIZED_LEN};\n\nuse crate::entrypoint::EntrypointPayload;\nuse crate::auth::IS_VALID_SELECTOR;\n\nstruct AccountActions {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n approved_action: Map<Field, PublicState<bool, BOOL_SERIALIZED_LEN>>,\n}\n\nimpl AccountActions {\n pub fn init(context: Context, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions {\n context: context,\n is_valid_impl: is_valid_impl,\n approved_action: Map::new(\n context,\n approved_action_storage_slot,\n |context, slot| {\n PublicState::new(context, slot, BoolSerializationMethods)\n },\n ),\n }\n }\n\n pub fn private(context: &mut PrivateContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::private(context), approved_action_storage_slot, is_valid_impl)\n }\n\n pub fn public(context: &mut PublicContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::public(context), approved_action_storage_slot, is_valid_impl)\n }\n \n // docs:start:entrypoint\n pub fn entrypoint(self, payload: EntrypointPayload) {\n let message_hash = payload.hash();\n let valid_fn = self.is_valid_impl;\n let private_context = self.context.private.unwrap();\n assert(valid_fn(private_context, message_hash));\n payload.execute_calls(private_context);\n }\n // docs:end:entrypoint\n\n pub fn is_valid(self, message_hash: Field) -> Field {\n let valid_fn = self.is_valid_impl;\n if (valid_fn(self.context.private.unwrap(), message_hash)) {\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn is_valid_public(self, message_hash: Field) -> Field {\n let value = self.approved_action.at(message_hash).read();\n if (value){\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn internal_set_is_valid_storage(self, message_hash: Field, value: bool) {\n self.approved_action.at(message_hash).write(value);\n }\n}\n",
1726
2933
  "path": "/usr/src/yarn-project/aztec-nr/authwit/src/account.nr"
1727
2934
  },
1728
- "190": {
2935
+ "192": {
1729
2936
  "source": "#[oracle(getAuthWitness)]\nfn get_auth_witness_oracle<N>(_message_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn get_auth_witness<N>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n",
1730
2937
  "path": "/usr/src/yarn-project/aztec-nr/authwit/src/auth_witness.nr"
1731
2938
  },
1732
- "208": {
1733
- "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n use dep::std::option::Option;\n\n use dep::aztec::protocol_types::address::AztecAddress;\n\n use dep::aztec::{\n context::{PrivateContext, Context},\n note::{ note_header::NoteHeader, utils as note_utils },\n oracle::get_public_key::get_public_key,\n state_vars::immutable_singleton::ImmutableSingleton,\n };\n use dep::authwit:: {\n entrypoint::{ EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE },\n account::AccountActions,\n auth_witness::get_auth_witness,\n };\n\n use crate::public_key_note::{PublicKeyNote, PublicKeyNoteMethods, PUBLIC_KEY_NOTE_LEN};\n\n struct Storage {\n // docs:start:storage\n signing_public_key: ImmutableSingleton<PublicKeyNote, PUBLIC_KEY_NOTE_LEN>,\n // docs:end:storage\n }\n\n impl Storage {\n fn init(context: Context) -> Self {\n Storage {\n // docs:start:storage_init\n signing_public_key: ImmutableSingleton::new(context, 1, PublicKeyNoteMethods),\n // docs:end:storage_init\n }\n }\n }\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 2;\n\n // Constructs the contract\n #[aztec(private)]\n fn constructor(signing_pub_key_x: pub Field, signing_pub_key_y: pub Field) {\n let this = context.this_address();\n // docs:start:initialize\n let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n storage.signing_public_key.initialize(&mut pub_key_note, Option::none(), true);\n // docs:end:initialize\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts file\n #[aztec(private)]\n fn entrypoint(payload: pub EntrypointPayload) {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.entrypoint(payload);\n }\n\n #[aztec(private)]\n fn is_valid(message_hash: Field) -> Field {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid(message_hash)\n }\n\n #[aztec(public)]\n fn is_valid_public(message_hash: Field) -> Field {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid_public(message_hash)\n }\n\n #[aztec(public)]\n internal fn set_is_valid_storage(message_hash: Field, value: bool) {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.internal_set_is_valid_storage(message_hash, value)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, message_hash: Field) -> pub bool {\n // docs:start:entrypoint\n // Load public key from storage\n let storage = Storage::init(Context::private(context));\n // docs:start:get_note\n let public_key = storage.signing_public_key.get_note();\n // docs:end:get_note\n // Load auth witness\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify signature of the payload bytes\n let verification = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes(32)\n );\n assert(verification == true);\n // docs:end:entrypoint\n true\n }\n\n // Computes notes hash and nullifier.\n // Note 1: Needs to be defined by every contract producing logs.\n // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes.\n unconstrained fn compute_note_hash_and_nullifier(\n contract_address: AztecAddress,\n nonce: Field,\n storage_slot: Field,\n serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]\n ) -> pub [Field; 4] {\n assert(storage_slot == 1);\n let note_header = NoteHeader::new(contract_address, nonce, storage_slot);\n note_utils::compute_note_hash_and_nullifier(PublicKeyNoteMethods, note_header, serialized_note)\n }\n}\n",
2939
+ "210": {
2940
+ "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n use dep::std::option::Option;\n\n use dep::aztec::protocol_types::address::AztecAddress;\n\n use dep::aztec::{\n context::{PrivateContext, Context},\n note::{ note_header::NoteHeader, utils as note_utils },\n oracle::get_public_key::get_public_key,\n state_vars::immutable_singleton::ImmutableSingleton,\n };\n use dep::authwit:: {\n entrypoint::{ EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE },\n account::AccountActions,\n auth_witness::get_auth_witness,\n };\n\n use crate::public_key_note::{PublicKeyNote, PublicKeyNoteMethods, PUBLIC_KEY_NOTE_LEN};\n\n struct Storage {\n // docs:start:storage\n signing_public_key: ImmutableSingleton<PublicKeyNote, PUBLIC_KEY_NOTE_LEN>,\n // docs:end:storage\n }\n\n impl Storage {\n fn init(context: Context) -> Self {\n Storage {\n // docs:start:storage_init\n signing_public_key: ImmutableSingleton::new(context, 1, PublicKeyNoteMethods),\n // docs:end:storage_init\n }\n }\n }\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 2;\n\n // Constructs the contract\n #[aztec(private)]\n fn constructor(signing_pub_key_x: pub Field, signing_pub_key_y: pub Field) {\n let this = context.this_address();\n // docs:start:initialize\n let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n storage.signing_public_key.initialize(&mut pub_key_note, true);\n // docs:end:initialize\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts file\n #[aztec(private)]\n fn entrypoint(payload: pub EntrypointPayload) {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.entrypoint(payload);\n }\n\n #[aztec(private)]\n fn is_valid(message_hash: Field) -> Field {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid(message_hash)\n }\n\n #[aztec(public)]\n fn is_valid_public(message_hash: Field) -> Field {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid_public(message_hash)\n }\n\n #[aztec(public)]\n internal fn set_is_valid_storage(message_hash: Field, value: bool) {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.internal_set_is_valid_storage(message_hash, value)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, message_hash: Field) -> pub bool {\n // docs:start:entrypoint\n // Load public key from storage\n let storage = Storage::init(Context::private(context));\n // docs:start:get_note\n let public_key = storage.signing_public_key.get_note();\n // docs:end:get_note\n // Load auth witness\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify signature of the payload bytes\n let verification = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes(32)\n );\n assert(verification == true);\n // docs:end:entrypoint\n true\n }\n\n // Computes notes hash and nullifier.\n // Note 1: Needs to be defined by every contract producing logs.\n // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes.\n unconstrained fn compute_note_hash_and_nullifier(\n contract_address: AztecAddress,\n nonce: Field,\n storage_slot: Field,\n serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]\n ) -> pub [Field; 4] {\n assert(storage_slot == 1);\n let note_header = NoteHeader::new(contract_address, nonce, storage_slot);\n note_utils::compute_note_hash_and_nullifier(PublicKeyNoteMethods, note_header, serialized_note)\n }\n}\n",
1734
2941
  "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/main.nr"
1735
2942
  },
1736
- "209": {
1737
- "source": "use dep::aztec::{\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_unique_siloed_note_hash,\n },\n hash::pedersen_hash,\n oracle::{\n nullifier_key::get_nullifier_secret_key,\n get_public_key::get_public_key,\n },\n log::emit_encrypted_log,\n context::PrivateContext,\n};\nuse dep::aztec::protocol_types::address::AztecAddress;\n\nglobal PUBLIC_KEY_NOTE_LEN: Field = 3;\n\n// Stores a public key composed of two fields\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\nstruct PublicKeyNote {\n x: Field,\n y: Field,\n owner: AztecAddress, // We store the owner address only to get the secret key to compute the nullifier and to broadcast\n header: NoteHeader,\n}\n\nimpl PublicKeyNote {\n pub fn new(x: Field, y: Field, owner: AztecAddress) -> Self {\n PublicKeyNote {\n x,\n y,\n owner,\n header: NoteHeader::empty(),\n }\n }\n\n // serialize the note as 3 fields\n pub fn serialize(self) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n [self.x, self.y, self.owner.to_field()]\n }\n\n pub fn compute_nullifier(self, context: &mut PrivateContext) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(PublicKeyNoteMethods, self);\n let secret = context.request_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn compute_nullifier_without_context(self) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(PublicKeyNoteMethods, self);\n let secret = get_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n // Broadcasts the note as an encrypted log on L1.\n pub fn broadcast(self, context: &mut PrivateContext, slot: Field) {\n let encryption_pub_key = get_public_key(self.owner);\n emit_encrypted_log(\n context,\n (*context).this_address(),\n slot,\n encryption_pub_key,\n self.serialize(),\n );\n }\n}\n\nfn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote {\n PublicKeyNote {\n x: serialized_note[0],\n y: serialized_note[1],\n owner: AztecAddress::from_field(serialized_note[2]),\n header: NoteHeader::empty()\n }\n}\n\nfn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n note.serialize()\n}\n\nfn compute_note_hash(note: PublicKeyNote) -> Field {\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash(note.serialize(), 0)\n}\n\nfn compute_nullifier(note: PublicKeyNote, context: &mut PrivateContext) -> Field {\n note.compute_nullifier(context)\n}\n\nfn compute_nullifier_without_context(note: PublicKeyNote) -> Field {\n note.compute_nullifier_without_context()\n}\n\nfn get_header(note: PublicKeyNote) -> NoteHeader {\n note.header\n}\n\nfn set_header(note: &mut PublicKeyNote, header: NoteHeader) {\n note.set_header(header);\n}\n\n// Broadcasts the note as an encrypted log on L1.\nfn broadcast(context: &mut PrivateContext, slot: Field, note: PublicKeyNote) {\n note.broadcast(context, slot);\n}\n\nglobal PublicKeyNoteMethods = NoteInterface {\n deserialize,\n serialize,\n compute_note_hash,\n compute_nullifier,\n compute_nullifier_without_context,\n get_header,\n set_header,\n broadcast,\n};\n",
2943
+ "211": {
2944
+ "source": "use dep::aztec::{\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_note_hash_for_read_or_nullify,\n },\n hash::pedersen_hash,\n oracle::{\n nullifier_key::get_nullifier_secret_key,\n get_public_key::get_public_key,\n },\n log::emit_encrypted_log,\n context::PrivateContext,\n};\nuse dep::aztec::protocol_types::address::AztecAddress;\n\nglobal PUBLIC_KEY_NOTE_LEN: Field = 3;\n\n// Stores a public key composed of two fields\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\nstruct PublicKeyNote {\n x: Field,\n y: Field,\n owner: AztecAddress, // We store the owner address only to get the secret key to compute the nullifier and to broadcast\n header: NoteHeader,\n}\n\nimpl PublicKeyNote {\n pub fn new(x: Field, y: Field, owner: AztecAddress) -> Self {\n PublicKeyNote {\n x,\n y,\n owner,\n header: NoteHeader::empty(),\n }\n }\n\n // serialize the note as 3 fields\n pub fn serialize(self) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n [self.x, self.y, self.owner.to_field()]\n }\n\n pub fn compute_nullifier(self, context: &mut PrivateContext) -> Field {\n let unique_siloed_note_hash = compute_note_hash_for_read_or_nullify(PublicKeyNoteMethods, self);\n let secret = context.request_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn compute_nullifier_without_context(self) -> Field {\n let unique_siloed_note_hash = compute_note_hash_for_read_or_nullify(PublicKeyNoteMethods, self);\n let secret = get_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n // Broadcasts the note as an encrypted log on L1.\n pub fn broadcast(self, context: &mut PrivateContext, slot: Field) {\n let encryption_pub_key = get_public_key(self.owner);\n emit_encrypted_log(\n context,\n (*context).this_address(),\n slot,\n encryption_pub_key,\n self.serialize(),\n );\n }\n}\n\nfn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote {\n PublicKeyNote {\n x: serialized_note[0],\n y: serialized_note[1],\n owner: AztecAddress::from_field(serialized_note[2]),\n header: NoteHeader::empty()\n }\n}\n\nfn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n note.serialize()\n}\n\nfn compute_note_hash(note: PublicKeyNote) -> Field {\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash(note.serialize(), 0)\n}\n\nfn compute_nullifier(note: PublicKeyNote, context: &mut PrivateContext) -> Field {\n note.compute_nullifier(context)\n}\n\nfn compute_nullifier_without_context(note: PublicKeyNote) -> Field {\n note.compute_nullifier_without_context()\n}\n\nfn get_header(note: PublicKeyNote) -> NoteHeader {\n note.header\n}\n\nfn set_header(note: &mut PublicKeyNote, header: NoteHeader) {\n note.set_header(header);\n}\n\n// Broadcasts the note as an encrypted log on L1.\nfn broadcast(context: &mut PrivateContext, slot: Field, note: PublicKeyNote) {\n note.broadcast(context, slot);\n}\n\nglobal PublicKeyNoteMethods = NoteInterface {\n deserialize,\n serialize,\n compute_note_hash,\n compute_nullifier,\n compute_nullifier_without_context,\n get_header,\n set_header,\n broadcast,\n};\n",
1738
2945
  "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr"
1739
2946
  }
1740
2947
  }