@aztec/protocol-contracts 0.75.0 → 0.76.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.
- package/artifacts/AuthRegistry.json +934 -934
- package/artifacts/ContractClassRegisterer.json +345 -345
- package/artifacts/ContractInstanceDeployer.json +121 -121
- package/artifacts/FeeJuice.json +580 -580
- package/artifacts/MultiCallEntrypoint.json +26 -26
- package/artifacts/Router.json +162 -162
- package/package.json +4 -4
package/artifacts/FeeJuice.json
CHANGED
|
@@ -1,442 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.1+
|
|
3
|
+
"noir_version": "1.0.0-beta.1+3f8376928465907d",
|
|
4
4
|
"name": "FeeJuice",
|
|
5
5
|
"functions": [
|
|
6
|
-
{
|
|
7
|
-
"name": "check_balance",
|
|
8
|
-
"is_unconstrained": true,
|
|
9
|
-
"custom_attributes": [
|
|
10
|
-
"public",
|
|
11
|
-
"view"
|
|
12
|
-
],
|
|
13
|
-
"abi": {
|
|
14
|
-
"error_types": {
|
|
15
|
-
"15238796416211288225": {
|
|
16
|
-
"error_kind": "string",
|
|
17
|
-
"string": "Balance too low"
|
|
18
|
-
},
|
|
19
|
-
"16761564377371454734": {
|
|
20
|
-
"error_kind": "string",
|
|
21
|
-
"string": "Array index out of bounds"
|
|
22
|
-
},
|
|
23
|
-
"17843811134343075018": {
|
|
24
|
-
"error_kind": "string",
|
|
25
|
-
"string": "Stack too deep"
|
|
26
|
-
},
|
|
27
|
-
"206160798890201757": {
|
|
28
|
-
"error_kind": "string",
|
|
29
|
-
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
30
|
-
},
|
|
31
|
-
"3219842053230618354": {
|
|
32
|
-
"error_kind": "string",
|
|
33
|
-
"string": "Function check_balance can only be called statically"
|
|
34
|
-
},
|
|
35
|
-
"5019202896831570965": {
|
|
36
|
-
"error_kind": "string",
|
|
37
|
-
"string": "attempt to add with overflow"
|
|
38
|
-
},
|
|
39
|
-
"6485997221020871071": {
|
|
40
|
-
"error_kind": "string",
|
|
41
|
-
"string": "call to assert_max_bit_size"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"parameters": [
|
|
45
|
-
{
|
|
46
|
-
"name": "fee_limit",
|
|
47
|
-
"type": {
|
|
48
|
-
"fields": [
|
|
49
|
-
{
|
|
50
|
-
"name": "lo",
|
|
51
|
-
"type": {
|
|
52
|
-
"kind": "field"
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"name": "hi",
|
|
57
|
-
"type": {
|
|
58
|
-
"kind": "field"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
"kind": "struct",
|
|
63
|
-
"path": "std::uint128::U128"
|
|
64
|
-
},
|
|
65
|
-
"visibility": "private"
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
"return_type": null
|
|
69
|
-
},
|
|
70
|
-
"bytecode": "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",
|
|
71
|
-
"debug_symbols": "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",
|
|
72
|
-
"brillig_names": [
|
|
73
|
-
"check_balance"
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
78
|
-
"is_unconstrained": true,
|
|
79
|
-
"custom_attributes": [],
|
|
80
|
-
"abi": {
|
|
81
|
-
"error_types": {
|
|
82
|
-
"16541607464495309456": {
|
|
83
|
-
"error_kind": "fmtstring",
|
|
84
|
-
"item_types": [],
|
|
85
|
-
"length": 16
|
|
86
|
-
},
|
|
87
|
-
"17843811134343075018": {
|
|
88
|
-
"error_kind": "string",
|
|
89
|
-
"string": "Stack too deep"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"parameters": [
|
|
93
|
-
{
|
|
94
|
-
"name": "contract_address",
|
|
95
|
-
"type": {
|
|
96
|
-
"fields": [
|
|
97
|
-
{
|
|
98
|
-
"name": "inner",
|
|
99
|
-
"type": {
|
|
100
|
-
"kind": "field"
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
],
|
|
104
|
-
"kind": "struct",
|
|
105
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
106
|
-
},
|
|
107
|
-
"visibility": "private"
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
"name": "nonce",
|
|
111
|
-
"type": {
|
|
112
|
-
"kind": "field"
|
|
113
|
-
},
|
|
114
|
-
"visibility": "private"
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"name": "storage_slot",
|
|
118
|
-
"type": {
|
|
119
|
-
"kind": "field"
|
|
120
|
-
},
|
|
121
|
-
"visibility": "private"
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"name": "note_type_id",
|
|
125
|
-
"type": {
|
|
126
|
-
"kind": "field"
|
|
127
|
-
},
|
|
128
|
-
"visibility": "private"
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"name": "compute_nullifier",
|
|
132
|
-
"type": {
|
|
133
|
-
"kind": "boolean"
|
|
134
|
-
},
|
|
135
|
-
"visibility": "private"
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"name": "packed_note_content",
|
|
139
|
-
"type": {
|
|
140
|
-
"kind": "array",
|
|
141
|
-
"length": 0,
|
|
142
|
-
"type": {
|
|
143
|
-
"kind": "field"
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
"visibility": "private"
|
|
147
|
-
}
|
|
148
|
-
],
|
|
149
|
-
"return_type": {
|
|
150
|
-
"abi_type": {
|
|
151
|
-
"kind": "array",
|
|
152
|
-
"length": 4,
|
|
153
|
-
"type": {
|
|
154
|
-
"kind": "field"
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
"visibility": "public"
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
"bytecode": "H4sIAAAAAAAA/9VZy67aQAwdSEJIuAEKn3Cl7tomXJ47Fn3c30AFPqHrrLppP7qMGCcH46siYVfFEpoknhyfOXZmJqHjztY//TrhOA5tz10b9dmGtrzPKkWs0pJn50F4dh+EZ/QgPGNFnh2Bp2/peUvc+ZlL3fl5bC7iTT7BEdzk/gYAwX6HNgttF/yKCakyYZBa+Otyvs/cpSnzf8kCZmqDvyD8vg1+Sbw/1y0+joXiRqF9rVstX+Eeb0U4xuIlXPJ1wfeF+SLwfWU+rOFvzId1T5xIN1qYlOtqY50XGlsKY+u80TrXaofXSOvcmdZoRTnPGB/On/gU1Kdu+fSYLwZfxnwJ+Eh/3z5DP577FPp9hONP0IfXZ+Su65n8lH/U3aK+YgP8k82lHPD8xPVlbPRhDmLQ85npY7FuoD4W+nt9pm/wp2Nvae0ai5ieqBFp1sf+zJeBL64v4+ThPIY4iEU8Etb/QzgfhbYH99D9YyF+j8W/4C1cQ404ViRco/7++Xwfjgfh52voJ93jructvc31ci7N4Xr4qwY/s+F/JPzcBn9J+AMb/GZv82SCPysJv7Dh38xBQ5v6afaWIxv+B8Ifm+DPD7QOv3OtNXNEOJ7Adb35u6pu2SNh/JxxtdojTRgfrg+uwd43FbiOBR/P4VSIMxXiSFiZItaTItboPx1jXxFroIg1VMTSzGOqiKWpV66IVShiada9pl6UR2mf5m0b2vJOk/ZpiviVtE/TfJcnram+YkFDHF/C+v9gOg9MeFYzWnPoWacYGLswin3rek3xC4EP8c4F3z0fZw+L9XGzXmxOW7JqOds0+SwYV34N34twPsb+0tov7fsUtS6ld/8h6OotBl/BfAn4iKP07j804n+L/hh/LPj4+n9rLifuej0csHHjN6+typjb74HSt3rj+Wtx67NJ8XN3PV//q++NqA/fS+cC17Hg4/uTXIiTC3EeEYt/s0cNfV2TTnHd+rVyuVq3f3TRXJS4y/8BHIufsP6/wjmOjdp75vzjalcdX3bH3WK338+/7yYM31sXdPoDg5oBSR0fAAA=",
|
|
161
|
-
"debug_symbols": "tdfNaoQwFIbhe8k6i5z8mIm3UsoQNQ6BECVqoYj33jhM26GzLN9GiBwfN77g2dkQuu12jXmcFta+7SxNvV/jlOtpPzjrSkwp3q7Pt5k4L87c55fZ5/O4rL6srNWSs5AH1hpRnx5jCqxt1MFfBu33oLU/g0Ye75y5BgVbFHxBwQ4EkxAwmWCyhMkKJmuYbGByA5MtTL7AZFiDBGuQYA0SrEGCNUiwBgnWIMEaJFiD9L8GnXoM1k/hhXYwWgocTTha4miFozWONji6wdEWR+NqlLgaFa5GBarxqKcPX6LvUnhsTeOW+6clav2cw599ai5TH4athHOz+l2qzvSU4drc/zzqgZTmpFx9SX3RFw==",
|
|
162
|
-
"brillig_names": [
|
|
163
|
-
"compute_note_hash_and_optionally_a_nullifier"
|
|
164
|
-
]
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
"name": "_increase_public_balance",
|
|
168
|
-
"is_unconstrained": true,
|
|
169
|
-
"custom_attributes": [
|
|
170
|
-
"public",
|
|
171
|
-
"internal"
|
|
172
|
-
],
|
|
173
|
-
"abi": {
|
|
174
|
-
"error_types": {
|
|
175
|
-
"10502589790419500451": {
|
|
176
|
-
"error_kind": "string",
|
|
177
|
-
"string": "Function _increase_public_balance can only be called internally"
|
|
178
|
-
},
|
|
179
|
-
"16761564377371454734": {
|
|
180
|
-
"error_kind": "string",
|
|
181
|
-
"string": "Array index out of bounds"
|
|
182
|
-
},
|
|
183
|
-
"17843811134343075018": {
|
|
184
|
-
"error_kind": "string",
|
|
185
|
-
"string": "Stack too deep"
|
|
186
|
-
},
|
|
187
|
-
"206160798890201757": {
|
|
188
|
-
"error_kind": "string",
|
|
189
|
-
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
190
|
-
},
|
|
191
|
-
"5019202896831570965": {
|
|
192
|
-
"error_kind": "string",
|
|
193
|
-
"string": "attempt to add with overflow"
|
|
194
|
-
},
|
|
195
|
-
"6485997221020871071": {
|
|
196
|
-
"error_kind": "string",
|
|
197
|
-
"string": "call to assert_max_bit_size"
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
"parameters": [
|
|
201
|
-
{
|
|
202
|
-
"name": "to",
|
|
203
|
-
"type": {
|
|
204
|
-
"fields": [
|
|
205
|
-
{
|
|
206
|
-
"name": "inner",
|
|
207
|
-
"type": {
|
|
208
|
-
"kind": "field"
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
],
|
|
212
|
-
"kind": "struct",
|
|
213
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
214
|
-
},
|
|
215
|
-
"visibility": "private"
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
"name": "amount",
|
|
219
|
-
"type": {
|
|
220
|
-
"fields": [
|
|
221
|
-
{
|
|
222
|
-
"name": "lo",
|
|
223
|
-
"type": {
|
|
224
|
-
"kind": "field"
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
"name": "hi",
|
|
229
|
-
"type": {
|
|
230
|
-
"kind": "field"
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
],
|
|
234
|
-
"kind": "struct",
|
|
235
|
-
"path": "std::uint128::U128"
|
|
236
|
-
},
|
|
237
|
-
"visibility": "private"
|
|
238
|
-
}
|
|
239
|
-
],
|
|
240
|
-
"return_type": null
|
|
241
|
-
},
|
|
242
|
-
"bytecode": "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",
|
|
243
|
-
"debug_symbols": "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",
|
|
244
|
-
"brillig_names": [
|
|
245
|
-
"_increase_public_balance"
|
|
246
|
-
]
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
"name": "balance_of_public",
|
|
250
|
-
"is_unconstrained": true,
|
|
251
|
-
"custom_attributes": [
|
|
252
|
-
"public",
|
|
253
|
-
"view"
|
|
254
|
-
],
|
|
255
|
-
"abi": {
|
|
256
|
-
"error_types": {
|
|
257
|
-
"16761564377371454734": {
|
|
258
|
-
"error_kind": "string",
|
|
259
|
-
"string": "Array index out of bounds"
|
|
260
|
-
},
|
|
261
|
-
"17843811134343075018": {
|
|
262
|
-
"error_kind": "string",
|
|
263
|
-
"string": "Stack too deep"
|
|
264
|
-
},
|
|
265
|
-
"206160798890201757": {
|
|
266
|
-
"error_kind": "string",
|
|
267
|
-
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
268
|
-
},
|
|
269
|
-
"5019202896831570965": {
|
|
270
|
-
"error_kind": "string",
|
|
271
|
-
"string": "attempt to add with overflow"
|
|
272
|
-
},
|
|
273
|
-
"6067862452620309358": {
|
|
274
|
-
"error_kind": "string",
|
|
275
|
-
"string": "Function balance_of_public can only be called statically"
|
|
276
|
-
},
|
|
277
|
-
"6485997221020871071": {
|
|
278
|
-
"error_kind": "string",
|
|
279
|
-
"string": "call to assert_max_bit_size"
|
|
280
|
-
}
|
|
281
|
-
},
|
|
282
|
-
"parameters": [
|
|
283
|
-
{
|
|
284
|
-
"name": "owner",
|
|
285
|
-
"type": {
|
|
286
|
-
"fields": [
|
|
287
|
-
{
|
|
288
|
-
"name": "inner",
|
|
289
|
-
"type": {
|
|
290
|
-
"kind": "field"
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
],
|
|
294
|
-
"kind": "struct",
|
|
295
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
296
|
-
},
|
|
297
|
-
"visibility": "private"
|
|
298
|
-
}
|
|
299
|
-
],
|
|
300
|
-
"return_type": {
|
|
301
|
-
"abi_type": {
|
|
302
|
-
"fields": [
|
|
303
|
-
{
|
|
304
|
-
"name": "lo",
|
|
305
|
-
"type": {
|
|
306
|
-
"kind": "field"
|
|
307
|
-
}
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
"name": "hi",
|
|
311
|
-
"type": {
|
|
312
|
-
"kind": "field"
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
],
|
|
316
|
-
"kind": "struct",
|
|
317
|
-
"path": "std::uint128::U128"
|
|
318
|
-
},
|
|
319
|
-
"visibility": "public"
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
"bytecode": "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",
|
|
323
|
-
"debug_symbols": "7Z3bbuM4DIbfJde5EHVWX2WwKHrIFAGCpEjTBRZF332dTG2nkWCPRKGTqf6bYjIhQ+oLI9K0Tb8tHlf3r0+36+3P3cvi5sfbYrN7uDusd9vu1dv7cnG/X28266fb8/9eiOMfInNSeHm+2x5fvxzu9ofFDVkrl4vV9vH4Tye7j/i53qwWN1a9LyNhG4T7ELZBqkHYU0I4iOGTg/DmXPif5YKkyHTnpGQKlFSJJeULlLRKKSkyvZIiR9OISVjVWyAaEZMxKWlve+HgB1kZ3C933FW5Y+R1uXNddOx10bHXRcfRdbljrsodL67LHf3V7pjeHSnkJ3diWa9lL+y106O09QlpNXyyluJMNiEqKejeC0lyWtgMThjpzkVP/AL4cfgFBX4sfh78GPykQPzx+CH+WPwI8cfj58CPw08S+LH4WfDj8FMC/Fj8DPix+OH4bZafFT0/S5f8NOoXHj/Uzyx+X9+o/vv4DbL2s+iRn8Pvl8cPxx8sfh6/Xx4/xB+LX0D88fgh/jj8lED/hccPx78sfoT+C4+fBj8WP/RfWPwkjt94/NB/YfFTqJ8TUHBSKIaiUekmoKB8TUBBTRBDMRpQYijI3jEUi5ScgII+VQzFISUnoCAlx1A82kQJKEjJCShIyTEU3OWQgoJIiaBogeItAQX9lBgKoXhLQEGkxFAavcZVqhGKNpdQTJsHhI5C74VTqlj4SNC2uQHlECQ7rs96igi2uVtVJOg0CDIJtpkcKhL0bR7cZRF0rv9gciHKxY32DCoSbPQy1poEkYt5BI1os0dck6AGQSZBZBImwUYHUtQkiBhkEpSoZrgEUc0wCTY6mKImQQ2CTILIJEyCGpmESxCZhEnQ4DwJl2Cbl+RlEQw0TDsPMiJoUc1wCSIGuQQrnGki73sL5+f00wSV6Z+AoKyb/mBne1HnR3z061kBpsZZxj/k+V/LvMZgkz/j+W+ci/FqznMVhp3CfjaRcEf5fl9xWozSyUd9OPK9H05KmhYmEmrcsoS15+KntfovX6sb10phxn2r+tFhZM0orEgnpLXVfbhoa0dpKxLCZnDDhFG0c6ijYn9jqHSDVKQGlQSVACoxFeVAJaai5XeiEvokqp0w51ROS/1WATC5VPOdvlU3XHTbHYeIaKnf6Vt1Q2nULTVcLjW02fVRYvDihO3TIaBt9CKbSSiu0RFwM1DavCx1Gkqjw8ZmoCBSYigSkZKA0ubpVBnkAEWYaWESQ7+3W6q/JNjotK+aBNusgLII0lnP0VzebuEanSNWk2Cj94PWI9joMK6aBJGL5wlaM6zPR5mk0Rv3sghqMTR0tIhisNEb92oSbPMm+ooEG20T1iTY5oU5WQSNHNZnjLgg6Bu9ca8mQcQgk2Cjt53VJIiKmkmw0aZpRYIK1QyXIPqDTIKN3vJTkyCO6pgEG30qbU2C2AfnCbrhdgsTLqc++kbH89UkiBhkEmx0PF9NgujyMwmiy88miHqQSRBdfibBgB71PEE13n6rFEUE0aPmEkQuZhJEl59NELmYSVAiF3MJIpMwCTY6XK4mQcQglyCqGSZBjWqGSxDVDJNgo8Pl8ghqNxC0IiKIGGQStBoEmQSRi5kEG31qc0WCjT7iuSZBxCCXIPZB3t0QodEnTdckiHqQR5BEoxNtaiIkZGNxOUGYSCR/m26YCOa0inTSUz+C7g0FE9tJz7mY0bH5OloU6OiUzvTYiU4rlGgZVaTlS7RskS1bZMsV2XJFtnyRLV/0fYUiW6FkXd0uUaRlS7TSu+Gsli7SCtl7jJRJ7kH0sxCDTOjk70sy/TCOaTtGFOjoAh2fr2Pz91lpXb6OK7DjRYGOydcJBXZCiZ1kXAfTx3VwlxddkRK6QKfATvqqhmmd9EPiZnQK7KgCO7O1QEInPddo8jtVOr/mUKbAjgn5Oumu8LSOEwU6+fuB8rJAJ3+/Vul8PKOTb0cLWaCTHzuaRIFOZhy8d6/+vduv7+43q5dO4/jm6/bhsN5tP14e/nvu37nfrzeb9dPt8373sHp83a9uN7uH43sL8fHnh/RhqUgcfTm97I67pDCnwuf0rlp223ZntbP8Pw==",
|
|
324
|
-
"brillig_names": [
|
|
325
|
-
"balance_of_public"
|
|
326
|
-
]
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
"name": "process_log",
|
|
330
|
-
"is_unconstrained": true,
|
|
331
|
-
"custom_attributes": [],
|
|
332
|
-
"abi": {
|
|
333
|
-
"error_types": {
|
|
334
|
-
"16541607464495309456": {
|
|
335
|
-
"error_kind": "fmtstring",
|
|
336
|
-
"item_types": [],
|
|
337
|
-
"length": 16
|
|
338
|
-
},
|
|
339
|
-
"17843811134343075018": {
|
|
340
|
-
"error_kind": "string",
|
|
341
|
-
"string": "Stack too deep"
|
|
342
|
-
}
|
|
343
|
-
},
|
|
344
|
-
"parameters": [
|
|
345
|
-
{
|
|
346
|
-
"name": "log_plaintext",
|
|
347
|
-
"type": {
|
|
348
|
-
"fields": [
|
|
349
|
-
{
|
|
350
|
-
"name": "storage",
|
|
351
|
-
"type": {
|
|
352
|
-
"kind": "array",
|
|
353
|
-
"length": 18,
|
|
354
|
-
"type": {
|
|
355
|
-
"kind": "field"
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
"name": "len",
|
|
361
|
-
"type": {
|
|
362
|
-
"kind": "integer",
|
|
363
|
-
"sign": "unsigned",
|
|
364
|
-
"width": 32
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
],
|
|
368
|
-
"kind": "struct",
|
|
369
|
-
"path": "std::collections::bounded_vec::BoundedVec"
|
|
370
|
-
},
|
|
371
|
-
"visibility": "private"
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
"name": "tx_hash",
|
|
375
|
-
"type": {
|
|
376
|
-
"kind": "field"
|
|
377
|
-
},
|
|
378
|
-
"visibility": "private"
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
"name": "unique_note_hashes_in_tx",
|
|
382
|
-
"type": {
|
|
383
|
-
"fields": [
|
|
384
|
-
{
|
|
385
|
-
"name": "storage",
|
|
386
|
-
"type": {
|
|
387
|
-
"kind": "array",
|
|
388
|
-
"length": 64,
|
|
389
|
-
"type": {
|
|
390
|
-
"kind": "field"
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
},
|
|
394
|
-
{
|
|
395
|
-
"name": "len",
|
|
396
|
-
"type": {
|
|
397
|
-
"kind": "integer",
|
|
398
|
-
"sign": "unsigned",
|
|
399
|
-
"width": 32
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
],
|
|
403
|
-
"kind": "struct",
|
|
404
|
-
"path": "std::collections::bounded_vec::BoundedVec"
|
|
405
|
-
},
|
|
406
|
-
"visibility": "private"
|
|
407
|
-
},
|
|
408
|
-
{
|
|
409
|
-
"name": "first_nullifier_in_tx",
|
|
410
|
-
"type": {
|
|
411
|
-
"kind": "field"
|
|
412
|
-
},
|
|
413
|
-
"visibility": "private"
|
|
414
|
-
},
|
|
415
|
-
{
|
|
416
|
-
"name": "recipient",
|
|
417
|
-
"type": {
|
|
418
|
-
"fields": [
|
|
419
|
-
{
|
|
420
|
-
"name": "inner",
|
|
421
|
-
"type": {
|
|
422
|
-
"kind": "field"
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
],
|
|
426
|
-
"kind": "struct",
|
|
427
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
428
|
-
},
|
|
429
|
-
"visibility": "private"
|
|
430
|
-
}
|
|
431
|
-
],
|
|
432
|
-
"return_type": null
|
|
433
|
-
},
|
|
434
|
-
"bytecode": "H4sIAAAAAAAA/92c927bMBDG5URKIieOndG9927leHeme+/W/dsdfosWAtqHSPu09Zfw7DPDAilCovkqQJCto+9+PFHUiTy6EG1s3cFeMJ9jc5w2R5xfjMY3Kbtqjtn2tqpHXVkoxgIB4wQB4yQBY0zAmBAwThEwThMwzhAwpgSMRQLGWQLGOQLGEgHjPAFjmYCxQsC4EIAxBOciCeeSR04d24fiXY52fhvdRcC4m4BxDwHjXgLGfQSM+wkYDxAwHiRgPETAeJiA8QgB41ECxmMEjMcJGE8QMJ4kYDxFwHiagPEMAeNZAsZzBIznCRgvEDBeJGC8RMB4mYDxCgFjRsBYJWBcIWCsETDWCRgbBIxNAsYWAWObgLFDwHiVgPEaAeN1AsYbBIw3CRhvETCuEjDeJmC8Q8B4l4DxHgHjfQLGBwSMDwkYHxEwPiZgfELA+JSA8RkB43MCxhcEjC8JGF8RML4mYHxDwPg2AGMIzncknO9JOLuBOKMPFvTEYMfCLSyMwsIjLOzBwhksTMHCDyyswMIFLAxA4j0S25E4XhnsSHxGUjESdpEEiyRTJHEiSRJJiEjyQxIdktSQBIYkKyQxIUno6GA/NtiRRIIkDSRBIMkAk/iYJMckNCZ5MYmKSUpMAmKSDZNYmCRCrTDJgUkEDNJjEByDzBjExSApBiExyIdBNAxSYRAIgywYxJBBArzk4iUSL2l4CcJLBoJ4BMkIQhHkIYhCkIIgAA9ZPMTwkEAnjE4OnQhuUtwAaFzd6M+bNJIf5pia44SSe1xEV00tuz71t7POx9RRP4/8tdTonAmiv9ES/WkY/kwW2t7LR/p1XcTupDl285Evu/k4k5RZU2XWrDJSnzDXu14P66/qSsnyUaTqIraLYWzXCpY9fV20TOwXo5Btc2NRsrYnPLZ/pO8oSZl8xFOwZHG+uR4iS5RMri/snFfl7LY1Y8mEBZu035LyjWwfjEyuaax0+muvjXbY9lrP/l17rVf/x/YaW7I431yPv22vum3Z7TWJRpv0pSKbUrKflmxayX7lI9sNxdE0n8P2yRvPYH3v+X6GLTn4tS1s0/nIH9IGJ9W5RPlv3T+6vCVLlSzOx+0UzfdY2dG6hCOxytfN97I5TqnfyO8rDvtTlv0xbsc52y+po3zqKI+2dsl8njU72tA3+U20+d7Fvmq+Z9vamh1XP+lPf6vm6gs98n8R/bNB9NeH+ufC8A/jqlIY/w/1z4fh74v+chj9TdFfCaO/IfoXguhfGcYJ+s927DhhSZ33GNduOU4Q+0WLNVScsGTx2P7RcQJkyw7WikNm9wHLDjvLDjsuXfMedS141FXcoXUsedRV8agr9ajL53Wc86jLp7/KHnXNeNTls9379Jdcx7DjVVnmitOiAPqLYfQP+37po/W7ma6T2E+s8l8tP88F8fNoHEr6M+0LVyzl0/ZWn9div+TgEe6iQ7adP0D70mj3O+1GZxDSV5srnaxg6RdW+5x+L9L9iy7veva74j6Pvs5cYxBl5VdssZLNW7JEyYRRj0G44mKf/Fvxv7Zfccjs/nmr13IxGm9r+n6cjUb3c5z7r3urvfHHLuuMRn8SjY8xRpb9xCr/3Xy3+7rt3iP9Vq/ar/X6vUbv8+f6p96ipV/7EH76DXVGL3ipUwAA",
|
|
435
|
-
"debug_symbols": "tZbLCoMwEEX/ZdZZOGPV1l8ppUSNJRCiRC0U8d8bpQ9p13cTmDA5kyxOuDM1pppuV+vbbqDyPJPraj3azsdqXhRVwTpnb9f9NiXrwolsB4Ze+7UeRh1GKg+iyPiGyiyJx1vrDJV5uqi/xuLdWBSfxkyWi4rkFEY+wMgZjJzDyAWMfISRTygyJzAyw8gwBxnmIMMcZJiDDHOQYQ4yzEGGOSgwBwXmoMAcFJiDgnFwidVdB6srZ14Bop18vcsT46M3P9GiD11tmimYNWR888X69nihTLZfPxYsueKU45A46Ak=",
|
|
436
|
-
"brillig_names": [
|
|
437
|
-
"process_log"
|
|
438
|
-
]
|
|
439
|
-
},
|
|
440
6
|
{
|
|
441
7
|
"name": "public_dispatch",
|
|
442
8
|
"is_unconstrained": true,
|
|
@@ -503,16 +69,17 @@
|
|
|
503
69
|
"return_type": null
|
|
504
70
|
},
|
|
505
71
|
"bytecode": "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",
|
|
506
|
-
"debug_symbols": "
|
|
72
|
+
"debug_symbols": "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",
|
|
507
73
|
"brillig_names": [
|
|
508
74
|
"public_dispatch"
|
|
509
75
|
]
|
|
510
76
|
},
|
|
511
77
|
{
|
|
512
|
-
"name": "
|
|
78
|
+
"name": "balance_of_public",
|
|
513
79
|
"is_unconstrained": true,
|
|
514
80
|
"custom_attributes": [
|
|
515
|
-
"public"
|
|
81
|
+
"public",
|
|
82
|
+
"view"
|
|
516
83
|
],
|
|
517
84
|
"abi": {
|
|
518
85
|
"error_types": {
|
|
@@ -524,14 +91,18 @@
|
|
|
524
91
|
"error_kind": "string",
|
|
525
92
|
"string": "Stack too deep"
|
|
526
93
|
},
|
|
527
|
-
"
|
|
94
|
+
"206160798890201757": {
|
|
528
95
|
"error_kind": "string",
|
|
529
|
-
"string": "
|
|
96
|
+
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
530
97
|
},
|
|
531
98
|
"5019202896831570965": {
|
|
532
99
|
"error_kind": "string",
|
|
533
100
|
"string": "attempt to add with overflow"
|
|
534
101
|
},
|
|
102
|
+
"6067862452620309358": {
|
|
103
|
+
"error_kind": "string",
|
|
104
|
+
"string": "Function balance_of_public can only be called statically"
|
|
105
|
+
},
|
|
535
106
|
"6485997221020871071": {
|
|
536
107
|
"error_kind": "string",
|
|
537
108
|
"string": "call to assert_max_bit_size"
|
|
@@ -539,7 +110,7 @@
|
|
|
539
110
|
},
|
|
540
111
|
"parameters": [
|
|
541
112
|
{
|
|
542
|
-
"name": "
|
|
113
|
+
"name": "owner",
|
|
543
114
|
"type": {
|
|
544
115
|
"fields": [
|
|
545
116
|
{
|
|
@@ -550,37 +121,37 @@
|
|
|
550
121
|
}
|
|
551
122
|
],
|
|
552
123
|
"kind": "struct",
|
|
553
|
-
"path": "authwit::aztec::protocol_types::address::
|
|
124
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
554
125
|
},
|
|
555
126
|
"visibility": "private"
|
|
556
127
|
}
|
|
557
128
|
],
|
|
558
|
-
"return_type":
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
"
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
129
|
+
"return_type": {
|
|
130
|
+
"abi_type": {
|
|
131
|
+
"fields": [
|
|
132
|
+
{
|
|
133
|
+
"name": "lo",
|
|
134
|
+
"type": {
|
|
135
|
+
"kind": "field"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "hi",
|
|
140
|
+
"type": {
|
|
141
|
+
"kind": "field"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"kind": "struct",
|
|
146
|
+
"path": "std::uint128::U128"
|
|
147
|
+
},
|
|
148
|
+
"visibility": "public"
|
|
149
|
+
}
|
|
579
150
|
},
|
|
580
|
-
"bytecode": "
|
|
581
|
-
"debug_symbols": "
|
|
151
|
+
"bytecode": "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",
|
|
152
|
+
"debug_symbols": "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",
|
|
582
153
|
"brillig_names": [
|
|
583
|
-
"
|
|
154
|
+
"balance_of_public"
|
|
584
155
|
]
|
|
585
156
|
},
|
|
586
157
|
{
|
|
@@ -2219,23 +1790,250 @@
|
|
|
2219
1790
|
"path": "authwit::aztec::protocol_types::transaction::tx_context::TxContext"
|
|
2220
1791
|
}
|
|
2221
1792
|
}
|
|
2222
|
-
],
|
|
2223
|
-
"kind": "struct",
|
|
2224
|
-
"path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
|
|
1793
|
+
],
|
|
1794
|
+
"kind": "struct",
|
|
1795
|
+
"path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
|
|
1796
|
+
},
|
|
1797
|
+
"visibility": "databus"
|
|
1798
|
+
}
|
|
1799
|
+
},
|
|
1800
|
+
"bytecode": "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",
|
|
1801
|
+
"debug_symbols": "7VjbTuMwFPyXPOfB52afw6+sVqhAQZWqFpWy0grx72sX7ABNWtXtAhV5qep0pp5Mxp4kT83N9Orx7nK2uF0+NBe/npr58nqyni0XcfTUAG2OPdxPFmn4sJ6s1s0FeI9tM13cpK8Bn9vmdjafNheentstMKIPr2BEtQI23wc21lcwOYTdYPBkWnQwdHD01ouXDh5Ch9befydPGc3g3qF/tw3w6MyAMzI6M+CM/9bOMEnnDNseZxDQZyXAcqQzYXRmwBk92hl2lsEMqAWsbjOB/ecJ0PVOAMZ5AvSyewK1MoE56NQEOuv9AOFbO/OFqUccnRlwho52xhx2zojsdobKrsrABQqkGzF8AjE+e2ngdLcYMCHLf20i/u1W01cJMQSlE2x7Z5Lzlu8/Vz460BJkRwYf9fSXeDyLrIeA9i1aLdEEDLv9UZfVKL/dt1+i2d+bhGXlEu+pNWPvshjhPRcrFmZWA4HkzUp5Wbb9LcuuyGHRH7mhkRudGXAGRmcGnMGjnTldCRKdQMzXtQjxecuXz5W/uwTj4Go1m89nd5fv3qO59MG9TgvkpIvgx2yxHE7xh1PC4RQ9kBJHkJD9d/ZStqkg9r474wgTMvQSTcvjmHNbNwGBKjhcwZEKjq/ghAqOVnDscI66Cg5UcCpyoBU50IocaEUOtCIHWpEDrciBVuTA+nPQ3R07x1scqOBgBYcqOFzBkQqOP5QTR5SgAy/clctzYLzD2dpUeaykOPwzWc0mV/Npaun06+PiOpd2HK7/3udfcq3fr5bX05vH1TQVfNftKVgELUMUAmkFiGtFSuttDsVHT3KlzxJDrPWWGfE9JDjqrmo6BqFFLFdraJLneC7/AA==",
|
|
1802
|
+
"brillig_names": [
|
|
1803
|
+
"store_in_execution_cache_oracle_wrapper",
|
|
1804
|
+
"enqueue_public_function_call_internal",
|
|
1805
|
+
"debug_log_oracle_wrapper",
|
|
1806
|
+
"notify_set_min_revertible_side_effect_counter_oracle_wrapper",
|
|
1807
|
+
"store_in_execution_cache_oracle_wrapper"
|
|
1808
|
+
],
|
|
1809
|
+
"verification_key": "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"
|
|
1810
|
+
},
|
|
1811
|
+
{
|
|
1812
|
+
"name": "set_portal",
|
|
1813
|
+
"is_unconstrained": true,
|
|
1814
|
+
"custom_attributes": [
|
|
1815
|
+
"public"
|
|
1816
|
+
],
|
|
1817
|
+
"abi": {
|
|
1818
|
+
"error_types": {
|
|
1819
|
+
"16761564377371454734": {
|
|
1820
|
+
"error_kind": "string",
|
|
1821
|
+
"string": "Array index out of bounds"
|
|
1822
|
+
},
|
|
1823
|
+
"17843811134343075018": {
|
|
1824
|
+
"error_kind": "string",
|
|
1825
|
+
"string": "Stack too deep"
|
|
1826
|
+
},
|
|
1827
|
+
"2236649814169388962": {
|
|
1828
|
+
"error_kind": "string",
|
|
1829
|
+
"string": "PublicImmutable already initialized"
|
|
1830
|
+
},
|
|
1831
|
+
"5019202896831570965": {
|
|
1832
|
+
"error_kind": "string",
|
|
1833
|
+
"string": "attempt to add with overflow"
|
|
1834
|
+
},
|
|
1835
|
+
"6485997221020871071": {
|
|
1836
|
+
"error_kind": "string",
|
|
1837
|
+
"string": "call to assert_max_bit_size"
|
|
1838
|
+
}
|
|
1839
|
+
},
|
|
1840
|
+
"parameters": [
|
|
1841
|
+
{
|
|
1842
|
+
"name": "portal_address",
|
|
1843
|
+
"type": {
|
|
1844
|
+
"fields": [
|
|
1845
|
+
{
|
|
1846
|
+
"name": "inner",
|
|
1847
|
+
"type": {
|
|
1848
|
+
"kind": "field"
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
],
|
|
1852
|
+
"kind": "struct",
|
|
1853
|
+
"path": "authwit::aztec::protocol_types::address::eth_address::EthAddress"
|
|
1854
|
+
},
|
|
1855
|
+
"visibility": "private"
|
|
1856
|
+
}
|
|
1857
|
+
],
|
|
1858
|
+
"return_type": null
|
|
1859
|
+
},
|
|
1860
|
+
"bytecode": "JgACBAEnAAABBIBFJgAABAMmAgIEASYCAwQAHxgAAwACgEQtCIBEAAEkAAAARSQAAABNJwIAAQSARSYCAgQAOg0AAQACJwCAQwQAAyUkAAADTSYCAgACLgwAAgADHAwDBAArAgAFAAAAAAAAAAAAAAAAAP//////////////////////////DjgEBQYjAgAGAAAAmSQAAAN2JgIEAAAKOAMEBSMCAAUAAAC0JgIGBAA7CQEGKAIAAwA7msoCLgwAAwAFCjgFBAYjAgAGAAAA1SQAAAOIJwIABQDerS8MAAUAAywIAQMmAgUEBAAQAQUBJgMDBAEAKAMCBSwMBQYsDgQGACgGAgYsDgQGACgGAgYsDgQGLA0DBQAoBQIFLA4FAyoCAAUAAAAAAAAAAAEAAAAAAAAAACwIAQYmAgcEBQAQAQcBJgMGBAEAKAYCBywMBwgsDgQIACgIAggsDgQIACgIAggsDgQIACgIAggsDgUILA0DBAAoBAIELA4EAywIAQQAAAECASwOAwQsDQYDACgDAgMsDgMGLAgBAwAAAQIBLA4GAywIAQUAAAECASYCBgQALA4GBSwIAQcAAAECASYCCAEALA4IBywNBQksDQcKCjgKCAsjAgALAAAB5yYCDAQAOwkBDAsoAAmAQwAKJgIJBAEjAgAKAAACeiIAAAIBLA0ECiwNAwssDQUMLA0HDSYCDwQDDDgMDxAjAgAQAAACKCQAAAOaLQQACoADJwCABAQABCQAAAOsLQiABQAOACgOAg8AOA8MECwOARAAOAwJCg44DAoPIwIADwAAAmUkAAAEOiwODgQsDgsDLA4KBSwODQciAAAC6CYCCgQLLAgACywMBAwsDAMNLAwFDiwMBw8AEAAKACQAAARMLAQAACwNBAosDQMLLA0HDC0EAAqAAycAgAQEAAQkAAADrC0IgAUADQAoDQIOADgOBg8sDgEPLA4NBCwOCwMsDgkFLA4MByIAAALoLA0HCQo4CQgKIwIACgAAAwImAgsEADsJAQsmAggECSwIAAksDAQKLAwDCywMBQwsDAcNABAACAAkAAAETCwEAAAsDQMEACgEAgUAOAUGBywNBwMvDAABAAImAgEAAy8MAAMAASUnAIAEBHgADQAAAIAEgAMjAIADAAADdSkBAAEF96Hzr6Wt1Mo7AQECJSkBAAEFWgLkG7UeqZ87AQECJSkBAAEFHwotJ9yCh6I7AQECJSkBAAEF6J0J/qERLQ47AQECJS0BgAOABgsAgAYAAoAHIwCABwAAA8ciAAAD0i0AgAOABSIAAAQ5LQAAAYAFAQAAAYAEAAEBAIADgASACS0AgAOACi0AgAWACwsAgAqACYAMIwCADAAABCUtAYAKgAgtAoAIgAsBAIAKAAKACgEAgAsAAoALIgAAA/QnAYAFBAABAwCABgACgAYiAAAEOSUpAQABBUWnynEZQeQVOwEBAiUkAAADTSYCBgQBJgIHBAAsDAcFIgAABGQNKAAFgEMAByMCAAcAAATUIgAABHksDQEFLA0CBiwNAwcsDQQIJgIJBAQsCAEKJgILBAUAEAELASYDCgQBACgGAgsmAgwEBAAoCgINPg8ACwANLA0KBgAoBgIGLA4GCiwOBQEsDgoCLA4HAywOCAQlLA0DBww4BQcIADgFBgcjAgAIAAAE7yIAAAWgLA0BCCwNAgksDQMKLA0ECyYCDQQEDDgFDQ4jAgAOAAAFFiQAAAOaACgJAg0AOA0FDiwNDgwmAg4EAww4BQ4PIwIADwAABTskAAADmgAoCAIOADgOBQ8sDQ8NADgMDQ4mAg0EBAw4BQ0PIwIADwAABWUkAAADmi0EAAmAAycAgAQEAAUkAAADrC0IgAUADAAoDAINADgNBQ8sDg4PLA4IASwODAIsDgoDLA4LBCIAAAWgLAwHBSIAAARkLQAYyhjK",
|
|
1861
|
+
"debug_symbols": "7Z3bbuM4DIbfJde5EKnzvMpgUfQ0RYAgKdJ2gUXRd18nqB1vwsaxqOkOoP+miBtStD7TIkXZyvvi4fHu7elmtfm1fVn8+Pm+WG/vb19X20139P6xXNztVuv16ulm/O+F2f9JfJB/eb7d7A9fXm93r4sfFKNfLh43D93HZLhr4ddq/bj4EezH8kzYesefwjYYPwhTYEGaOA1N27F0ltqONtlP6eiMG6QTScKU+hOJzHRZmMjYvunucwhj8b+WixQBRgST7R8OJh7BUL7c13w8aWPMIMtebJlz33DgCVkid2QY0oS0H07Z5zzq3wF3Au5vxE3Wg/d38nYGvL+VN8aTb+Xtp8MluTHvg1IqUAolliKVKIUCpSTf6ImPSj5ddjzOHD+FOXuecLz/L0WilNvpa/YV+ppNP6CYkwGlM8HG/H4T6bebIKs2YbvBqDdB2U05RbKhv87jpmWnCPY4PmYz5RQ0hIDuc7InTsFsGupr0PeVY39ClscxRI6oxpkh7o1imRxRk+OeTHLxyJFDFmN7L+x4FFGD5O/dVelHKCa+LOyHk/Acx6J7gtaAoJKgB0EdQQcf1BKEDyoJeviglqADQSXBBII6gsGCoJJgBEEdwcggqCSIWd0VBEN/yj7QKcGEbEZLEBm1lmAGwWmCg2z4r2hH0BLuYi1BB4JKgriLlQQZPqglCB9UErTwQS1B1GaUBB3mxVqCqM0oCXoCQSVB1GaUBANmdVqCqM1oCSKjPiW4xxKxfCRiQe4rYUlIaEUsyBAkLBmpp4gFsVzEggAtYHHGAYuEBQFawkII0CIWlJEkLIwALWJBgJaw4L0JGQu8RcSCdE7C4lBvEbEgnZOweHiLiKXVdI5z/24ojzc3EIXJUD6eczplGFrN/WoybDX0z2JIozf6/ekzsy62mlXWZNhq9KzIMLUaamsyRFy+hmEYcFA6jSme4IdXMHRmOGdn6Iwh/FDNsNnaYE2GyA/1DFutI81i6HmIy96bU4bNPgtfkyH8UM2w2ae5KzL0ra7w1mSI+bKaIWpfeoaofVVg2OqzlxUZJsz19Azhh2qGGePhNQzjsEGsz3zGEHFZyzAY+KGeIXJsNUOsBVRgiJqDmiHWAiowRFxWM0Qd+xqGlgaG1tIZQ9Sx1QybfYi3JkPEZTXDZvd2qckQcVnPEDFFzTA4MFQzhB+qGTa7IUxNhsht1AyxJlWBIXKbaxi6ODAMp2tSodlNbGoyxFqAlmE0iMt6hsgP1Qyb/X2Bmgzhh2qGjPFQ+25FZMxT1Awt8kM9Q8xT1Axdq3E5Dls0cLS2WPjAsNV5yhyGFMLwDGdIZ37Y7JY1FRk2uzdLTYatPo9dkWGz76fMYhhj3zDF7M8Ytprb1GTY6ny5IsNm97epybDV+XJFhs2up9RkiJiiZZiafcenJkP4oZ4hchs1w2bfk5rFMB+fFcl8zhC1LzXDZtekajKskWMPu1Ra9lMMu5lR39E4bnpfDjkXDrbvaQzZXBYmIjd0lSjZsfi+r9Y21NfUTF+J2EmdjUcb7nTtoWtSTKbyYCl7f66T5+vIBfoJnThf54si9sUdtTutUKL1RaFySsuXaKUiW6nIVi6ylUtssTFFWiXXi6nIFhX164uHbSa0vgjlU1qxRMtSkVaYPcawE7ln0//YQmZBZ/64xMHOtxPifJ1IBTq+QGf+OMvJFegU2Mnzx2ZruECnwA4V2CHRr7Pv/TpHPtORNyiY0CmwI7+APqGT5+u4AjuuwM5kLiDppPnXNNgCnQI78mZwl3XkF00mdAruhewKdOaPB87MH6+dHI8ndErsFPSHbYHO/Ovj7Ew/+OiO/r7drW7v1o8vncb+y7fN/etqu/k8fP3nuf/mbrdar1dPN8+77f3jw9vu8Wa9vd9/tzCff352Na4l5bQ/l8Nh4CWFeEjoDodp2aW5ndXO8r8=",
|
|
1862
|
+
"brillig_names": [
|
|
1863
|
+
"set_portal"
|
|
1864
|
+
]
|
|
1865
|
+
},
|
|
1866
|
+
{
|
|
1867
|
+
"name": "_increase_public_balance",
|
|
1868
|
+
"is_unconstrained": true,
|
|
1869
|
+
"custom_attributes": [
|
|
1870
|
+
"public",
|
|
1871
|
+
"internal"
|
|
1872
|
+
],
|
|
1873
|
+
"abi": {
|
|
1874
|
+
"error_types": {
|
|
1875
|
+
"10502589790419500451": {
|
|
1876
|
+
"error_kind": "string",
|
|
1877
|
+
"string": "Function _increase_public_balance can only be called internally"
|
|
1878
|
+
},
|
|
1879
|
+
"16761564377371454734": {
|
|
1880
|
+
"error_kind": "string",
|
|
1881
|
+
"string": "Array index out of bounds"
|
|
1882
|
+
},
|
|
1883
|
+
"17843811134343075018": {
|
|
1884
|
+
"error_kind": "string",
|
|
1885
|
+
"string": "Stack too deep"
|
|
1886
|
+
},
|
|
1887
|
+
"206160798890201757": {
|
|
1888
|
+
"error_kind": "string",
|
|
1889
|
+
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
1890
|
+
},
|
|
1891
|
+
"5019202896831570965": {
|
|
1892
|
+
"error_kind": "string",
|
|
1893
|
+
"string": "attempt to add with overflow"
|
|
1894
|
+
},
|
|
1895
|
+
"6485997221020871071": {
|
|
1896
|
+
"error_kind": "string",
|
|
1897
|
+
"string": "call to assert_max_bit_size"
|
|
1898
|
+
}
|
|
1899
|
+
},
|
|
1900
|
+
"parameters": [
|
|
1901
|
+
{
|
|
1902
|
+
"name": "to",
|
|
1903
|
+
"type": {
|
|
1904
|
+
"fields": [
|
|
1905
|
+
{
|
|
1906
|
+
"name": "inner",
|
|
1907
|
+
"type": {
|
|
1908
|
+
"kind": "field"
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
],
|
|
1912
|
+
"kind": "struct",
|
|
1913
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
1914
|
+
},
|
|
1915
|
+
"visibility": "private"
|
|
1916
|
+
},
|
|
1917
|
+
{
|
|
1918
|
+
"name": "amount",
|
|
1919
|
+
"type": {
|
|
1920
|
+
"fields": [
|
|
1921
|
+
{
|
|
1922
|
+
"name": "lo",
|
|
1923
|
+
"type": {
|
|
1924
|
+
"kind": "field"
|
|
1925
|
+
}
|
|
1926
|
+
},
|
|
1927
|
+
{
|
|
1928
|
+
"name": "hi",
|
|
1929
|
+
"type": {
|
|
1930
|
+
"kind": "field"
|
|
1931
|
+
}
|
|
1932
|
+
}
|
|
1933
|
+
],
|
|
1934
|
+
"kind": "struct",
|
|
1935
|
+
"path": "std::uint128::U128"
|
|
1936
|
+
},
|
|
1937
|
+
"visibility": "private"
|
|
1938
|
+
}
|
|
1939
|
+
],
|
|
1940
|
+
"return_type": null
|
|
1941
|
+
},
|
|
1942
|
+
"bytecode": "JgACBAEnAAABBIBIJgAABAMmAgQEAyYCBQQAHxgABQAEgEUtCIBFAAEtCIBGAAItCIBHAAMkAAAAUSQAAABuJwIAAQSASCYCAgQAOg0AAQACKgCAQwAAAAAAAAAAAQAAAAAAAAAAJwCARAQAAyUkAAAB7CwIAQQAAAECASYCBQEALA4FBCwIAQUAAAECASYCBgAALA4GBSwIAQYAAAECASYCBwACLA4HBh4CAAcBHgIACAAKOAcICSMCAAkAAADFJAAAAhUmAgcAASYCCAAiJgINBA4sCAAOLAwEDywMBRAsDAYRLAwHEiwMCBMsDAEUABAADQAkAAACJywEAAAsDA8JLAwQCiwMEQssDBIMLgwADAANHAwNDAAqAgAOAP////////////////////8OOAwODyMCAA8AAAFAJAAABUwcDA0OBRwMDgwAAjgNDA4JKAAOgEMADQA4DAIOHAwODAUcDAwCAAI4DgIMCSgADIBDAA4AOA0DDAA4DA4DHAwDDQUcDA0MAAo4DAMNIwIADQAAAZkkAAAFXiYCEAQRLAgAESwMBBIsDAUTLAwGFCwMBxUsDAgWLAwBFwAQABAAJAAAAicsBAAALAwSAywMEw0sDBQOLAwVDwUoAAyAQwABADgCAQQvDAAEAA8lJwCABAR4AA0AAACABIADIwCAAwAAAhQpAQABBfeh86+lrdTKOwEBAiUpAQABBZHAscTvmT2jOwEBAiUkAAAB7CwIAQgmAgkEAwAQAQkBJgMIBAEAKAgCCSwMCQosDgQKACgKAgosDgYKJgIEAAAsCAEGJgIJBAQAEAEJASYDBgQBACgGAgksDAkKLA4ECgAoCgIKLA4ECgAoCgIKLA4ECiwNBgkAKAkCCSwOCQYqAgAJAAAAAAAAAAACAAAAAAAAAAAsCAEKJgILBAUAEAELASYDCgQBACgKAgssDAsMLA4EDAAoDAIMLA4EDAAoDAIMLA4EDAAoDAIMLA4JDCwNBgkAKAkCCSwOCQYsCAEJAAABAgEsDgYJLA0KBgAoBgIGLA4GCiwIAQYAAAECASwOCgYsCAEKAAABAgEmAgsEACwOCwosCAEMAAABAgEmAg0BACwODQwmAg4EAiYCDwQBLAwLByIAAANUDDgHDgUjAgAFAAAD8iIAAANmLA0MBQo4BQ0HIwIABwAAA4AmAggEADsJAQgmAgUEDiwIAA4sDAkPLAwGECwMChEsDAwSABAABQAkAAAFcCwEAAAsDQkFLA0GBywNCggsDgUJLA4HBiwOCAomAgUBASwOBQwAKAcCBgA4BgsILA0IBQo4BQQGCjgGDQQjAgAEAAAD7SQAAAbNLAwFBCUjAgAFAAAD/yIAAAU+JgIQBAIMOAcQESMCABEAAAQWJAAABt8AKAgCEAA4EAcRLA0RBSwNChAsDQwRCjgRDRIjAgASAAAEQiYCEwQAOwkBEwsoABCARAARIwIAEQAABNAiAAAEVywNCRAsDQYRLA0KEiwNDBMmAhUEAww4EhUWIwIAFgAABH4kAAAG3y0EABCAAycAgAQEAAQkAAAG8S0IgAUAFAAoFAIVADgVEhYsDgUWADgSDwUOOBIFECMCABAAAAS7JAAABV4sDhQJLA4RBiwOBQosDhMMIgAABT4mAhAEESwIABEsDAkSLAwGEywMChQsDAwVABAAEAAkAAAFcCwEAAAsDQkQLA0GESwNDBItBAAQgAMnAIAEBAAEJAAABvEtCIAFABMAKBMCFAA4FAsVLA4FFSwOEwksDhEGLA4PCiwOEgwiAAAFPgA4Bw8FLAwFByIAAANUKQEAAQVaAuQbtR6pnzsBAQIlKQEAAQVFp8pxGUHkFTsBAQIlJAAAAewmAgYEASYCBwQALAwHBSIAAAWIDSgABYBEAAcjAgAHAAAF+CIAAAWdLA0BBSwNAgYsDQMHLA0ECCYCCQQELAgBCiYCCwQFABABCwEmAwoEAQAoBgILJgIMBAQAKAoCDT4PAAsADSwNCgYAKAYCBiwOBgosDgUBLA4KAiwOBwMsDggEJSwNAwcMOAUHCAA4BQYHIwIACAAABhMiAAAGxCwNAQgsDQIJLA0DCiwNBAsmAg0EBAw4BQ0OIwIADgAABjokAAAG3wAoCQINADgNBQ4sDQ4MJgIOBAMMOAUODyMCAA8AAAZfJAAABt8AKAgCDgA4DgUPLA0PDQA4DA0OJgINBAQMOAUNDyMCAA8AAAaJJAAABt8tBAAJgAMnAIAEBAAFJAAABvEtCIAFAAwAKAwCDQA4DQUPLA4ODywOCAEsDgwCLA4KAywOCwQiAAAGxCwMBwUiAAAFiCkBAAEFAtxuJ4B2Ep07AQECJSkBAAEF6J0J/qERLQ47AQECJS0BgAOABgsAgAYAAoAHIwCABwAABwwiAAAHFy0AgAOABSIAAAd+LQAAAYAFAQAAAYAEAAEBAIADgASACS0AgAOACi0AgAWACwsAgAqACYAMIwCADAAAB2otAYAKgAgtAoAIgAsBAIAKAAKACgEAgAsAAoALIgAABzknAYAFBAABAwCABgACgAYiAAAHfiUtABjKGMo=",
|
|
1943
|
+
"debug_symbols": "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",
|
|
1944
|
+
"brillig_names": [
|
|
1945
|
+
"_increase_public_balance"
|
|
1946
|
+
]
|
|
1947
|
+
},
|
|
1948
|
+
{
|
|
1949
|
+
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
1950
|
+
"is_unconstrained": true,
|
|
1951
|
+
"custom_attributes": [],
|
|
1952
|
+
"abi": {
|
|
1953
|
+
"error_types": {
|
|
1954
|
+
"16541607464495309456": {
|
|
1955
|
+
"error_kind": "fmtstring",
|
|
1956
|
+
"item_types": [],
|
|
1957
|
+
"length": 16
|
|
1958
|
+
},
|
|
1959
|
+
"17843811134343075018": {
|
|
1960
|
+
"error_kind": "string",
|
|
1961
|
+
"string": "Stack too deep"
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
"parameters": [
|
|
1965
|
+
{
|
|
1966
|
+
"name": "contract_address",
|
|
1967
|
+
"type": {
|
|
1968
|
+
"fields": [
|
|
1969
|
+
{
|
|
1970
|
+
"name": "inner",
|
|
1971
|
+
"type": {
|
|
1972
|
+
"kind": "field"
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
],
|
|
1976
|
+
"kind": "struct",
|
|
1977
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
1978
|
+
},
|
|
1979
|
+
"visibility": "private"
|
|
1980
|
+
},
|
|
1981
|
+
{
|
|
1982
|
+
"name": "nonce",
|
|
1983
|
+
"type": {
|
|
1984
|
+
"kind": "field"
|
|
1985
|
+
},
|
|
1986
|
+
"visibility": "private"
|
|
1987
|
+
},
|
|
1988
|
+
{
|
|
1989
|
+
"name": "storage_slot",
|
|
1990
|
+
"type": {
|
|
1991
|
+
"kind": "field"
|
|
1992
|
+
},
|
|
1993
|
+
"visibility": "private"
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
"name": "note_type_id",
|
|
1997
|
+
"type": {
|
|
1998
|
+
"kind": "field"
|
|
1999
|
+
},
|
|
2000
|
+
"visibility": "private"
|
|
2001
|
+
},
|
|
2002
|
+
{
|
|
2003
|
+
"name": "compute_nullifier",
|
|
2004
|
+
"type": {
|
|
2005
|
+
"kind": "boolean"
|
|
2006
|
+
},
|
|
2007
|
+
"visibility": "private"
|
|
2008
|
+
},
|
|
2009
|
+
{
|
|
2010
|
+
"name": "packed_note_content",
|
|
2011
|
+
"type": {
|
|
2012
|
+
"kind": "array",
|
|
2013
|
+
"length": 0,
|
|
2014
|
+
"type": {
|
|
2015
|
+
"kind": "field"
|
|
2016
|
+
}
|
|
2017
|
+
},
|
|
2018
|
+
"visibility": "private"
|
|
2019
|
+
}
|
|
2020
|
+
],
|
|
2021
|
+
"return_type": {
|
|
2022
|
+
"abi_type": {
|
|
2023
|
+
"kind": "array",
|
|
2024
|
+
"length": 4,
|
|
2025
|
+
"type": {
|
|
2026
|
+
"kind": "field"
|
|
2027
|
+
}
|
|
2225
2028
|
},
|
|
2226
|
-
"visibility": "
|
|
2029
|
+
"visibility": "public"
|
|
2227
2030
|
}
|
|
2228
2031
|
},
|
|
2229
|
-
"bytecode": "H4sIAAAAAAAA
|
|
2230
|
-
"debug_symbols": "
|
|
2032
|
+
"bytecode": "H4sIAAAAAAAA/9VZy67aQAwdSEJIuAEKn3Cl7tomXJ47Fn3c30AFPqHrrLppP7qMGCcH46siYVfFEpoknhyfOXZmJqHjztY//TrhOA5tz10b9dmGtrzPKkWs0pJn50F4dh+EZ/QgPGNFnh2Bp2/peUvc+ZlL3fl5bC7iTT7BEdzk/gYAwX6HNgttF/yKCakyYZBa+Otyvs/cpSnzf8kCZmqDvyD8vg1+Sbw/1y0+joXiRqF9rVstX+Eeb0U4xuIlXPJ1wfeF+SLwfWU+rOFvzId1T5xIN1qYlOtqY50XGlsKY+u80TrXaofXSOvcmdZoRTnPGB/On/gU1Kdu+fSYLwZfxnwJ+Eh/3z5DP577FPp9hONP0IfXZ+Su65n8lH/U3aK+YgP8k82lHPD8xPVlbPRhDmLQ85npY7FuoD4W+nt9pm/wp2Nvae0ai5ieqBFp1sf+zJeBL64v4+ThPIY4iEU8Etb/QzgfhbYH99D9YyF+j8W/4C1cQ404ViRco/7++Xwfjgfh52voJ93jructvc31ci7N4Xr4qwY/s+F/JPzcBn9J+AMb/GZv82SCPysJv7Dh38xBQ5v6afaWIxv+B8Ifm+DPD7QOv3OtNXNEOJ7Adb35u6pu2SNh/JxxtdojTRgfrg+uwd43FbiOBR/P4VSIMxXiSFiZItaTItboPx1jXxFroIg1VMTSzGOqiKWpV66IVShiada9pl6UR2mf5m0b2vJOk/ZpiviVtE/TfJcnram+YkFDHF/C+v9gOg9MeFYzWnPoWacYGLswin3rek3xC4EP8c4F3z0fZw+L9XGzXmxOW7JqOds0+SwYV34N34twPsb+0tov7fsUtS6ld/8h6OotBl/BfAn4iKP07j804n+L/hh/LPj4+n9rLifuej0csHHjN6+typjb74HSt3rj+Wtx67NJ8XN3PV//q++NqA/fS+cC17Hg4/uTXIiTC3EeEYt/s0cNfV2TTnHd+rVyuVq3f3TRXJS4y/8BHIufsP6/wjmOjdp75vzjalcdX3bH3WK338+/7yYM31sXdPoDg5oBSR0fAAA=",
|
|
2033
|
+
"debug_symbols": "tdfNaoQwFIbhe8k6i5z8mIm3UsoQNQ6BECVqoYj33jhM26GzLN9GiBwfN77g2dkQuu12jXmcFta+7SxNvV/jlOtpPzjrSkwp3q7Pt5k4L87c55fZ5/O4rL6srNWSs5AH1hpRnx5jCqxt1MFfBu33oLU/g0Ye75y5BgVbFHxBwQ4EkxAwmWCyhMkKJmuYbGByA5MtTL7AZFiDBGuQYA0SrEGCNUiwBgnWIMEaJFiD9L8GnXoM1k/hhXYwWgocTTha4miFozWONji6wdEWR+NqlLgaFa5GBarxqKcPX6LvUnhsTeOW+6clav2cw599ai5TH4athHOz+l2qzvSU4drc/zzqgZTmpFx9SX3RFw==",
|
|
2231
2034
|
"brillig_names": [
|
|
2232
|
-
"
|
|
2233
|
-
|
|
2234
|
-
"debug_log_oracle_wrapper",
|
|
2235
|
-
"notify_set_min_revertible_side_effect_counter_oracle_wrapper",
|
|
2236
|
-
"store_in_execution_cache_oracle_wrapper"
|
|
2237
|
-
],
|
|
2238
|
-
"verification_key": "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"
|
|
2035
|
+
"compute_note_hash_and_optionally_a_nullifier"
|
|
2036
|
+
]
|
|
2239
2037
|
},
|
|
2240
2038
|
{
|
|
2241
2039
|
"name": "claim",
|
|
@@ -3934,26 +3732,228 @@
|
|
|
3934
3732
|
"visibility": "databus"
|
|
3935
3733
|
}
|
|
3936
3734
|
},
|
|
3937
|
-
"bytecode": "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",
|
|
3938
|
-
"debug_symbols": "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sVDLa1++vvbl22tf/rd/zx39/r5tr3358NqXj699+fTal5fXvnx+7cu/Nte2+tqXb699+f7Sl+/ba18+vPbl42tfPr325eW1L59f+/Kv/dT2135q+ys/tftf/cuV4x+qxX7XtbG/a2kH+fbD6S8bJf/7pK7L9yPk8vsbTO15rXa8JH18iXx8Sf7gki9eCF89OO589fs4xTv8ekhlX7n/+f/98R9/+eN//PXP/9yXfPmv//O3P/3rL3//2/c///X///ftv/zHP/7y17/+5b/+/b//8fc//fk//+cff/73v/79T1/+2++27//z+9jSL2mTP3zFUf0+bOmXENIfvgXp93HfC4l1+8O3u/19rLL/Wb7e/W19Su2XlPv39Xn7pWz31b3uLx1vq9P25Z3yHVD69ZpdS0u/XbGvzvFOxvryn4O0X0K5vXrYNzFDyrfX3/3xy75pclu99333P+U+L/Tdgl9SuI8Bff2/9lUS7tMF3/4v+SX1+2/6v95X6r/IV1O+vHHM/Zf49Ta+3XQMv+wN/NsbS9p+kRTvXeav9xZlv5l8d2vY3RruNx72Ow31fuNhNzJu90/VtxtPv8T29mn58iop/CL319jb3SW+PUffzIi/pLo/IftT8v8A",
|
|
3735
|
+
"bytecode": "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",
|
|
3736
|
+
"debug_symbols": "7b3bjivLja39Lr5eFxkRjFO/imE03G7vhgHDbtjuH/jR2O++cx6kqrkUSs7KFapgcowbY5ZXhpQkU9QgQ/zif3/3n3/+j//5r3//y9/+z9//+bt/+/3//u6vf//TH//1l7//bf/rf38X0tf/75///ce/ffnzn//64z/+9bt/C6XEX37357/955d/1vh/f/nd//nLX//8u38r6f/+8nBxjKV+vzjG1u8X9zK6uEv7fnHaYji+OJTU2/0+JLxdHksfXp/fLq/17eo2fPVU0u1qCdsPV//hl98FoWeeeCbTM088U0x7RlJ+84x0xTMxxHK7kyD5N3qm0jNPPNPomSee6fTM2DNx+82eka3fLpYQ2/3itn19g/DqN4ijN4hbkJuTtncuHb5BavX++m/+LHFwaelb+H5t6eEtyYdRpFqU2020WOL7i7/ceLrqjctVbzxf9cbLVW+8XvXG21VvvF/0xtN21RsPV73xq35zpqt+c6arfnOmq35zpqt+c6arfnOmq35zpqt+c8pVvznlqt+cctVvTrnqN6dc9ZtTrvrNKVf95pSrfnPKVb855arfnPmq35z5qt+c+arfnPmq35z5qt+c+arfnPlTvzlrvO811Vjk1/dSDd1LM3Qv/XPvpffbvaTw63spm6F7CYbuJRq6l2ToXsTO56hkQ/diKO+Wauh5aYbuxVDerYbybjWUd6uhvFsN5d1qKO9WQ3m3Gsq71ZDerYb0bjWUd5uhvNsM5d1mKO82Q3m3iaF7yYbupRi6F0N6txnKu63buZe+GbqXYOheoqF7MZR3u6G82w3l3W4o73ZDebcb6jN0Q3o3bIYEb9gMKd6wGUq9YUuWbkYs3YyhbkPYDLUbwmYo/4bNUAIOm6UMHCxl4GApAwdDTYcQDKnfEAzJ3xAM6d8QLGXgYKjjG4Kh1kMIhnoPIRpqPoRoKQNHSxk4WsrA0VIGjpYycDTUggjRkgaOljRwtKSBk6UMnAz1f0Oy1IVIlroQSSzdjKUMnCxl4GQpAydLGThZysBiqQshljSwWNLAYkkDi6UMLJb6wGKpCyGWuhBiqQshljJwtpSBs6UMnC1l4GwpA2exdDOWNHC2pIGzJQ1sadQtZEt94GKpC1EsdSGKpS6EpXm3UCxl4GIpAxdLGdjSzFuwNPQWLE29BUtjb8HS3FuoljJwtdQHtjT6FizNvgVLw2+hWsrA1VIGtjT/FiwNwAVLE3DB0ghcsDQDFywNwQVLU3ChWcrAzVIf2NIgXLA0CRcsjcKFbikDd0sZ2NI0XLA0DhcszcMFSwNxwdJEXLA0EhcszcTFzVAGjpuhPnC0NBMXLc3E7W9l6WYMZeC4GcrA0dJMXLQ0ExctzcRFSzNx0dJMXLQ0ExctzcTFYCkDB0N94GhpJi5amomLlmbiYrCUgaOlDGxpJi5amomLlmbioqWZuGhpJi5amomLlmbiYrSUgaOhPnC0NBMXLc3ERUszcTFZysDJUga2NBMXLc3ERUszcdHSTFy0NBMXLc3ERUszcVEsZWCx1Ae2NBMXLc3ERUszcVEsZWCxlIEtzcRFSzNx0dJMXLQ0ExctzcRFSzNx0dJMXLR0+Fu0dPpbtDQTFy3NxEVLM3HR0glw0dIRcNHSTFy0NBMXLc3ERUszcdHSTFy0NBMXLc3ExWopA1dLfWBLM3HR0kxctDQTF6ulDFwtZWBLM3HR0kxctDQTFy3NxEVLM3HR0kxctDQTF5ulDNws9YEtzcRFSzNx0dJMXGyWMnC3lIEtzcRFSzNx0dJMXLQ0ExctzcRFSzNx0dJMXOyWMnA31AdOlmbikqWZuGRpJi5thjJw2gxl4GRpJi5ZmolLlmbikqWZuGRpJi5ZmolLlmbiUrCUgYOhPnCyNBOXLM3EJUszcSlYysDBUga2NBOXLM3EJUszccnSTFyyNBOXLM3EJUszcSlaysDRUB84WZqJS5Zm4pKlmbiULGXgZCkDW5qJS5Zm4pKlmbhkaSYuWZqJS5Zm4pKlmbgkljKwWOoDW5qJS5Zm4pKlmbgkljKwWMrAlmbikqWZuGRpJi5ZmolLlmbikqWZuGRpJi5lSxk4W+oDW5qJS5Zm4pKlmbiULWXgYikDW5qJS5Zm4pKlmbhkaSYuWZqJS5Zm4pKlmbhULGXgYqkPbGkmLlmaiUuWZuJStZSBq6UMbGkmLlmaiUuWZuKSpZm4ZGkmLlmaiUuWZuJSs5SBm6U+sKWZuGRpJi5ZmolLzVIGbpYysKWZuGRpJi5ZmolLlmbikqWZuGRpJi5ZmolL3VIG7pb6wJZm4pKlmTixNBMnm6EMLJuhDCyWZuJkM5SBxdJMnFiaiRNLM3FiaSZOLM3ESbCUgYOhPrBYmokTSzNxYmkmToKlDBwsZWBLM3FiaSZOLM3EiaWZOLE0EyeWZuLE0kycREsZOBrqA4ulmTixNBMnlmbiJFrKwMlSBrY0EyeWZuLE0kycWJqJE0szcWJpJk4szcRJspSBk6U+sKWZOLE0EyeWZuJELGVgsZSBLc3EiaWZOLE0EyeWZuLE0kycWJqJE0szcZItZeBsqQ9saSZOLM3EiaWZOMmWMrClmTixdE6cWDonToolDVwsZWBLM3FSLGXgYikDF0sZuFjqA1uaiRNL58RJtaSBqyUNXC31gT95Jm7f37rdzL6h83Azvz0D7xXG7WZaOL6Z0rfw/drSww8383hxi3K7iRa/vNyv7jxf9s7LZe+8XvbO22XvvF/1zidMCK6683DZO4+XvfN02Tu/7Hdou+x3aLvsd2i77Hdou+x3aLvsd2i/7Hdov+x3aL/sd2i/7HfohLnUVXd+2e/Qftnv0H7Z79B+2e/QftXv0Lxd9Ts0b1f9Ds3bVb9D83bV79C8XfU7NG9X/Q7N21W/Q/N21e/QvH3qd+jxDmDeuqGbCZulmwmfezNHm245REs3kyzdjFi6mWzpZoqlT1O1dDOWMnDohp6ZuFm6GUsZOFrKwNFSBo6WMnC0lIGjpQwcLWXgaCkDR0saOFnSwMlSBk6WMnCylIGTpQycLGXgVCzdTLV0M83SzVjSwGIpA0uwdDPR0s0kSzcjlm7GUgYWSxlYLGVgsZSBxVIGzpa6ENmSBs6WNHC2pIGzpQycs6WbsdSFyJa6ENlSFyJbysDFUgYuljJwsZSBi6UMXMTSzVjSwMWSBi6WNHCxlIGLpT5wtdSFqJa6ENVSF6JaysDVUgauljJwtZSBq6UMXC11IaolDdwsaeBmSQM3Sxm4WeoDN7F0M5a6EM1SF6JZysDNUgZuljJwt5SBu6UM3C11IbolDdzF0s1Y0sDdUgbulvrA3VIXohvqQpTNUBeibIYycNkMZeCyGcrAZTOUgctmKAOXzVAXomyGNHDZDGngshnSwMXSTFwJhvrAJRjqQpRgqAtRPnsm7vhmLGXgYCkDB0sZOFjKwJZm4oqlmbhiaSauWJqJK5Zm4kq0lIGjoT5wsTQTVyzNxBVLM3ElWsrAyVIGtjQTVyzNxBVLM3HF0kxcsTQTVyzNxBVLM3ElWcrAyVIf2NJMXLE0E1cszcQVsZSBxVIGtjQTVyzNxBVLM3HF0kxcsTQTVyzNxBVLM3ElW8rA2VIf2NJMXLE0E1cszcSVbCkDZ0sZ2NJMXLE0E1cszcQVSzNxxdJMXLE0E1cszcSVYikDF0t9YEszccXSTFyxNBNXqqUMXC1lYEszccXSTFyxNBNXLM3EFUszccXSTFyxNBNXmqUM3Cz1gS3NxBVLM3HF0kxcaZYycLOUgS3NxBVLM3HF0kxcsTQTVyzNxBVLM3HF0kxc6ZYycLfUB7Y0E1cszcQVSzNxpRvKwHUzlIGrpZm4amkmrlqaiaubWLoZQxq4WpqJq5Zm4qqlc+KqpXPiqqWZuGppJq5amomrls6Jq5bOiauWZuKqpZm4amkmrlqaiauWZuKqpZm4amkmrkZLGTga6gNXSzNx1dJMXLU0E1ejpQwcLWVgSzNx1dJMXLU0E1ctzcRVSzNx1dJMXLU0E1eTpQycDPWBq6WZuGppJq5amomrYikDi6UMbGkmrlqaiauWZuKqpZm4amkmrlqaiauWZuJqtpSBs6U+sKWZuGppJq5amomr2VIGzpYysKWZuGppJq5amomrlmbiqqWZuGppJq5amomrxVIGLpb6wJZm4qqlmbhqaSauFksZuFrKwJZm4qqlmbhqaSauWpqJq5Zm4qqlmbhqaSauVksZuFrqA1uaiauWZuKqpZm42ixl4GYpA1uaiauWZuKqpZm4amkmrlqaiauWZuKqpZm42i1l4G6pD2xpJq5amomrlmbiareUgbulDGxpJq5ZmolrlmbimqWZuGZpJq5thjRwszQT1zZDGbhthvrAzdJMXLM0E9cszcS1YCkDB0sZ2NJMXLM0E9cszcQ1SzNxzdJMXLM0E9cszcS1aCkDR0N94GZpJq5ZmolrlmbiWrSUgaOlDGxpJq5ZmolrlmbimqWZuGZpJq5ZmolrlmbiWrKUgZOhPnCzNBPXLM3ENUszcS1ZysBiKQNbmolrlmbimqWZuGZpJq5ZmolrlmbimqWZuCaWMrBY6gNbmolrlmbimqWZuJYtZeBsKQNbmolrlmbimqWZuGZpJq5ZmolrlmbimqWZuFYsZeBiqQ9saSauWZqJa5Zm4lqxlIGLpQxsaSauWZqJa5Zm4pqlmbhmaSauWZqJa5Zm4lq1lIGrpT6wpZm4ZmkmrlmaiWvNUgZuljKwpZm4ZmkmrlmaiWuWZuKapZm4ZmkmrlmaiWvdUgbulvrAlmbimqWZuGZpJq51Sxm4W8rAlmbimqWZuGZpJq5bmonrlmbiuqWZuG5pJq5vhjJw3wz1gbulmbhuaSauW5qJ65ulDGxpJq5bOieuWzonrgdDGrgHSxnY0kxcD5YycLCUgYOlDBwM9YG7pZm4bumcuB4taeBoSQN/9kzc8c18bgaWmG83I7E+3Mxvz8C93K7tXbmZsOXbtWFr6X5xLH10dQvpdnVL7X51kjK4Ouaw3e455/zD1V8trTCWNhhLO4qlE+YQr2JpgLE0wliaYCwVGEszjKUwGinBaKQEo5ESjEYSGI0kMBpJYDSS+NFItdfbPbcsytVNtlszo0kKj34RUL/UdHteWv3V1V/94kd/zfWLH7X2Mb/kcru65VaVq4OI3JqU+7/LIB/50YJr/ehHac79nPrRpVP9kv2o2KWfu+xHI6/1ox8FPvdziqrXNb8I65hRHZOp18fPC6pe1/xC/T3n+wtVf8/2I/X68HNaUPW65hfq7ymfu4Kqv2f7kXp9/DkV+mXoF1S9rtQxhXp9/Lyg6nXNL9Tfc76/UPX3ZD9W6vXh57Si6nXNL9Tfcz53qPp7th+Fn9Ph55T99bFfUPW6UsdU6vXx88Lfq4z9Qv095fur8fctc/xIvT78nDb+XmXsF+rvOZ87oR+n+JF6ffw5ZX997BdUva7UMY16ffy88PcqQ7906u8p31+dv2+Z40fq9fHnlL9XGftF+Lmb8rlD1d+z/Ui9Pv6csr8+9guqXlfqmE69PnpewrbxBytPHEMFPuMbbHckf+IyyZHU7E8+qkLHjB1DFT7po0fsyyRHUrc/+aiy0f7EMajK/biiCVugch8/MYG/XXniGCrxOd9igb92meRI4Ud1/FHl71eeOIZKfNJHjwSYSY6kcn/yUWXPfeyYiKrctZImUrk/eWL4M5YnjqESn/MtNuEQOzryqyOp3J98VPlTlieOoRKf9NEjDGaSI6ncxx9VRwclTnYMqnLXShpHxzBOfmL4a5YnjhF+i035FnN0huRiR1K5P/mo8tcsTxxDJT7po0cuzBxHOjq+c+5H1dFpn5Mdg6rctZIG9ixR9YkROmbsGCrxSd9i/PXLJEdSuT/5qPLXLE8cQyU+56PHI0hnOZLKffxR5aGizxyDqty1kgb2WFH1ieGvWZ44hkp80rcYf/0yyZFU7k8+qvw1y9gxsIeLzv7o8TTSWY6kcn/yUWXP/YljhCXNsKSBPWFUfWL4a5YnjqESn/Qtxl+/THIklfv4o8pjRp85hkp8zkePB5POciSV+5OPqtAxY8egKnetpIE9bFR9YvhrlieOoRKf9C3GX7/McSTsAaXaR5Unjj5zDJX4pI8eWTGTHCn8qI4/quy5P3EMqnLXShrYc0fVJ4a/ZnniGCrxOd9iPKp0liOp3McfVR4++swxVOKTPnpCR85xJJX7k48qe+5PHIOq3LWSBvYIUvWJ4a9Zho4JsGeQTv4WCzyzdJYjqdyffFT5a5YnjhF+9OZ89MiKmeRIKvcnH1X23J84BlW5KyVN8HMGaYo5f786xV9lma+m+jlVVDfVjVrWTXWjZ3VT3ShU3VTBMdWNKtRNdaPbdFPdKDHdVDfaSjfVj1oq9yIrlT5QzH5OctRN9aOWVFP9qKX29lntIf7WAtHPaYuzHSOgjpndtPJzeuJqR/pRkZM/qn4052TH+FGoiz96fvTvWkf6OW1x8kfVz2mLsx2Dqty1HQw/py3ulobvV8tWN+XqHqTc7jpuXctJm9R4v3Hp28CRQkfOcaQbpb/akW6U/mpHuqkMVjvSTSWx2pFuKonFjvRz+uNqR7qpPFY70k2lstqRrGwmOVLoyDmOZGUzyZGsbCY5kpXNJEe6qWxy3G7N+vz19R5MdVN7qKb6OZFSN9WNftdNdaOwcwq3pJdTLVoaq7G024vXFPW0F0u433rsg90DP+dGrnel0JWzXOlGZ3+uKwc/2fVzmuWrXalKRD/nWa53pR+1vdyVftT8alf6OTVzvSv9VCPLXclqZ5orWe1Mc6XQlbNcyWpnmitZ7UxzJaudaa6ErXbSHdYSqhTtt85fFPh9cGD/hokDV8JWOx91ZU357spaBq70c9LoR11Z6v3Fa93SwDWw1YvuGthqpKU317Q8GGrycx5oTu2Wh7ME9RuwhbuJ+7/z4BvQz4mg813jSP3Pdo0jNf8x10R5e/FYNcpd6dstk5Ue3jaBwujG99e+mdniO12wX/zN6Y50/3Wc7qhCuI7THdUSl3G6n1NSr+R0R/XMdZzuqFK6jtNha7CVThc6/fOdDls3rnQ6K9IFTmdFusDprEgXOJ0V6ec73c9pwVdyOivSBU5nRbrA6axIFzhd6PTPdzor0gVOZ0W6wOmsSBc4nRXpAqezIv10p0c/p2ZfyemsSBc4nRXpAqezIl3gdKHTP9/prEgXOJ0V6QKnsyJd4HRWpAuczor0853u5+z4KzmdFekCp7MiXeB0VqQLnC50+uc7nRXpAqezIl3gdFakC5zOinSB01mRfr7TIyvSBU5nRbrA6axIFzidFekCp8vY6e12NPjeh6zHTpet3LBnEtObJ8PY7/V+96GKvLuh9P2Osrk7KubuqJq7o2bujrq1O0qbuTsK5u4omruj9Ml3FFO/fR1EeXcq29sdfXbO3r8lyv2Oev7hjkbfrLLdv1l/+MoZXd0k3l67ybvvvvH3cMrlftvbu2tHN13D7Us41pSOLw61lvtT8M7C8cXb/ZV3A9v7i7/FJzM+puPz2d/nMYcbSDbmLJrH8506u23vwrMNLy79Hp4fvdhBglkZTD/BbAymn2B2BtNNMGUzHcwvbYPb7afyYzS/3X+4+P1H2/ff6v0Ah76J8mmq/fastRDfPWp1qG3vnbe9LVt/uPqbZxI988QzQs888UyG9UyKd8/IyDO2a6OVnrFdaKz0jG3V/krP5DfP1DDwjG0JvNAz2bieXOgZ40r1ld/a7zwTB57B1cD3Sm7f1ioDz+BqYM0zQs888QyuBn6XZ/pAz2RPGriVt82elBXXvK5xFfvd52nTelHpHqCQUvhtjavsSbbDB9NTpWEkmMtaytlTcYQezOKpnpsWzG+usV7Q5fvWQ09FE1pye+n6/imoowc3tvtdx9bCu/v47hjr9dwyx1gv55Y5RuiYsWOsF3PLHGO9llvmGOt10TLHWK8xljnGul5f5ZhqXfsucwyV7xPHUPk+cQyV7xPHCB0zdgyV7xPHUPk+cQyV7xPHUPk+cQyV79gxjcr3iWOofJ84hsr3iWOofJ84RuiYsWOofJ84hsr3iWOofJ84hsr3iWOofMeO6VS+TxxD5fvEMVS+TxxD5fvEMULHjB1D5fvEMVS+TxxD5fvEMVS+TxxD5Tt0TNqofJ84hsr3iWOofJ84xpPyfbO1te0Hx3yzVYBs9aRPe3nHyQrKEy+13miq0rb30yoYnKy0eVLgDP2HQu+pxmDoPxR6T1UUQ/+h0HuqExn6j4Q+eKqEGfoPhd5Trc/Qfyj0nroZDP2HQu+pX8PQfyj0wtCjhp7dPNjQs5sHG3p282BDz24ebOjZzUMNfWQ3Dzb07ObBhp7dPNjQs5sHG3ph6FFDz24ebOjZzYMNPbt5sKFnNw829OzmoYY+sZsHG3p282BDz24ebOjZzYMNvTD0qKFnNw829OzmwYae3TzY0LObBxt6dvNQQy/s5sGGnt082NCzmwcbenbzYEMvDD1q6NnNgw09u3mwoWc3Dzb07ObBhp7dPNTQZ3bzYEPPbh5s6NnNgw09u3mwoReGHjX07ObBhp7dPNjQs5sHG3p282BDz24eaugLu3mwoWc3Dzb07ObBhp7dPNjQC0OPGnp282BDz24ebOjZzYMNPbt5sKFnNw819JXdPNjQs5sHG3p282BDz24ebOiFoUcNPbt5sKFnNw829OzmwYae3TzY0LObhxr6xm4ebOjZzYMNPbt5sKFnNw829MLQo4ae3TzY0LObBxt6dvNgQ89uHmzo2c1DDX1nNw829OzmwYae3TzY0LObBxt6YehRQ89uHmzo2c2DDT27ebChZzcPNvTs5oGGXjZ282BDz24ebOjZzYMNPbt5sKEXhh419OzmwYae3TzY0LObBxt6dvNgQ89uHmroA7t5sKFnNw829OzmwYae3TzY0AtDjxp6dvNgQ89uHmzo2c2DDT27ebChZzcPNfSR3TzY0LObBxt6dvNgQ89uHmzohaFHDT27ebChZzcPNvTs5sGGnt082NCzm4ca+sRuHmzo2c2DDT27ebChZzcPNvTC0KOGnt082NCzmwcbenbzYEPPbh5s6NnNQw29sJsHG3p282BDz24ebOjZzYMNvTD0qKFnNw829OzmwYae3TzY0LObBxt6dvNQQ5/ZzYMNPbt5sKFnNw829OzmwYZeGHrU0LObBxt6dvNgQ89uHmzo2c2DDT27eaihL+zmwYae3TzY0LObBxt6dvNgQy8MPWro2c2DDT27ebChZzcPNvTs5sGGnt081NBXdvNgQ89uHmzo2c2DDT27ebChF4YeNfTs5sGGnt082NCzmwcbenbzYEPPbh5q6Bu7ebChZzcPNvTs5sGGnt082NALQ48aenbzYEPPbh5s6NnNgw09u3mwoWc3DzX0nd082NCzmwcbenbzYEPPbh5s6IWhRw09u3mwoWc3Dzb07ObBhp7dPNjQs5sHGvq8sZsHG3p282BDz24ebOjZzYMNvRgP/Raehf7b/dtuScWcyv3qd7EaP7ohRrlZG9PbM5PS8EFP7XZ1l3dGhuHDWLabkamEd0a20cVR4u3iKO39xd+cbrsZ5NTpttswTp1uuwHi1Om2Ww8XdXqqt1dO6f1df3d6sF30O3W67XL7ok6XcHe6xH58cWzp9spx1/TKxUHkHpgSHsNpu4RmOH91cQzpdnF8X1yMLs71dm3u/b153yJvu4Jm5F8XeWHkQSPP1sO1Ip/vPbbY4m+KPPsfqJFnE+ZSkU/39n5MvT4KdrZ3XIWTjSNP4YxsSV0qnHmLd39IOL445Hbf0y1beow9O2O4sWcbzW/sa7pv6Nf3rv64Fo/sufEx+YnHRPiY8DHRHxN28xw/JvfQh9p/U9M3svXHx+QnHhP2CZc/Jm/NhdaUV9Y29iP7hJcK57xNvsiWImjkE7uP14r8tE2+xN4jauTZebxU5JUNpMQOoatwCsPpKZzsuF0qnDO3+BLbaLixZ2/Mb+znbcgk9tz4mPzEY8IGHR8T/TERdvMcPybT9u2ErT8+Jj/xmLBPuPox6XJv+nat6atVJMI+oatwCsN5pXBOVHlsKaJGng1F1MiznXityM9T4ewQokaeTb9XRL7f3JfylrUyfSI3K7M5d6lwzvuRZWa/DTXybKGhRp7dtmtFftrPa7Mw8qCRZ2PuUpFXfrqZ2W1zFU620FyFk32xS4Vz5o9rMztjsLEvbKP5jf28DbPCnhsfk594TNig42PyE48Ju3mOH5NpO7ZF+JjwMdEfE/YJlz8mE7lZhX3CS4Vz3iZfYUsRNfLsPl4r8tM2+Qp7j6CRr+w8XiryygZSZYfQVTjZyXMVTnbcLhXOmVt8VRh72NizN+Y39vM2ZCp7bnxMfuIxYYOOj8lPPCbs5jl+TKbt21W2/viY6I9JY59w9WMyE7TU2Cd0FU72CS8Vznkqr7GliBp5YeRBI8924rUiP0+Fs0OIGnnjTb+S7mVpeW+p7chHud31/s/2KKuNt9B8Ot14Q8ql07vx9o5PpxtvwlzT6aneKZip50enG2+V+HS68S7FNZ3+scM5JlI/uzCcVwrnvBGRbrz1wMi/LPLGWw+M/Msiz9bDtSI/bTios/+BGnk2YS4V+ePBk7KxveMqnGwcuQonW1KXCufE0aD9/2LsYWMvjL3b2E/7uc9uPB8TPib6Y8IGHR+Tn3hM2M1z/JjM+r1Z2dj642PyE48J+4TLH5N51M8S2Ce8VDinbfKVwJYiauTZfbxW5Gdt8u1GMPKgkRdG/kqRVzaQAjuErsLJTp6rcLLjdqlwztziC2yj4caevTG/sZ+3IRPZc+Nj8hOPCRt0fEx+4jFhN8/xYzJt3y6y9cfH5CceE+FjsvgxmYiJLJF9QlfhZJ/wUuGcqPLYUkSNPBuKqJFnO/FakZ+mwhM7hKiRZ9PvFZH/0OEc87hZu7cYziuFc96PLBP7baiRF0YeNPLstl0r8tN+XpvYmEONPBtzl4q88tPNxG6bq3CyheYpnMK+2KXCOfPHtcLOGG7s2UbzG/t5G2bCnhsfk594TISPCR8T/TFhN8/xYzJtx1bY+uNj8hOPCfuEyx+TidwsYZ/wUuGct8knbCmCRj6z+3ityE/b5MvsPaJGnp3HS0Ve2UDK7BC6CqcwnJ7CyY7bpcI5c4svs42GG3v2xvzGft6GTGbPjY/JTzwmbNDxMdEfk8JunuPHZNq+XWHrj4/JTzwm7BOufkxmgpYK+4SuwikM55XCOVHlsaWIGnk2FFEjz3bitSI/T4WzQ4gaeeNNv3aPZWw5/RD5r/dfjXej2pbe7l8G92+8TdLLnf22hTq4f+P1u3r/n16wlu3+RP+QQvrtjsTcHWVzd1TM3dGna6eS2v2Och/cUTN3R93aHbVP//bob0qm9zy4o/H3QYjlfkc5vL+jb6viqVXj3Be3tx+BSji2PnwZHLpJkbS/3/3yto20SLvFo4R3xsfRtTXc6pra3kTcF7XzcGnbReH3a1t9F4NdLI6ulrtb9psX5eqUyz2827trR8Gt4e65H29jrOHKm4bLysXb/ZXDVtr7i79FUhhJJ5HMnx3JIrdk12JTIrlnw+1+9++qiWEsS99ucS89KJXVrvPlfhslPtQprdAvQ79U+mXol0a/DP3S6ZeRX/pGvwz9EuiXoV8i/TL0S6Jfhn4R+mXoF+rdsV+od8d+od4d+4V6d+wX6t2RX+pGvTv2C/Xu2C/Uu2O/UO+O/SL0y9Av1Ltjv1Dvjv1CvTv2C/Xu2C/Uu0O/BOrdsV+od8d+od4d+4V6d+wXoV+GfqHeHfuFenfsF+rdsV+od8d+8aN3a5Tbb+pqLPJgavQjYVVT/ahS1VQ/QrPGfrvpmsLAVD/aUTVVcEz1o/BUU/2INtVUPzpMzcB+pJVqKo5aSp7U0vFnNXlSS4qpOGop4ailJDim4qilhKOWEo5aSjhqKeGoJcHpLQlOb0lw1JLgqCXBUUuCo5YERy2JJ7WkmOpJLSmmelJLx6ZmnN5SxlFL2ZNaUkz1pJYUUwXHVE9qSTEVRy1lHLWUcdRSxlFLBUctFZyduILTWyo4vaWC01sqOGqpeFJLiqk4O3EFZyeu4OzEVRy1VHHUUsVRSxVHLVUctVRxduIqTm+p4vSWKk5vqeKopYbzu6WGsxPXcHbiGs5O3OcfUrEsAzs6xUE1FUctOTprQTUVRy05OhFBM9XRIQeqqTi9JUdHEaim4qglRwcGqKbi7MQ5wvqrpuLsxDmC76sZGEYtNUeIfNVUGLXUHIHsVVNhduLaJjimwvSWmiMovGoqjFpqjtDtqqkwO3HNEWBdNRVmJ645wqBrGdgR2Vw1VXBMxVFLjpDiqqkwO3HNEfhbNRWnt+SK5a2YiqOWXLG8FVNhduKaK5a3YirMTlzDYXk3VyxvxVQcteSK5X1sKg7Lu+GwvBsOy7vhsLwbDsu7uWJ5H6slVyxvxVScnTgclnfDYXk3Vyzv4wzsiuWtmIqjlnBY3g2H5d1wWN4Nh+XdcFjeDYfl3VyxvI/VkiuWt2Iqzk4cDsu74bC8myuW93EGdsXyVkzFUUs4LO+Gw/JuOCzvhsPybjgs74bD8m6uWN7HaskVy1sxFWcnDofl3XBY3s0Vy1vJwDhqCYfl3XBY3g2H5d1wWN4Nh+XdcFjeDYfl3VyxvI/VkiuWt2Iqzk4cDsu74bC8myuW93EGdsXyVkwVHFNx1BIOy7vhsLwbDsu74bC8Gw7Lu7lieR+rJVcsb8VUnJ04HJZ3w2F5N1csbyUD46glHJZ3w2F5dxyWd8dheXcclnfHYXn3TXBMhVFL3RXLWzEVZieu47C8Ow7Lu7tieR9nYFcsb8VUHLWEw/LuOCzvjsPy7jgs747D8u44LO/uiuV9rJZcsbwVU2F24joOy7vjsLy7K5b3cQZ2xfJWTMVRSzgs747D8u44LO+Ow/LuOCzvjsPy7q5Y3sdqyRXLWzEVZycOh+XdcVje3RXLW8nAOGoJh+XdcVjeHYfl3XFY3h2H5d1xWN4dh+XdXbG8j9WSK5a3YirOThwOy7vjsLy7K5b3cQZ2xfJWTBUcU3HUEg7Lu+OwvDsOy7vjsLw7Dsu7u2J5H6slVyxvxVScnTgclnfHYXl3VyxvJQPjqCUclnfHYXl3HJZ3x2F5dxyWd8dheXcclnd3xfI+VkuuWN6KqTg7cTgs747D8u6uWN7HGdgVy1sxFUct4bC8Ow7Lu+OwvDsOy7vjsLw7Dsu7u2J5H6slVyxvxVScnTgclnfHYXl3Vyzv4wzsiuWtmIqjlnBY3h2H5d1hWN5xg2F576ai9JZ2U1F6S7upKGppN1VwTEXZidtNRdmJ201F2YnbTUVRS7upOGoJhuW9m4qjlmBY3rupKDtxu6mCYypKb2k3FaW3tJuKo5ZcsbwVU1F24uIGw/LeTUXZidtNxVFLrljeiqmCYyqOWoJhee+mouzE7abi9JZgWN5xg2F576biqCVXLG/FVJydOBiW924qzk6cK5a3koFx1BIMy3s3FUctwbC8d1NxduJgWN67qTi9JRiW924qjlpyxfJWTMXZiYNhee+m4uzEuWJ5H2dgVyxvxVQctQTD8t5NFRxTcXbiYFjeu6k4vSUYlvduKo5acsXyVkzF2YmDYXnvpuLsxLlieR9nYFcsb8VUHLUEw/LeTcVRSzAs77jBsLx3U3F6SzAs791UHLXkiuWtmIqzEwfD8t5NxdmJc8XyVjIwjlqCYXnvpuKoJRiW924qzk4cDMt7NxWntwTD8t5NxVFLrljeiqk4O3EwLO/dIpydOFcs7+MM7IrlrZgqOKbiqCUYlvduEc5OHAzLe7cIprcUcFjewRXL+1AtBVcsb8VUmJ24sAmOqTA7ccEVy1vJwDBqKeCwvAMOyzvgsLwDDss74LC8Aw7LO+CwvIMrlvexWnLF8lZMhdmJCzgs74DD8g6uWN7HGRiH5R1csbwVU3F6S65Y3oqpOGoJh+UdXLG8lajiqCVXLO9jU12xvBVTcdSSK5b3cQZ2xfJWTBUcU2F+txQ8sbwl5pupEuujqbbVUki3pLr3NtuxqaVv4fvFpYcfTH28uEWR+22U+OgX29JqnV9s67BlfjGOFF/nF9sKb51fbMvBdX6xrR3X+UXol6FfbKvSdX6xLWHX+YV6d+wX6t2xX6h3h34xDoVf5xfq3bFfqHfHfqHeHftF6JehX6h3x36h3h37hXp37Bfq3bFfqHeHfjGO9V/nF+rdsV+od8d+od4d+0Xol6FfqHfHfqHeHfuFenfsF+rdsV+od4d+MX4wwzq/+NG72i9WjZ/iMNVUP6pUNVUcmXr8M07jpzhMNdWPHFRN9aPwVFP9iDbVVD86TMvAxk9xmGoqjloyforDzM+q8VMcppoqOKbiqCXjpzhMNRVHLRk/xWGqqThqyfgpDlNNxVFLxk9xmGoqTm/J+CkOMzOw8VMcppqKo5aMn+Iw1VQctWT8FIeJpkbjpzhMNdWTWlJMhektReOnOExUS3ETHFM9qSXFVE9qSTHVk1pSTIVRS9H4KQ4zTTV+isNUU3HUkvFTHKaaCrMTF42f4jDVVJjeUjR+isNUU3HUkvFTHKaaCrMTF42f4jDVVJiduGj8FIeZGdj4KQ5TTRUcU3HUkvFTHKaaCrMTF42f4jDVVJzekvFTHKaaiqOWjJ/iMNVUnJ0446c4TDUVZyfO+CkOUzMwjlpydDCDaiqOWnJ0fIJqKs5OnKNDDlRTcXpLjo4iUE3FUUuODgxQTcXZiXOE9VdNxdmJcwTf1zKwI56+aiqOWnJEvVdNFRxTcXbiHOHmVVNxekuOoPCqqThqyRG6XTUVZyfOEWBdNRVnJ84RBl3LwI7I5qqpOGrJEX9cNRVHLTmihGumOgJ/q6bi9JZcsbwVU3HUkiuWt2Iqzk6cK5a3YirOThwOyzu6Ynkfm+qK5a2YiqOWcFjeEYflHXFY3hGH5R1xWN7RFcv7WC25YnkrpuLsxOGwvCMOyzu6YnkfZ2BXLG/FVMExFUct4bC8Iw7LO+KwvCMOyzvhsLyTK5b3oVpKrljeiqkwO3FpExxTYXbikiuWt5KBYdRSwmF5JxyWd8JheScclnfCYXknHJZ3wmF5J1cs72O15IrlrZgKsxOXcFjeCYflnVyxvI8zsCuWt2IqjlrCYXknHJZ3wmF5JxyWd8JheScclndyxfI+VkuuWN6KqTg7cTgs74TD8k6uWN7HGdgVy1sxFUct4bC8Ew7LO+GwvBMOyzvhsLwTDss7uWJ5H6slVyxvxVScnTgclnfCYXknVyxvJQPjqCUclnfCYXknHJZ3wmF5JxyWd8JheScclndyxfI+VkuuWN6KqTg7cTgs74TD8k6uWN7HGdgVy1sxVXBMxVFLOCzvhMPyTjgs74TD8k44LO/kiuV9rJZcsbwVU3F24nBY3gmH5Z1csbyVDIyjlnBY3gmH5Z1wWN4Jh+WdcFjeCYflnXBY3skVy/tYLblieSum4uzE4bC8Ew7LO7lieR9nYFcsb8VUHLWEw/JOOCzvhMPyTjgs74TD8k44LO/kiuV9qJbEFctbMRVmJ05wWN6Cw/KWTVAysLhieSumwqglwWF5Cw7LW3BY3oLD8hYclrfgsLzFFcv7WC25YnkrpsLsxAkOy1twWN7iiuWtZGActYTD8hYclrfgsLwFh+UtOCxvwWF5Cw7LW1yxvI/VkiuWt2Iqzk4cDstbcFje4orlfZyBXbG8FVMFx1QctYTD8hYclrfgsLwFh+UtOCxvccXyPlZLrljeiqk4O3E4LG/BYXmLK5a3koFx1BIOy1twWN6Cw/IWHJa34LC8BYflLTgsb3HF8j5WS65Y3oqpODtxOCxvwWF5iyuW93EGdsXyVkzFUUs4LG/BYXkLDstbcFjegsPyFhyWt7hieR+rJVcsb8VUnJ04HJa34LC8xRXL+zgDu2J5K6biqCUclrfgsLwFh+UtOCxvwWF5Cw7LW1yxvI/VkiuWt2Iqzk4cDstbcFje4orlrWRgHLWEw/IWHJa34LC8BYflLTgsb8FheQsOy1tcsbyP1ZIrlrdiKsxOXMZheWcclnd2xfI+zMDZFctbMVVwTIVRSxmH5Z1xWN4Zh+WdcVjeGYflnV2xvI/VkiuWt2IqzE5cxmF5ZxyWd3bF8lYyMI5awmF5ZxyWd8ZheWcclnfGYXlnHJZ3xmF5Z1cs72O15IrlrZgKsxOXcVjeGYflnV2xvI8zsCuWt2IqjlrCYXlnHJZ3xmF5ZxyWd8ZheWcclnd2xfI+VkuuWN6KqTg7cTgs74zD8s6uWN7HGdgVy1sxFUct4bC8Mw7LO+OwvDMOyzvjsLwzDss7u2J5H6slVyxvxVScnTgclnfGYXlnVyxvJQPjqCUclnfGYXlnHJZ3xmF5ZxyWd8ZheWcclnd2xfI+VkuuWN6KqTg7cTgs74zD8s6uWN7HGRiH5Z1dsbwVU3F6S65Y3oqpOGoJh+WdXbG8j6PqiuWtmIqjllyxvBVTcdSSK5b3cQZ2xfJWTMXpLblieSumOlJLEvPNVIn10VTjaqnfTY1pOza19C18v7j08IOpjxe3KHK/jRIf/GId/L3ML8Z12DK/GBdty/xiXOEt84vQL0O/GNeOy/xiXGgu84txVbrML8Yl7DK/UO+O/FKso9uX+YV6d+wX6t2xX6h3x34R+mXoF+rdsV+od8d+od4d+4V6d+wX6t2hX6zD95f5hXp37Bfq3bFfqHfHfhH6ZegX6t2xX6h3x36h3h37hXp37Bfq3aFfrB+fsMwv1Ltjv1Dvjv3iR+8qv1gt1k9xmGmqH1WqmupHaCo/4yzWT3GYaaofOaia6kfhaaZaP8Vhpql+dJiWga2f4jDTVBy1ZP0Uh5mfVU9qSTEVRy1ZP8Vhpqk4asn6KQ4TTbV+isNMU3HUkvVTHGaaiqOWrJ/iMNNUnN6S9VMcZmZgHLVk/RSHmabiqCXrpzjMNNWTWlJM9aSWFFM9qSXFVMExFUctWT/FYaapntSSYqontaSY6kktHZtq/RSHiRnY+ikOM03FUUvWT3GYaargmIqzE2f9FIeZpuL0lqyf4jDTVBy1ZP0Uh5mm4uzEWT/FYaapODtx1k9xmJiBrZ/iMNNUHLVk/RSHmabiqCXrpzhMNNX6KQ4zTcXpLVk/xWGmqThqyfopDjNNxdmJs36Kw0xTcXbirJ/iMDMD46glRwczqKbiqCVHxyeopuLsxDk65EA1Fae35OgoAtVUHLXk6MAA1VSYnbjqCOuvmgqzE1cdwfeVDFwd8fRVUwXHVBi1VB2B7FVTYXbiqiPcvGoqTG+pOoLCq6biqCVH6HbVVJiduOoIsK6aCrMTVx1h0NUMjKOWHMHKVVNx1JIjpLhqKsxOXHUE/lZNxektuWJ5K6biqCVXLG/FVJiduOqK5a2YirMTh8Pyrq5Y3oqpOGrJFctbMVVwTMXZicNheVcclnfFYXlXVyzvY7XkiuWtmIqzE4fD8q44LO/qiuV9nIFdsbwVU3HUEg7Lu+KwvCsOy7visLwrDsu74rC8qyuW97FacsXyVkzF2YnDYXlXHJZ3dcXyVjIwjlrCYXlXHJZ3xWF5VxyWd8VheVcclnfFYXlXVyzvY7XkiuWtmIqzE4fD8q44LO/qiuV9nIFdsbwVUwXHVBy1hMPyrjgs74rD8q44LO+Kw/Kurljex2rJFctbMRVnJw6H5V1xWN7VFctbycA4agmH5V1xWN4Vh+VdcVjeFYflXXFY3hWH5V1dsbyP1ZIrlrdiKs5OHA7Lu+KwvJsrlvdhBm6uWN6KqTBqqeGwvNsmOKbC7MQ1HJZ3w2F5NxyWd3PF8j5WS65Y3oqpMDtxDYfl3XBY3s0Vy/s4A7tieSum4qglHJZ3w2F5NxyWd8NheTcclnfDYXk3VyzvY7XkiuWtmAqzE9dwWN4Nh+XdXLG8lQyMo5ZwWN4Nh+XdcFjeDYfl3XBY3g2H5d1wWN7NFcv7WC25YnkrpuLsxOGwvBsOy7u5YnkfZ2BXLG/FVMExFUct4bC8Gw7Lu+GwvBsOy7vhsLybK5b3sVpyxfJWTMXZicNheTcclndzxfJWMjCOWsJheTcclnfDYXk3HJZ3w2F5NxyWd8NheTdXLO9jteSK5a2YirMTh8Pybjgs7+aK5X2cgV2xvBVTcdQSDsu74bC8Gw7Lu+GwvBsOy7vhsLybK5b3sVpyxfJWTMXZicNheTcclndzxfI+zsCuWN6KqThqCYfl3XBY3g2H5d1wWN4Nh+XdcFjezRXL+1gtuWJ5K6bi7MThsLwbDsu7uWJ5KxkYRi11HJZ3x2F5dxyWd8dhefdNcEyF6S11HJZ3d8XyPlRL3RXLWzEVZieu47C8Ow7Lu7tieR9nYFcsb8VUwTEVRy3hsLw7Dsu747C8Ow7Lu+OwvLsrlvexWnLF8lZMhdmJ6zgs747D8u6uWN5KBsZRSzgs747D8u44LO+Ow/LuOCzvjsPy7jgs7+6K5X2sllyxvBVTcXbicFjeHYfl3V2xvI8zsCuWt2IqjlrCYXl3HJZ3x2F5dxyWd8dheXcclnd3xfI+VkuuWN6KqTg7cTgs747D8u6uWN7HGdgVy1sxFUct4bC8Ow7Lu+OwvDsOy7vjsLw7Dsu7u2J5H6slVyxvxVScnTgclnfHYXl3VyxvJQPjqCUclnfHYXl3HJZ3x2F5dxyWd8dheXcclnd3xfI+VkuuWN6KqTg7cTgs747D8u6uWN7HGdgVy1sxVXBMxVFLOCzvjsPy7jgs747D8u44LO/uiuV9rJZcsbwVU3F24nBY3h2H5d1dsbyVDIyjlnBY3h2G5Z02GJb3birKTtxuKkpvaTcVpbe0myo4pqKopd1UlN8t7aai7MTtpqLsxO2mouzEpc0Vy/s4A7tieSum4qglGJb3bqrgmIqyE7ebitJb2k1F6S3tpqL0lnZTcdSSK5a3YirKTtxuKspO3G4qyk7cbqrAZGAYlvduKk5vyRXLWzEVp7fkiuV9bCoMy3s3FUctuWJ5K6biqCVXLG/FVBy15IrlrWRgnN6SK5a3YirO75Y8sbwl5pupEuujqbbVUixvprZ6bGrpW/h+cenhB1MfL25R5H4bJT76xba0WucX2zpsnV+Efhn6xbbCW+cX23JwnV9sa8d1frEtNNf5xbYqXeYX44D1dX6h3h37hXp37Bfq3bFfhH4Z+oV6d+wX6t2xX6h3x36h3h37hXp36BfjiPx1fqHeHfuFenfsF+rdsV+Efhn6hXp37Bfq3bFfqHfHfqHeHfuFenfoF+OHHKzzC/Xu2C/Uu2O/UO+O/SL0y9AvfvSu9otV46c4TDXVjypVTfUjNLWfcRo/xWGmqcZPcZhqqh+Fp5rqR7SppvrRYVoGNn6Kw1RTcdSS8VMcpn5WPaklxVQctWT8FIeZpho/xWGqqThqyfgpDlNNxVFLxk9xmGoqjloyforDVFNxekvGT3GYmoFh1FIwforDVFNh1FIwforDVFM9qSXFVMEx1ZNaUkyF6S0F46c4TFRLwfgpDlNN9aSWjk01forDVFM9qSXFVBy1ZPwUh6mmCo6pOGrJ+CkOU02F2YkLxk9xmGoqTm/J+CkOU03FUUvGT3GYairMTlwwforDVFNhduKC8VMcpmZgHLVk/BSHqabiqCXjpzhMNRVnJ874KQ5TTcXpLRk/xWGqqThqyfgpDlNNxdmJM36Kw1RTcXbijJ/iMDMDOzrFQTUVRy05OmtBNVVwTMXZiXN0yIFqKk5vydFRBKqpOGrJ0YEBqqk4O3GOsP6qqTg7cY7g+1oGdsTTV03FUUuOqPeqqThqyRGbXjPVEW5eNRWnt+QICq+aiqOWHKHbVVNxduIcAdZVU3F24hxh0NUMjKOWHMHKVVNx1JIjpLhqKs5OnCPwt2oqTm/JFctbMRVHLblieSum4uzEuWJ5K6bi7MThsLyDK5a3YqrgmIqjlnBY3gGH5R1wWN4Bh+UdcFjewRXL+1gtuWJ5K6bi7MThsLwDDss7uGJ5KxkYRy3hsLwDDss74rC8Iw7LO+KwvCMOyztugmMqjFqKrljeiqkwO3ERh+UdcVje0RXL+zgDu2J5K6biqCUclnfEYXlHHJZ3xGF5RxyWd8RheUdXLO9jteSK5a2YCrMTF3FY3hGH5R1dsbyPM7ArlrdiKo5awmF5RxyWd8RheUcclnfEYXlHHJZ3dMXyPlZLrljeiqk4O3E4LO+Iw/KOrljeSgbGUUs4LO+Iw/KOOCzviMPyjjgs74jD8o44LO/oiuV9rJZcsbwVU3F24nBY3hGH5R1dsbyPM7ArlrdiquCYiqOWcFjeEYflHXFY3hGH5R1xWN7RFcv7WC25YnkrpuLsxOGwvCMOyzu6YnkrGRhHLeGwvCMOyzvisLwjDss74rC8Iw7LO+KwvKMrlvexWnLF8lZMxdmJw2F5RxyWd3TF8j7OwK5Y3oqpOGoJh+UdcVjeEYflHXFY3hGH5R1xWN7RFcv7WC25YnkrpuLsxOGwvCMOyzu6YnkfZ2BXLG/FVBy1hMPyjjgs74jD8k44LO+Ew/JOOCzv5IrlfaiW0iY4psLsxCUclnfCYXknVyxvJQPjqCUclnfCYXknHJZ3wmF5JxyWd8JheScclndyxfI+VkuuWN6KqTA7cQmH5Z1wWN7JFcv7OAO7YnkrpgqOqThqCYflnXBY3gmH5Z1wWN4Jh+WdXLG8j9WSK5a3YirOThwOyzvhsLyTK5a3koFx1BIOyzvhsLwTDss74bC8Ew7LO+GwvBMOyzu5YnkfqyVXLG/FVJydOByWd8JheSdXLO/jDOyK5a2YiqOWcFjeCYflnXBY3gmH5Z1wWN4Jh+WdXLG8j9WSK5a3YirOThwOyzvhsLyTK5b3cQZ2xfJWTMVRSzgs74TD8k44LO+Ew/JOOCzvhMPyTq5Y3sdqyRXLWzEVZycOh+WdcFjeyRXLW8nAOGoJh+WdcFjeCYflnXBY3gmH5Z1wWN4Jh+WdXLG8j9WSK5a3YirOThwOyzvhsLyTK5b3cQZ2xfJWTBUcU3HUEg7LO+GwvBMOyzvhsLwFh+Utrljeh2pJXLG8FVNhduJkExxTYXbixBXLW8nAMGpJcFjegsPyFhyWt+CwvAWH5S04LG/BYXmLK5b3sVpyxfJWTIXZiRMclrfgsLzFFcv7OAO7YnkrpuKoJRyWt+CwvAWH5S04LG/BYXkLDstbXLG8j9WSK5a3YirOThwOy1twWN7iiuV9nIFdsbwVU3HUEg7LW3BY3oLD8hYclrfgsLwFh+Utrljex2rJFctbMRVnJw6H5S04LG9xxfJWMjCOWsJheQsOy1twWN6Cw/IWHJa34LC8BYflLa5Y3sdqyRXLWzEVZycOh+UtOCxvccXyPs7ArljeiqmCYyqOWsJheQsOy1twWN6Cw/IWHJa3uGJ5H6slVyxvxVScnTgclrfgsLzFFctbycA4vSVXLG/FVJzekiuWt2IqjlrCYXmLK5a3ElXBMRVHLblieSum4qglVyxvJQPj9JZcsbwVU3F+t+SJ5S0x30yVWB9Nta2W0v3uQxI5NrX0LXy/uPTwg6mPF7cocr+NEh/9IvTL0C+2ddg6v9gWbev8YlvhrfOLbTm4zi+2teMqv2TjGPR1frGtStf5xbaEXecX6t2xX4R+GfqFenfsF+rdsV+od8d+od4d+4V6d+gX4yD7dX6h3h37hXp37Bfq3bFfhH4Z+oV6d+wX6t2xX6h3x36h3h37hXp36BfjRxGs8wv17tgv1Ltjv1Dvjv0i9MvQL9S7Y79Q74794kfvKr9YzcZPcZhqqh9Vqplq/BSHj5l6+DPObPwUh6mm+pGDqql+FJ5qquCY6keHqRnYj7RSTcVRS8ZPcZj6WfWklo5NNX6Kw1RTcdSS8VMcppqKo5aMn+Iw1VQctWT8FIeppuKoJeOnOEw1Fae3ZPwUh5kZ2PgpDlNNxVFLxk9xmGqq4JjqSS0ppnpSS4qpntSSYipOb8n4KQ4z1ZLxUxymmupJLSmmelJLiqme1JJiqsBkYOOnOEw1FUctGT/FYaqpOGrJ+CkOM001forDVFNxekvGT3GYaiqOWjJ+isNUU3F24oyf4jDVVJydOOOnOEzNwDhqyfgpDlNNxVFLxk9xmGoqzk6c8VMcppqK01syforDVFNx1JLxUxymmoqzE2f8FIeppuLsxBk/xWFmBnZ0ioNqquCYiqOWHB2foJqKsxPn6JAD1VSY3lJxdBSBaiqMWiqODgxQTYXZiSub4JgKsxNXHMH31QwMo5aKI0S+aiqOWnIEsldNhdmJK45w86qpML2l4ggKr5qKo5YcodtVU2F24oojwLpqKsxOXHGEQdcysCOyuWoqjlpyxB9XTRUcU2F24ooj8LdqKk5vyRXLWzEVRy25YnkrpuLsxLlieSum4uzE4bC8iyuWt2IqjlpyxfJWTMVRSzgs74LD8i44LO+Cw/Iurljex2rJFctbMRVnJw6H5V1wWN7FFctbycA4agmH5V1wWN4Fh+VdcFjeBYflXXBY3gWH5V1csbyP1ZIrlrdiKs5OHA7Lu+CwvIsrlvdxBnbF8lZMFRxTcdQSDsu74LC8Cw7Lu+CwvAsOy7u4YnkfqyVXLG/FVJydOByWd8FheRdXLG8lA+OoJRyWd8FheRcclnfBYXkXHJZ3wWF5FxyWd3HF8j5WS65Y3oqpODtxOCzvgsPyLq5Y3scZ2BXLWzEVRy3hsLwLDsu74LC8Cw7Lu+CwvAsOy7u4YnkfqqXqiuWtmAqzE1dxWN4Vh+VdN0HJwNUVy1sxFUYtVRyWd8VheVcclnfFYXlXHJZ3xWF5V1cs72O15IrlrZgKsxNXcVjeFYflXV2xvJUMjKOWcFjeFYflXXFY3hWH5V1xWN4Vh+VdcVje1RXL+1gtuWJ5K6bi7MThsLwrDsu7umJ5H2dgVyxvxVTBMRVHLeGwvCsOy7visLwrDsu74rC8qyuW97FacsXyVkzF2YnDYXlXHJZ3dcXyVjIwjlrCYXlXHJZ3xWF5VxyWd8VheVcclnfFYXlXVyzvY7XkiuWtmIqzE4fD8q44LO/qiuV9nIFdsbwVU3HUEg7Lu+KwvCsOy7visLwrDsu74rC8qyuW97FacsXyVkzF2YnDYXlXHJZ3dcXyPs7Arljeiqk4agmH5V1xWN4Vh+VdcVjeFYflXXFY3tUVy/tYLblieSum4uzE4bC8Kw7Lu7pieSsZGEct4bC8Kw7Lu+KwvCsOy7visLwrDsu74rC8qyuW97FacsXyVkyF2YlrOCzvhsPybq5Y3ocZuLlieSumCo6pMGqp4bC8Gw7Lu+GwvBsOy7vhsLybK5b3sVpyxfJWTIXZiWs4LO+Gw/JurljeSgbGUUs4LO+Gw/JuOCzvhsPybjgs74bD8m44LO/miuV9rJZcsbwVU2F24hoOy7vhsLybK5b3cQZ2xfJWTMVRSzgs74bD8m44LO+Gw/JuOCzvhsPybq5Y3sdqyRXLWzEVZycOh+XdcFjezRXL+zgDu2J5K6biqCUclnfDYXk3HJZ3w2F5NxyWd8NheTdXLO9jteSK5a2YirMTh8Pybjgs7+aK5a1kYBy1hMPybjgs74bD8m44LO+Gw/JuOCzvhsPybq5Y3sdqyRXLWzEVZycOh+XdcFjezRXL+zgDu2J5K6YKjqk4agmH5d1wWN4Nh+XdcFjeDYfl3VyxvI/VkiuWt2Iqzk4cDsu74bC8myuWt5KBcdQSDsu74bC8Gw7Lu+GwvBsOy7vhsLwbDsu7uWJ5H6slVyxvxVScnTgclnfDYXl3VyzvwwzcXbG8FVNh1FLHYXn3TXBMhdmJ6zgs747D8u44LO/uiuV9rJZcsbwVU2F24joOy7vjsLy7K5b3cQZ2xfJWTMVRSzgs747D8u44LO+Ow/LuOCzvjsPy7q5Y3sdqyRXLWzEVZieu47C8Ow7Lu7tieSsZGKe35IrlrZiK01tyxfJWTMVRSzgs7+6K5a1EFUctuWJ5K6bC/G6p47C8uyuW93EGdsXyVkzF6S25YnkrpoofU+V+8f7P+miqcbXUyu2VZevHppa+he8Xl30v6r2pjxe3KHK/jRIf/WJcWi3zi3EdtswvxkXbMr8YV3ir/GIdVr7ML8a14zK/GBeay/xiXJUu84vQL0O/UO+O/UK9O/YL9e7YL9S7Y79Q7w79Yh03v8wv1Ltjv1Dvjv1CvTv2i9AvQ79Q7479Qr079gv17tgv1Ltjv1DvDv1i/cCAZX6h3h37hXp37Bfq3bFfhH4Z+oV6d+wX6t2xX6h3x36h3h37xY/e1X6xav0Uh5mm+lGlqql+hKb2M07rpzjMNFVwTPWj8FRT/Yg21VQ/OkzNwH6klWoqjlqyforDxM+q9VMcZpqKo5asn+Iw01TBMRVHLVk/xWGmqThqyfopDjNNRVFLslk/xWGmqSi9pd1UFLW0m4qilnZTBcdUFLW0m4qilnZTPaklxVRPakkx1ZNaOjbV+ikOM03FUUvWT3GYaaontaSYKjimelJLiqk4asn6KQ4zTcVRS9ZPcZhoqvVTHGaairITt5uK01uyforDTFMFx1QctWT9FIeZpqLsxO2mouzE7abi7MRZP8VhYga2forDTFNx1JL1Uxxmmio4puLsxFk/xWGmqTi9JeunOMw0FUctWT/FYaapODtx1k9xmGkqzk6c9VMcJmZgR6c4qKbiqCVHZy2opuKoJUcnImimOjrkQDUVp7fk6CgC1VQcteTowADVVJydOEdYf9VUnJ04R/B9NQPjqCVHiHzVVBy15Ahkr5qKsxPnCDevmorTW3IEhVdNxVFLjtDtqqk4O3GOAOuqqTg7cY4w6FoGdkQ2V00VHFNx1JIjpLhqKs5OnCPwt2oqTm/JFctbMRVHLblieSum4uzEuWJ5K6bi7MTBsLx3U3HUkiuWt2IqjlqCYXnvy3F24mBY3vtynN4SDMt7X46jllyxvBVTcXbiYFje+3KYnbjgiuV9mIGDK5a3YiqMWgo4LO+wCY6pMDtxAYflHXBY3gGH5R1csbyP1ZIrlrdiKsxOXMBheQcclndwxfI+zsCuWN6KqThqCYflHXBY3gGH5R1wWN4Bh+UdcFjewRXL+1gtuWJ5K6bC7MQFHJZ3wGF5B1csbyUD46glHJZ3wGF5BxyWd8BheQcclnfAYXkHHJZ3cMXyPlZLrljeiqk4O3E4LO+Aw/IOrljexxnYFctbMVVwTMVRSzgs74DD8g44LO+Aw/IOOCzv4IrlfayWXLG8FVNxduJwWN4Bh+UdXLG8lQyMo5ZwWN4Bh+UdcFjeAYflHXBY3gGH5R1wWN7BFcv7WC25YnkrpuLsxOGwvAMOyzu4YnkfZ2BXLG/FVBy1hMPyDjgs74DD8g44LO+Aw/IOOCzv4IrlfayWXLG8FVNxduJwWN4Bh+UdXLG8jzOwK5a3YiqOWsJheQcclnfAYXkHHJZ3wGF5BxyWd3DF8j5WS65Y3oqpODtxOCzvgMPyDq5Y3koGhlFLEYflHXFY3hGH5R1xWN5xExxTYXpLEYflHV2xvA/VUnTF8lZMhdmJizgs74jD8o6uWN7HGdgVy1sxVXBMxVFLOCzviMPyjjgs74jD8o44LO/oiuV9rJZcsbwVU2F24iIOyzvisLyjK5a3koFx1BIOyzvisLwjDss74rC8Iw7LO+KwvCMOyzu6YnkfqyVXLG/FVJydOByWd8RheUdXLO/jDOyK5a2YiqOWcFjeEYflHXFY3hGH5R1xWN4Rh+UdXbG8j9WSK5a3YirOThwOyzvisLyjK5b3cQZ2xfJWTMVRSzgs74jD8o44LO+Iw/KOOCzviMPyjq5Y3sdqyRXLWzEVZycOh+UdcVje0RXLW8nAOGoJh+UdcVjeEYflHXFY3hGH5R1xWN4Rh+UdXbG8j9WSK5a3YirOThwOyzvisLyjK5b3cQZ2xfJWTBUcU3HUEg7LO+KwvCMOyzvisLwjDss7umJ5H6slVyxvxVScnTgclnfEYXlHVyxvJQPjqCUclnfEYXknHJZ3wmF5JxyWd8JheadNcEyFUUvJFctbMRVmJy7hsLwTDss7uWJ5H2dgVyxvxVQctYTD8k44LO+Ew/JOOCzvhMPyTjgs7+SK5X2sllyxvBVTYXbiEg7LO+GwvJMrlvdxBnbF8lZMxVFLOCzvhMPyTjgs74TD8k44LO+Ew/JOrljex2rJFctbMRVnJw6H5Z1wWN7JFctbycA4agmH5Z1wWN4Jh+WdcFjeCYflnXBY3gmH5Z1csbyP1ZIrlrdiKs5OHA7LO+GwvJMrlvdxBnbF8lZMFRxTcdQSDss74bC8Ew7LO+GwvBMOyzu5YnkfqyVXLG/FVJydOByWd8JheSdXLG8lA+OoJRyWd8JheScclnfCYXknHJZ3wmF5JxyWd3LF8j5WS65Y3oqpODtxOCzvhMPyTq5Y3scZGIflnVyxvBVTcXpLrljeiqk4agmH5Z1csbyVqOKoJVcs72NTXbG8FVNx1JIrlvdxBnbF8lZMFRxTcX635InlLTHfTJVYH021rZYkb3dTazw2tfQtfL+49PCDqY8Xtyhyv40SH/1iW1qt84ttHbbKL2IcKb7OL7YV3jq/2JaD6/xiWzuu84vQL0O/2Fal6/xiW8Ku8wv17tgv1Ltjv1DvDv1iHAq/zi/Uu2O/UO+O/UK9O/aL0C9Dv1Dvjv1CvTv2C/Xu2C/Uu2O/UO8O/WIc67/OL9S7Y79Q7479Qr079ovQL0O/UO+O/UK9O/YL9e7YL9S7Y79Q7w79YvxghnV+8aN3lV+sivFTHKaa6keVqqaKI1MPf8Ypxk9xmGqqHzmomupH4amm+hFtqql+dJiWgY2f4jDVVBy1ZPwUh5mfVeOnOEw1VXBMxVFLxk9xmGoqjloyforDVFNx1JLxUxymmoqjloyf4jDVVJzekvFTHGZmYOOnOEw1FUctGT/FYaqpOGrJ+CkOM001forDVFM9qSXFVJzekvFTHGaqJeOnOEw11ZNaUkz1pJYUUz2pJcVUHLVk/BSHmaYaP8Vhqqk4asn4KQ5TTcXZiTN+isNUU3F6S8ZPcZhqKo5aMn6Kw1RTcXbijJ/iMNVUnJ0446c4zMzAxk9xmGqq4JiKo5aMn+Iw1VScnTjjpzhMNRWnt2T8FIeppuKoJeOnOEw1FWcnzvgpDlNNxdmJM36Kw9QMjKOWHB3MoJoKo5ayo+MTVFNhduKyo0MOVFNhekt5ExxTYdRSdnRggGoqzE5cdoT1V02F2YnLjuD7WgZ2xNNXTcVRS46o96qpgmMqzE5cdoSbV02F6S1lR1B41VQcteQI3a6aCrMTlx0B1lVTYXbisiMMupaBHZHNVVNx1JIj/rhqKo5ackQJ10x1BP5WTcXpLblieSum4qglVyxvxVScnThXLG/FVJydOByWd3bF8j421RXLWzEVRy3hsLwzDss747C8Mw7LO+OwvLMrlvexWnLF8lZMxdmJw2F5ZxyWd3bF8j7OwK5Y3oqpgmMqjlrCYXlnHJZ3xmF5ZxyWd8ZheWdXLO9jteSK5a2YirMTh8Pyzjgs7+yK5a1kYBy1hMPyzjgs74zD8s44LO+Mw/LOOCzvjMPyzq5Y3sdqyRXLWzEVZycOh+WdcVje2RXL+zgDu2J5K6biqCUclnfGYXlnHJZ3xmF5ZxyWd8ZheWdXLO9jteSK5a2YirMTh8Pyzjgs7+yK5X2cgV2xvBVTcdQSDss747C8Mw7Lu+CwvAsOy7vgsLyLK5b3oVoqm+CYCrMTV3BY3gWH5V1csbyVDIyjlnBY3gWH5V1wWN4Fh+VdcFjeBYflXXBY3sUVy/tYLblieSumwuzEFRyWd8FheRdXLO/jDOyK5a2YKjim4qglHJZ3wWF5FxyWd8FheRcclndxxfI+VkuuWN6KqTg7cTgs74LD8i6uWN5KBsZRSzgs74LD8i44LO+Cw/IuOCzvgsPyLjgs7+KK5X2sllyxvBVTcXbicFjeBYflXVyxvI8zsCuWt2IqjlrCYXkXHJZ3wWF5FxyWd8FheRcclndxxfI+VkuuWN6KqTg7cTgs74LD8i6uWN7HGdgVy1sxFUct4bC8Cw7Lu+CwvAsOy7vgsLwLDsu7uGJ5H6slVyxvxVScnTgclnfBYXkXVyxvJQPjqCUclnfBYXkXHJZ3wWF5FxyWd8FheRcclndxxfI+VkuuWN6KqTg7cTgs74LD8i6uWN7HGdgVy1sxVXBMxVFLOCzvgsPyLjgs74LD8q44LO/qiuV9qJaqK5a3YirMTlzdBMdUmJ246orlrWRgGLVUcVjeFYflXXFY3hWH5V1xWN4Vh+VdcVje1RXL+1gtuWJ5K6bC7MRVHJZ3xWF5V1cs7+MM7IrlrZiKo5ZwWN4Vh+VdcVjeFYflXXFY3hWH5V1dsbyP1ZIrlrdiKs5OHA7Lu+KwvKsrlvdxBnbF8lZMxVFLOCzvisPyrjgs74rD8q44LO+Kw/Kurljex2rJFctbMRVnJw6H5V1xWN7VFctbycA4agmH5V1xWN4Vh+VdcVjeFYflXXFY3hWH5V1dsbyP1ZIrlrdiKs5OHA7Lu+KwvKsrlvdxBnbF8lZMFRxTcdQSDsu74rC8Kw7Lu+KwvCsOy7u6YnkfqyVXLG/FVJydOByWd8VheVdXLG8lA+OoJRyWd8VheVcclnfFYXlXHJZ3xWF5VxyWd3XF8j5WS65Y3oqpODtxOCzvisPyrq5Y3scZ2BXLWzEVRy3hsLwrDsu74rC8Kw7Lu+KwvCsOy7u6YnkfqqXmiuWtmAqzE9dwWN4Nh+XdNkHJwM0Vy1sxFUYtNRyWd8NheTcclnfDYXk3HJZ3w2F5N1cs72O15IrlrZgKsxPXcFjeDYfl3VyxvJUMjKOWcFjeDYfl3XBY3g2H5d1wWN4Nh+XdcFjezRXL+1gtuWJ5K6bi7MThsLwbDsu7uWJ5H2dgHJZ3c8XyVkzF6S25YnkrpuKoJRyWd3PF8j6OqiuWt2IqjlpyxfJWTMVRS65Y3scZ2BXLWzEVp7fkiuWtmOpILUnMN1Ml1kdTbaulPZfcXrlppoYty+3iraX7xbH04UuHdH/p9HYjSUavHXO43XXMOf9w9Vc/GgeFX8ePtnXedfxoW0Rex4+2Fep1/Cj04xQ/2tbW1/GjbeF+HT/argqu40fbJcd1/Mh6ZoofjaP8r+NH1jNz/Mh6Zo4fWc/M8aPQj1P8yHpmjh9Zz8zxI+uZn/Jj7TcT497bUa5uNd1trL+6+pvXWf2s8DprpRd4PZfb1XtRX5Wrg4jcvL3/uwwykvFjQhilb1Finbcggxk/bMWr11lDXiEjCaN0gSix/l2RwVgtr/A6a+sXeF22eLNRUhh4nbX1imedtfUCrxs/JIqa51uUWCtfIUqsrVdkMNbWK7wu9PoFMhJr5StEibX1igzG2nqF11lbL+hoGD/Hz+mzbvxIQa9eZ618Ac1j/GBGRulblFhbr8hgQq8v8Dpr5StkJNbKV4gSa+sVGYy19Qqvs7b+/I5GN34Arc9nvRs/C9er11kr29c83fiJwozStygJo7Qgg7G2XuF11spXyEisla8QJdbWKzIYa+sFXjd+XLnTjobxk9O9PuusrVd4nbXyBTRPEEbpAlFibb0ig7G2XuF11spXyEisla8QJdbWCzJYZG29wuusrRd0NCJr6xXPOmvrFV4Xet2+5omsla8QJdbWKzIYa+sVXmetfIWMxFr5AlFKrK0XZLDE2nqF11lbL+hoJNbWK551odcXeJ218hU0D2vlK0SJtfWKDMbaeoXXWStfICMJa+UrRIm19YIMJqytV3idtfWCjoYIvb7gWWdtvcLrrJWvoHlYK18hSqytV2Qw1tYLvJ5ZK18gI2XWyleIEmvrFRmMtfUKrwu9/vkdjczaesWzztp6hddZK19B87BWvkKUWFsvyGCFtfUKr7NWvkBGKqyVrxAl1tYrMpjQ6wu8ztp6QUejsLZe8ayztl7hddbKV9A8rJUvEKXK2npBBqusrVd4nbXyFTISa+UrREkYpQUZjLX1Cq+ztl7Q0aisrVc866ytV3idtfIFNE9jrXyFKLG2XpDBGmvrFV5nrXyFjCSM0gWixNp6RQZjbb3C66ytF3Q0GmvrFc86a+sFXu+slS+geTpr5StEibX1igzG2nqF14Vev0BGYq18hSixtl6RwVhbr/A6a+sFHY3O2vrTn/W8baytV3idtbJ5zbNHibXyFaLE2npFBhN6fYHXWStfISOxVr5ClFhbr8hgrK1XeJ219ad3NPIWWFsveNYDa+sVXmetfAHNE1grXyFKwigtyGCsrVd4nbXyFTISa+UrRIm19YoMxtp6gdcja+sFHY3I2nrFs87aeoXXWStfQPNEYZQuECXW1isyGGvrFV5nrXyFjMRa+QpRYm29IIMl1tYrvM7aekFHI7G2XvGss7Ze4XWh1+1rnsRa+QpRYm29IoOxtl7hddbKV8hIrJUvECVhbb0ggwlr6xVeZ229oKMhrK1/xusp5tuNpPirzP7Nj0I//szTm8PtrnePjr7xWM/O8SMrzjl+ZA05x4+sCuf4kXXbFD9mVlZz/MhaaY4fWf3M8SPrmTl+FPpxih9Zz8zxI+uZOX5kPTPHj6xn5viR9cwUPxbWM3P8yHpmjh9ZzyzYQyusflZ4Xeh1+7+lKKzErhAl1nkrMhirwhVeZw15hYzECvUCUaqsfxdksMpqeYXXWVsv+KVkZW294lkXen2B11krX0HzsFa+QpRYW6/IYKytV3idtfIFMlJjrXyFKLG2XpDBGmvrFV5nbb2go9GEXl/wrLO2XuF11spX0Dysla8QJdbWKzIYa+sFXu+slS+QkTpr5StEibX1igzG2nqF14Ve//yORmdtveJZZ229wuusla+geVgrXyFKrK0/P4OFjbX1Cq+zVrafkcLGWvkKUWJtvSKDCb2+wOusrT+/oxE21tYrnnXW1iu8zlr5CpqHtfIFohRYWy/IYIG19Qqvs1a+QkZirXyFKAmjtCCDsbZe4XXW1gs6GoG19YpnnbX1Cq+zVr6A5omsla8QJdbWCzJYZG29wuusla+QkYRRukCUWFuvyGCsrVd4nbX1go5GZG294llnbb3A64m18gU0T2KtfIUosbZekcFYW6/wutDrF8hIrJWvECXW1isyGGvrFV5nbb2go5FYWy941oW19Qqvs1a+gOYR1spXiBJr6xUZTOj1BV5nrXyFjMRa+QpRYm29IoOxtl7hddbWCzoambX1gmc9s7Ze4XXWyhfQPJm18hWiJIzSggzG2nqF11krXyEjsVa+QpRYW6/IYKytF3i9sLZe0NEorK1XPOusrVd4nbXyBTRPEUbpAlFibb0ig7G2XuF11spXyEisla8QJdbWCzJYZW29wuusrRd0NCpr6xXPOmvrFV4Xet2+5qmsla8QJdbWKzIYa+sVXmetfIWMxFr5AlFqrK0XZLDG2nqF11lbL+hoNNbWK551odcXeJ218hU0D2vlK0SJtfWKDMbaeoXXWStfICN11spXiBJr6wUZrLO2XuF11tYLOhpd6PUFzzpr6xVeZ618Bc3DWvkKUWJtvSKDsbb+fK/HjbWy/YwUN9bKV4gSa+sVGYy19QqvC73+6R2NuLG2XvGss7Ze4XXWylfQPKyVrxAl1tYLMlhgbb3C66yVL5CRAmvlK0SJtfWKDCb0+gKvs7Ze0NEIrK1XPOusrVd4nbXyFTQPa+ULRCmytl6QwSJr6xVeZ618hYzEWvkKURJGaUEGY229wuusrRd0NCJr6xXPOmvrFV5nrXwBzZNYK18hSqytF2SwxNp6hddZK18hIwmjdIEosbZekcFYW6/wOmvrBR2NxNr6Z7yeYr7dSIq/yuzf/Mhq+aee3hxud717dPCNJ6xn5/iRFeccP7KGnONHVoVz/Cj04xQ/srKa40fWSnP8yOpnjh9Zz8zxI+uZKX7MrGfm+JH1zBw/sp6Z40fWM3P8KPTjFD+ynpnjR9Yzc/zIembBHlpm9bPC66yVLvBbisJK7ApRYp23IIMVVoUrvM4a8goZSRilC0SJ9e+KDMZqeYXXWVsv+KVkYW294llnbb3A65W18gU0T2WtfIUosbZekcFYW6/wutDrF8hIrJWvECXW1isyGGvrFV5nbb2go1FZWy941htr6xVeZ618Ac3TWCtfIUqsrVdkMKHXF3idtfIVMhJr5StEibX1igzG2nqF11lbL+hodNbWC571ztp6hddZK19A83TWyleIkjBKCzIYa+sVXmetfIWMxFr5ClFibb0ig7G2/nyvp4219ed3NNLG2nrFs87aeoXXWSvb1zxpE0bpAlFibb0ig7G2XuF11spXyEisla8QJdbWCzJYYG29wuusrRd0NAJr6xXPOmvrFV4Xet2+5gmsla8QJdbWKzIYa+sVXmetfIWMxFr5AlGKrK0XZLDI2nqF11lbL+hoRNbWK551odcXeJ218hU0D2vlK0SJtfWKDMbaeoXXWStfICMl1spXiBJr6wUZLLG2XuF11tYLOhpJ6PUFzzpr6xVeZ618Bc3DWvkKUWJtvSKDsbZe4HVhrXyBjCSsla8QJdbWKzIYa+sVXhd6/fM7GsLaesWzztp6hddZK19B87BWvkKUWFsvyGCZtfUKr7NWvkBGyqyVrxAl1tYrMpjQ6wu8ztp6QUcjs7Ze8ayztl7hddbKV9A8rJUvEKXC2npBBiusrVd4nbXyFTISa+UrREkYpQUZjLX1Cq+ztl7Q0SisrVc866ytV3idtfIFNE9lrXyFKLG2XpDBKmvrFV5nrXyFjCSM0gWixNp6RQZjbb3C66ytF3Q0KmvrFc86a+sFXm+slS+geRpr5StEibX1igzG2nqF14Vev0BGYq18hSixtl6RwVhbr/A6a+sFHY3G2nrBs95ZW6/wOmvlC2iezlr5ClFibb0igwm9vsDrrJWvkJFYK18hSqytV2Qw1tYrvM7a+vM7GrKxtv78Z1021tYrvM5a2b7mkY218hWiJIzSggzG2nqF11krXyEjsVa+QpRYW6/IYKytF3g9sLZe0NEIrK1XPOusrVd4nbXyBTRPEEbpAlFibb0ig7G2XuF11spXyEisla8QJdbWCzJYZG29wuusrRd0NCJr6xXPOmvrFV4Xet2+5omsla8QJdbWKzIYa+sVXmetfIWMxFr5AlFKrK0XZLDE2nqF11lbL+hoJNbWP+P1FPPtRlL8VWb/5kehH3/Gj+X+lZdKH2UB1rNz/MiKc44fWUPO8SOrwjl+ZN02xY/CymqOH1krzfEjq585fmQ9M8ePQj/+jB/bW13YQ/ytPRBh9bPC66yVXuD12b1wYSV2hSixzluRwVgVLvB6Zg15gYyUWaFeIUqsf1dkMFbLK7wu9Pp8r2s73Zm19YpnnbX1Cq+zVr6C5mGtfIUosbZekMEKa+sVXmetfIGMVFgrXyFKrK1XZDCh1xd4nbX1go5GYW294llnbb3C66yVr6B5WCtfIEqVtfWCDFZZW6/wOmvlK2Qk1spXiJIwSgsyGGvrFV5nbb2go1FZW6941llbr/A6a+ULaJ7GWvkKUWJtvSCDNdbWK7zOWvkKGUkYpQtEibX1igzG2nqF11lbL+hoNNbWK5511tYLvN5ZK19A83TWyleIEmvrFRmMtfUKrwu9foGMxFr5ClFibb0ig7G2XuF11tYLOhqdtfXnP+t5Y229wuusle1rnryxVr5ClFhbr8hgQq8v8Dpr5StkJNbKV4gSa+sVGYy19Qqvs7b+/I5GDqytFzzrgbX1Cq+zVr6A5gmsla8QJWGUFmQw1tYrvM5a+QoZibXyFaLE2npFBmNtvcDrkbX1go5GZG294llnbb3C66yVL6B5ojBKF4gSa+sVGYy19Qqvs1a+QkZirXyFKLG2XpDBEmvrFV5nbb2go5FYW/+M13c3hu9Xy1Y35eoepHy/uu+e1L4HNqnxfuPSt0GUWItfIUrCKF0gSqzFrxAl1u5XiBJr/StEibX+FaLEWv8CURL2Bn4mSjluNxPz19d78COr/Tl+ZP0+x4+ssOf4UejHKX5klTrHj6wj5/iRld4cP7IWm+NHVktT/JhZz8zxI+uZn/JjCrfqfW8eFq0er7G024vXFPX6PZZwv/XYB/udmfXSNeLEeuwacRLGyVyc6iBOrCctxEntL2fWq9eIE+vha8SJ9fY14sR6/hJxKuwXvCJOqd89UqVov+oNodz9vf9b4iBO7EdYiFNNdztDLaM4sR9xjTixH3GNOAnjdIk4sR9xjTixH3GNOLEfcY04sR9xjTixH/GKOJV6f/Fat/To98r+whq/s1/wCr+39Ob3lgeEh8r6/+f83m4OyRLUPmYL4X4rLeRBH7Oynn+F36O8vXisolxf+nb7NJUe3natw+jG99eWuwPffWXvF3+LqDCiziLKHoG3iLKb4C2i7Dt4iyg7FN4iyl6Gs4g2dkm8RZT9F28RZWfHW0TZM/IWUWFEnUWUPSNvEWXPyFtE2TPyFlH2jLxFlD0jZxHt7Bl5iyh7Rt4iyp6Rt4iyZ+QtosKIOosoe0beIsqekbeIsmfkLaLsGXmLKHtGviJaNvaMvEWUPSNvEWXPyFtE2TPyFlFhRJ1FlD0jbxFlz8hbRNkz8hZR9oy8RZQ9I2cRDewZeYsoe0beIsqekbeIsmfkLaLCiDqLKHtG3iLKnpG3iLJn5C2i7Bl5iyh7Rs4iGtkz8hbRT+8ZhZBvIQ0xhh9i+u2WPr3pEfYXvF/9jro9fszq/aVreXsSYh25P7ZyeyRja+HR/QnIVgGyNQPZWoBsrUC2NiBbO46taQOyNQDZCqSbEpBuSgJkK5BuSkC6KQHppgSkmxKQbhIg3SRAukmAdJMA6SYRIFuBdJMA6SYB0k0CpJsESDdlIN2UgXRTBtJNGUg3ZQGyFUg3ZSDdlIF0UwbSTRlINxUg3VSAdFMB0k3FuG7q5f7S2xYUY6XW20tL27a3q4c/GWwSy/erdwNEuTrl28US37/yyOc13L1XUzq+ONR6e+FQe1Yu3u6vHLb3sS/foymMpqNoGte+jOaHomlc3TOaH4qm8fqF0fxQNI1XaIzmh6JpvAZlND8SzWq8ymY0PxRN430ERvND0TTeKWE0PxRN9oI8RVMYTUfRZC/IUzTZC/IUTfaCPEWTvSBP0WQvyFE0G3tBnqLJXpCnaLIX5Cma7AV5iqYwmo6iyV6Qp2iyF+QpmuwFeYome0GeoslekKNodvaCPEWTvSBP0WQvyFM02QvyFE1hNB1Fk70gT9FkL8hTNNkL8hRN9oI8RZO9ID/RrBt7QZ6iyV6Qp2iyF+QpmuwFeYqmMJqOoslekKdoshfkKZrsBXmKJntBnqLJXpCjaAb2gjxFk70gT9FkL8hTNNkL8hRNYTQdRZO9IE/RZC/IUzTZC/IUTfaCPEWTvSBH0YzsBXmKJntBnqLJXpCnaLIX5Cmawmg6iiZ7QZ6iyV6Qp2iyF+QpmuwFeYome0GOopnYC/IUTfaCPEWTvSBP0WQvyFM0hdF0FE32gjxFk70gT9FkL8hTNNkL8hRN9oIcRVPYC/IUTfaCPEWTvSBP0WQvyFM0hdF0FE32gjxFk70gT9FkL8hTNNkL8hRN9oIcRTOzF+QpmuwFeYome0GeoslekKdoCqPpKJrsBXmKJntBnqLJXpCnaLIX5Cma7AU5imZhL8hTNNkL8hRN9oI8RZO9IE/RFEbTUTTZC/IUTfaCPEWTvSBP0WQvyFM02QtyFM3KXpCnaLIX5Cma7AV5iiZ7QZ6iKYymo2iyF+QpmuwFeYome0GeoslekKdoshfkKJqNvSBP0WQvyFM02QvyFE32gjxFUxhNR9FkL8hTNNkL8hRN9oI8RZO9IE/RZC/IUTQ7e0GeoslekKdoshfkKZrsBXmKpjCajqLJXpCnaLIX5Cma7AV5iiZ7QZ6iyV6Qn2juNjOajqLJXpCnaLIX5Cma7AV5iqYwmo6iyV6Qp2iyF+QpmuwFeYome0GeoslekKNoBvaCPEWTvSBP0WQvyFM02QvyFE1hNB1Fk70gT9FkL8hTNNkL8hRN9oI8RZO9IEfRjOwFeYome0GeoslekKdoshfkKZrCaDqKJntBnqLJXpCnaLIX5Cma7AV5iiZ7QY6imdgL8hRN9oI8RZO9IE/RZC/IUzSF0XQUTfaCPEWTvSBP0WQvyFM02QvyFE32ghxFU9gL8hRN9oI8RZO9IE/RZC/IUzSF0XQUTfaCPEWTvSBP0WQvyFM02QvyFE32ghxFM7MX5Cma7AV5iiZ7QZ6iyV6Qp2gKo+komuwFeYome0GeoslekKdoshfkKZrsBTmKZmEvyFM02QvyFE32gjxFk70gT9EURtNRNNkL8hRN9oI8RZO9IE/RZC/IUzTZC3IUzcpekKdoshfkKZrsBXmKJntBnqIpjKajaLIX5Cma7AV5iiZ7QZ6i+fm9oPR2Rym1H6L57ZY+v6GR6na7Wt5dPH7A4pbb7U6C1PvVfeT/vT1zf2R+jCzIA9Y2RtNRNAOj6SiaExoaKcZ0j2aUeBzNEvItmiW0rIS+vd1+++LlW+ilf7//9On3H1u83X/s/fjiGFt/u5Me2/vLvxkgVzdgXKjJ27LctmMD9re43VHfwtvt19HFscvt8522GI4/36Gkfrs6FAlB+cyGkt8ur2/JI7bhq6dy97uE7Yerv/mmmPaNpPzmG+mKb2K4Z789sebf7JtK3zz1TfvNvulbfPNNzse+SfeCScLb11rYpfm32+kTbqfc/NnD1o5vJ/Sc7mm/51x+a47q29UNCJ9rQNz2r9vbS2+phx/uaP/jP/7xl7/+9S//9e9//fuf/vivv/z9b//8snj78j9hfCJjruX2PO7/fJM4Sb4+82F88p+6Kp9aVU6tqqdWtVOr+plV45Nm1FXh1Kp4atWpZyOdejbSqWcjnXo20qlnI516NtKpZ0NOPRtjwumXntFtVX/XMruviqdWpVOr5NSqrK4K+WHVmNiSe+z3VfnRh2P6QHlT+CWmwSo5tSqfWlXOrBr/kr7IvTot0tvjKjm1Kp9aVU6tGn6WS95uGqnk2B9XtVOr+plV418IqauCuirJ46qx53N+W1UfP1/j/R51VT21qp1a1c+sak98eO8ilbI95o1WTq0a3mHd7rV+3dLjqj7MvaXIvelS3vUT7qvSqVVyatX4iart7vnaH5/eXk6tqqdWtVOr+olVcdtOrQqnVsVTq57E697eLLXI46qxD/u9CKnblh5X9TOrwnbikxJDOLUqnlqVTq2SU6vyqVXl1Kp6alU7tepMPtwbqadWnXo24qlnI6r5sA2e+VhOraqnVrVTq8af5XZvrJWWH75h47jWK/vuzH1VK4+r8qlV5dSqemrV2If7psbbqvq4qp9ZNa711FXh1Kp4alU6tUpOrRrHq8f7c9jjY7xE+/4qvT1+lqWfWTWuK9VV4dSqeGpVOrVKTq3Kp1aNP8u9tSPlkOsZvZFPaZt8StuU7dSqcGpVPLEqbUPP762jt59sSXjM9Gmr59aN1d6XXwbct8Ul1vK4LpxcF0+uSyfXycl1+eS6cnJdPbmunVzXn6y7l+xf1j3k/xS3k+vCyXXx5Lp0cp2cWLf/Fb5cPW4lhU3qrS+8/7s/fAjHvSR9WTy3LJ1bJueW5XPLyrll9dyydm7Z+DOUe7r/7GHvSj30bMa/4NOXhXPL4rll6cmyt1+P5d4el8m5ZeO4la3dt/ZL2B6y2Hhnf780vv3u5P0PCG7L+qll431vfVk4tyw+Wdbefkqxd+QelqVzy+TcsnxuWTm3rJ5b1s4te/aU3H8mEEoMj13tbTu5Lpxc9+xBefvI7et+/MiNfkW6t8hv13/5wZx2vbwVA/u/Bzs/WzJ6X2L0vrLR+ypG76sava9m9L66zfsKm9H7Covuq/Z39/W4Mxam5fvwdl+hPr5P+qT3kU96n/xJ71M+6X3qJ71P+6T36Z/zPvFZvsnv5GAZrAsn18WT69LJdXJyXT65rpxcV0+uayfX9XPr0snnJZ18XtKT52XfYHv7HOTyuC6dXCcn1+WT68rJdU/inuQtP6Sf/oWnvk6e+DO9dVZLqo+6QZ7Yl9+Gr0oe/NZI6sl17eS6fm5d3k6uCyfXxZPr0sl1cnLdk89DfpufL7k+6rn87Hl595zlHpXvvdK329de6e++9cJw9HLf/P1+cdv3qd5f/PWOqrk7aubuqFu7o7KZu6Ng7o6iuTtK5u7oyWethLdefAmD3zY/iXbJ8W3dIP892Y8q+5fr2zqJj+vk5Lp8cl05ua6eXNdOruvn1j3ZltLXhZPrnnwWS3n/vDzqq5ZOrpOT6/LJdU+el7q96f8aH3/R/WwvTF3XTq7r59Y92w5T14WT6+LJdU+elyrv1uXHfPZsS0xdl0+uKyfXPXte0vt1g9mGdnJdP7UuPtsXU9eFk+viyXXp5Lpnz8tbP3dPE+1xXT65rpxcV0+ue/a8lPfrBhMP/dy6Z/sC6rpwcl08uS6dXCcn1z15Xto7fdZifFxXTq6rJ9e1k+uePC9te79u8Av57eS6cHJdPLkunVwnJ9flk+ue6d32pnvar2Ych7ip+Eanqunxt+HP+sAffh95w+DVMpgMaZ/0Pv1z3udZX3r6+4RPep/4Se+TPul95JPeJ096n9Le3qcOpmfKC+wZvU/9pPdpn/Q+/XPeR2blg37fF0ltG8zyhE96n/hJ75M+6X3kk94nf9L7lE96n/pJ7zMpH7Tt7XPawmMdJf0F9gzeJ2+f9D7hk94nftL7TMoHLb1Btps85ussn/Q++ZPep3zS+9RPep/2Se/TP+d9yvZJ7zMpH7T87nOaH/sgJb7AntH7pE96H/mk98mf9D7l1H5gLPXkunZyXT+3rm4n14WT6+LJdenkOjm5Lp9cd/J5qSefl3ryeXm236n8Liw+2+9Mb78PL7KFx3Xp5Do5uS6fXFdOrqsn17WT6/q5dc/2O9V14eS6k89LP/m89HPPy9PJfJU8ICfXWZmUV9bFk2SFeJKsEE+SFeJJssLTSXlt3UmyQnxGVtAm+uvJde3kupNkhXSSrJDOkBX2v+KXq+MTvNntB2I1v/sxWY4DISh3yqu8G1b6cu1XcfVbXz7dp1/z+8NKvr98fe3Lt9e+fH/py6fttS8fXvvy8bUv/wTB9PbyTXn5Xu8/B9neH3SWRwT4eteU9R1q4cu1X+5FDN1LNnQvxdC91M+9lzsEu777ge742hDkvpEf3h9KNLw638F6+X26/vrT3ydUPWdGdgAjnzALnRkZ3Bu5/5G+XPiMyPlm6ruf8ctR9jxcUj++pH18Sf/wkmcIzqMlY3nSb55u2+OS+PEl6eNL5ONLhtFv9T7F0dLDkvLxJfXjS9rHlwyj3++6roeHJeONzOMl4eNL4seXDKPf74cVdWkPS+TjS/LHlxRlybufL9+W1I8vaR9fMo5+u+309NZ/vWS8bXW8JHx8yROWXrj3JLbyozWDIaztVgmX9wVHk69vkF79BvLqN8ivfoPy6jeor36D9uo36C9+g2cEy3lvEF79Bq/+JNdXf5Lrqz/J9dWf5PrqT3J99Se5vvqTXF/9SW4zHtP7oHDJ4eENZgT5PkNZ3lVJtzf4cJD/8BQJqizqJxb19mIH9xmPSH13PsSv3+AZqnLmO4SXv0N8+TvM+CTV+3x+K4/vIC9/h/zydygvf4f68ndoL3+H/up3CNuL0/IzMOLMd4gvf4f08neQl79Dfvk7lJe/Q335O7SXv0N/9TvEl3+m48s/0/G1n+n9L/ly5ZNfs+xfHvdW/56E3y3+1mXPB2u3cP9B0vsTx76MDjxc/G6DOsT3l/7hy+THa18+//aXT/ez1aT/+uXLhJd/22FNv375+ttf/v5DtfqO5v795dtrX77/5pdv8fZBaPLr0KZtwsvfnv+Wy69fPvz2l7+flNEenJPixJfvv3ru9z/K4ec+vn3s28890uENuBJKOb4xNbHUrzdXz5wyHtt2alU4tSqeWpVOrZJTq/KpVeXUqnpqVTu16tSz0U89G/3Us9FPPRv91LPRTz0b/dSz0U89G2Pe0g+n3W+PJ3GOu0Xqqn5iVRq3ddRVQV0V8uOqsQ/7/ccSuefBKXfj3wDE++hsielx1bi0VVeFU6viqVVju6TeT3eWx5MGnvxSXF0VTq2Kp1aNfy75/rT72B9XyalV+dSqcmpVVVelB+Lak19cK6fdp7EMUlelU6vk1Kp8atUTH/b7E1W2x7zx5KRbbdWZ07jTk9Nnyx0Avv/zca7lyemzyqonp89qq86cQJ9yPLUqnVolp1blU6vKqVX11Kp2ZtWTE2Frvj+9tTzmjfFPNLQTYUs+terMCfSp1FOr2qlVZ06gT3U7tSqcWhVPrUqnVsmpVafyYT31bNRTz0Y99Ww0NR+2wTPf4qlV6dQqObXqye9407v9x8dv2P7k56/3nw2X1h7n5Xo4tSqeWpVOrRr78PgE+tTzqVXl1Kp6alU7taqfWCXbdmrVk/Gn+HYqfCyPq7Tvr9FZ8rLlU6vKqVX11Kp2alU/sypsp1aFU6uenEB/P/hupBwkpBN6Q4KcWpVPrSqnVtVTq9qZVU9+TqzNtktJJ9edO3VeSj25rp1cd26WXup2cl04uS6eXJdOrpOT657N0h/PjEstJ9fVk+vayXXnZumlnZml3/9qX64et3fk/qub/H5vVLbnW1zHS9LHl8jHl+SPLykfX/JkuyS+dY4flrSPL+kfXiLbx5eMv2rvP1MoP8yabR/9We6Tvte0l0+vfXl57cvn1758ee3L19e+fHvty/eXvvyTvui0l3/tpza/9lObX/upza/91ObXfmrzaz+1+bWf2vzaT2357U/O0QhC+e2+P/pRYPmg7//wbMTueEn/8JIqL3Vr/e2fmKOJhVpe+/L1tS/fXvvyv/177uj392177cuH1758fO3Lp9e+vLz25fNrX/61ubbV1758e+3L95e+fN9e+/LhtS8fX/vy6bUvL699+fzal3/tp7a/9lPbX/mp3f/qX64c/1At9ruujf1dSzvItx9Of9ko+d8ndV2+HyGX399gas9rteMl6eNL5ONL8geXfPFC+OrBceer38cp3uHXQ/rSytz//P/++I+//PE//vrnf+5LvvzX//nbn/71l7//7fuf//r///v2X/7jH3/561//8l///t//+Puf/vyf//OPP//7X//+py//7Xfb9//5fWzpl7TJH77iqH4ftvRLCOkP34L0+7jvhcS6/eHb3f4+Vtn/LF/v/rY+pfZLyv37+rz9Urb76l73l4631Wn78k75Dij9es2upaXfrthX53gnY335z0HaL6HcXj3sm5gh5dvr7/74Zd80ua3e+777n3KfF/puwS8p3MeAvv5f+yoJ9+mCb/+X/JL6/Tf9X+8r9V/kqylf3jjm/kv8ehvfbjqGX/YG/u2NJW2/SIr3LvPXe4uy30y+uzXsbg33Gw/7nYZ6v/GwGxm3+6fq242nX2J7+7R8eZUUfpH7a+zt7hLfnqNvZsRfUt2fkP0p+X8=",
|
|
3737
|
+
"brillig_names": [
|
|
3738
|
+
"build_msg_block",
|
|
3739
|
+
"attach_len_to_msg_block",
|
|
3740
|
+
"storage_read",
|
|
3741
|
+
"get_public_data_witness",
|
|
3742
|
+
"field_less_than",
|
|
3743
|
+
"decompose_hint",
|
|
3744
|
+
"lte_hint",
|
|
3745
|
+
"build_msg_block",
|
|
3746
|
+
"get_l1_to_l2_membership_witness",
|
|
3747
|
+
"notify_created_nullifier_oracle_wrapper",
|
|
3748
|
+
"store_in_execution_cache_oracle_wrapper",
|
|
3749
|
+
"enqueue_public_function_call_internal",
|
|
3750
|
+
"directive_to_radix",
|
|
3751
|
+
"directive_invert",
|
|
3752
|
+
"directive_integer_quotient"
|
|
3753
|
+
],
|
|
3754
|
+
"verification_key": "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"
|
|
3755
|
+
},
|
|
3756
|
+
{
|
|
3757
|
+
"name": "process_log",
|
|
3758
|
+
"is_unconstrained": true,
|
|
3759
|
+
"custom_attributes": [],
|
|
3760
|
+
"abi": {
|
|
3761
|
+
"error_types": {
|
|
3762
|
+
"16541607464495309456": {
|
|
3763
|
+
"error_kind": "fmtstring",
|
|
3764
|
+
"item_types": [],
|
|
3765
|
+
"length": 16
|
|
3766
|
+
},
|
|
3767
|
+
"17843811134343075018": {
|
|
3768
|
+
"error_kind": "string",
|
|
3769
|
+
"string": "Stack too deep"
|
|
3770
|
+
}
|
|
3771
|
+
},
|
|
3772
|
+
"parameters": [
|
|
3773
|
+
{
|
|
3774
|
+
"name": "log_plaintext",
|
|
3775
|
+
"type": {
|
|
3776
|
+
"fields": [
|
|
3777
|
+
{
|
|
3778
|
+
"name": "storage",
|
|
3779
|
+
"type": {
|
|
3780
|
+
"kind": "array",
|
|
3781
|
+
"length": 18,
|
|
3782
|
+
"type": {
|
|
3783
|
+
"kind": "field"
|
|
3784
|
+
}
|
|
3785
|
+
}
|
|
3786
|
+
},
|
|
3787
|
+
{
|
|
3788
|
+
"name": "len",
|
|
3789
|
+
"type": {
|
|
3790
|
+
"kind": "integer",
|
|
3791
|
+
"sign": "unsigned",
|
|
3792
|
+
"width": 32
|
|
3793
|
+
}
|
|
3794
|
+
}
|
|
3795
|
+
],
|
|
3796
|
+
"kind": "struct",
|
|
3797
|
+
"path": "std::collections::bounded_vec::BoundedVec"
|
|
3798
|
+
},
|
|
3799
|
+
"visibility": "private"
|
|
3800
|
+
},
|
|
3801
|
+
{
|
|
3802
|
+
"name": "tx_hash",
|
|
3803
|
+
"type": {
|
|
3804
|
+
"kind": "field"
|
|
3805
|
+
},
|
|
3806
|
+
"visibility": "private"
|
|
3807
|
+
},
|
|
3808
|
+
{
|
|
3809
|
+
"name": "unique_note_hashes_in_tx",
|
|
3810
|
+
"type": {
|
|
3811
|
+
"fields": [
|
|
3812
|
+
{
|
|
3813
|
+
"name": "storage",
|
|
3814
|
+
"type": {
|
|
3815
|
+
"kind": "array",
|
|
3816
|
+
"length": 64,
|
|
3817
|
+
"type": {
|
|
3818
|
+
"kind": "field"
|
|
3819
|
+
}
|
|
3820
|
+
}
|
|
3821
|
+
},
|
|
3822
|
+
{
|
|
3823
|
+
"name": "len",
|
|
3824
|
+
"type": {
|
|
3825
|
+
"kind": "integer",
|
|
3826
|
+
"sign": "unsigned",
|
|
3827
|
+
"width": 32
|
|
3828
|
+
}
|
|
3829
|
+
}
|
|
3830
|
+
],
|
|
3831
|
+
"kind": "struct",
|
|
3832
|
+
"path": "std::collections::bounded_vec::BoundedVec"
|
|
3833
|
+
},
|
|
3834
|
+
"visibility": "private"
|
|
3835
|
+
},
|
|
3836
|
+
{
|
|
3837
|
+
"name": "first_nullifier_in_tx",
|
|
3838
|
+
"type": {
|
|
3839
|
+
"kind": "field"
|
|
3840
|
+
},
|
|
3841
|
+
"visibility": "private"
|
|
3842
|
+
},
|
|
3843
|
+
{
|
|
3844
|
+
"name": "recipient",
|
|
3845
|
+
"type": {
|
|
3846
|
+
"fields": [
|
|
3847
|
+
{
|
|
3848
|
+
"name": "inner",
|
|
3849
|
+
"type": {
|
|
3850
|
+
"kind": "field"
|
|
3851
|
+
}
|
|
3852
|
+
}
|
|
3853
|
+
],
|
|
3854
|
+
"kind": "struct",
|
|
3855
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
3856
|
+
},
|
|
3857
|
+
"visibility": "private"
|
|
3858
|
+
}
|
|
3859
|
+
],
|
|
3860
|
+
"return_type": null
|
|
3861
|
+
},
|
|
3862
|
+
"bytecode": "H4sIAAAAAAAA/92c927bMBDG5URKIieOndG9927leHeme+/W/dsdfosWAtqHSPu09Zfw7DPDAilCovkqQJCto+9+PFHUiTy6EG1s3cFeMJ9jc5w2R5xfjMY3Kbtqjtn2tqpHXVkoxgIB4wQB4yQBY0zAmBAwThEwThMwzhAwpgSMRQLGWQLGOQLGEgHjPAFjmYCxQsC4EIAxBOciCeeSR04d24fiXY52fhvdRcC4m4BxDwHjXgLGfQSM+wkYDxAwHiRgPETAeJiA8QgB41ECxmMEjMcJGE8QMJ4kYDxFwHiagPEMAeNZAsZzBIznCRgvEDBeJGC8RMB4mYDxCgFjRsBYJWBcIWCsETDWCRgbBIxNAsYWAWObgLFDwHiVgPEaAeN1AsYbBIw3CRhvETCuEjDeJmC8Q8B4l4DxHgHjfQLGBwSMDwkYHxEwPiZgfELA+JSA8RkB43MCxhcEjC8JGF8RML4mYHxDwPg2AGMIzncknO9JOLuBOKMPFvTEYMfCLSyMwsIjLOzBwhksTMHCDyyswMIFLAxA4j0S25E4XhnsSHxGUjESdpEEiyRTJHEiSRJJiEjyQxIdktSQBIYkKyQxIUno6GA/NtiRRIIkDSRBIMkAk/iYJMckNCZ5MYmKSUpMAmKSDZNYmCRCrTDJgUkEDNJjEByDzBjExSApBiExyIdBNAxSYRAIgywYxJBBArzk4iUSL2l4CcJLBoJ4BMkIQhHkIYhCkIIgAA9ZPMTwkEAnjE4OnQhuUtwAaFzd6M+bNJIf5pia44SSe1xEV00tuz71t7POx9RRP4/8tdTonAmiv9ES/WkY/kwW2t7LR/p1XcTupDl285Evu/k4k5RZU2XWrDJSnzDXu14P66/qSsnyUaTqIraLYWzXCpY9fV20TOwXo5Btc2NRsrYnPLZ/pO8oSZl8xFOwZHG+uR4iS5RMri/snFfl7LY1Y8mEBZu035LyjWwfjEyuaax0+muvjXbY9lrP/l17rVf/x/YaW7I431yPv22vum3Z7TWJRpv0pSKbUrKflmxayX7lI9sNxdE0n8P2yRvPYH3v+X6GLTn4tS1s0/nIH9IGJ9W5RPlv3T+6vCVLlSzOx+0UzfdY2dG6hCOxytfN97I5TqnfyO8rDvtTlv0xbsc52y+po3zqKI+2dsl8njU72tA3+U20+d7Fvmq+Z9vamh1XP+lPf6vm6gs98n8R/bNB9NeH+ufC8A/jqlIY/w/1z4fh74v+chj9TdFfCaO/IfoXguhfGcYJ+s927DhhSZ33GNduOU4Q+0WLNVScsGTx2P7RcQJkyw7WikNm9wHLDjvLDjsuXfMedS141FXcoXUsedRV8agr9ajL53Wc86jLp7/KHnXNeNTls9379Jdcx7DjVVnmitOiAPqLYfQP+37po/W7ma6T2E+s8l8tP88F8fNoHEr6M+0LVyzl0/ZWn9div+TgEe6iQ7adP0D70mj3O+1GZxDSV5srnaxg6RdW+5x+L9L9iy7veva74j6Pvs5cYxBl5VdssZLNW7JEyYRRj0G44mKf/Fvxv7Zfccjs/nmr13IxGm9r+n6cjUb3c5z7r3urvfHHLuuMRn8SjY8xRpb9xCr/3Xy3+7rt3iP9Vq/ar/X6vUbv8+f6p96ipV/7EH76DXVGL3ipUwAA",
|
|
3863
|
+
"debug_symbols": "tZbLCoMwEEX/ZdZZOGPV1l8ppUSNJRCiRC0U8d8bpQ9p13cTmDA5kyxOuDM1pppuV+vbbqDyPJPraj3azsdqXhRVwTpnb9f9NiXrwolsB4Ze+7UeRh1GKg+iyPiGyiyJx1vrDJV5uqi/xuLdWBSfxkyWi4rkFEY+wMgZjJzDyAWMfISRTygyJzAyw8gwBxnmIMMcZJiDDHOQYQ4yzEGGOSgwBwXmoMAcFJiDgnFwidVdB6srZ14Bop18vcsT46M3P9GiD11tmimYNWR888X69nihTLZfPxYsueKU45A46Ak=",
|
|
3939
3864
|
"brillig_names": [
|
|
3940
|
-
"
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
"
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
"
|
|
3865
|
+
"process_log"
|
|
3866
|
+
]
|
|
3867
|
+
},
|
|
3868
|
+
{
|
|
3869
|
+
"name": "sync_notes",
|
|
3870
|
+
"is_unconstrained": true,
|
|
3871
|
+
"custom_attributes": [],
|
|
3872
|
+
"abi": {
|
|
3873
|
+
"error_types": {
|
|
3874
|
+
"17843811134343075018": {
|
|
3875
|
+
"error_kind": "string",
|
|
3876
|
+
"string": "Stack too deep"
|
|
3877
|
+
}
|
|
3878
|
+
},
|
|
3879
|
+
"parameters": [],
|
|
3880
|
+
"return_type": null
|
|
3881
|
+
},
|
|
3882
|
+
"bytecode": "H4sIAAAAAAAA/7WTyw7CIBBFqcUo0sTEx39MU0y7dOHafyCtLHVRN+766dZkJkyI0QVwEzJMgMNcHoXwKjBKESGCHDEqjAs2Xs7tjDnEqVbBvin5HRijvvhLWH+jkFnk4QPxM50/rJBzmTyfe6F913PTrF8J/z5y+af7y+l//8OzRq9bzCvh/8P4uvfXx/M2ij/SbJGc0ptoOwAqvkT+EvmhJBvn8w+Yb4Svj6KMqNO1tnaNdfZkh8H0dhfwP+KH/QbzqHp4zgQAAA==",
|
|
3883
|
+
"debug_symbols": "bY/dCoMwDIXfJde9aKoO7KvIkKpRCqWVWgdDfPfFsUn3c3PICV8OORsM1K1Ta/0YFtDNBi70Jtng2W27gC5a5+zU5muQh2Dx5JfZ+MMuycQEulQCyA+gK8nXo3UE+lLs4gdEifLN8qzqE8ey/s/XePIK5Qd/3dneTLSmc/R6fVx9nzVJ95m+Ss0x9DSskY56WTPWBiuhJMdy9AM=",
|
|
3884
|
+
"brillig_names": [
|
|
3885
|
+
"sync_notes"
|
|
3886
|
+
]
|
|
3887
|
+
},
|
|
3888
|
+
{
|
|
3889
|
+
"name": "check_balance",
|
|
3890
|
+
"is_unconstrained": true,
|
|
3891
|
+
"custom_attributes": [
|
|
3892
|
+
"public",
|
|
3893
|
+
"view"
|
|
3955
3894
|
],
|
|
3956
|
-
"
|
|
3895
|
+
"abi": {
|
|
3896
|
+
"error_types": {
|
|
3897
|
+
"15238796416211288225": {
|
|
3898
|
+
"error_kind": "string",
|
|
3899
|
+
"string": "Balance too low"
|
|
3900
|
+
},
|
|
3901
|
+
"16761564377371454734": {
|
|
3902
|
+
"error_kind": "string",
|
|
3903
|
+
"string": "Array index out of bounds"
|
|
3904
|
+
},
|
|
3905
|
+
"17843811134343075018": {
|
|
3906
|
+
"error_kind": "string",
|
|
3907
|
+
"string": "Stack too deep"
|
|
3908
|
+
},
|
|
3909
|
+
"206160798890201757": {
|
|
3910
|
+
"error_kind": "string",
|
|
3911
|
+
"string": "Storage slot 0 not allowed. Storage slots must start from 1."
|
|
3912
|
+
},
|
|
3913
|
+
"3219842053230618354": {
|
|
3914
|
+
"error_kind": "string",
|
|
3915
|
+
"string": "Function check_balance can only be called statically"
|
|
3916
|
+
},
|
|
3917
|
+
"5019202896831570965": {
|
|
3918
|
+
"error_kind": "string",
|
|
3919
|
+
"string": "attempt to add with overflow"
|
|
3920
|
+
},
|
|
3921
|
+
"6485997221020871071": {
|
|
3922
|
+
"error_kind": "string",
|
|
3923
|
+
"string": "call to assert_max_bit_size"
|
|
3924
|
+
}
|
|
3925
|
+
},
|
|
3926
|
+
"parameters": [
|
|
3927
|
+
{
|
|
3928
|
+
"name": "fee_limit",
|
|
3929
|
+
"type": {
|
|
3930
|
+
"fields": [
|
|
3931
|
+
{
|
|
3932
|
+
"name": "lo",
|
|
3933
|
+
"type": {
|
|
3934
|
+
"kind": "field"
|
|
3935
|
+
}
|
|
3936
|
+
},
|
|
3937
|
+
{
|
|
3938
|
+
"name": "hi",
|
|
3939
|
+
"type": {
|
|
3940
|
+
"kind": "field"
|
|
3941
|
+
}
|
|
3942
|
+
}
|
|
3943
|
+
],
|
|
3944
|
+
"kind": "struct",
|
|
3945
|
+
"path": "std::uint128::U128"
|
|
3946
|
+
},
|
|
3947
|
+
"visibility": "private"
|
|
3948
|
+
}
|
|
3949
|
+
],
|
|
3950
|
+
"return_type": null
|
|
3951
|
+
},
|
|
3952
|
+
"bytecode": "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",
|
|
3953
|
+
"debug_symbols": "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",
|
|
3954
|
+
"brillig_names": [
|
|
3955
|
+
"check_balance"
|
|
3956
|
+
]
|
|
3957
3957
|
}
|
|
3958
3958
|
],
|
|
3959
3959
|
"outputs": {
|
|
@@ -4035,15 +4035,36 @@
|
|
|
4035
4035
|
"kind": "struct",
|
|
4036
4036
|
"path": "authwit::aztec::protocol_types::address::eth_address::EthAddress"
|
|
4037
4037
|
}
|
|
4038
|
+
},
|
|
4039
|
+
{
|
|
4040
|
+
"name": "initial_mint",
|
|
4041
|
+
"type": {
|
|
4042
|
+
"fields": [
|
|
4043
|
+
{
|
|
4044
|
+
"name": "lo",
|
|
4045
|
+
"type": {
|
|
4046
|
+
"kind": "field"
|
|
4047
|
+
}
|
|
4048
|
+
},
|
|
4049
|
+
{
|
|
4050
|
+
"name": "hi",
|
|
4051
|
+
"type": {
|
|
4052
|
+
"kind": "field"
|
|
4053
|
+
}
|
|
4054
|
+
}
|
|
4055
|
+
],
|
|
4056
|
+
"kind": "struct",
|
|
4057
|
+
"path": "std::uint128::U128"
|
|
4058
|
+
}
|
|
4038
4059
|
}
|
|
4039
4060
|
],
|
|
4040
4061
|
"kind": "struct",
|
|
4041
|
-
"path": "FeeJuice::
|
|
4062
|
+
"path": "FeeJuice::initialize_parameters"
|
|
4042
4063
|
}
|
|
4043
4064
|
}
|
|
4044
4065
|
],
|
|
4045
4066
|
"kind": "struct",
|
|
4046
|
-
"path": "FeeJuice::
|
|
4067
|
+
"path": "FeeJuice::initialize_abi"
|
|
4047
4068
|
},
|
|
4048
4069
|
{
|
|
4049
4070
|
"fields": [
|
|
@@ -4128,36 +4149,15 @@
|
|
|
4128
4149
|
"kind": "struct",
|
|
4129
4150
|
"path": "authwit::aztec::protocol_types::address::eth_address::EthAddress"
|
|
4130
4151
|
}
|
|
4131
|
-
},
|
|
4132
|
-
{
|
|
4133
|
-
"name": "initial_mint",
|
|
4134
|
-
"type": {
|
|
4135
|
-
"fields": [
|
|
4136
|
-
{
|
|
4137
|
-
"name": "lo",
|
|
4138
|
-
"type": {
|
|
4139
|
-
"kind": "field"
|
|
4140
|
-
}
|
|
4141
|
-
},
|
|
4142
|
-
{
|
|
4143
|
-
"name": "hi",
|
|
4144
|
-
"type": {
|
|
4145
|
-
"kind": "field"
|
|
4146
|
-
}
|
|
4147
|
-
}
|
|
4148
|
-
],
|
|
4149
|
-
"kind": "struct",
|
|
4150
|
-
"path": "std::uint128::U128"
|
|
4151
|
-
}
|
|
4152
4152
|
}
|
|
4153
4153
|
],
|
|
4154
4154
|
"kind": "struct",
|
|
4155
|
-
"path": "FeeJuice::
|
|
4155
|
+
"path": "FeeJuice::set_portal_parameters"
|
|
4156
4156
|
}
|
|
4157
4157
|
}
|
|
4158
4158
|
],
|
|
4159
4159
|
"kind": "struct",
|
|
4160
|
-
"path": "FeeJuice::
|
|
4160
|
+
"path": "FeeJuice::set_portal_abi"
|
|
4161
4161
|
},
|
|
4162
4162
|
{
|
|
4163
4163
|
"fields": [
|
|
@@ -4166,7 +4166,7 @@
|
|
|
4166
4166
|
"type": {
|
|
4167
4167
|
"fields": [
|
|
4168
4168
|
{
|
|
4169
|
-
"name": "
|
|
4169
|
+
"name": "to",
|
|
4170
4170
|
"type": {
|
|
4171
4171
|
"fields": [
|
|
4172
4172
|
{
|
|
@@ -4179,36 +4179,36 @@
|
|
|
4179
4179
|
"kind": "struct",
|
|
4180
4180
|
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4181
4181
|
}
|
|
4182
|
-
}
|
|
4183
|
-
],
|
|
4184
|
-
"kind": "struct",
|
|
4185
|
-
"path": "FeeJuice::balance_of_public_parameters"
|
|
4186
|
-
}
|
|
4187
|
-
},
|
|
4188
|
-
{
|
|
4189
|
-
"name": "return_type",
|
|
4190
|
-
"type": {
|
|
4191
|
-
"fields": [
|
|
4192
|
-
{
|
|
4193
|
-
"name": "lo",
|
|
4194
|
-
"type": {
|
|
4195
|
-
"kind": "field"
|
|
4196
|
-
}
|
|
4197
4182
|
},
|
|
4198
4183
|
{
|
|
4199
|
-
"name": "
|
|
4184
|
+
"name": "amount",
|
|
4200
4185
|
"type": {
|
|
4201
|
-
"
|
|
4186
|
+
"fields": [
|
|
4187
|
+
{
|
|
4188
|
+
"name": "lo",
|
|
4189
|
+
"type": {
|
|
4190
|
+
"kind": "field"
|
|
4191
|
+
}
|
|
4192
|
+
},
|
|
4193
|
+
{
|
|
4194
|
+
"name": "hi",
|
|
4195
|
+
"type": {
|
|
4196
|
+
"kind": "field"
|
|
4197
|
+
}
|
|
4198
|
+
}
|
|
4199
|
+
],
|
|
4200
|
+
"kind": "struct",
|
|
4201
|
+
"path": "std::uint128::U128"
|
|
4202
4202
|
}
|
|
4203
4203
|
}
|
|
4204
4204
|
],
|
|
4205
4205
|
"kind": "struct",
|
|
4206
|
-
"path": "
|
|
4206
|
+
"path": "FeeJuice::_increase_public_balance_parameters"
|
|
4207
4207
|
}
|
|
4208
4208
|
}
|
|
4209
4209
|
],
|
|
4210
4210
|
"kind": "struct",
|
|
4211
|
-
"path": "FeeJuice::
|
|
4211
|
+
"path": "FeeJuice::_increase_public_balance_abi"
|
|
4212
4212
|
},
|
|
4213
4213
|
{
|
|
4214
4214
|
"fields": [
|
|
@@ -4253,7 +4253,7 @@
|
|
|
4253
4253
|
"type": {
|
|
4254
4254
|
"fields": [
|
|
4255
4255
|
{
|
|
4256
|
-
"name": "
|
|
4256
|
+
"name": "owner",
|
|
4257
4257
|
"type": {
|
|
4258
4258
|
"fields": [
|
|
4259
4259
|
{
|
|
@@ -4266,36 +4266,36 @@
|
|
|
4266
4266
|
"kind": "struct",
|
|
4267
4267
|
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4268
4268
|
}
|
|
4269
|
+
}
|
|
4270
|
+
],
|
|
4271
|
+
"kind": "struct",
|
|
4272
|
+
"path": "FeeJuice::balance_of_public_parameters"
|
|
4273
|
+
}
|
|
4274
|
+
},
|
|
4275
|
+
{
|
|
4276
|
+
"name": "return_type",
|
|
4277
|
+
"type": {
|
|
4278
|
+
"fields": [
|
|
4279
|
+
{
|
|
4280
|
+
"name": "lo",
|
|
4281
|
+
"type": {
|
|
4282
|
+
"kind": "field"
|
|
4283
|
+
}
|
|
4269
4284
|
},
|
|
4270
4285
|
{
|
|
4271
|
-
"name": "
|
|
4286
|
+
"name": "hi",
|
|
4272
4287
|
"type": {
|
|
4273
|
-
"
|
|
4274
|
-
{
|
|
4275
|
-
"name": "lo",
|
|
4276
|
-
"type": {
|
|
4277
|
-
"kind": "field"
|
|
4278
|
-
}
|
|
4279
|
-
},
|
|
4280
|
-
{
|
|
4281
|
-
"name": "hi",
|
|
4282
|
-
"type": {
|
|
4283
|
-
"kind": "field"
|
|
4284
|
-
}
|
|
4285
|
-
}
|
|
4286
|
-
],
|
|
4287
|
-
"kind": "struct",
|
|
4288
|
-
"path": "std::uint128::U128"
|
|
4288
|
+
"kind": "field"
|
|
4289
4289
|
}
|
|
4290
4290
|
}
|
|
4291
4291
|
],
|
|
4292
4292
|
"kind": "struct",
|
|
4293
|
-
"path": "
|
|
4293
|
+
"path": "std::uint128::U128"
|
|
4294
4294
|
}
|
|
4295
4295
|
}
|
|
4296
4296
|
],
|
|
4297
4297
|
"kind": "struct",
|
|
4298
|
-
"path": "FeeJuice::
|
|
4298
|
+
"path": "FeeJuice::balance_of_public_abi"
|
|
4299
4299
|
}
|
|
4300
4300
|
]
|
|
4301
4301
|
}
|
|
@@ -4339,7 +4339,7 @@
|
|
|
4339
4339
|
},
|
|
4340
4340
|
"162": {
|
|
4341
4341
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr",
|
|
4342
|
-
"source": "use crate::{\n context::{PrivateContext, PublicContext, UnconstrainedContext},\n state_vars::storage::Storage,\n utils::with_hash::WithHash,\n};\nuse dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::Packable};\n\n/// Stores an immutable value in public state which can be read from public, private and unconstrained execution\n/// contexts.\n///\n/// Leverages `WithHash<T>` to enable efficient private reads of public storage. `WithHash` wrapper allows for\n/// efficient reads by verifying large values through a single hash check and then proving inclusion only of the hash\n/// in the public storage. This reduces the number of required tree inclusion proofs from O(M) to O(1).\n///\n/// This is valuable when T packs to multiple fields, as it maintains \"almost constant\" verification overhead\n/// regardless of the original data size.\n// docs:start:public_immutable_struct\npub struct PublicImmutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_immutable_struct\n\n/// `WithHash<T>` stores both the packed value (using N fields) and its hash (1 field), requiring N = M + 1 total\n/// fields.\nimpl<T, Context, let M: u32, let N: u32> Storage<N> for PublicImmutable<T, Context>\nwhere\n WithHash<T, M>: Packable<N>,\n{\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<T, Context> PublicImmutable<T, Context> {\n // docs:start:public_immutable_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 ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicImmutable { context, storage_slot }\n }\n // docs:end:public_immutable_struct_new\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, &mut PublicContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n // docs:start:public_immutable_struct_write\n pub fn initialize(self, value: T) {\n // We check that the struct is not yet initialized by checking if the initialization slot is 0\n let initialization_slot = INITIALIZATION_SLOT_SEPARATOR + self.storage_slot;\n let init_field: Field = self.context.storage_read(initialization_slot);\n assert(init_field == 0, \"PublicImmutable already initialized\");\n\n // We populate the initialization slot with a non-zero value to indicate that the struct is initialized\n self.context.storage_write(initialization_slot, 0xdead);\n self.context.storage_write(self.storage_slot, WithHash::new(value));\n }\n // docs:end:public_immutable_struct_write\n\n // Note that we don't access the context, but we do call oracles that are only available in public\n // docs:start:public_immutable_struct_read\n pub fn read(self) -> T {\n WithHash::public_storage_read(*self.context, self.storage_slot)\n }\n // docs:end:public_immutable_struct_read\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, UnconstrainedContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n pub unconstrained fn read(self) -> T {\n WithHash::unconstrained_public_storage_read(self.context, self.storage_slot)\n }\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, &mut PrivateContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n pub fn read(self) -> T {\n WithHash::historical_public_storage_read(\n self.context.get_block_header(),\n self.context.this_address(),\n self.storage_slot,\n )\n }\n}\n"
|
|
4342
|
+
"source": "use crate::{\n context::{PrivateContext, PublicContext, UnconstrainedContext},\n state_vars::storage::Storage,\n utils::with_hash::WithHash,\n};\nuse dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::Packable};\n\n/// Stores an immutable value in public state which can be read from public, private and unconstrained execution\n/// contexts.\n///\n/// Leverages `WithHash<T>` to enable efficient private reads of public storage. `WithHash` wrapper allows for\n/// efficient reads by verifying large values through a single hash check and then proving inclusion only of the hash\n/// in the public storage. This reduces the number of required tree inclusion proofs from O(M) to O(1).\n///\n/// This is valuable when T packs to multiple fields, as it maintains \"almost constant\" verification overhead\n/// regardless of the original data size.\n///\n/// # Optimizing private reads in your contract\n/// Given that reading T from public immutable in private has \"almost constant\" constraints cost for different sizes\n/// of T it is recommended to group multiple values into a single struct when they are being read together. This can\n/// typically be some kind of configuration set up during contract initialization. E.g.:\n///\n/// ```noir\n/// use dep::aztec::protocol_types::{address::AztecAddress, traits::Packable};\n/// use std::meta::derive;\n///\n/// #[derive(Eq, Packable)]\n/// pub struct Config \\{\n/// pub address_1: AztecAddress,\n/// pub value_1: U128,\n/// pub value_2: u64,\n/// ...\n/// }\n/// ```\n///\n// docs:start:public_immutable_struct\npub struct PublicImmutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_immutable_struct\n\n/// `WithHash<T>` stores both the packed value (using N fields) and its hash (1 field), requiring N = M + 1 total\n/// fields.\nimpl<T, Context, let M: u32, let N: u32> Storage<N> for PublicImmutable<T, Context>\nwhere\n WithHash<T, M>: Packable<N>,\n{\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<T, Context> PublicImmutable<T, Context> {\n // docs:start:public_immutable_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 ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicImmutable { context, storage_slot }\n }\n // docs:end:public_immutable_struct_new\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, &mut PublicContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n // docs:start:public_immutable_struct_write\n pub fn initialize(self, value: T) {\n // We check that the struct is not yet initialized by checking if the initialization slot is 0\n let initialization_slot = INITIALIZATION_SLOT_SEPARATOR + self.storage_slot;\n let init_field: Field = self.context.storage_read(initialization_slot);\n assert(init_field == 0, \"PublicImmutable already initialized\");\n\n // We populate the initialization slot with a non-zero value to indicate that the struct is initialized\n self.context.storage_write(initialization_slot, 0xdead);\n self.context.storage_write(self.storage_slot, WithHash::new(value));\n }\n // docs:end:public_immutable_struct_write\n\n // Note that we don't access the context, but we do call oracles that are only available in public\n // docs:start:public_immutable_struct_read\n pub fn read(self) -> T {\n WithHash::public_storage_read(*self.context, self.storage_slot)\n }\n // docs:end:public_immutable_struct_read\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, UnconstrainedContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n pub unconstrained fn read(self) -> T {\n WithHash::unconstrained_public_storage_read(self.context, self.storage_slot)\n }\n}\n\nimpl<T, let T_PACKED_LEN: u32> PublicImmutable<T, &mut PrivateContext>\nwhere\n T: Packable<T_PACKED_LEN> + Eq,\n{\n pub fn read(self) -> T {\n WithHash::historical_public_storage_read(\n self.context.get_block_header(),\n self.context.this_address(),\n self.storage_slot,\n )\n }\n}\n"
|
|
4343
4343
|
},
|
|
4344
4344
|
"163": {
|
|
4345
4345
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr",
|
|
@@ -4349,7 +4349,7 @@
|
|
|
4349
4349
|
"path": "std/field/bn254.nr",
|
|
4350
4350
|
"source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\nglobal TWO_POW_64: Field = 0x10000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(mut x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 64 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low_lower_64 = (x as u64) as Field;\n x = (x - low_lower_64) / TWO_POW_64;\n let low_upper_64 = (x as u64) as Field;\n\n let high = (x - low_upper_64) / TWO_POW_64;\n let low = low_upper_64 * TWO_POW_64 + low_lower_64;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n /// Safety: borrow is enforced to be boolean due to its type.\n /// if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n /// if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n /// Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n /// Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n /// Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n /// Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"
|
|
4351
4351
|
},
|
|
4352
|
-
"
|
|
4352
|
+
"184": {
|
|
4353
4353
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
|
|
4354
4354
|
"source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must not be larger than the number\n/// of elements past `offset`.\n///\n/// Examples:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n///\n/// let bar: [Field; 5] = subarray([1, 2, 3, 4, 5], 2); // fails - we can't return 5 elements since only 3 remain\n/// ```\npub fn subarray<T, let SRC_LEN: u32, let DST_LEN: u32>(\n src: [T; SRC_LEN],\n offset: u32,\n) -> [T; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"DST_LEN too large for offset\");\n\n let mut dst: [T; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail_with = \"DST_LEN too large for offset\")]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
|
|
4355
4355
|
},
|
|
@@ -4357,15 +4357,15 @@
|
|
|
4357
4357
|
"path": "std/field/mod.nr",
|
|
4358
4358
|
"source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size<let BIT_SIZE: u32>(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: 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: [u1; 32] = exponent.to_le_bits();\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 `elem` {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 /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\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 if is_unconstrained() {\n /// Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 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\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n"
|
|
4359
4359
|
},
|
|
4360
|
-
"
|
|
4360
|
+
"193": {
|
|
4361
4361
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/with_hash.nr",
|
|
4362
4362
|
"source": "use crate::{\n context::{PublicContext, UnconstrainedContext},\n history::public_storage::PublicStorageHistoricalRead,\n oracle,\n};\nuse dep::protocol_types::{\n address::AztecAddress, block_header::BlockHeader, hash::poseidon2_hash, traits::Packable,\n};\n\n/// A struct that allows for efficient reading of value `T` from public storage in private.\n///\n/// The efficient reads are achieved by verifying large values through a single hash check\n/// and then proving inclusion only of the hash in public storage. This reduces the number\n/// of required tree inclusion proofs from `N` to 1.\n///\n/// # Type Parameters\n/// - `T`: The underlying type being wrapped, must implement `Packable<N>`\n/// - `N`: The number of field elements required to pack values of type `T`\npub struct WithHash<T, let N: u32> {\n value: T,\n packed: [Field; N],\n hash: Field,\n}\n\nimpl<T, let N: u32> WithHash<T, N>\nwhere\n T: Packable<N> + Eq,\n{\n pub fn new(value: T) -> Self {\n let packed = value.pack();\n Self { value, packed, hash: poseidon2_hash(packed) }\n }\n\n pub fn get_value(self) -> T {\n self.value\n }\n\n pub fn get_hash(self) -> Field {\n self.hash\n }\n\n pub fn public_storage_read(context: PublicContext, storage_slot: Field) -> T {\n context.storage_read(storage_slot)\n }\n\n pub unconstrained fn unconstrained_public_storage_read(\n context: UnconstrainedContext,\n storage_slot: Field,\n ) -> T {\n context.storage_read(storage_slot)\n }\n\n pub fn historical_public_storage_read(\n header: BlockHeader,\n address: AztecAddress,\n storage_slot: Field,\n ) -> T {\n let historical_block_number = header.global_variables.block_number as u32;\n\n // We could simply produce historical inclusion proofs for each field in `packed`, but that would require one\n // full sibling path per storage slot (since due to kernel siloing the storage is not contiguous). Instead, we\n // get an oracle to provide us the values, and instead we prove inclusion of their hash, which is both a much\n // smaller proof (a single slot), and also independent of the size of T (except in that we need to pack and hash T).\n let hint = WithHash::new(\n /// Safety: We verify that a hash of the hint/packed data matches the stored hash.\n unsafe {\n oracle::storage::storage_read(address, storage_slot, historical_block_number)\n },\n );\n\n let hash = header.public_storage_historical_read(storage_slot + N as Field, address);\n\n if hash != 0 {\n assert_eq(hash, hint.get_hash(), \"Hint values do not match hash\");\n } else {\n // The hash slot can only hold a zero if it is uninitialized. Therefore, the hints must then be zero\n // (i.e. the default value for public storage) as well.\n assert_eq(\n hint.get_value(),\n T::unpack(std::mem::zeroed()),\n \"Non-zero hint for zero hash\",\n );\n };\n\n hint.get_value()\n }\n}\n\nimpl<T, let N: u32> Packable<N + 1> for WithHash<T, N>\nwhere\n T: Packable<N>,\n{\n fn pack(self) -> [Field; N + 1] {\n let mut result: [Field; N + 1] = std::mem::zeroed();\n for i in 0..N {\n result[i] = self.packed[i];\n }\n result[N] = self.hash;\n\n result\n }\n\n fn unpack(packed: [Field; N + 1]) -> Self {\n let mut value_packed: [Field; N] = std::mem::zeroed();\n for i in 0..N {\n value_packed[i] = packed[i];\n }\n let hash = packed[N];\n\n Self { value: T::unpack(value_packed), packed: value_packed, hash }\n }\n}\n\nmod test {\n use crate::{\n oracle::random::random,\n test::{\n helpers::{cheatcodes, test_environment::TestEnvironment},\n mocks::mock_struct::MockStruct,\n },\n utils::with_hash::WithHash,\n };\n use dep::protocol_types::hash::poseidon2_hash;\n use dep::std::{mem, test::OracleMock};\n\n global storage_slot: Field = 47;\n\n #[test]\n unconstrained fn create_and_recover() {\n let value = MockStruct { a: 5, b: 3 };\n let value_with_hash = WithHash::new(value);\n let recovered = WithHash::unpack(value_with_hash.pack());\n\n assert_eq(recovered.value, value);\n assert_eq(recovered.packed, value.pack());\n assert_eq(recovered.hash, poseidon2_hash(value.pack()));\n }\n\n #[test]\n unconstrained fn read_uninitialized_value() {\n let mut env = TestEnvironment::new();\n\n let block_header = env.private().historical_header;\n let address = env.contract_address();\n\n let result = WithHash::<MockStruct, _>::historical_public_storage_read(\n block_header,\n address,\n storage_slot,\n );\n\n // We should get zeroed value\n let expected: MockStruct = mem::zeroed();\n assert_eq(result, expected);\n }\n\n #[test]\n unconstrained fn read_initialized_value() {\n let mut env = TestEnvironment::new();\n\n let value = MockStruct { a: 5, b: 3 };\n let value_with_hash = WithHash::new(value);\n\n // We write the value with hash to storage\n cheatcodes::direct_storage_write(\n env.contract_address(),\n storage_slot,\n value_with_hash.pack(),\n );\n\n // We advance block by 1 because env.private() currently returns context at latest_block - 1\n env.advance_block_by(1);\n\n let result = WithHash::<MockStruct, _>::historical_public_storage_read(\n env.private().historical_header,\n env.contract_address(),\n storage_slot,\n );\n\n assert_eq(result, value);\n }\n\n #[test(should_fail_with = \"Non-zero hint for zero hash\")]\n unconstrained fn test_bad_hint_uninitialized_value() {\n let mut env = TestEnvironment::new();\n\n env.advance_block_to(6);\n\n let value_packed = MockStruct { a: 1, b: 1 }.pack();\n\n let block_header = env.private().historical_header;\n let address = env.contract_address();\n\n // Mock the oracle to return a non-zero hint/packed value\n let _ = OracleMock::mock(\"storageRead\")\n .with_params((\n address.to_field(), storage_slot, block_header.global_variables.block_number as u32,\n value_packed.len(),\n ))\n .returns(value_packed)\n .times(1);\n\n // This should revert because the hint value is non-zero and the hash is zero (default value of storage)\n let _ = WithHash::<MockStruct, _>::historical_public_storage_read(\n block_header,\n address,\n storage_slot,\n );\n }\n\n #[test(should_fail_with = \"Hint values do not match hash\")]\n unconstrained fn test_bad_hint_initialized_value() {\n let mut env = TestEnvironment::new();\n\n let value_packed = MockStruct { a: 5, b: 3 }.pack();\n\n // We write the value to storage\n cheatcodes::direct_storage_write(env.contract_address(), storage_slot, value_packed);\n\n // Now we write incorrect hash to the hash storage slot\n let incorrect_hash = random();\n let hash_storage_slot = storage_slot + (value_packed.len() as Field);\n cheatcodes::direct_storage_write(\n env.contract_address(),\n hash_storage_slot,\n [incorrect_hash],\n );\n\n // We advance block by 1 because env.private() currently returns context at latest_block - 1\n env.advance_block_by(1);\n\n let _ = WithHash::<MockStruct, _>::historical_public_storage_read(\n env.private().historical_header,\n env.contract_address(),\n storage_slot,\n );\n }\n}\n"
|
|
4363
4363
|
},
|
|
4364
|
-
"
|
|
4364
|
+
"252": {
|
|
4365
4365
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
4366
4366
|
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, ToPoint, TpkM},\n traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::{\n embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n ops::Add,\n};\n\n// Aztec address\npub struct AztecAddress {\n pub 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 { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\n/// We implement the Packable trait for AztecAddress because it can be stored in contract's storage (and there\n/// the implementation of Packable is required).\nimpl Packable<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn pack(self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n self.serialize()\n }\n\n fn unpack(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n Self::deserialize(fields)\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\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\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
|
|
4367
4367
|
},
|
|
4368
|
-
"
|
|
4368
|
+
"253": {
|
|
4369
4369
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr",
|
|
4370
4370
|
"source": "use crate::{\n constants::ETH_ADDRESS_LENGTH,\n traits::{Deserialize, Empty, Packable, Serialize, ToField},\n};\n\npub struct 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 { inner: 0 }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_LENGTH] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n EthAddress::from_field(fields[0])\n }\n}\n\nimpl Packable<ETH_ADDRESS_LENGTH> for EthAddress {\n fn pack(self) -> [Field; ETH_ADDRESS_LENGTH] {\n self.serialize()\n }\n\n fn unpack(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n Self::deserialize(fields)\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n field.assert_max_bit_size::<160>();\n Self { inner: field }\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"
|
|
4371
4371
|
},
|
|
@@ -4373,51 +4373,51 @@
|
|
|
4373
4373
|
"path": "std/hash/poseidon2.nr",
|
|
4374
4374
|
"source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
|
|
4375
4375
|
},
|
|
4376
|
-
"
|
|
4376
|
+
"267": {
|
|
4377
4377
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr",
|
|
4378
4378
|
"source": "use crate::{\n data::public_data_tree_leaf::PublicDataTreeLeaf,\n merkle_tree::leaf_preimage::{IndexedTreeLeafPreimage, LeafPreimage},\n traits::{Empty, Hash},\n};\n\npub struct PublicDataTreeLeafPreimage {\n pub slot: Field,\n pub value: Field,\n pub next_slot: Field,\n pub next_index: u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self { slot: 0, value: 0, next_slot: 0, next_index: 0 }\n }\n}\n\nimpl Eq for PublicDataTreeLeafPreimage {\n fn eq(self, other: Self) -> bool {\n (self.slot == other.slot)\n & (self.value == other.value)\n & (self.next_slot == other.next_slot)\n & (self.next_index == other.next_index)\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash([\n self.slot,\n self.value,\n (self.next_index as Field),\n self.next_slot,\n ])\n }\n }\n}\n\nimpl LeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl IndexedTreeLeafPreimage<PublicDataTreeLeaf> for PublicDataTreeLeafPreimage {\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn points_to_infinity(self) -> bool {\n (self.next_slot == 0) & (self.next_index == 0)\n }\n\n fn update_pointers(self, next_slot: Field, next_index: u32) -> Self {\n Self { slot: self.slot, value: self.value, next_slot, next_index }\n }\n\n fn update_value(self, write: PublicDataTreeLeaf) -> Self {\n Self {\n slot: self.slot,\n value: write.value,\n next_slot: self.next_slot,\n next_index: self.next_index,\n }\n }\n\n fn build_insertion_leaf(write: PublicDataTreeLeaf, low_leaf: Self) -> Self {\n Self {\n slot: write.slot,\n value: write.value,\n next_slot: low_leaf.next_slot,\n next_index: low_leaf.next_index,\n }\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"
|
|
4379
4379
|
},
|
|
4380
|
-
"
|
|
4380
|
+
"268": {
|
|
4381
4381
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
|
|
4382
4382
|
"source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
|
|
4383
4383
|
},
|
|
4384
|
-
"
|
|
4384
|
+
"269": {
|
|
4385
4385
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
4386
4386
|
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::{OrderedValue, scoped::Scoped},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n poseidon2::Poseidon2Sponge,\n traits::{FromField, Hash, is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::{constants::TWO_POW_64, utils::{arrays::array_concat, field::field_from_bytes}};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_contract_class_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_contract_class_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_contract_class_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: [u8; 160] = std::mem::zeroed();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..5 {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes[32 * i + j] = item_bytes[j];\n }\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\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//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\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 // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n// Performs a fixed length hash with a subarray of the given input.\n// Useful for SpongeBlob in which we aborb M things and want to check it vs a hash of M elts of an N-len array.\n// Using stdlib poseidon, this will always absorb an extra 1 as a 'variable' hash, and not match spongeblob.squeeze()\n// or any ts implementation. Also checks that any remaining elts not hashed are empty.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, false);\n sponge.squeeze()\n}\n\n// NB the below is the same as std::hash::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, true);\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if in_len != N {\n sponge.absorb(1);\n }\n sponge.squeeze()\n}\n\n// The below fn reduces gates of a conditional poseidon2 hash by approx 3x (thank you ~* Giant Brain Dev @IlyasRidhuan *~ for the idea)\n// Why? Because when we call stdlib poseidon, we call absorb for each item. When absorbing is conditional, it seems the compiler does not know\n// what cache_size will be when calling absorb, so it assigns the permutation gates for /each i/ rather than /every 3rd i/, which is actually required.\n// The below code forces the compiler to:\n// - absorb normally up to 2 times to set cache_size to 1\n// - absorb in chunks of 3 to ensure perm. only happens every 3rd absorb\n// - absorb normally up to 2 times to add any remaining values to the hash\n// In fixed len hashes, the compiler is able to tell that it will only need to perform the permutation every 3 absorbs.\n// NB: it also replaces unnecessary range checks (i < thing) with a bit check (&= i != thing), which alone reduces the gates of a var. hash by half.\n\n#[no_predicates]\nfn poseidon2_absorb_chunks<let N: u32>(\n input: [Field; N],\n in_len: u32,\n variable: bool,\n) -> Poseidon2Sponge {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n // Even though shift is always 1 here, if we input in_len = 0 we get an underflow\n // since we cannot isolate computation branches. The below is just to avoid that.\n let shift = if in_len == 0 { 0 } else { 1 };\n if in_len != 0 {\n // cache_size = 0, init absorb\n sponge.cache[0] = input[0];\n sponge.cache_size = 1;\n // shift = num elts already added to make cache_size 1 = 1 for a fresh sponge\n // M = max_chunks = (N - 1 - (N - 1) % 3) / 3: (must be written as a fn of N to compile)\n // max_remainder = (N - 1) % 3;\n // max_chunks = (N - 1 - max_remainder) / 3;\n sponge = poseidon2_absorb_chunks_loop::<N, (N - 1 - (N - 1) % 3) / 3>(\n sponge,\n input,\n in_len,\n variable,\n shift,\n );\n }\n sponge\n}\n\n// NB: If it's not required to check that the non-absorbed elts of 'input' are 0s, set skip_0_check=true\n#[no_predicates]\npub fn poseidon2_absorb_chunks_existing_sponge<let N: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n skip_0_check: bool,\n) -> Poseidon2Sponge {\n let mut sponge = in_sponge;\n // 'shift' is to account for already added inputs\n let mut shift = 0;\n // 'stop' is to avoid an underflow when inputting in_len = 0\n let mut stop = false;\n for i in 0..3 {\n if shift == in_len {\n stop = true;\n }\n if (sponge.cache_size != 1) & (!stop) {\n sponge.absorb(input[i]);\n shift += 1;\n }\n }\n sponge = if stop {\n sponge\n } else {\n // max_chunks = (N - (N % 3)) / 3;\n poseidon2_absorb_chunks_loop::<N, (N - (N % 3)) / 3>(\n sponge,\n input,\n in_len,\n skip_0_check,\n shift,\n )\n };\n sponge\n}\n\n// The below is the loop to absorb elts into a poseidon sponge in chunks of 3\n// shift - the num of elts already absorbed to ensure the sponge's cache_size = 1\n// M - the max number of chunks required to absorb N things (must be comptime to compile)\n// NB: The 0 checks ('Found non-zero field...') are messy, but having a separate loop over N to check\n// for 0s costs 3N gates. Current approach is approx 2N gates.\n#[no_predicates]\nfn poseidon2_absorb_chunks_loop<let N: u32, let M: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n variable: bool,\n shift: u32,\n) -> Poseidon2Sponge {\n assert(in_len <= N, \"Given in_len to absorb is larger than the input array len\");\n // When we have an existing sponge, we may have a shift of 0, and the final 'k+2' below = N\n // The below avoids an overflow\n let skip_last = 3 * M == N;\n // Writing in_sponge: &mut does not compile\n let mut sponge = in_sponge;\n let mut should_add = true;\n // The num of things left over after absorbing in 3s\n let remainder = (in_len - shift) % 3;\n // The num of chunks of 3 to absorb (maximum M)\n let chunks = (in_len - shift - remainder) / 3;\n for i in 0..M {\n // Now we loop through cache size = 1 -> 3\n should_add &= i != chunks;\n // This is the index at the start of the chunk (for readability)\n let k = 3 * i + shift;\n if should_add {\n // cache_size = 1, 2 => just assign\n sponge.cache[1] = input[k];\n sponge.cache[2] = input[k + 1];\n // cache_size = 3 => duplex + perm\n for j in 0..3 {\n sponge.state[j] += sponge.cache[j];\n }\n sponge.state = std::hash::poseidon2_permutation(sponge.state, 4);\n sponge.cache[0] = input[k + 2];\n // cache_size is now 1 again, repeat loop\n } else if (!variable) & (i != chunks) {\n // if we are hashing a fixed len array which is a subarray, we check the remaining elts are 0\n // NB: we don't check at i == chunks, because that chunk contains elts to be absorbed or checked below\n let last_0 = if (i == M - 1) & (skip_last) {\n 0\n } else {\n input[k + 2]\n };\n let all_0 = (input[k] == 0) & (input[k + 1] == 0) & (last_0 == 0);\n assert(all_0, \"Found non-zero field after breakpoint\");\n }\n }\n // we have 'remainder' num of items left to absorb\n should_add = true;\n // below is to avoid overflows (i.e. if inlen is close to N)\n let mut should_check = !variable;\n for i in 0..3 {\n should_add &= i != remainder;\n should_check &= in_len - remainder + i != N;\n if should_add {\n // we want to absorb the final 'remainder' items\n sponge.absorb(input[in_len - remainder + i]);\n } else if should_check {\n assert(input[in_len - remainder + i] == 0, \"Found non-zero field after breakpoint\");\n }\n }\n sponge\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = std::hash::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = std::hash::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn existing_sponge_poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n // absorb 250 of the 501 things\n let empty_sponge = Poseidon2Sponge::new((in_len as Field) * TWO_POW_64);\n let first_sponge = poseidon2_absorb_chunks_existing_sponge(empty_sponge, input, 250, true);\n // now absorb the final 251 (since they are all 3s, im being lazy and not making a new array)\n let mut final_sponge = poseidon2_absorb_chunks_existing_sponge(first_sponge, input, 251, true);\n let fixed_len_hash = Poseidon2Sponge::hash(fixed_input, fixed_input.len());\n assert(final_sponge.squeeze() == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_empty_inputs() {\n let in_len = 0;\n let mut input: [Field; 4096] = [0; 4096];\n let mut constructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(constructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == constructed_empty_sponge.squeeze());\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
4387
4387
|
},
|
|
4388
|
-
"
|
|
4388
|
+
"279": {
|
|
4389
4389
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr",
|
|
4390
4390
|
"source": "use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\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<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N],\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\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\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n panic(f\"depth should be between 0 and 10\")\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"
|
|
4391
4391
|
},
|
|
4392
|
-
"
|
|
4392
|
+
"286": {
|
|
4393
4393
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
|
|
4394
4394
|
"source": "use crate::constants::TWO_POW_64;\n\n// NB: This is a clone of noir/noir-repo/noir_stdlib/src/hash/poseidon2.nr\n// It exists as we sometimes need to perform custom absorption, but the stdlib version\n// has a private absorb() method (it's also designed to just be a hasher)\n// Can be removed when standalone noir poseidon lib exists: See noir#6679\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2Sponge {\n pub cache: [Field; 3],\n pub state: [Field; 4],\n pub cache_size: u32,\n pub squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2Sponge {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2Sponge::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2Sponge {\n let mut result =\n Poseidon2Sponge { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = std::hash::poseidon2_permutation(self.state, 4);\n }\n\n pub fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n pub fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n"
|
|
4395
4395
|
},
|
|
4396
|
-
"
|
|
4396
|
+
"298": {
|
|
4397
4397
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr",
|
|
4398
4398
|
"source": "use crate::{hash::poseidon2_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field\nwhere\n K: ToField,\n{\n poseidon2_hash([storage_slot, key.to_field()])\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map, traits::FromField};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(\n 0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f,\n );\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript =\n 0x15b9fe39449affd8b377461263e9d2b610b9ad40580553500b4e41d9cbd887ac;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"
|
|
4399
4399
|
},
|
|
4400
|
-
"
|
|
4400
|
+
"311": {
|
|
4401
4401
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr",
|
|
4402
4402
|
"source": "use crate::meta::{derive_deserialize, derive_packable, derive_serialize};\nuse crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic\n// if a value can actually be zero. In a future refactor, we can\n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\npub trait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool\nwhere\n T: Empty + Eq,\n{\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool\nwhere\n T: Empty + Eq,\n{\n array.all(|elem| is_empty(elem))\n}\n\npub trait Hash {\n fn hash(self) -> Field;\n}\n\npub trait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\npub trait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\n/// Trait for serializing Noir types into arrays of Fields.\n///\n/// An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are\n/// typically used to communicate between Noir and TypeScript (via oracles and function arguments).\n///\n/// # On Following Noir's Intrinsic Serialization\n/// When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array\n/// of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used\n/// to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait\n/// is used instead of the serialization in TS. For this reason we need to have a match between TS serialization,\n/// Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls\n/// fail with an arguments hash mismatch error message.\n///\n/// # Type Parameters\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize<N> for str<N> {\n/// fn serialize(self) -> [Field; N] {\n/// let bytes = self.as_bytes();\n/// let mut fields = [0; N];\n/// for i in 0..bytes.len() {\n/// fields[i] = bytes[i] as Field; // Each byte gets its own Field\n/// }\n/// fields\n/// }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let bytes = self.as_bytes();\n let mut fields = [0; N];\n for i in 0..bytes.len() {\n fields[i] = bytes[i] as Field;\n }\n fields\n }\n}\n\n// docs:start:deserialize\n/// Trait for deserializing Noir types from arrays of Fields.\n///\n/// An implementation of the Deserialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait is typically used when\n/// deserializing return values from function calls in Noir. Since the same function could be called from TypeScript\n/// (TS), in which case the TS deserialization would get used, we need to have a match between the 2.\n///\n/// # Type Parameters\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Deserialize<N> for str<N> {\n/// fn deserialize(fields: [Field; N]) -> Self {\n/// str<N>::from(fields.map(|value| value as u8))\n/// }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for str<N> {\n fn deserialize(fields: [Field; N]) -> Self {\n str<N>::from(fields.map(|value| value as u8))\n }\n}\n\n/// Trait for efficiently packing and unpacking Noir types into and from arrays of Fields.\n///\n/// The `Packable` trait allows types to be serialized and deserialized with a focus on minimizing the size of\n/// the resulting Field array. This trait is used when storage efficiency is critical (e.g. when storing data\n/// in the contract's public storage).\n///\n/// # Type Parameters\n/// * `N` - The length of the Field array, known at compile time.\n#[derive_via(derive_packable)]\npub trait Packable<let N: u32> {\n /// Packs the current value into a compact array of `Field` elements.\n fn pack(self) -> [Field; N];\n\n /// Unpacks a compact array of `Field` elements into the original value.\n fn unpack(fields: [Field; N]) -> Self;\n}\n"
|
|
4403
4403
|
},
|
|
4404
|
-
"
|
|
4404
|
+
"315": {
|
|
4405
4405
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/type_packing.nr",
|
|
4406
4406
|
"source": "use crate::traits::{Packable, ToField};\n\nglobal BOOL_PACKED_LEN: u32 = 1;\nglobal U8_PACKED_LEN: u32 = 1;\nglobal U16_PACKED_LEN: u32 = 1;\nglobal U32_PACKED_LEN: u32 = 1;\nglobal U64_PACKED_LEN: u32 = 1;\nglobal U128_PACKED_LEN: u32 = 1;\nglobal FIELD_PACKED_LEN: u32 = 1;\nglobal I8_PACKED_LEN: u32 = 1;\nglobal I16_PACKED_LEN: u32 = 1;\nglobal I32_PACKED_LEN: u32 = 1;\nglobal I64_PACKED_LEN: u32 = 1;\n\nimpl Packable<BOOL_PACKED_LEN> for bool {\n fn pack(self) -> [Field; BOOL_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; BOOL_PACKED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Packable<U8_PACKED_LEN> for u8 {\n fn pack(self) -> [Field; U8_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; U8_PACKED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Packable<U16_PACKED_LEN> for u16 {\n fn pack(self) -> [Field; U16_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; U16_PACKED_LEN]) -> Self {\n fields[0] as u16\n }\n}\n\nimpl Packable<U32_PACKED_LEN> for u32 {\n fn pack(self) -> [Field; U32_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; U32_PACKED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Packable<U64_PACKED_LEN> for u64 {\n fn pack(self) -> [Field; U64_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; U64_PACKED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Packable<U128_PACKED_LEN> for U128 {\n fn pack(self) -> [Field; U128_PACKED_LEN] {\n [self.to_field()]\n }\n\n fn unpack(fields: [Field; U128_PACKED_LEN]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n\nimpl Packable<FIELD_PACKED_LEN> for Field {\n fn pack(self) -> [Field; FIELD_PACKED_LEN] {\n [self]\n }\n\n fn unpack(fields: [Field; FIELD_PACKED_LEN]) -> Self {\n fields[0]\n }\n}\n\nimpl Packable<I8_PACKED_LEN> for i8 {\n fn pack(self) -> [Field; I8_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; I8_PACKED_LEN]) -> Self {\n fields[0] as i8\n }\n}\n\nimpl Packable<I16_PACKED_LEN> for i16 {\n fn pack(self) -> [Field; I16_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; I16_PACKED_LEN]) -> Self {\n fields[0] as i16\n }\n}\n\nimpl Packable<I32_PACKED_LEN> for i32 {\n fn pack(self) -> [Field; I32_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; I32_PACKED_LEN]) -> Self {\n fields[0] as i32\n }\n}\n\nimpl Packable<I64_PACKED_LEN> for i64 {\n fn pack(self) -> [Field; I64_PACKED_LEN] {\n [self as Field]\n }\n\n fn unpack(fields: [Field; I64_PACKED_LEN]) -> Self {\n fields[0] as i64\n }\n}\n\nimpl<T, let N: u32, let M: u32> Packable<N * M> for [T; N]\nwhere\n T: Packable<M>,\n{\n fn pack(self) -> [Field; N * M] {\n let mut result: [Field; N * M] = std::mem::zeroed();\n let mut serialized: [Field; M] = std::mem::zeroed();\n for i in 0..N {\n serialized = self[i].pack();\n for j in 0..M {\n result[i * M + j] = serialized[j];\n }\n }\n result\n }\n\n fn unpack(fields: [Field; N * M]) -> Self {\n let mut reader = crate::utils::reader::Reader::new(fields);\n let mut result: [T; N] = std::mem::zeroed();\n reader.read_struct_array::<T, M, N>(Packable::unpack, result)\n }\n}\n\n#[test]\nfn test_u16_packing() {\n let a: u16 = 10;\n assert_eq(a, u16::unpack(a.pack()));\n}\n\n#[test]\nfn test_i8_packing() {\n let a: i8 = -10;\n assert_eq(a, i8::unpack(a.pack()));\n}\n\n#[test]\nfn test_i16_packing() {\n let a: i16 = -10;\n assert_eq(a, i16::unpack(a.pack()));\n}\n\n#[test]\nfn test_i32_packing() {\n let a: i32 = -10;\n assert_eq(a, i32::unpack(a.pack()));\n}\n\n#[test]\nfn test_i64_packing() {\n let a: i64 = -10;\n assert_eq(a, i64::unpack(a.pack()));\n}\n"
|
|
4407
4407
|
},
|
|
4408
|
-
"
|
|
4408
|
+
"316": {
|
|
4409
4409
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr",
|
|
4410
4410
|
"source": "use crate::traits::{Deserialize, Serialize};\n\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 2;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U8_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<U16_SERIALIZED_LEN> for u16 {\n fn serialize(self) -> [Field; U16_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U16_SERIALIZED_LEN> for u16 {\n fn deserialize(fields: [Field; U16_SERIALIZED_LEN]) -> Self {\n fields[0] as u16\n }\n}\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U64_SERIALIZED_LEN> for u64 {\n fn serialize(self) -> [Field; U64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U64_SERIALIZED_LEN> for u64 {\n fn deserialize(fields: [Field; U64_SERIALIZED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Serialize<U128_SERIALIZED_LEN> for U128 {\n fn serialize(self) -> [Field; U128_SERIALIZED_LEN] {\n // We use little-endian ordering to match the order in which U128 defines its limbs.\n // This is necessary because of how Noir handles serialization:\n // - When calling a contract function from TypeScript, the serialization in encoder.ts gets used and then Noir\n // deserializes using its intrinsic serialization logic (based on the limb order in the struct).\n // - When calling a contract function from another function, the `serialize` method is invoked on the type\n // first.\n // For this reason if we didn't use the ordering of U128 limbs here and in encoder.ts we would get an arguments\n // hash mismatch.\n [self.lo, self.hi]\n }\n}\n\nimpl Deserialize<U128_SERIALIZED_LEN> for U128 {\n fn deserialize(fields: [Field; U128_SERIALIZED_LEN]) -> Self {\n U128::from_u64s_le(fields[0] as u64, fields[1] as u64)\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; FIELD_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n\nimpl Serialize<I8_SERIALIZED_LEN> for i8 {\n fn serialize(self) -> [Field; I8_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<I8_SERIALIZED_LEN> for i8 {\n fn deserialize(fields: [Field; I8_SERIALIZED_LEN]) -> Self {\n fields[0] as i8\n }\n}\n\nimpl Serialize<I16_SERIALIZED_LEN> for i16 {\n fn serialize(self) -> [Field; I16_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<I16_SERIALIZED_LEN> for i16 {\n fn deserialize(fields: [Field; I16_SERIALIZED_LEN]) -> Self {\n fields[0] as i16\n }\n}\n\nimpl Serialize<I32_SERIALIZED_LEN> for i32 {\n fn serialize(self) -> [Field; I32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<I32_SERIALIZED_LEN> for i32 {\n fn deserialize(fields: [Field; I32_SERIALIZED_LEN]) -> Self {\n fields[0] as i32\n }\n}\n\nimpl Serialize<I64_SERIALIZED_LEN> for i64 {\n fn serialize(self) -> [Field; I64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<I64_SERIALIZED_LEN> for i64 {\n fn deserialize(fields: [Field; I64_SERIALIZED_LEN]) -> Self {\n fields[0] as i64\n }\n}\n\nimpl<T, let N: u32, let M: u32> Serialize<N * M> for [T; N]\nwhere\n T: Serialize<M>,\n{\n fn serialize(self) -> [Field; N * M] {\n let mut result: [Field; N * M] = std::mem::zeroed();\n let mut serialized: [Field; M] = std::mem::zeroed();\n for i in 0..N {\n serialized = self[i].serialize();\n for j in 0..M {\n result[i * M + j] = serialized[j];\n }\n }\n result\n }\n}\n\nimpl<T, let N: u32, let M: u32> Deserialize<N * M> for [T; N]\nwhere\n T: Deserialize<M>,\n{\n fn deserialize(fields: [Field; N * M]) -> Self {\n let mut reader = crate::utils::reader::Reader::new(fields);\n let mut result: [T; N] = std::mem::zeroed();\n reader.read_struct_array::<T, M, N>(Deserialize::deserialize, result)\n }\n}\n\n#[test]\nfn test_u16_serialization() {\n let a: u16 = 10;\n assert_eq(a, u16::deserialize(a.serialize()));\n}\n\n#[test]\nfn test_i8_serialization() {\n let a: i8 = -10;\n assert_eq(a, i8::deserialize(a.serialize()));\n}\n\n#[test]\nfn test_i16_serialization() {\n let a: i16 = -10;\n assert_eq(a, i16::deserialize(a.serialize()));\n}\n\n#[test]\nfn test_i32_serialization() {\n let a: i32 = -10;\n assert_eq(a, i32::deserialize(a.serialize()));\n}\n\n#[test]\nfn test_i64_serialization() {\n let a: i64 = -10;\n assert_eq(a, i64::deserialize(a.serialize()));\n}\n"
|
|
4411
4411
|
},
|
|
4412
|
-
"
|
|
4412
|
+
"333": {
|
|
4413
4413
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr",
|
|
4414
4414
|
"source": "pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(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..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\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\npub fn min(f1: Field, f2: Field) -> Field {\n if f1.lt(f2) {\n f1\n } else {\n f2\n }\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28,\n 151, 202, 67, 55, 77, 233, 80, 187, 224, 167,\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes: [u8; 31] = field.to_be_bytes();\n assert_eq(inputs, return_bytes);\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28,\n 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158,\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2: [u8; 31] = field.to_be_bytes();\n\n assert_eq(return_bytes2, return_bytes);\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"
|
|
4415
4415
|
},
|
|
4416
|
-
"
|
|
4416
|
+
"335": {
|
|
4417
4417
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
|
|
4418
4418
|
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> 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_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; 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, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [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"
|
|
4419
4419
|
},
|
|
4420
|
-
"
|
|
4420
|
+
"346": {
|
|
4421
4421
|
"path": "/root/nargo/github.com/noir-lang/sha256/v0.1.0/src/sha256.nr",
|
|
4422
4422
|
"source": "use std::hash::sha256_compression;\nuse std::runtime::is_unconstrained;\n\nmod tests;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe { attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size) };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\n"
|
|
4423
4423
|
},
|
|
@@ -4427,7 +4427,7 @@
|
|
|
4427
4427
|
},
|
|
4428
4428
|
"6": {
|
|
4429
4429
|
"path": "std/cmp.nr",
|
|
4430
|
-
"source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: StructDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl<T, let N: u32> Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<let N: u32> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: StructDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl<T, let N: u32> Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"
|
|
4430
|
+
"source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: StructDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl<T, let N: u32> Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<let N: u32> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: StructDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl<T, let N: u32> Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"
|
|
4431
4431
|
},
|
|
4432
4432
|
"60": {
|
|
4433
4433
|
"path": "std/uint128.nr",
|