{
  "file_map": {
    "0": {
      "path": "std/aes128.nr",
      "source": "// docs:start:aes128\n// Given a plaintext as an array of bytes, returns the corresponding aes128 ciphertext (CBC mode). Input padding is performed using PKCS#7, so that the output length is `input.len() + (16 - input.len() % 16)`.\npub fn aes128_encrypt<let N: u32>(\n    input: [u8; N],\n    iv: [u8; 16],\n    key: [u8; 16],\n) -> [u8; N + 16 - N % 16] {\n    let padding_length = (16 - N % 16) as u8;\n    let mut padded_input: [u8; N + 16 - N % 16] = [0; N + 16 - N % 16];\n    for i in 0..N {\n        padded_input[i] = input[i];\n    }\n    for i in N..N + 16 - N % 16 {\n        padded_input[i] = padding_length;\n    }\n    let output = aes128_encrypt_padded_input(padded_input, iv, key);\n    output\n}\n\n#[foreign(aes128_encrypt)]\nfn aes128_encrypt_padded_input<let N: u32>(input: [u8; N], iv: [u8; 16], key: [u8; 16]) -> [u8; N] {}\n\n// docs:end:aes128\n"
    },
    "3": {
      "path": "std/array/mod.nr",
      "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n    /// Returns the length of this array.\n    ///\n    /// ```noir\n    /// fn len(self) -> Field\n    /// ```\n    ///\n    /// example\n    ///\n    /// ```noir\n    /// fn main() {\n    ///     let array = [42, 42];\n    ///     assert(array.len() == 2);\n    /// }\n    /// ```\n    #[builtin(array_len)]\n    pub fn len(self) -> u32 {}\n\n    /// Returns this array as a vector.\n    ///\n    /// ```noir\n    /// let array = [1, 2];\n    /// let vector = array.as_vector();\n    /// assert_eq(vector, [1, 2].as_vector());\n    /// ```\n    #[builtin(as_vector)]\n    pub fn as_vector(self) -> [T] {}\n\n    /// Returns this array as a vector.\n    /// This method is deprecated in favor of `as_vector`.\n    ///\n    /// ```noir\n    /// let array = [1, 2];\n    /// let vector = array.as_slice();\n    /// assert_eq(vector, [1, 2].as_vector());\n    /// ```\n    #[builtin(as_vector)]\n    #[deprecated(\"This method has been renamed to `as_vector`\")]\n    pub fn as_slice(self) -> [T] {}\n\n    /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// let a = [1, 2, 3];\n    /// let b = a.map(|a| a * 2);\n    /// assert_eq(b, [2, 4, 6]);\n    /// ```\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n        let uninitialized = crate::mem::zeroed();\n        let mut ret = [uninitialized; N];\n\n        for i in 0..self.len() {\n            ret[i] = f(self[i]);\n        }\n\n        ret\n    }\n\n    /// Applies a function to each element of this array along with its index,\n    /// returning a new array containing the mapped elements.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// let a = [1, 2, 3];\n    /// let b = a.mapi(|i, a| i + a * 2);\n    /// assert_eq(b, [2, 5, 8]);\n    /// ```\n    pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n        let uninitialized = crate::mem::zeroed();\n        let mut ret = [uninitialized; N];\n\n        for i in 0..self.len() {\n            ret[i] = f(i, self[i]);\n        }\n\n        ret\n    }\n\n    /// Applies a function to each element of this array.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// let a = [1, 2, 3];\n    /// let mut b = [0; 3];\n    /// let mut i = 0;\n    /// a.for_each(|x| {\n    ///     b[i] = x;\n    ///     i += 1;\n    /// });\n    /// assert_eq(a, b);\n    /// ```\n    pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n        for i in 0..self.len() {\n            f(self[i]);\n        }\n    }\n\n    /// Applies a function to each element of this array along with its index.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// let a = [1, 2, 3];\n    /// let mut b = [0; 3];\n    /// a.for_eachi(|i, x| {\n    ///     b[i] = x;\n    /// });\n    /// assert_eq(a, b);\n    /// ```\n    pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n        for i in 0..self.len() {\n            f(i, self[i]);\n        }\n    }\n\n    /// Applies a function to each element of the array, returning the final accumulated value. The first\n    /// parameter is the initial value.\n    ///\n    /// This is a left fold, so the given function will be applied to the accumulator and first element of\n    /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n    ///\n    /// ```rust\n    /// let a1 = [1];\n    /// let a2 = [1, 2];\n    /// let a3 = [1, 2, 3];\n    ///\n    /// let f = |a, b| a - b;\n    /// a1.fold(10, f); //=> f(10, 1)\n    /// a2.fold(10, f); //=> f(f(10, 1), 2)\n    /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n    ///\n    /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n    /// ```\n    pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n        for elem in self {\n            accumulator = f(accumulator, elem);\n        }\n        accumulator\n    }\n\n    /// Same as fold, but uses the first element as the starting element.\n    ///\n    /// Requires the input array to be non-empty.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn main() {\n    ///     let arr = [1, 2, 3, 4];\n    ///     let reduced = arr.reduce(|a, b| a + b);\n    ///     assert(reduced == 10);\n    /// }\n    /// ```\n    pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n        let mut accumulator = self[0];\n        for i in 1..self.len() {\n            accumulator = f(accumulator, self[i]);\n        }\n        accumulator\n    }\n\n    /// Returns true if all the elements in this array satisfy the given predicate.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn main() {\n    ///     let arr = [2, 2, 2, 2, 2];\n    ///     let all = arr.all(|a| a == 2);\n    ///     assert(all);\n    /// }\n    /// ```\n    pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = true;\n        for elem in self {\n            ret &= predicate(elem);\n        }\n        ret\n    }\n\n    /// Returns true if any of the elements in this array satisfy the given predicate.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn main() {\n    ///     let arr = [2, 2, 2, 2, 5];\n    ///     let any = arr.any(|a| a == 5);\n    ///     assert(any);\n    /// }\n    /// ```\n    pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = false;\n        for elem in self {\n            ret |= predicate(elem);\n        }\n        ret\n    }\n\n    /// Concatenates this array with another array.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn main() {\n    ///     let arr1 = [1, 2, 3, 4];\n    ///     let arr2 = [6, 7, 8, 9, 10, 11];\n    ///     let concatenated_arr = arr1.concat(arr2);\n    ///     assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n    /// }\n    /// ```\n    pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n        let mut result = [crate::mem::zeroed(); N + M];\n        for i in 0..N {\n            result[i] = self[i];\n        }\n        for i in 0..M {\n            result[i + N] = array2[i];\n        }\n        result\n    }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n    T: Ord + Eq,\n{\n    /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n    /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n    /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n    /// sort any type, you should use the [`Self::sort_via`] function.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// fn main() {\n    ///     let arr = [42, 32];\n    ///     let sorted = arr.sort();\n    ///     assert(sorted == [32, 42]);\n    /// }\n    /// ```\n    pub fn sort(self) -> Self {\n        self.sort_via(|a, b| a <= b)\n    }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n    T: Eq,\n{\n    /// Returns a new sorted array by sorting it with a custom comparison function.\n    /// The original array remains untouched.\n    /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n    ///\n    /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// fn main() {\n    ///     let arr = [42, 32]\n    ///     let sorted_ascending = arr.sort_via(|a, b| a <= b);\n    ///     assert(sorted_ascending == [32, 42]); // verifies\n    ///\n    ///     let sorted_descending = arr.sort_via(|a, b| a >= b);\n    ///     assert(sorted_descending == [32, 42]); // does not verify\n    /// }\n    /// ```\n    pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n        // Safety: `sorted` array is checked to be:\n        // a. a permutation of `input`'s elements\n        // b. satisfying the predicate `ordering`\n        let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n        if !is_unconstrained() {\n            for i in 0..N - 1 {\n                assert(\n                    ordering(sorted[i], sorted[i + 1]),\n                    \"Array has not been sorted correctly according to `ordering`.\",\n                );\n            }\n            check_shuffle::check_shuffle(self, sorted);\n        }\n        sorted\n    }\n}\n\nimpl<let N: u32> [u8; N] {\n    /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n    /// the given array is interpreted as-is as a string.\n    ///\n    /// Example:\n    ///\n    /// ```rust\n    /// fn main() {\n    ///     let hi = [104, 105].as_str_unchecked();\n    ///     assert_eq(hi, \"hi\");\n    /// }\n    /// ```\n    #[builtin(array_as_str_unchecked)]\n    pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n    /// Returns an array of the string bytes.\n    fn from(s: str<N>) -> Self {\n        s.as_bytes()\n    }\n}\n\nmod test {\n    #[test]\n    fn map_empty() {\n        assert_eq([].map(|x| x + 1), []);\n    }\n\n    global arr_with_100_values: [u32; 100] = [\n        42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n        89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n        53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n        21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n        125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n    ];\n    global expected_with_100_values: [u32; 100] = [\n        0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n        32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n        62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n        86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n        119, 120, 121, 123, 123, 123, 125, 126, 127,\n    ];\n    fn sort_u32(a: u32, b: u32) -> bool {\n        a <= b\n    }\n\n    #[test]\n    fn test_sort() {\n        let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n        let sorted = arr.sort();\n\n        let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n        assert(sorted == expected);\n    }\n\n    #[test]\n    fn test_sort_100_values() {\n        let mut arr: [u32; 100] = [\n            42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n            54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n            19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n            43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n            127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n        ];\n\n        let sorted = arr.sort();\n\n        let expected: [u32; 100] = [\n            0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n            32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n            61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n            84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n            114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n        ];\n        assert(sorted == expected);\n    }\n\n    #[test]\n    fn test_sort_100_values_comptime() {\n        let sorted = arr_with_100_values.sort();\n        assert(sorted == expected_with_100_values);\n    }\n\n    #[test]\n    fn test_sort_via() {\n        let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n        let sorted = arr.sort_via(sort_u32);\n\n        let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n        assert(sorted == expected);\n    }\n\n    #[test]\n    fn test_sort_via_100_values() {\n        let mut arr: [u32; 100] = [\n            42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n            54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n            19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n            43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n            127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n        ];\n\n        let sorted = arr.sort_via(sort_u32);\n\n        let expected: [u32; 100] = [\n            0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n            32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n            61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n            84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n            114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n        ];\n        assert(sorted == expected);\n    }\n\n    #[test]\n    fn mapi_empty() {\n        assert_eq([].mapi(|i, x| i * x + 1), []);\n    }\n\n    #[test]\n    fn for_each_empty() {\n        let empty_array: [Field; 0] = [];\n        empty_array.for_each(|_x| assert(false));\n    }\n\n    #[test]\n    fn for_eachi_empty() {\n        let empty_array: [Field; 0] = [];\n        empty_array.for_eachi(|_i, _x| assert(false));\n    }\n\n    #[test]\n    fn map_example() {\n        let a = [1, 2, 3];\n        let b = a.map(|a| a * 2);\n        assert_eq(b, [2, 4, 6]);\n    }\n\n    #[test]\n    fn mapi_example() {\n        let a = [1, 2, 3];\n        let b = a.mapi(|i, a| i + a * 2);\n        assert_eq(b, [2, 5, 8]);\n    }\n\n    #[test]\n    fn for_each_example() {\n        let a = [1, 2, 3];\n        let mut b = [0, 0, 0];\n        let b_ref = &mut b;\n        let mut i = 0;\n        let i_ref = &mut i;\n        a.for_each(|x| {\n            b_ref[*i_ref] = x * 2;\n            *i_ref += 1;\n        });\n        assert_eq(b, [2, 4, 6]);\n        assert_eq(i, 3);\n    }\n\n    #[test]\n    fn for_eachi_example() {\n        let a = [1, 2, 3];\n        let mut b = [0, 0, 0];\n        let b_ref = &mut b;\n        a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n        assert_eq(b, [2, 5, 8]);\n    }\n\n    #[test]\n    fn concat() {\n        let arr1 = [1, 2, 3, 4];\n        let arr2 = [6, 7, 8, 9, 10, 11];\n        let concatenated_arr = arr1.concat(arr2);\n        assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n    }\n\n    #[test]\n    fn concat_zero_length_with_something() {\n        let arr1 = [];\n        let arr2 = [1];\n        let concatenated_arr = arr1.concat(arr2);\n        assert_eq(concatenated_arr, [1]);\n    }\n\n    #[test]\n    fn concat_something_with_zero_length() {\n        let arr1 = [1];\n        let arr2 = [];\n        let concatenated_arr = arr1.concat(arr2);\n        assert_eq(concatenated_arr, [1]);\n    }\n\n    #[test]\n    fn concat_zero_lengths() {\n        let arr1: [Field; 0] = [];\n        let arr2: [Field; 0] = [];\n        let concatenated_arr = arr1.concat(arr2);\n        assert_eq(concatenated_arr, []);\n    }\n}\n"
    },
    "5": {
      "path": "std/cmp.nr",
      "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: TypeDefinition) -> 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 { $crate::cmp::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 u128 {\n    fn eq(self, other: u128) -> bool {\n        self == other\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        if result {\n            for i in 0..self.len() {\n                result &= self[i].eq(other[i]);\n            }\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: TypeDefinition) -> Quoted {\n    let name = quote { $crate::cmp::Ord };\n    let signature = quote { fn cmp(_self: Self, _other: Self) -> $crate::cmp::Ordering };\n    let for_each_field = |name| quote {\n        if result == $crate::cmp::Ordering::equal() {\n            result = _self.$name.cmp(_other.$name);\n        }\n    };\n    let body = |fields| quote {\n        let mut result = $crate::cmp::Ordering::equal();\n        $fields\n        result\n    };\n    crate::meta::make_trait_impl(s, name, 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 u128 {\n    fn cmp(self, other: u128) -> Ordering {\n        if self < other {\n            Ordering::less()\n        } else if self > other {\n            Ordering::greater()\n        } else {\n            Ordering::equal()\n        }\n    }\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 self_len = self.len();\n        let other_len = other.len();\n        let min_len = if self_len < other_len {\n            self_len\n        } else {\n            other_len\n        };\n\n        let mut result = Ordering::equal();\n        for i in 0..min_len {\n            if result == Ordering::equal() {\n                result = self[i].cmp(other[i]);\n            }\n        }\n\n        if result != Ordering::equal() {\n            result\n        } else {\n            self_len.cmp(other_len)\n        }\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 super::{Eq, max, min, Ord};\n\n    #[test]\n    fn sanity_check_min() {\n        assert_eq(min(0_u64, 1), 0);\n        assert_eq(min(0_u64, 0), 0);\n        assert_eq(min(1_u64, 1), 1);\n        assert_eq(min(255_u8, 0), 0);\n    }\n\n    #[test]\n    fn sanity_check_max() {\n        assert_eq(max(0_u64, 1), 1);\n        assert_eq(max(0_u64, 0), 0);\n        assert_eq(max(1_u64, 1), 1);\n        assert_eq(max(255_u8, 0), 255);\n    }\n\n    #[test]\n    fn correctly_handles_unequal_length_vectors() {\n        let vector_1 = [0, 1, 2, 3].as_vector();\n        let vector_2 = [0, 1, 2].as_vector();\n        assert(!vector_1.eq(vector_2));\n    }\n\n    #[test]\n    fn lexicographic_ordering_for_vectors() {\n        assert(\n            [2_u32].as_vector().cmp([1_u32, 1_u32, 1_u32].as_vector())\n                == super::Ordering::greater(),\n        );\n        assert(\n            [1_u32, 2_u32].as_vector().cmp([1_u32, 2_u32, 3_u32].as_vector())\n                == super::Ordering::less(),\n        );\n    }\n}\n"
    },
    "6": {
      "path": "std/collections/bounded_vec.nr",
      "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a built-in vector except that it\n/// is bounded with a maximum possible length. `BoundedVec` is also not\n/// subject to the same restrictions vectors are (notably, nested vectors are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over vectors when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n///     vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n    storage: [T; MaxLen],\n    len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n    /// Creates a new, empty vector of length zero.\n    ///\n    /// Since this container is backed by an array internally, it still needs an initial value\n    /// to give each element. To resolve this, each element is zeroed internally. This value\n    /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n    /// assert(empty_vector.len() == 0);\n    /// ```\n    ///\n    /// Note that whenever calling `new` the maximum length of the vector should always be specified\n    /// via a type signature:\n    ///\n    /// ```noir\n    /// fn good() -> BoundedVec<Field, 10> {\n    ///     // Ok! MaxLen is specified with a type annotation\n    ///     let v1: BoundedVec<Field, 3> = BoundedVec::new();\n    ///     let v2 = BoundedVec::new();\n    ///\n    ///     // Ok! MaxLen is known from the type of `good`'s return value\n    ///     v2\n    /// }\n    ///\n    /// fn bad() {\n    ///     // Error: Type annotation needed\n    ///     // The compiler can't infer `MaxLen` from the following code:\n    ///     let mut v3 = BoundedVec::new();\n    ///     v3.push(5);\n    /// }\n    /// ```\n    ///\n    /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n    /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n    /// constraint failure at runtime when the vec is pushed to.\n    pub fn new() -> Self {\n        let zeroed = crate::mem::zeroed();\n        BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n    }\n\n    /// Retrieves an element from the vector at the given index, starting from zero.\n    ///\n    /// If the given index is equal to or greater than the length of the vector, this\n    /// will issue a constraint failure.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n    ///     let first = v.get(0);\n    ///     let last = v.get(v.len() - 1);\n    ///     assert(first != last);\n    /// }\n    /// ```\n    pub fn get(self, index: u32) -> T {\n        assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n        self.get_unchecked(index)\n    }\n\n    /// Retrieves an element from the vector at the given index, starting from zero, without\n    /// performing a bounds check.\n    ///\n    /// Since this function does not perform a bounds check on length before accessing the element,\n    /// it is unsafe! Use at your own risk!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n    ///     // Always ensure the length is larger than the largest\n    ///     // index passed to get_unchecked\n    ///     assert(v.len() > 2);\n    ///     let first = v.get_unchecked(0);\n    ///     let second = v.get_unchecked(1);\n    ///     let third = v.get_unchecked(2);\n    ///     first + second + third\n    /// }\n    /// ```\n    pub fn get_unchecked(self, index: u32) -> T {\n        self.storage[index]\n    }\n\n    /// Writes an element to the vector at the given index, starting from zero.\n    ///\n    /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n    ///     let first = v.get(0);\n    ///     assert(first != 42);\n    ///     v.set(0, 42);\n    ///     let new_first = v.get(0);\n    ///     assert(new_first == 42);\n    /// }\n    /// ```\n    pub fn set(&mut self, index: u32, value: T) {\n        assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n        self.set_unchecked(index, value)\n    }\n\n    /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n    ///\n    /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn set_unchecked_example() {\n    ///     let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n    ///     vec.extend_from_array([1, 2]);\n    ///\n    ///     // Here we're safely writing within the valid range of `vec`\n    ///     // `vec` now has the value [42, 2]\n    ///     vec.set_unchecked(0, 42);\n    ///\n    ///     // We can then safely read this value back out of `vec`.\n    ///     // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n    ///     assert_eq(vec.get(0), 42);\n    ///\n    ///     // We've now written past the end of `vec`.\n    ///     // As this index is still within the maximum potential length of `v`,\n    ///     // it won't cause a constraint failure.\n    ///     vec.set_unchecked(2, 42);\n    ///     println(vec);\n    ///\n    ///     // This will write past the end of the maximum potential length of `vec`,\n    ///     // it will then trigger a constraint failure.\n    ///     vec.set_unchecked(5, 42);\n    ///     println(vec);\n    /// }\n    /// ```\n    pub fn set_unchecked(&mut self, index: u32, value: T) {\n        self.storage[index] = value;\n    }\n\n    /// Pushes an element to the end of the vector. This increases the length\n    /// of the vector by one.\n    ///\n    /// Panics if the new length of the vector will be greater than the max length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n    ///\n    /// v.push(1);\n    /// v.push(2);\n    ///\n    /// // Panics with failed assertion \"push out of bounds\"\n    /// v.push(3);\n    /// ```\n    pub fn push(&mut self, elem: T) {\n        assert(self.len < MaxLen, \"push out of bounds\");\n\n        self.storage[self.len] = elem;\n        self.len += 1;\n    }\n\n    /// Returns the current length of this vector\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n    /// assert(v.len() == 0);\n    ///\n    /// v.push(100);\n    /// assert(v.len() == 1);\n    ///\n    /// v.push(200);\n    /// v.push(300);\n    /// v.push(400);\n    /// assert(v.len() == 4);\n    ///\n    /// let _ = v.pop();\n    /// let _ = v.pop();\n    /// assert(v.len() == 2);\n    /// ```\n    pub fn len(self) -> u32 {\n        self.len\n    }\n\n    /// Returns the maximum length of this vector. This is always\n    /// equal to the `MaxLen` parameter this vector was initialized with.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n    ///\n    /// assert(v.max_len() == 5);\n    /// v.push(10);\n    /// assert(v.max_len() == 5);\n    /// ```\n    pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n        MaxLen\n    }\n\n    /// Returns the internal array within this vector.\n    ///\n    /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n    /// the storage held internally by this vector.\n    ///\n    /// Note that uninitialized elements may be zeroed out!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n    ///\n    /// assert(v.storage() == [0, 0, 0, 0, 0]);\n    ///\n    /// v.push(57);\n    /// assert(v.storage() == [57, 0, 0, 0, 0]);\n    /// ```\n    pub fn storage(self) -> [T; MaxLen] {\n        self.storage\n    }\n\n    /// Pushes each element from the given array to this vector.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n    /// vec.extend_from_array([2, 4]);\n    ///\n    /// assert(vec.len == 2);\n    /// assert(vec.get(0) == 2);\n    /// assert(vec.get(1) == 4);\n    /// ```\n    pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n        let new_len = self.len + array.len();\n        assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n        for i in 0..array.len() {\n            self.storage[self.len + i] = array[i];\n        }\n        self.len = new_len;\n    }\n\n    /// Pushes each element from the given vector to this vector.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n    /// vec.extend_from_vector([2, 4].as_vector());\n    ///\n    /// assert(vec.len == 2);\n    /// assert(vec.get(0) == 2);\n    /// assert(vec.get(1) == 4);\n    /// ```\n    pub fn extend_from_vector(&mut self, vector: [T]) {\n        let new_len = self.len + vector.len();\n        assert(new_len <= MaxLen, \"extend_from_vector out of bounds\");\n        for i in 0..vector.len() {\n            self.storage[self.len + i] = vector[i];\n        }\n        self.len = new_len;\n    }\n\n    /// Pushes each element from the other vector to this vector. The length of\n    /// the other vector is left unchanged.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// ```noir\n    /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n    /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n    ///\n    /// v2.extend_from_array([1, 2, 3]);\n    /// v1.extend_from_bounded_vec(v2);\n    ///\n    /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n    /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n    /// ```\n    pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n        let append_len = vec.len();\n        let new_len = self.len + append_len;\n        assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n        if is_unconstrained() {\n            for i in 0..append_len {\n                self.storage[self.len + i] = vec.get_unchecked(i);\n            }\n        } else {\n            for i in 0..Len {\n                if i < append_len {\n                    self.storage[self.len + i] = vec.get_unchecked(i);\n                }\n            }\n        }\n        self.len = new_len;\n    }\n\n    /// Creates a new vector, populating it with values derived from an array input.\n    /// The maximum length of the vector is determined based on the type signature.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n    /// ```\n    pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n        static_assert(Len <= MaxLen, \"from array out of bounds\");\n        let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n        vec.extend_from_array(array);\n        vec\n    }\n\n    /// Pops the element at the end of the vector. This will decrease the length\n    /// of the vector by one.\n    ///\n    /// Panics if the vector is empty.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n    /// v.push(1);\n    /// v.push(2);\n    ///\n    /// let two = v.pop();\n    /// let one = v.pop();\n    ///\n    /// assert(two == 2);\n    /// assert(one == 1);\n    ///\n    /// // error: cannot pop from an empty vector\n    /// let _ = v.pop();\n    /// ```\n    pub fn pop(&mut self) -> T {\n        assert(self.len > 0, \"cannot pop from an empty vector\");\n        self.len -= 1;\n\n        let elem = self.storage[self.len];\n        self.storage[self.len] = crate::mem::zeroed();\n        elem\n    }\n\n    /// Returns true if the given predicate returns true for any element\n    /// in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n    /// v.extend_from_array([2, 4, 6]);\n    ///\n    /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n    /// assert(all_even);\n    /// ```\n    pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = false;\n        if is_unconstrained() {\n            for i in 0..self.len {\n                ret |= predicate(self.storage[i]);\n            }\n        } else {\n            let mut exceeded_len = false;\n            for i in 0..MaxLen {\n                exceeded_len |= i == self.len;\n                if !exceeded_len {\n                    ret |= predicate(self.storage[i]);\n                }\n            }\n        }\n        ret\n    }\n\n    /// Creates a new vector of equal size by calling a closure on each element in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let result = vec.map(|value| value * 2);\n    ///\n    /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n        let mut ret = BoundedVec::new();\n        ret.len = self.len();\n\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                ret.storage[i] = f(self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    ret.storage[i] = f(self.get_unchecked(i));\n                }\n            }\n        }\n\n        ret\n    }\n\n    /// Creates a new vector of equal size by calling a closure on each element\n    /// in this vector, along with its index.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let result = vec.mapi(|i, value| i + value * 2);\n    ///\n    /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n        let mut ret = BoundedVec::new();\n        ret.len = self.len();\n\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                ret.storage[i] = f(i, self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    ret.storage[i] = f(i, self.get_unchecked(i));\n                }\n            }\n        }\n\n        ret\n    }\n\n    /// Calls a closure on each element in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let mut result = BoundedVec::<u32, 4>::new();\n    /// vec.for_each(|value| result.push(value * 2));\n    ///\n    /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                f(self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    f(self.get_unchecked(i));\n                }\n            }\n        }\n    }\n\n    /// Calls a closure on each element in this vector, along with its index.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let mut result = BoundedVec::<u32, 4>::new();\n    /// vec.for_eachi(|i, value| result.push(i + value * 2));\n    ///\n    /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                f(i, self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    f(i, self.get_unchecked(i));\n                }\n            }\n        }\n    }\n\n    /// Creates a new BoundedVec from the given array and length.\n    /// The given length must be less than or equal to the length of the array.\n    ///\n    /// This function will zero out any elements at or past index `len` of `array`.\n    /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n    /// zeroed after that index, you can use [`from_parts_unchecked`][Self::from_parts_unchecked] to remove the extra loop.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n    /// assert_eq(vec.len(), 3);\n    /// ```\n    pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n        assert(len <= MaxLen);\n        let zeroed = crate::mem::zeroed();\n\n        if is_unconstrained() {\n            for i in len..MaxLen {\n                array[i] = zeroed;\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i >= len {\n                    array[i] = zeroed;\n                }\n            }\n        }\n\n        BoundedVec { storage: array, len }\n    }\n\n    /// Creates a new BoundedVec from the given array and length.\n    /// The given length must be less than or equal to the length of the array.\n    ///\n    /// This function is unsafe because it expects all elements past the `len` index\n    /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n    /// for a safe version of this function which does zero out any indices past the\n    /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n    /// to give incorrect results since it will check even elements past `len`.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n    /// assert_eq(vec.len(), 3);\n    ///\n    /// // invalid use!\n    /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n    /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n    ///\n    /// // both vecs have length 3 so we'd expect them to be equal, but this\n    /// // fails because elements past the length are still checked in eq\n    /// assert_eq(vec1, vec2); // fails\n    /// ```\n    pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n        assert(len <= MaxLen);\n        BoundedVec { storage: array, len }\n    }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n    T: Eq,\n{\n    fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n        // TODO: https://github.com/noir-lang/noir/issues/4837\n        //\n        // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n        // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n        if self.len == other.len {\n            self.storage == other.storage\n        } else {\n            false\n        }\n    }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n    fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n        BoundedVec::from_array(array)\n    }\n}\n\nmod bounded_vec_tests {\n\n    mod get {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn panics_when_reading_elements_past_end_of_vec() {\n            let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n            let _ = vec.get(0);\n        }\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn panics_when_reading_beyond_length() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            let _ = vec.get(3);\n        }\n\n        #[test]\n        fn get_works_within_bounds() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(2), 3);\n            assert_eq(vec.get(4), 5);\n        }\n\n        #[test]\n        fn get_unchecked_works() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            assert_eq(vec.get_unchecked(0), 1);\n            assert_eq(vec.get_unchecked(2), 3);\n        }\n\n        #[test]\n        fn get_unchecked_works_past_len() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            assert_eq(vec.get_unchecked(4), 0);\n        }\n    }\n\n    mod set {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn set_updates_values_properly() {\n            let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n            vec.set(0, 42);\n            assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n            vec.set(1, 43);\n            assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n            vec.set(2, 44);\n            assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n            vec.set(1, 10);\n            assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n            vec.set(0, 0);\n            assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n        }\n\n        #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n        fn panics_when_writing_elements_past_end_of_vec() {\n            let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n            vec.set(0, 42);\n        }\n\n        #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n        fn panics_when_setting_beyond_length() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            vec.set(3, 4);\n        }\n\n        #[test]\n        fn set_unchecked_operations() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            vec.set_unchecked(0, 10);\n            assert_eq(vec.get(0), 10);\n        }\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn set_unchecked_operations_past_len() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            vec.set_unchecked(3, 40);\n            assert_eq(vec.get(3), 40);\n        }\n\n        #[test]\n        fn set_preserves_other_elements() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n            vec.set(2, 30);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 30);\n            assert_eq(vec.get(3), 4);\n            assert_eq(vec.get(4), 5);\n        }\n    }\n\n    mod any {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn returns_false_if_predicate_not_satisfied() {\n            let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n            let result = vec.any(|value| value);\n\n            assert(!result);\n        }\n\n        #[test]\n        fn returns_true_if_predicate_satisfied() {\n            let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n            let result = vec.any(|value| value);\n\n            assert(result);\n        }\n\n        #[test]\n        fn returns_false_on_empty_boundedvec() {\n            let vec: BoundedVec<bool, 0> = BoundedVec::new();\n            let result = vec.any(|value| value);\n\n            assert(!result);\n        }\n\n        #[test]\n        fn any_with_complex_predicates() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n            assert(vec.any(|x| x > 3));\n            assert(!vec.any(|x| x > 10));\n            assert(vec.any(|x| x % 2 == 0)); // has a even number\n            assert(vec.any(|x| x == 3)); // has a specific value\n        }\n\n        #[test]\n        fn any_with_partial_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            assert(vec.any(|x| x == 1));\n            assert(vec.any(|x| x == 2));\n            assert(!vec.any(|x| x == 3));\n        }\n    }\n\n    mod map {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn applies_function_correctly() {\n            // docs:start:bounded-vec-map-example\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|value| value * 2);\n            // docs:end:bounded-vec-map-example\n            let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|value| (value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = vec.map(|value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn map_with_conditional_logic() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n            let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n            let expected = BoundedVec::from_array([1, 4, 3, 8]);\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn map_preserves_length() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|x| x * 2);\n\n            assert_eq(result.len(), vec.len());\n            assert_eq(result.max_len(), vec.max_len());\n        }\n\n        #[test]\n        fn map_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let result = vec.map(|x| x * 2);\n            assert_eq(result, vec);\n            assert_eq(result.len(), 0);\n            assert_eq(result.max_len(), 5);\n        }\n    }\n\n    mod mapi {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn applies_function_correctly() {\n            // docs:start:bounded-vec-mapi-example\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.mapi(|i, value| i + value * 2);\n            // docs:end:bounded-vec-mapi-example\n            let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.mapi(|i, value| (i + value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn mapi_with_index_branching_logic() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n            let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n            let expected = BoundedVec::from_array([2, 2, 6, 4]);\n            assert_eq(result, expected);\n        }\n    }\n\n    mod for_each {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        // map in terms of for_each\n        fn for_each_map<T, U, Env, let MaxLen: u32>(\n            input: BoundedVec<T, MaxLen>,\n            f: fn[Env](T) -> U,\n        ) -> BoundedVec<U, MaxLen> {\n            let mut output = BoundedVec::<U, MaxLen>::new();\n            let output_ref = &mut output;\n            input.for_each(|x| output_ref.push(f(x)));\n            output\n        }\n\n        #[test]\n        fn smoke_test() {\n            let mut acc = 0;\n            let acc_ref = &mut acc;\n            // docs:start:bounded-vec-for-each-example\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            vec.for_each(|value| { *acc_ref += value; });\n            // docs:end:bounded-vec-for-each-example\n            assert_eq(acc, 6);\n        }\n\n        #[test]\n        fn applies_function_correctly() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_each_map(vec, |value| value * 2);\n            let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_each_map(vec, |value| (value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn for_each_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut count = 0;\n            let count_ref = &mut count;\n            vec.for_each(|_| { *count_ref += 1; });\n            assert_eq(count, 0);\n        }\n\n        #[test]\n        fn for_each_with_side_effects() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            let mut seen = BoundedVec::<u32, 3>::new();\n            let seen_ref = &mut seen;\n            vec.for_each(|x| seen_ref.push(x));\n            assert_eq(seen, vec);\n        }\n    }\n\n    mod for_eachi {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        // mapi in terms of for_eachi\n        fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n            input: BoundedVec<T, MaxLen>,\n            f: fn[Env](u32, T) -> U,\n        ) -> BoundedVec<U, MaxLen> {\n            let mut output = BoundedVec::<U, MaxLen>::new();\n            let output_ref = &mut output;\n            input.for_eachi(|i, x| output_ref.push(f(i, x)));\n            output\n        }\n\n        #[test]\n        fn smoke_test() {\n            let mut acc = 0;\n            let acc_ref = &mut acc;\n            // docs:start:bounded-vec-for-eachi-example\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            vec.for_eachi(|i, value| { *acc_ref += i * value; });\n            // docs:end:bounded-vec-for-eachi-example\n\n            // 0 * 1 + 1 * 2 + 2 * 3\n            assert_eq(acc, 8);\n        }\n\n        #[test]\n        fn applies_function_correctly() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n            let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn for_eachi_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut count = 0;\n            let count_ref = &mut count;\n            vec.for_eachi(|_, _| { *count_ref += 1; });\n            assert_eq(count, 0);\n        }\n\n        #[test]\n        fn for_eachi_with_index_tracking() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n            let mut indices = BoundedVec::<u32, 3>::new();\n            let indices_ref = &mut indices;\n            vec.for_eachi(|i, _| indices_ref.push(i));\n\n            let expected = BoundedVec::from_array([0, 1, 2]);\n            assert_eq(indices, expected);\n        }\n\n    }\n\n    mod from_array {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn empty() {\n            let empty_array: [Field; 0] = [];\n            let bounded_vec = BoundedVec::from_array([]);\n\n            assert_eq(bounded_vec.max_len(), 0);\n            assert_eq(bounded_vec.len(), 0);\n            assert_eq(bounded_vec.storage(), empty_array);\n        }\n\n        #[test]\n        fn equal_len() {\n            let array = [1, 2, 3];\n            let bounded_vec = BoundedVec::from_array(array);\n\n            assert_eq(bounded_vec.max_len(), 3);\n            assert_eq(bounded_vec.len(), 3);\n            assert_eq(bounded_vec.storage(), array);\n        }\n\n        #[test]\n        fn max_len_greater_then_array_len() {\n            let array = [1, 2, 3];\n            let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n            assert_eq(bounded_vec.max_len(), 10);\n            assert_eq(bounded_vec.len(), 3);\n            assert_eq(bounded_vec.get(0), 1);\n            assert_eq(bounded_vec.get(1), 2);\n            assert_eq(bounded_vec.get(2), 3);\n        }\n\n        #[test(should_fail_with = \"from array out of bounds\")]\n        fn max_len_lower_then_array_len() {\n            let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n        }\n\n        #[test]\n        fn from_array_preserves_order() {\n            let array = [5, 3, 1, 4, 2];\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n            for i in 0..array.len() {\n                assert_eq(vec.get(i), array[i]);\n            }\n        }\n\n        #[test]\n        fn from_array_with_different_types() {\n            let bool_array = [true, false, true];\n            let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n            assert_eq(bool_vec.len(), 3);\n            assert_eq(bool_vec.get(0), true);\n            assert_eq(bool_vec.get(1), false);\n        }\n    }\n\n    mod trait_from {\n        use crate::collections::bounded_vec::BoundedVec;\n        use crate::convert::From;\n\n        #[test]\n        fn simple() {\n            let array = [1, 2];\n            let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n            assert_eq(bounded_vec.max_len(), 10);\n            assert_eq(bounded_vec.len(), 2);\n            assert_eq(bounded_vec.get(0), 1);\n            assert_eq(bounded_vec.get(1), 2);\n        }\n    }\n\n    mod trait_eq {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn empty_equality() {\n            let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n            let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n            assert_eq(bounded_vec1, bounded_vec2);\n        }\n\n        #[test]\n        fn inequality() {\n            let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n            let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n            bounded_vec1.push(1);\n            bounded_vec2.push(2);\n\n            assert(bounded_vec1 != bounded_vec2);\n        }\n    }\n\n    mod from_parts {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn from_parts() {\n            // docs:start:from-parts\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n            assert_eq(vec.len(), 3);\n\n            // Any elements past the given length are zeroed out, so these\n            // two BoundedVecs will be completely equal\n            let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n            let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n            assert_eq(vec1, vec2);\n            // docs:end:from-parts\n        }\n\n        #[test]\n        fn from_parts_unchecked() {\n            // docs:start:from-parts-unchecked\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n            assert_eq(vec.len(), 3);\n\n            // invalid use!\n            let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n            let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n            // both vecs have length 3 so we'd expect them to be equal, but this\n            // fails because elements past the length are still checked in eq\n            assert(vec1 != vec2);\n            // docs:end:from-parts-unchecked\n        }\n    }\n\n    mod push_pop {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn push_and_pop_operations() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n            assert_eq(vec.len(), 0);\n\n            vec.push(1);\n            assert_eq(vec.len(), 1);\n            assert_eq(vec.get(0), 1);\n\n            vec.push(2);\n            assert_eq(vec.len(), 2);\n            assert_eq(vec.get(1), 2);\n\n            let popped = vec.pop();\n            assert_eq(popped, 2);\n            assert_eq(vec.len(), 1);\n\n            let popped2 = vec.pop();\n            assert_eq(popped2, 1);\n            assert_eq(vec.len(), 0);\n        }\n\n        #[test(should_fail_with = \"push out of bounds\")]\n        fn push_to_full_vector() {\n            let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n            vec.push(3); // should panic\n        }\n\n        #[test(should_fail_with = \"cannot pop from an empty vector\")]\n        fn pop_from_empty_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let _ = vec.pop(); // should panic\n        }\n\n        #[test]\n        fn push_pop_cycle() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n            // push to full\n            vec.push(1);\n            vec.push(2);\n            vec.push(3);\n            assert_eq(vec.len(), 3);\n\n            // pop all\n            assert_eq(vec.pop(), 3);\n            assert_eq(vec.pop(), 2);\n            assert_eq(vec.pop(), 1);\n            assert_eq(vec.len(), 0);\n\n            // push again\n            vec.push(4);\n            assert_eq(vec.len(), 1);\n            assert_eq(vec.get(0), 4);\n        }\n    }\n\n    mod extend {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn extend_from_array() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_array([2, 3]);\n\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n\n        #[test]\n        fn extend_from_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_vector([2, 3].as_vector());\n\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n\n        #[test]\n        fn extend_from_bounded_vec() {\n            let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n            vec1.push(1);\n            vec2.push(2);\n            vec2.push(3);\n\n            vec1.extend_from_bounded_vec(vec2);\n\n            assert_eq(vec1.len(), 3);\n            assert_eq(vec1.get(0), 1);\n            assert_eq(vec1.get(1), 2);\n            assert_eq(vec1.get(2), 3);\n        }\n\n        #[test(should_fail_with = \"extend_from_array out of bounds\")]\n        fn extend_array_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_array([2, 3, 4]); // should panic\n        }\n\n        #[test(should_fail_with = \"extend_from_vector out of bounds\")]\n        fn extend_vector_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_vector([2, 3, 4].as_vector()); // S]should panic\n        }\n\n        #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n        fn extend_bounded_vec_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n            vec.extend_from_bounded_vec(other); // should panic\n        }\n\n        #[test]\n        fn extend_with_empty_collections() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let original_len = vec.len();\n\n            vec.extend_from_array([]);\n            assert_eq(vec.len(), original_len);\n\n            vec.extend_from_vector([].as_vector());\n            assert_eq(vec.len(), original_len);\n\n            let empty: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.extend_from_bounded_vec(empty);\n            assert_eq(vec.len(), original_len);\n        }\n    }\n\n    mod storage {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn storage_consistency() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n            // test initial storage state\n            assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n            vec.push(1);\n            vec.push(2);\n\n            // test storage after modifications\n            assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n            // storage doesn't change length\n            assert_eq(vec.len(), 2);\n            assert_eq(vec.max_len(), 5);\n        }\n\n        #[test]\n        fn storage_after_pop() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n            let _ = vec.pop();\n            // after pop, the last element should be zeroed\n            assert_eq(vec.storage(), [1, 2, 0]);\n            assert_eq(vec.len(), 2);\n        }\n\n        #[test]\n        fn vector_immutable() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            let storage = vec.storage();\n\n            assert_eq(storage, [1, 2, 3]);\n\n            // Verify that the original vector is unchanged\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n    }\n}\n"
    },
    "16": {
      "path": "std/embedded_curve_ops.nr",
      "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n    pub x: Field,\n    pub y: Field,\n    pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n    /// Elliptic curve point doubling operation\n    /// returns the doubled point of a point P, i.e P+P\n    pub fn double(self) -> EmbeddedCurvePoint {\n        embedded_curve_add(self, self)\n    }\n\n    /// Returns the null element of the curve; 'the point at infinity'\n    pub fn point_at_infinity() -> EmbeddedCurvePoint {\n        EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n    }\n\n    /// Returns the curve's generator point.\n    pub fn generator() -> EmbeddedCurvePoint {\n        // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n        EmbeddedCurvePoint {\n            x: 1,\n            y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n            is_infinite: false,\n        }\n    }\n}\n\nimpl Add for EmbeddedCurvePoint {\n    /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n    fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n        embedded_curve_add(self, other)\n    }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n    /// Points subtraction operation, using addition and negation\n    fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n        self + other.neg()\n    }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n    /// Negates a point P, i.e returns -P, by negating the y coordinate.\n    /// If the point is at infinity, then the result is also at infinity.\n    fn neg(self) -> EmbeddedCurvePoint {\n        EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n    }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n    /// Checks whether two points are equal\n    fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n        (self.is_infinite & b.is_infinite)\n            | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n    }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: crate::hash::Hasher,\n    {\n        if self.is_infinite {\n            self.is_infinite.hash(state);\n        } else {\n            self.x.hash(state);\n            self.y.hash(state);\n        }\n    }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n    pub lo: Field,\n    pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n    pub fn new(lo: Field, hi: Field) -> Self {\n        EmbeddedCurveScalar { lo, hi }\n    }\n\n    #[field(bn254)]\n    pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n        let (a, b) = crate::field::bn254::decompose(scalar);\n        EmbeddedCurveScalar { lo: a, hi: b }\n    }\n\n    //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n    #[field(bn254)]\n    pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n        let mut v = 1;\n        let mut lo = 0 as Field;\n        let mut hi = 0 as Field;\n        for i in 0..16 {\n            lo = lo + (bytes[offset + 31 - i] as Field) * v;\n            hi = hi + (bytes[offset + 15 - i] as Field) * v;\n            v = v * 256;\n        }\n        let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n        sig_s\n    }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n    fn eq(self, other: Self) -> bool {\n        (other.hi == self.hi) & (other.lo == self.lo)\n    }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: crate::hash::Hasher,\n    {\n        self.hi.hash(state);\n        self.lo.hash(state);\n    }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n//\n// IMPORTANT: Prefer `multi_scalar_mul()` over repeated `embedded_curve_add()`\n// for adding multiple points. This is significantly more efficient.\n// For adding exactly 2 points, use `embedded_curve_add()` directly.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n    points: [EmbeddedCurvePoint; N],\n    scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n    multi_scalar_mul_array_return(points, scalars, true)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return<let N: u32>(\n    points: [EmbeddedCurvePoint; N],\n    scalars: [EmbeddedCurveScalar; N],\n    predicate: bool,\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n    multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// Elliptic curve addition\n/// IMPORTANT: this function is expected to perform a full addition in order to handle all corner cases:\n/// - points on the curve\n/// - point doubling\n/// - point at infinity\n/// As a result, you may not get optimal performance, depending on the assumptions of your inputs.\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n    point1: EmbeddedCurvePoint,\n    point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n    // docs:end:embedded_curve_add\n    if crate::runtime::is_unconstrained() {\n        // avoid calling the black box function for trivial cases\n        if point1.is_infinite {\n            point2\n        } else if point2.is_infinite {\n            point1\n        } else {\n            embedded_curve_add_inner(point1, point2)\n        }\n    } else {\n        embedded_curve_add_inner(point1, point2)\n    }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n    _point1: EmbeddedCurvePoint,\n    _point2: EmbeddedCurvePoint,\n    _predicate: bool,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// EC addition wrapper for the foreign function\nfn embedded_curve_add_inner(\n    point1: EmbeddedCurvePoint,\n    point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n    embedded_curve_add_array_return(point1, point2, true)[0]\n}\n"
    },
    "17": {
      "path": "std/field/bn254.nr",
      "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\npub(crate) global PLO: Field = 53438638232309528389504892708671455233;\npub(crate) global PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n    // Here's we're taking advantage of truncating 128 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 = (x as u128) as Field;\n    let high = (x - low) / TWO_POW_128;\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, lt, 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_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_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        assert_gt(0 - 1, 0);\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    #[test]\n    fn check_decompose_edge_cases() {\n        assert_eq(decompose(0), (0, 0));\n        assert_eq(decompose(TWO_POW_128 - 1), (TWO_POW_128 - 1, 0));\n        assert_eq(decompose(TWO_POW_128 + 1), (1, 1));\n        assert_eq(decompose(TWO_POW_128 * 2), (0, 2));\n        assert_eq(decompose(TWO_POW_128 * 2 + 0x1234567890), (0x1234567890, 2));\n    }\n\n    #[test]\n    fn check_decompose_large_values() {\n        let large_field = 0xffffffffffffffff;\n        let (lo, hi) = decompose(large_field);\n        assert_eq(large_field, lo + TWO_POW_128 * hi);\n\n        let large_value = large_field - TWO_POW_128;\n        let (lo2, hi2) = decompose(large_value);\n        assert_eq(large_value, lo2 + TWO_POW_128 * hi2);\n    }\n\n    #[test]\n    fn check_lt_comprehensive() {\n        assert(lt(0, 1));\n        assert(!lt(1, 0));\n        assert(!lt(0, 0));\n        assert(!lt(42, 42));\n\n        assert(lt(TWO_POW_128 - 1, TWO_POW_128));\n        assert(!lt(TWO_POW_128, TWO_POW_128 - 1));\n    }\n}\n"
    },
    "18": {
      "path": "std/field/mod.nr",
      "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        __assert_max_bit_size(self, BIT_SIZE);\n    }\n\n    /// Decomposes `self` into its little 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 array 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 = __to_le_bits(self);\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 array 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 = __to_be_bits(self);\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    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        __to_le_radix(self, radix)\n    }\n\n    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            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        __to_be_radix(self, radix)\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(apply_range_constraint)]\nfn __assert_max_bit_size(value: Field, bit_size: u32) {}\n\n// `_radix` must be less than 256\n#[builtin(to_le_radix)]\nfn __to_le_radix<let N: u32>(value: Field, radix: u32) -> [u8; N] {}\n\n// `_radix` must be less than 256\n#[builtin(to_be_radix)]\nfn __to_be_radix<let N: u32>(value: Field, radix: u32) -> [u8; N] {}\n\n/// Decomposes `self` into its little 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 array 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)]\nfn __to_le_bits<let N: u32>(value: Field) -> [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 array 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)]\nfn __to_be_bits<let N: u32>(value: Field) -> [u1; 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, static_assert};\n    use super::{\n        field_less_than, modulus_be_bits, modulus_be_bytes, modulus_le_bits, modulus_le_bytes,\n    };\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(\"radix must be greater than 1\");\n        }\n    }\n\n    // Updated test to account for Brillig restriction that radix must be greater than 2\n    #[test(should_fail_with = \"radix must be greater than 1\")]\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 _: [u8; 8] = field.to_le_radix(1);\n        } else {\n            panic(\"radix must be greater than 1\");\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(\"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(\"radix must be less than or equal to 256\")\n        }\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 16 limbs\")]\n    unconstrained fn not_enough_limbs_brillig() {\n        let _: [u8; 16] = 0x100000000000000000000000000000000.to_le_bytes();\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 16 limbs\")]\n    fn not_enough_limbs() {\n        let _: [u8; 16] = 0x100000000000000000000000000000000.to_le_bytes();\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    #[test]\n    unconstrained fn test_large_field_values_unconstrained() {\n        let large_field = 0xffffffffffffffff;\n\n        let bits: [u1; 64] = large_field.to_le_bits();\n        assert_eq(bits[0], 1);\n\n        let bytes: [u8; 8] = large_field.to_le_bytes();\n        assert_eq(Field::from_le_bytes::<8>(bytes), large_field);\n\n        let radix_bytes: [u8; 8] = large_field.to_le_radix(256);\n        assert_eq(Field::from_le_bytes::<8>(radix_bytes), large_field);\n    }\n\n    #[test]\n    fn test_large_field_values() {\n        let large_val = 0xffffffffffffffff;\n\n        let bits: [u1; 64] = large_val.to_le_bits();\n        assert_eq(bits[0], 1);\n\n        let bytes: [u8; 8] = large_val.to_le_bytes();\n        assert_eq(Field::from_le_bytes::<8>(bytes), large_val);\n\n        let radix_bytes: [u8; 8] = large_val.to_le_radix(256);\n        assert_eq(Field::from_le_bytes::<8>(radix_bytes), large_val);\n    }\n\n    #[test]\n    fn test_decomposition_edge_cases() {\n        let zero_bits: [u1; 8] = 0.to_le_bits();\n        assert_eq(zero_bits, [0; 8]);\n\n        let zero_bytes: [u8; 8] = 0.to_le_bytes();\n        assert_eq(zero_bytes, [0; 8]);\n\n        let one_bits: [u1; 8] = 1.to_le_bits();\n        let expected: [u1; 8] = [1, 0, 0, 0, 0, 0, 0, 0];\n        assert_eq(one_bits, expected);\n\n        let pow2_bits: [u1; 8] = 4.to_le_bits();\n        let expected: [u1; 8] = [0, 0, 1, 0, 0, 0, 0, 0];\n        assert_eq(pow2_bits, expected);\n    }\n\n    #[test]\n    fn test_pow_32() {\n        assert_eq(2.pow_32(3), 8);\n        assert_eq(3.pow_32(2), 9);\n        assert_eq(5.pow_32(0), 1);\n        assert_eq(7.pow_32(1), 7);\n\n        assert_eq(2.pow_32(10), 1024);\n\n        assert_eq(0.pow_32(5), 0);\n        assert_eq(0.pow_32(0), 1);\n\n        assert_eq(1.pow_32(100), 1);\n    }\n\n    #[test]\n    fn test_sgn0() {\n        assert_eq(0.sgn0(), 0);\n        assert_eq(2.sgn0(), 0);\n        assert_eq(4.sgn0(), 0);\n        assert_eq(100.sgn0(), 0);\n\n        assert_eq(1.sgn0(), 1);\n        assert_eq(3.sgn0(), 1);\n        assert_eq(5.sgn0(), 1);\n        assert_eq(101.sgn0(), 1);\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 8 limbs\")]\n    fn test_bit_decomposition_overflow() {\n        // 8 bits can't represent large field values\n        let large_val = 0x1000000000000000;\n        let _: [u1; 8] = large_val.to_le_bits();\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 4 limbs\")]\n    fn test_byte_decomposition_overflow() {\n        // 4 bytes can't represent large field values\n        let large_val = 0x1000000000000000;\n        let _: [u8; 4] = large_val.to_le_bytes();\n    }\n\n    #[test]\n    fn test_to_from_be_bytes_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this byte produces the expected 32 BE bytes for (modulus - 1)\n            let mut p_minus_1_bytes: [u8; 32] = modulus_be_bytes().as_array();\n            assert(p_minus_1_bytes[32 - 1] > 0);\n            p_minus_1_bytes[32 - 1] -= 1;\n\n            let p_minus_1 = Field::from_be_bytes::<32>(p_minus_1_bytes);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 32 BE bytes produces the same bytes\n            let p_minus_1_converted_bytes: [u8; 32] = p_minus_1.to_be_bytes();\n            assert_eq(p_minus_1_converted_bytes, p_minus_1_bytes);\n\n            // checking that incrementing this byte produces 32 BE bytes for (modulus + 1)\n            let mut p_plus_1_bytes: [u8; 32] = modulus_be_bytes().as_array();\n            assert(p_plus_1_bytes[32 - 1] < 255);\n            p_plus_1_bytes[32 - 1] += 1;\n\n            let p_plus_1 = Field::from_be_bytes::<32>(p_plus_1_bytes);\n            assert_eq(p_plus_1, 1);\n\n            // checking that converting p_plus_1 to 32 BE bytes produces the same\n            // byte set to 1 as p_plus_1_bytes and otherwise zeroes\n            let mut p_plus_1_converted_bytes: [u8; 32] = p_plus_1.to_be_bytes();\n            assert_eq(p_plus_1_converted_bytes[32 - 1], 1);\n            p_plus_1_converted_bytes[32 - 1] = 0;\n            assert_eq(p_plus_1_converted_bytes, [0; 32]);\n\n            // checking that Field::from_be_bytes::<32> on the Field modulus produces 0\n            assert_eq(modulus_be_bytes().len(), 32);\n            let p = Field::from_be_bytes::<32>(modulus_be_bytes().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 32 BE bytes produces 32 zeroes\n            let p_bytes: [u8; 32] = 0.to_be_bytes();\n            assert_eq(p_bytes, [0; 32]);\n        }\n    }\n\n    #[test]\n    fn test_to_from_le_bytes_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this byte produces the expected 32 LE bytes for (modulus - 1)\n            let mut p_minus_1_bytes: [u8; 32] = modulus_le_bytes().as_array();\n            assert(p_minus_1_bytes[0] > 0);\n            p_minus_1_bytes[0] -= 1;\n\n            let p_minus_1 = Field::from_le_bytes::<32>(p_minus_1_bytes);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 32 BE bytes produces the same bytes\n            let p_minus_1_converted_bytes: [u8; 32] = p_minus_1.to_le_bytes();\n            assert_eq(p_minus_1_converted_bytes, p_minus_1_bytes);\n\n            // checking that incrementing this byte produces 32 LE bytes for (modulus + 1)\n            let mut p_plus_1_bytes: [u8; 32] = modulus_le_bytes().as_array();\n            assert(p_plus_1_bytes[0] < 255);\n            p_plus_1_bytes[0] += 1;\n\n            let p_plus_1 = Field::from_le_bytes::<32>(p_plus_1_bytes);\n            assert_eq(p_plus_1, 1);\n\n            // checking that converting p_plus_1 to 32 LE bytes produces the same\n            // byte set to 1 as p_plus_1_bytes and otherwise zeroes\n            let mut p_plus_1_converted_bytes: [u8; 32] = p_plus_1.to_le_bytes();\n            assert_eq(p_plus_1_converted_bytes[0], 1);\n            p_plus_1_converted_bytes[0] = 0;\n            assert_eq(p_plus_1_converted_bytes, [0; 32]);\n\n            // checking that Field::from_le_bytes::<32> on the Field modulus produces 0\n            assert_eq(modulus_le_bytes().len(), 32);\n            let p = Field::from_le_bytes::<32>(modulus_le_bytes().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 32 LE bytes produces 32 zeroes\n            let p_bytes: [u8; 32] = 0.to_le_bytes();\n            assert_eq(p_bytes, [0; 32]);\n        }\n    }\n\n    /// Convert a little endian bit array to a field element.\n    /// If the provided bit array overflows the field modulus then the Field will silently wrap around.\n    fn from_le_bits<let N: u32>(bits: [u1; N]) -> Field {\n        static_assert(\n            N <= modulus_le_bits().len(),\n            \"N must be less than or equal to modulus_le_bits().len()\",\n        );\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bits[i] as Field) * v;\n            v = v * 2;\n        }\n        result\n    }\n\n    /// Convert a big endian bit array to a field element.\n    /// If the provided bit array overflows the field modulus then the Field will silently wrap around.\n    fn from_be_bits<let N: u32>(bits: [u1; N]) -> Field {\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bits[N - 1 - i] as Field) * v;\n            v = v * 2;\n        }\n        result\n    }\n\n    #[test]\n    fn test_to_from_be_bits_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this bit produces the expected 254 BE bits for (modulus - 1)\n            let mut p_minus_1_bits: [u1; 254] = modulus_be_bits().as_array();\n            assert(p_minus_1_bits[254 - 1] > 0);\n            p_minus_1_bits[254 - 1] -= 1;\n\n            let p_minus_1 = from_be_bits::<254>(p_minus_1_bits);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 254 BE bits produces the same bits\n            let p_minus_1_converted_bits: [u1; 254] = p_minus_1.to_be_bits();\n            assert_eq(p_minus_1_converted_bits, p_minus_1_bits);\n\n            // checking that incrementing this bit produces 254 BE bits for (modulus + 4)\n            let mut p_plus_4_bits: [u1; 254] = modulus_be_bits().as_array();\n            assert(p_plus_4_bits[254 - 3] < 1);\n            p_plus_4_bits[254 - 3] += 1;\n\n            let p_plus_4 = from_be_bits::<254>(p_plus_4_bits);\n            assert_eq(p_plus_4, 4);\n\n            // checking that converting p_plus_4 to 254 BE bits produces the same\n            // bit set to 1 as p_plus_4_bits and otherwise zeroes\n            let mut p_plus_4_converted_bits: [u1; 254] = p_plus_4.to_be_bits();\n            assert_eq(p_plus_4_converted_bits[254 - 3], 1);\n            p_plus_4_converted_bits[254 - 3] = 0;\n            assert_eq(p_plus_4_converted_bits, [0; 254]);\n\n            // checking that Field::from_be_bits::<254> on the Field modulus produces 0\n            assert_eq(modulus_be_bits().len(), 254);\n            let p = from_be_bits::<254>(modulus_be_bits().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 254 BE bytes produces 254 zeroes\n            let p_bits: [u1; 254] = 0.to_be_bits();\n            assert_eq(p_bits, [0; 254]);\n        }\n    }\n\n    #[test]\n    fn test_to_from_le_bits_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this bit produces the expected 254 LE bits for (modulus - 1)\n            let mut p_minus_1_bits: [u1; 254] = modulus_le_bits().as_array();\n            assert(p_minus_1_bits[0] > 0);\n            p_minus_1_bits[0] -= 1;\n\n            let p_minus_1 = from_le_bits::<254>(p_minus_1_bits);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 254 BE bits produces the same bits\n            let p_minus_1_converted_bits: [u1; 254] = p_minus_1.to_le_bits();\n            assert_eq(p_minus_1_converted_bits, p_minus_1_bits);\n\n            // checking that incrementing this bit produces 254 LE bits for (modulus + 4)\n            let mut p_plus_4_bits: [u1; 254] = modulus_le_bits().as_array();\n            assert(p_plus_4_bits[2] < 1);\n            p_plus_4_bits[2] += 1;\n\n            let p_plus_4 = from_le_bits::<254>(p_plus_4_bits);\n            assert_eq(p_plus_4, 4);\n\n            // checking that converting p_plus_4 to 254 LE bits produces the same\n            // bit set to 1 as p_plus_4_bits and otherwise zeroes\n            let mut p_plus_4_converted_bits: [u1; 254] = p_plus_4.to_le_bits();\n            assert_eq(p_plus_4_converted_bits[2], 1);\n            p_plus_4_converted_bits[2] = 0;\n            assert_eq(p_plus_4_converted_bits, [0; 254]);\n\n            // checking that Field::from_le_bits::<254> on the Field modulus produces 0\n            assert_eq(modulus_le_bits().len(), 254);\n            let p = from_le_bits::<254>(modulus_le_bits().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 254 LE bytes produces 254 zeroes\n            let p_bits: [u1; 254] = 0.to_le_bits();\n            assert_eq(p_bits, [0; 254]);\n        }\n    }\n}\n"
    },
    "19": {
      "path": "std/hash/mod.nr",
      "source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n    EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n    #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n    pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n        super::keccakf1600(input)\n    }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n    if crate::runtime::is_unconstrained() {\n        // Temporary measure while Barretenberg is main proving system.\n        // Please open an issue if you're working on another proving system and running into problems due to this.\n        crate::static_assert(\n            N <= 1024,\n            \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n        );\n    }\n    __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n    // docs:end:pedersen_commitment\n    pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n    input: [Field; N],\n    separator: u32,\n) -> EmbeddedCurvePoint {\n    let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n    for i in 0..N {\n        // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n        points[i] = from_field_unsafe(input[i]);\n    }\n    let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n    multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n    pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n    let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n    let mut generators: [EmbeddedCurvePoint; N + 1] =\n        [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n    crate::assert_constant(separator);\n    let domain_generators: [EmbeddedCurvePoint; N] =\n        derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n    for i in 0..N {\n        scalars[i] = from_field_unsafe(input[i]);\n        generators[i] = domain_generators[i];\n    }\n    scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n    let length_generator: [EmbeddedCurvePoint; 1] =\n        derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n    generators[N] = length_generator[0];\n    multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n    domain_separator_bytes: [u8; M],\n    starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n    crate::assert_constant(domain_separator_bytes);\n    crate::assert_constant(starting_index);\n    __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n    domain_separator_bytes: [u8; M],\n    starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n    // Safety: xlo and xhi decomposition is checked below\n    let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n    // Check that the decomposition is correct\n    assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n    // Check that the decomposition does not overflow the field size\n    let (a, b) = if xhi == crate::field::bn254::PHI {\n        (xlo, crate::field::bn254::PLO)\n    } else {\n        (xhi, crate::field::bn254::PHI)\n    };\n    crate::field::bn254::assert_lt(a, b);\n\n    EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n    assert_eq(input.len(), state_len);\n    poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n    let name = quote { $crate::hash::Hash };\n    let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n    let for_each_field = |name| quote { _self.$name.hash(_state); };\n    crate::meta::make_trait_impl(\n        s,\n        name,\n        signature,\n        for_each_field,\n        quote {},\n        |fields| fields,\n    )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n    fn finish(self) -> Field;\n\n    fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n    type H: Hasher;\n\n    fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n    H: Hasher + Default,\n{\n    type H = H;\n\n    fn build_hasher(_self: Self) -> H {\n        H::default()\n    }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n    H: Hasher + Default,\n{\n    fn default() -> Self {\n        BuildHasherDefault {}\n    }\n}\n\nimpl Hash for Field {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self);\n    }\n}\n\nimpl Hash for u1 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u8 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u16 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u32 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u64 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u128 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for i8 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u8 as Field);\n    }\n}\n\nimpl Hash for i16 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u16 as Field);\n    }\n}\n\nimpl Hash for i32 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u32 as Field);\n    }\n}\n\nimpl Hash for i64 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u64 as Field);\n    }\n}\n\nimpl Hash for bool {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for () {\n    fn hash<H>(_self: Self, _state: &mut H)\n    where\n        H: Hasher,\n    {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        for elem in self {\n            elem.hash(state);\n        }\n    }\n}\n\nimpl<T> Hash for [T]\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.len().hash(state);\n        for elem in self {\n            elem.hash(state);\n        }\n    }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n    A: Hash,\n    B: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n    }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n    }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n    D: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n        self.3.hash(state);\n    }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n    D: Hash,\n    E: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n        self.3.hash(state);\n        self.4.hash(state);\n    }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n    assert_eq(\n        pedersen_hash_with_separator([1], 1),\n        0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1], 1),\n        EmbeddedCurvePoint {\n            x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n            y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n            is_infinite: false,\n        },\n    );\n\n    assert_eq(\n        pedersen_hash_with_separator([1, 2], 2),\n        0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2], 2),\n        EmbeddedCurvePoint {\n            x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n            y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3], 3),\n        0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3], 3),\n        EmbeddedCurvePoint {\n            x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n            y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4], 4),\n        0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n        EmbeddedCurvePoint {\n            x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n            y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n        0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n        EmbeddedCurvePoint {\n            x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n            y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n        0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n        EmbeddedCurvePoint {\n            x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n            y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n        0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n        EmbeddedCurvePoint {\n            x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n            y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n        0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n        EmbeddedCurvePoint {\n            x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n            y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n        0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n        EmbeddedCurvePoint {\n            x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n            y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n        0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n        EmbeddedCurvePoint {\n            x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n            y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n            is_infinite: false,\n        },\n    );\n}\n"
    },
    "42": {
      "path": "std/option.nr",
      "source": "use crate::cmp::{Eq, Ord, Ordering};\nuse crate::default::Default;\nuse crate::hash::{Hash, Hasher};\n\npub struct Option<T> {\n    _is_some: bool,\n    _value: T,\n}\n\nimpl<T> Option<T> {\n    /// Constructs a None value\n    pub fn none() -> Self {\n        Self { _is_some: false, _value: crate::mem::zeroed() }\n    }\n\n    /// Constructs a Some wrapper around the given value\n    pub fn some(_value: T) -> Self {\n        Self { _is_some: true, _value }\n    }\n\n    /// True if this Option is None\n    pub fn is_none(self) -> bool {\n        !self._is_some\n    }\n\n    /// True if this Option is Some\n    pub fn is_some(self) -> bool {\n        self._is_some\n    }\n\n    /// Asserts `self.is_some()` and returns the wrapped value.\n    pub fn unwrap(self) -> T {\n        assert(self._is_some);\n        self._value\n    }\n\n    /// Returns the inner value without asserting `self.is_some()`\n    /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n    /// only that it will be of type `T`.\n    pub fn unwrap_unchecked(self) -> T {\n        self._value\n    }\n\n    /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n    pub fn unwrap_or(self, default: T) -> T {\n        if self._is_some {\n            self._value\n        } else {\n            default\n        }\n    }\n\n    /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n    /// a default value.\n    pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n        if self._is_some {\n            self._value\n        } else {\n            default()\n        }\n    }\n\n    /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n    pub fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n        assert(self.is_some(), message);\n        self._value\n    }\n\n    /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n        if self._is_some {\n            Option::some(f(self._value))\n        } else {\n            Option::none()\n        }\n    }\n\n    /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n    pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n        if self._is_some {\n            f(self._value)\n        } else {\n            default\n        }\n    }\n\n    /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n    pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n        if self._is_some {\n            f(self._value)\n        } else {\n            default()\n        }\n    }\n\n    /// Returns None if self is None. Otherwise, this returns `other`.\n    pub fn and(self, other: Self) -> Self {\n        if self.is_none() {\n            Option::none()\n        } else {\n            other\n        }\n    }\n\n    /// If self is None, this returns None. Otherwise, this calls the given function\n    /// with the Some value contained within self, and returns the result of that call.\n    ///\n    /// In some languages this function is called `flat_map` or `bind`.\n    pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n        if self._is_some {\n            f(self._value)\n        } else {\n            Option::none()\n        }\n    }\n\n    /// If self is Some, return self. Otherwise, return `other`.\n    pub fn or(self, other: Self) -> Self {\n        if self._is_some {\n            self\n        } else {\n            other\n        }\n    }\n\n    /// If self is Some, return self. Otherwise, return `default()`.\n    pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n        if self._is_some {\n            self\n        } else {\n            default()\n        }\n    }\n\n    // If only one of the two Options is Some, return that option.\n    // Otherwise, if both options are Some or both are None, None is returned.\n    pub fn xor(self, other: Self) -> Self {\n        if self._is_some {\n            if other._is_some {\n                Option::none()\n            } else {\n                self\n            }\n        } else if other._is_some {\n            other\n        } else {\n            Option::none()\n        }\n    }\n\n    /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n    /// Otherwise, this returns `None`\n    pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n        if self._is_some {\n            if predicate(self._value) {\n                self\n            } else {\n                Option::none()\n            }\n        } else {\n            Option::none()\n        }\n    }\n\n    /// Flattens an Option<Option<T>> into a Option<T>.\n    /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n    pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n        if option._is_some {\n            option._value\n        } else {\n            Option::none()\n        }\n    }\n}\n\nimpl<T> Default for Option<T> {\n    fn default() -> Self {\n        Option::none()\n    }\n}\n\nimpl<T> Eq for Option<T>\nwhere\n    T: Eq,\n{\n    fn eq(self, other: Self) -> bool {\n        if self._is_some == other._is_some {\n            if self._is_some {\n                self._value == other._value\n            } else {\n                true\n            }\n        } else {\n            false\n        }\n    }\n}\n\nimpl<T> Hash for Option<T>\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self._is_some.hash(state);\n        if self._is_some {\n            self._value.hash(state);\n        }\n    }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T>\nwhere\n    T: Ord,\n{\n    fn cmp(self, other: Self) -> Ordering {\n        if self._is_some {\n            if other._is_some {\n                self._value.cmp(other._value)\n            } else {\n                Ordering::greater()\n            }\n        } else if other._is_some {\n            Ordering::less()\n        } else {\n            Ordering::equal()\n        }\n    }\n}\n"
    },
    "43": {
      "path": "std/panic.nr",
      "source": "pub fn panic<T, U>(message: T) -> U\nwhere\n    T: StringLike,\n{\n    assert(false, message);\n    crate::mem::zeroed()\n}\n\ntrait StringLike {}\n\nimpl<let N: u32> StringLike for str<N> {}\nimpl<let N: u32, T> StringLike for fmtstr<N, T> {}\n"
    },
    "49": {
      "path": "std/vector.nr",
      "source": "use crate::append::Append;\n\nimpl<T> [T] {\n    /// Returns the length of the vector.\n    #[builtin(array_len)]\n    pub fn len(self) -> u32 {}\n\n    /// Push a new element to the end of the vector, returning a\n    /// new vector with a length one greater than the\n    /// original unmodified vector.\n    #[builtin(vector_push_back)]\n    pub fn push_back(self, elem: T) -> Self {}\n\n    /// Push a new element to the front of the vector, returning a\n    /// new vector with a length one greater than the\n    /// original unmodified vector.\n    #[builtin(vector_push_front)]\n    pub fn push_front(self, elem: T) -> Self {}\n\n    /// Remove the last element of the vector, returning the\n    /// popped vector and the element in a tuple\n    #[builtin(vector_pop_back)]\n    pub fn pop_back(self) -> (Self, T) {}\n\n    /// Remove the first element of the vector, returning the\n    /// element and the popped vector in a tuple\n    #[builtin(vector_pop_front)]\n    pub fn pop_front(self) -> (T, Self) {}\n\n    /// Insert an element at a specified index, shifting all elements\n    /// after it to the right\n    #[builtin(vector_insert)]\n    pub fn insert(self, index: u32, elem: T) -> Self {}\n\n    /// Remove an element at a specified index, shifting all elements\n    /// after it to the left, returning the altered vector and\n    /// the removed element\n    #[builtin(vector_remove)]\n    pub fn remove(self, index: u32) -> (Self, T) {}\n\n    /// Append each element of the `other` vector to the end of `self`.\n    /// This returns a new vector and leaves both input vectors unchanged.\n    pub fn append(mut self, other: Self) -> Self {\n        for elem in other {\n            self = self.push_back(elem);\n        }\n        self\n    }\n\n    pub fn as_array<let N: u32>(self) -> [T; N] {\n        assert(self.len() == N);\n\n        let mut array = [crate::mem::zeroed(); N];\n        for i in 0..N {\n            array[i] = self[i];\n        }\n        array\n    }\n\n    // Apply a function to each element of the vector, returning a new vector\n    // containing the mapped elements.\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U] {\n        let mut ret = [].as_vector();\n        for elem in self {\n            ret = ret.push_back(f(elem));\n        }\n        ret\n    }\n\n    // Apply a function to each element of the vector with its index, returning a\n    // new vector containing the mapped elements.\n    pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U] {\n        let mut ret = [].as_vector();\n        let mut index = 0;\n        for elem in self {\n            ret = ret.push_back(f(index, elem));\n            index += 1;\n        }\n        ret\n    }\n\n    // Apply a function to each element of the vector\n    pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n        for elem in self {\n            f(elem);\n        }\n    }\n\n    // Apply a function to each element of the vector with its index\n    pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n        let mut index = 0;\n        for elem in self {\n            f(index, elem);\n            index += 1;\n        }\n    }\n\n    // Apply a function to each element of the vector and an accumulator value,\n    // returning the final accumulated value. This function is also sometimes\n    // called `foldl`, `fold_left`, `reduce`, or `inject`.\n    pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n        for elem in self {\n            accumulator = f(accumulator, elem);\n        }\n        accumulator\n    }\n\n    // Apply a function to each element of the vector and an accumulator value,\n    // returning the final accumulated value. Unlike fold, reduce uses the first\n    // element of the given vector as its starting accumulator value.\n    pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n        let mut accumulator = self[0];\n        for i in 1..self.len() {\n            accumulator = f(accumulator, self[i]);\n        }\n        accumulator\n    }\n\n    // Returns a new vector containing only elements for which the given predicate\n    // returns true.\n    pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n        let mut ret = [].as_vector();\n        for elem in self {\n            if predicate(elem) {\n                ret = ret.push_back(elem);\n            }\n        }\n        ret\n    }\n\n    // Flatten each element in the vector into one value, separated by `separator`.\n    pub fn join(self, separator: T) -> T\n    where\n        T: Append,\n    {\n        let mut ret = T::empty();\n\n        if self.len() != 0 {\n            ret = self[0];\n\n            for i in 1..self.len() {\n                ret = ret.append(separator).append(self[i]);\n            }\n        }\n\n        ret\n    }\n\n    // Returns true if all elements in the vector satisfy the predicate\n    pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = true;\n        for elem in self {\n            ret &= predicate(elem);\n        }\n        ret\n    }\n\n    // Returns true if any element in the vector satisfies the predicate\n    pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = false;\n        for elem in self {\n            ret |= predicate(elem);\n        }\n        ret\n    }\n}\n\nmod test {\n    #[test]\n    fn map_empty() {\n        assert_eq([].as_vector().map(|x| x + 1), [].as_vector());\n    }\n\n    #[test]\n    fn mapi_empty() {\n        assert_eq([].as_vector().mapi(|i, x| i * x + 1), [].as_vector());\n    }\n\n    #[test]\n    fn for_each_empty() {\n        let empty_vector: [Field] = [].as_vector();\n        empty_vector.for_each(|_x| assert(false));\n        assert(empty_vector == [].as_vector());\n    }\n\n    #[test]\n    fn for_eachi_empty() {\n        let empty_vector: [Field] = [].as_vector();\n        empty_vector.for_eachi(|_i, _x| assert(false));\n        assert(empty_vector == [].as_vector());\n    }\n\n    #[test]\n    fn map_example() {\n        let a = [1, 2, 3].as_vector();\n        let b = a.map(|a| a * 2);\n        assert_eq(b, [2, 4, 6].as_vector());\n        assert_eq(a, [1, 2, 3].as_vector());\n    }\n\n    #[test]\n    fn mapi_example() {\n        let a = [1, 2, 3].as_vector();\n        let b = a.mapi(|i, a| i + a * 2);\n        assert_eq(b, [2, 5, 8].as_vector());\n        assert_eq(a, [1, 2, 3].as_vector());\n    }\n\n    #[test]\n    fn for_each_example() {\n        let a = [1, 2, 3].as_vector();\n        let mut b = [].as_vector();\n        let b_ref = &mut b;\n        a.for_each(|a| { *b_ref = b_ref.push_back(a * 2); });\n        assert_eq(b, [2, 4, 6].as_vector());\n    }\n\n    #[test]\n    fn for_eachi_example() {\n        let a = [1, 2, 3].as_vector();\n        let mut b = [].as_vector();\n        let b_ref = &mut b;\n        a.for_eachi(|i, a| { *b_ref = b_ref.push_back(i + a * 2); });\n        assert_eq(b, [2, 5, 8].as_vector());\n    }\n\n    #[test]\n    fn len_empty() {\n        let empty: [Field] = [].as_vector();\n        assert_eq(empty.len(), 0);\n    }\n\n    #[test]\n    fn len_single() {\n        assert_eq([42].as_vector().len(), 1);\n    }\n\n    #[test]\n    fn len_multiple() {\n        assert_eq([1, 2, 3, 4, 5].as_vector().len(), 5);\n    }\n\n    #[test]\n    fn push_back_empty() {\n        let empty: [Field] = [].as_vector();\n        let result = empty.push_back(42);\n        assert_eq(result.len(), 1);\n        assert_eq(result[0], 42);\n    }\n\n    #[test]\n    fn push_back_non_empty() {\n        let vector = [1, 2, 3].as_vector();\n        let result = vector.push_back(4);\n        assert_eq(result.len(), 4);\n        assert_eq(result, [1, 2, 3, 4].as_vector());\n    }\n\n    #[test]\n    fn push_front_empty() {\n        let empty = [].as_vector();\n        let result = empty.push_front(42);\n        assert_eq(result.len(), 1);\n        assert_eq(result[0], 42);\n    }\n\n    #[test]\n    fn push_front_non_empty() {\n        let vector = [1, 2, 3].as_vector();\n        let result = vector.push_front(0);\n        assert_eq(result.len(), 4);\n        assert_eq(result, [0, 1, 2, 3].as_vector());\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn pop_back_empty() {\n        let vector: [Field] = [].as_vector();\n        let (_, _) = vector.pop_back();\n    }\n\n    #[test]\n    fn pop_back_one() {\n        let vector = [42].as_vector();\n        let (result, elem) = vector.pop_back();\n        assert_eq(result.len(), 0);\n        assert_eq(elem, 42);\n    }\n\n    #[test]\n    fn pop_back_multiple() {\n        let vector = [1, 2, 3].as_vector();\n        let (result, elem) = vector.pop_back();\n        assert_eq(result.len(), 2);\n        assert_eq(result, [1, 2].as_vector());\n        assert_eq(elem, 3);\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn pop_front_empty() {\n        let vector: [Field] = [].as_vector();\n        let (_, _) = vector.pop_front();\n    }\n\n    #[test]\n    fn pop_front_one() {\n        let vector = [42].as_vector();\n        let (elem, result) = vector.pop_front();\n        assert_eq(result.len(), 0);\n        assert_eq(elem, 42);\n    }\n\n    #[test]\n    fn pop_front_multiple() {\n        let vector = [1, 2, 3].as_vector();\n        let (elem, result) = vector.pop_front();\n        assert_eq(result.len(), 2);\n        assert_eq(result, [2, 3].as_vector());\n        assert_eq(elem, 1);\n    }\n\n    #[test]\n    fn insert_beginning() {\n        let vector = [1, 2, 3].as_vector();\n        let result = vector.insert(0, 0);\n        assert_eq(result.len(), 4);\n        assert_eq(result, [0, 1, 2, 3].as_vector());\n    }\n\n    #[test]\n    fn insert_middle() {\n        let vector = [1, 2, 3].as_vector();\n        let result = vector.insert(1, 99);\n        assert_eq(result.len(), 4);\n        assert_eq(result, [1, 99, 2, 3].as_vector());\n    }\n\n    #[test]\n    fn insert_end() {\n        let vector = [1, 2, 3].as_vector();\n        let result = vector.insert(3, 4);\n        assert_eq(result.len(), 4);\n        assert_eq(result, [1, 2, 3, 4].as_vector());\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn insert_end_out_of_bounds() {\n        let vector = [1, 2].as_vector();\n        let _ = vector.insert(3, 4);\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn remove_empty() {\n        let vector: [Field] = [].as_vector();\n        let (_, _) = vector.remove(0);\n    }\n\n    #[test]\n    fn remove_beginning() {\n        let vector = [1, 2, 3].as_vector();\n        let (result, elem) = vector.remove(0);\n        assert_eq(result.len(), 2);\n        assert_eq(result, [2, 3].as_vector());\n        assert_eq(elem, 1);\n    }\n\n    #[test]\n    fn remove_middle() {\n        let vector = [1, 2, 3].as_vector();\n        let (result, elem) = vector.remove(1);\n        assert_eq(result.len(), 2);\n        assert_eq(result, [1, 3].as_vector());\n        assert_eq(elem, 2);\n    }\n\n    #[test]\n    fn remove_end() {\n        let vector = [1, 2, 3].as_vector();\n        let (result, elem) = vector.remove(2);\n        assert_eq(result.len(), 2);\n        assert_eq(result, [1, 2].as_vector());\n        assert_eq(elem, 3);\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn remove_end_out_of_bounds() {\n        let vector = [1, 2].as_vector();\n        let (_, _) = vector.remove(2);\n    }\n\n    #[test]\n    fn fold_empty() {\n        let empty = [].as_vector();\n        let result = empty.fold(10, |acc, x| acc + x);\n        assert_eq(result, 10);\n    }\n\n    #[test]\n    fn fold_single() {\n        let vector = [5].as_vector();\n        let result = vector.fold(10, |acc, x| acc + x);\n        assert_eq(result, 15);\n    }\n\n    #[test]\n    fn fold_multiple() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.fold(0, |acc, x| acc + x);\n        assert_eq(result, 10);\n    }\n\n    #[test(should_fail_with = \"Index out of bounds\")]\n    fn reduce_empty() {\n        let empty: [Field] = [].as_vector();\n        let _ = empty.reduce(|a, b| a + b);\n    }\n\n    #[test]\n    fn reduce_single() {\n        let vector = [42].as_vector();\n        let result = vector.reduce(|a, b| a + b);\n        assert_eq(result, 42);\n    }\n\n    #[test]\n    fn reduce_multiple() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.reduce(|a, b| a + b);\n        assert_eq(result, 10);\n    }\n\n    #[test]\n    fn filter_empty() {\n        let empty = [].as_vector();\n        let result = empty.filter(|x| x > 0);\n        assert_eq(result.len(), 0);\n    }\n\n    #[test]\n    fn filter_all_true() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.filter(|x| x > 0);\n        assert_eq(result, vector);\n    }\n\n    #[test]\n    fn filter_all_false() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.filter(|x| x > 10);\n        assert_eq(result.len(), 0);\n    }\n\n    #[test]\n    fn filter_some() {\n        let vector = [1, 2, 3, 4, 5].as_vector();\n        let result = vector.filter(|x| x % 2 == 0);\n        assert_eq(result, [2, 4].as_vector());\n    }\n\n    #[test]\n    fn all_empty() {\n        let empty = [].as_vector();\n        let result = empty.all(|x| x > 0);\n        assert_eq(result, true);\n    }\n\n    #[test]\n    fn all_true() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.all(|x| x > 0);\n        assert_eq(result, true);\n    }\n\n    #[test]\n    fn all_false() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.all(|x| x > 2);\n        assert_eq(result, false);\n    }\n\n    #[test]\n    fn any_empty() {\n        let empty = [].as_vector();\n        let result = empty.any(|x| x > 0);\n        assert_eq(result, false);\n    }\n\n    #[test]\n    fn any_true() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.any(|x| x > 3);\n        assert_eq(result, true);\n    }\n\n    #[test]\n    fn any_false() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let result = vector.any(|x| x > 10);\n        assert_eq(result, false);\n    }\n\n    // utility method tests\n    #[test]\n    fn append_empty_to_empty() {\n        let empty1: [Field] = [].as_vector();\n        let empty2: [Field] = [].as_vector();\n        let result = empty1.append(empty2);\n        assert_eq(result.len(), 0);\n    }\n\n    #[test]\n    fn append_empty_to_non_empty() {\n        let vector = [1, 2, 3].as_vector();\n        let empty = [].as_vector();\n        let result = vector.append(empty);\n        assert_eq(result, vector);\n    }\n\n    #[test]\n    fn append_non_empty_to_empty() {\n        let empty = [].as_vector();\n        let vector = [1, 2, 3].as_vector();\n        let result = empty.append(vector);\n        assert_eq(result, vector);\n    }\n\n    #[test]\n    fn append_two_non_empty() {\n        let vector1 = [1, 2].as_vector();\n        let vector2 = [3, 4, 5].as_vector();\n        let result = vector1.append(vector2);\n        assert_eq(result, [1, 2, 3, 4, 5].as_vector());\n    }\n\n    #[test]\n    fn as_array_single() {\n        let vector = [42].as_vector();\n        let array: [Field; 1] = vector.as_array();\n        assert_eq(array[0], 42);\n    }\n\n    #[test]\n    fn as_array_multiple() {\n        let vector = [1, 2, 3].as_vector();\n        let array: [Field; 3] = vector.as_array();\n        assert_eq(array[0], 1);\n        assert_eq(array[1], 2);\n        assert_eq(array[2], 3);\n    }\n\n    // complex scenarios\n    #[test]\n    fn chain_operations() {\n        let vector = [1, 2, 3, 4, 5].as_vector();\n        let result = vector.filter(|x| x % 2 == 0).map(|x| x * 2).fold(0, |acc, x| acc + x);\n        assert_eq(result, 12); // (2*2) + (4*2) = 4 + 8 = 12\n    }\n\n    #[test]\n    fn nested_operations() {\n        let vector = [1, 2, 3, 4].as_vector();\n        let filtered = vector.filter(|x| x > 1);\n        let mapped = filtered.map(|x| x * x);\n        let sum = mapped.fold(0, |acc, x| acc + x);\n        assert_eq(sum, 29); // 2^2 + 3^2 + 4^2 = 4 + 9 + 16 = 29\n    }\n\n    #[test]\n    fn single_element_operations() {\n        let single = [42].as_vector();\n\n        // Test all operations on single element\n        assert_eq(single.len(), 1);\n\n        let pushed_back = single.push_back(99);\n        assert_eq(pushed_back, [42, 99].as_vector());\n\n        let pushed_front = single.push_front(0);\n        assert_eq(pushed_front, [0, 42].as_vector());\n\n        let (popped_back_vector, popped_back_elem) = single.pop_back();\n        assert_eq(popped_back_vector.len(), 0);\n        assert_eq(popped_back_elem, 42);\n\n        let (popped_front_elem, popped_front_vector) = single.pop_front();\n        assert_eq(popped_front_vector.len(), 0);\n        assert_eq(popped_front_elem, 42);\n\n        let inserted = single.insert(0, 0);\n        assert_eq(inserted, [0, 42].as_vector());\n\n        let (removed_vector, removed_elem) = single.remove(0);\n        assert_eq(removed_vector.len(), 0);\n        assert_eq(removed_elem, 42);\n    }\n\n    #[test]\n    fn boundary_conditions() {\n        let vector = [1, 2, 3].as_vector();\n\n        // insert at boundaries\n        let at_start = vector.insert(0, 0);\n        assert_eq(at_start, [0, 1, 2, 3].as_vector());\n\n        let at_end = vector.insert(3, 4);\n        assert_eq(at_end, [1, 2, 3, 4].as_vector());\n\n        // remove at boundaries\n        let (removed_start, elem_start) = vector.remove(0);\n        assert_eq(removed_start, [2, 3].as_vector());\n        assert_eq(elem_start, 1);\n\n        let (removed_end, elem_end) = vector.remove(2);\n        assert_eq(removed_end, [1, 2].as_vector());\n        assert_eq(elem_end, 3);\n    }\n\n    #[test]\n    fn complex_predicates() {\n        let vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].as_vector();\n\n        let even_greater_than_5 = vector.filter(|x| (x % 2 == 0) & (x > 5));\n        assert_eq(even_greater_than_5, [6, 8, 10].as_vector());\n\n        let all_positive_and_less_than_20 = vector.all(|x| (x > 0) & (x < 20));\n        assert_eq(all_positive_and_less_than_20, true);\n\n        let any_divisible_by_7 = vector.any(|x| x % 7 == 0);\n        assert_eq(any_divisible_by_7, true);\n    }\n\n    #[test]\n    fn identity_operations() {\n        let vector = [1, 2, 3, 4, 5].as_vector();\n\n        let mapped_identity = vector.map(|x| x);\n        assert_eq(mapped_identity, vector);\n\n        let filtered_all = vector.filter(|_| true);\n        assert_eq(filtered_all, vector);\n\n        let filtered_none = vector.filter(|_| false);\n        assert_eq(filtered_none.len(), 0);\n    }\n\n    #[test(should_fail)]\n    fn as_array_size_mismatch() {\n        let vector = [1, 2, 3].as_vector();\n        let _: [Field; 5] = vector.as_array(); // size doesn't match\n    }\n}\n"
    },
    "68": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/authwit/auth.nr",
      "source": "use crate::{\n    authwit::{authorization_interface::AuthorizationInterface, AuthorizationSelector},\n    context::{gas::GasOpts, PrivateContext, PublicContext},\n    hash::hash_args,\n    macros::authorization::authorization,\n    oracle::{execution_cache::load, offchain_effect::emit_offchain_effect},\n};\nuse crate::protocol::{\n    abis::function_selector::FunctionSelector,\n    address::AztecAddress,\n    constants::{\n        CANONICAL_AUTH_REGISTRY_ADDRESS, DOM_SEP__AUTHWIT_INNER, DOM_SEP__AUTHWIT_NULLIFIER, DOM_SEP__AUTHWIT_OUTER,\n    },\n    hash::poseidon2_hash_with_separator,\n    traits::{Serialize, ToField},\n};\n\n/// Authentication witness helper library\n///\n/// Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties (e.g.\n/// protocols or other users) to execute an action on their behalf.\n///\n/// This library provides helper functions to manage such witnesses. The authentication witness, is some \"witness\"\n/// (data) that authenticates a `message_hash`. The simplest example of an authentication witness, is a signature. The\n/// signature is the \"evidence\", that the signer has seen the message, agrees with it, and has allowed it. It does not\n/// need to be a signature. It could be any kind of \"proof\" that the message is allowed. Another proof could be knowing\n/// some kind of secret, or having some kind of \"token\" that allows the message.\n///\n/// The `message_hash` is a hash of the following structure: hash(consumer, chain_id, version, inner_hash)\n/// - consumer: the address of the contract that is \"consuming\" the message,\n/// - chain_id: the chain id of the chain that the message is being consumed on,\n/// - version: the version of the chain that the message is being consumed on,\n/// - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n///\n/// While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be a hash of\n/// the \"action\" to approve, along with who made the call. As part of this library, we provide a few helper functions\n/// to deal with such messages.\n///\n/// For example, we provide helper function that is used for checking that the message is an encoding of the current\n/// call. This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can show\n/// that it is acting on behalf of the contract.\n///\n/// If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n/// derived as: inner_hash = hash(caller, \"transfer\", hash(to, amount))\n///\n/// Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and\n/// `amount` the arguments for the transfer.\n///\n/// Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the\n/// message, in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor\n/// that is allowed to transfer the tokens.\n///\n///\n/// The authentication mechanism works differently in public and private contexts. In private, we recall that\n/// everything is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for\n/// information. In public we cannot do this, since it is executed by the sequencer (someone else). Therefore we can\n/// instead use a \"registry\" to store the messages that we have approved.\n///\n/// A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline how\n/// this would look in private, and then in public later.\n///\n/// Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX). `Alice` would make a\n/// `deposit` transaction, that she is executing using her account contract. The account would call the `DeFi` contract\n/// to execute `deposit`, which would try to pull funds from the `Token` contract. Since the `DeFi` contract is trying\n/// to pull funds from an account that is not its own, it needs to convince the `Token` contract that it is allowed to\n/// do so.\n///\n/// This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n/// `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to execute\n/// that call.\n///\n/// `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n/// account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which will\n/// validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull funds from\n/// `Alice`.\n///\n/// To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n/// authentication witness, and emit it from the `Token` contract (consumer).\n///\n/// Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n///\n///\n///  Person          Contract              Contract               Contract\n///  Alice          Alice Account          Token                   DeFi\n///   |                  |                  |                      |\n///   | Defi.deposit(Token, 1000)           |                      |\n///   |----------------->|                  |                      |\n///   |                  | deposit(Token, 1000)                    |\n///   |                  |---------------------------------------->|\n///   |                  |                  |                      |\n///   |                  |                  | transfer(Alice, Defi, 1000)\n///   |                  |                  |<---------------------|\n///   |                  |                  |                      |\n///   |                  | Check if Defi may call transfer(Alice, Defi, 1000)\n///   |                  |<-----------------|                      |\n///   |                  |                  |                      |\n///   | Please give me AuthWit for DeFi     |                      |\n///   | calling transfer(Alice, Defi, 1000) |                      |\n///   |<-----------------|                  |                      |\n///   |                  |                  |                      |\n///   |                  |                  |                      |\n///   | AuthWit for transfer(Alice, Defi, 1000)                    |\n///   |----------------->|                  |                      |\n///   |                  | AuthWit validity |                      |\n///   |                  |----------------->|                      |\n///   |                  |                  |                      |\n///   |                  |       throw if invalid AuthWit          |\n///   |                  |                  |                      |\n///   |                  |       emit AuthWit nullifier            |\n///   |                  |                  |                      |\n///   |                  |       transfer(Alice, Defi, 1000)       |\n///   |                  |                  |                      |\n///   |                  |                  |                      |\n///   |                  |                  | success              |\n///   |                  |                  |--------------------->|\n///   |                  |                  |                      |\n///   |                  |                  |                      |\n///   |                  |                  |           deposit(Token, 1000)\n///   |                  |                  |                      |\n///   |                  |                  |                      |\n///\n///\n/// If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n/// the messages that we have approved.\n///\n/// To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash` as\n/// authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account has its\n/// own map in the registry, so `Alice` cannot approve a message for `Bob`.\n///\n/// The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message was\n/// approved, the value is updated to `false`, and we return the success flag. For more information on the registry,\n/// see `main.nr` in `auth_registry_contract`.\n///\n/// Person          Contract              Contract            Contract               Contract\n/// Alice          Alice Account          Registry             Token                   DeFi\n///   |                  |                    |                   |                      |\n///   | Registry.set_authorized(..., true)    |                   |                      |\n///   |----------------->|                    |                   |                      |\n///   |                  | set_authorized(..., true)              |                      |\n///   |                  |------------------->|                   |                      |\n///   |                  |                    |                   |                      |\n///   |                  |         set authorized to true         |                      |\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   |                      |\n///   | Defi.deposit(Token, 1000)             |                   |                      |\n///   |----------------->|                    |                   |                      |\n///   |                  | deposit(Token, 1000)                   |                      |\n///   |                  |-------------------------------------------------------------->|\n///   |                  |                    |                   |                      |\n///   |                  |                    |              transfer(Alice, Defi, 1000) |\n///   |                  |                    |                   |<---------------------|\n///   |                  |                    |                   |                      |\n///   |                  |                    | Check if Defi may call transfer(Alice, Defi, 1000)\n///   |                  |                    |<------------------|                      |\n///   |                  |                    |                   |                      |\n///   |                  |          throw if invalid AuthWit      |                      |\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   |                      |\n///   |                  |           set authorized to false      |                      |\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   |                      |\n///   |                  |                    | AuthWit validity  |                      |\n///   |                  |                    |------------------>|                      |\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   | transfer(Alice, Defi, 1000)\n///   |                  |                    |                   |<-------------------->|\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   | success              |\n///   |                  |                    |                   |--------------------->|\n///   |                  |                    |                   |                      |\n///   |                  |                    |                   |     deposit(Token, 1000)\n///   |                  |                    |                   |                      |\n///\n///\n/// --- FAQ ---\n/// Q:   Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n/// A:   We want to make sure that we don't accidentally return `true` if there is a collision in the function\n/// selector. By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we\n/// return a success flag.\n///\n/// Q:   Why are we using static calls?\n/// A:   We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n/// could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n///\n/// Q:   Would it not be cheaper to use a nullifier instead of updating state in public?\n/// A:   At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would\n/// be cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n/// consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff\n/// is posted to DA), and now it is cheaper.\n///\n/// Q:   Why is the chain id and the version part of the message hash?\n/// A:   The chain id and the version is part of the message hash to ensure that the message is only valid on a\n/// specific chain to avoid a case where the same message could be used across multiple chains.\n\npub global IS_VALID_SELECTOR: Field = 0x47dacd73; // 4 last bytes of\n// poseidon2_hash_bytes(\"IS_VALID()\")\n\n/// A struct that represents a contract call the user can authorize. It's associated identifier is generated by\n/// serializing and hashing it. The user is expected to sign this hash to signal the contract call can be performed on\n/// their behalf\n#[authorization]\nstruct CallAuthorization {\n    msg_sender: AztecAddress,\n    selector: FunctionSelector,\n    args_hash: Field,\n}\n\n/// A struct that represents a request to authorize a call, which is used to emit an offchain effect so the user/wallet\n/// can understand what they are being asked to sign. It is generated from a CallAuthorization by adding metadata to\n/// it, such as the selector for the authorization, the inner hash, and the actual arguments that are being passed to\n/// the function call.\n#[derive(Serialize)]\nstruct CallAuthorizationRequest {\n    selector: AuthorizationSelector,\n    inner_hash: Field,\n    on_behalf_of: AztecAddress,\n    msg_sender: AztecAddress,\n    fn_selector: FunctionSelector,\n    args_hash: Field,\n}\n\nunconstrained fn emit_authorization_as_offchain_effect<let N: u32>(\n    authorization: CallAuthorization,\n    inner_hash: Field,\n    on_behalf_of: AztecAddress,\n) {\n    let args: [Field; N] = load(authorization.args_hash);\n    let authorization_request = CallAuthorizationRequest {\n        selector: authorization.get_authorization_selector(),\n        inner_hash: inner_hash,\n        on_behalf_of: on_behalf_of,\n        msg_sender: authorization.msg_sender,\n        fn_selector: authorization.selector,\n        args_hash: authorization.args_hash,\n    };\n    emit_offchain_effect(authorization_request.serialize().concat(args))\n}\n\n/// Assert that `on_behalf_of` has authorized the current call with a valid authentication witness\n///\n/// Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n/// `on_behalf_of` contract to verify that the `inner_hash` is valid.\n///\n/// Additionally, this function emits the identifying information of the call as an offchain effect so PXE can rely the\n/// information to the user/wallet in a readable way. To that effect, it is generic over N, where N is the number of\n/// arguments the authorized functions takes. This is used to load the arguments from the execution cache. This\n/// function is intended to be called via a macro, which will use the turbofish operator to specify the number of\n/// arguments.\n///\n/// @param on_behalf_of The address that has allegedly authorized the current call\npub fn assert_current_call_valid_authwit<let N: u32>(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n    let args_hash: Field = context.get_args_hash();\n\n    let authorization =\n        CallAuthorization { msg_sender: context.maybe_msg_sender().unwrap(), selector: context.selector(), args_hash };\n    let inner_hash = compute_inner_authwit_hash(authorization.serialize());\n    // Safety: Offchain effects are by definition unconstrained. They are emitted via an oracle which we don't use for\n    // anything besides its side effects, therefore this is safe to call.\n    unsafe { emit_authorization_as_offchain_effect::<N>(authorization, inner_hash, on_behalf_of) };\n\n    assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n\n/// Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n///\n/// Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n/// the `inner_hash` is from a different source, e.g., say a block of text etc.\n///\n/// @param on_behalf_of The address that has allegedly authorized the current call @param inner_hash The hash of the\n/// message to authorize\npub fn assert_inner_hash_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress, inner_hash: Field) {\n    // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n    let result: Field = context\n        .static_call_private_function(\n            on_behalf_of,\n            comptime { FunctionSelector::from_signature(\"verify_private_authwit(Field)\") },\n            [inner_hash],\n        )\n        .get_preimage();\n    assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n    // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version. Those should\n    // already be handled in the verification, so we just need something to nullify, that allows the same inner_hash\n    // for multiple actors.\n    let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n    context.push_nullifier(nullifier);\n}\n\n/// Assert that `on_behalf_of` has authorized the current call in the authentication registry\n///\n/// Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n/// `on_behalf_of` contract to verify that the `inner_hash` is valid.\n///\n/// Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n/// work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n///\n/// @param on_behalf_of The address that has allegedly authorized the current call\npub unconstrained fn assert_current_call_valid_authwit_public(context: PublicContext, on_behalf_of: AztecAddress) {\n    let inner_hash = compute_inner_authwit_hash([\n        context.maybe_msg_sender().unwrap().to_field(),\n        context.selector().to_field(),\n        context.get_args_hash(),\n    ]);\n    assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n\n/// Assert that `on_behalf_of` has authorized a specific `inner_hash` in the authentication registry\n///\n/// Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n/// `on_behalf_of` contract to verify that the `inner_hash` is valid.\n///\n/// Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n/// work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n///\n/// @param on_behalf_of The address that has allegedly authorized the `inner_hash`\npub unconstrained fn assert_inner_hash_valid_authwit_public(\n    context: PublicContext,\n    on_behalf_of: AztecAddress,\n    inner_hash: Field,\n) {\n    let results: [Field] = context.call_public_function(\n        CANONICAL_AUTH_REGISTRY_ADDRESS,\n        comptime { FunctionSelector::from_signature(\"consume((Field),Field)\") },\n        [on_behalf_of.to_field(), inner_hash],\n        GasOpts::default(),\n    );\n    assert(results.len() == 1, \"Invalid response from registry\");\n    assert(results[0] == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/// Compute the `message_hash` from a function call to be used by an authentication witness\n///\n/// Useful for when you need a non-account contract to approve during execution. For example if you need a contract to\n/// make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow B\n/// to transfer T on its behalf.\n///\n/// @param caller The address of the contract that is calling the function, in the example above, this would be B\n/// @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n/// @param chain_id The chain id of the chain that the message is being consumed on @param version The version of the\n/// chain that the message is being consumed on @param selector The function selector of the function that is being\n/// called @param args The arguments of the function that is being called\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n    caller: AztecAddress,\n    consumer: AztecAddress,\n    chain_id: Field,\n    version: Field,\n    selector: FunctionSelector,\n    args: [Field; N],\n) -> Field {\n    let args_hash = hash_args(args);\n    let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n    compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n\n/// Computes the `inner_hash` of the authentication witness\n///\n/// This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n/// that is not necessarily a call, but just some \"bytes\" or text.\n///\n/// @param args The arguments to hash\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n    poseidon2_hash_with_separator(args, DOM_SEP__AUTHWIT_INNER)\n}\n\n/// Computes the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n///\n/// Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n///\n/// @param on_behalf_of The address that has authorized the `inner_hash` @param inner_hash The hash of the message to\n/// authorize\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [on_behalf_of.to_field(), inner_hash],\n        DOM_SEP__AUTHWIT_NULLIFIER,\n    )\n}\n\n/// Computes the `message_hash` for the authentication witness\n///\n/// @param consumer The address of the contract that is consuming the message @param chain_id The chain id of the chain\n/// that the message is being consumed on @param version The version of the chain that the message is being consumed on\n/// @param inner_hash The hash of the \"inner\" message that is being consumed\npub fn compute_authwit_message_hash(\n    consumer: AztecAddress,\n    chain_id: Field,\n    version: Field,\n    inner_hash: Field,\n) -> Field {\n    poseidon2_hash_with_separator(\n        [consumer.to_field(), chain_id, version, inner_hash],\n        DOM_SEP__AUTHWIT_OUTER,\n    )\n}\n\n/// Helper function to set the authorization status of a message hash\n///\n/// Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n///\n/// @param message_hash The hash of the message to authorize @param authorize True if the message should be authorized,\n/// false if it should be revoked\npub unconstrained fn set_authorized(context: PublicContext, message_hash: Field, authorize: bool) {\n    let res = context.call_public_function(\n        CANONICAL_AUTH_REGISTRY_ADDRESS,\n        comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\") },\n        [message_hash, authorize as Field],\n        GasOpts::default(),\n    );\n    assert(res.len() == 0);\n}\n\n/// Helper function to reject all authwits\n///\n/// Wraps a public call to the authentication registry to set the `reject_all` flag\n///\n/// @param reject True if all authwits should be rejected, false otherwise\npub unconstrained fn set_reject_all(context: PublicContext, reject: bool) {\n    let res = context.call_public_function(\n        CANONICAL_AUTH_REGISTRY_ADDRESS,\n        comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\") },\n        [reject as Field],\n        GasOpts::default(),\n    );\n    assert(res.len() == 0);\n}\n"
    },
    "75": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/capsules/mod.nr",
      "source": "use crate::oracle::capsules;\nuse crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// A dynamically sized array backed by PXE's non-volatile database (called capsules). Values are persisted until\n/// deleted, so they can be e.g. stored during simulation of a transaction and later retrieved during witness\n/// generation. All values are scoped per contract address, so external contracts cannot access them.\npub struct CapsuleArray<T> {\n    contract_address: AztecAddress,\n    /// The base slot is where the array length is stored in capsules. Array elements are stored in consecutive slots\n    /// after the base slot. For example, with base slot 5: the length is at slot 5, the first element (index 0) is at\n    /// slot 6, the second element (index 1) is at slot 7, and so on.\n    base_slot: Field,\n    /// Scope for capsule isolation. Capsule operations are scoped to the given address, allowing multiple independent\n    /// namespaces within the same contract.\n    scope: AztecAddress,\n}\n\nimpl<T> CapsuleArray<T> {\n    /// Returns a CapsuleArray scoped to a specific address.\n    ///\n    /// Array elements are stored in contiguous slots\n    /// following the base slot, so there should be sufficient space between array base slots to accommodate elements.\n    /// A reasonable strategy is to make the base slot a hash of a unique value.\n    pub unconstrained fn at(contract_address: AztecAddress, base_slot: Field, scope: AztecAddress) -> Self {\n        Self { contract_address, base_slot, scope }\n    }\n\n    /// Returns the number of elements stored in the array.\n    pub unconstrained fn len(self) -> u32 {\n        // An uninitialized array defaults to a length of 0.\n        capsules::load(self.contract_address, self.base_slot, self.scope).unwrap_or(0) as u32\n    }\n\n    /// Stores a value at the end of the array.\n    pub unconstrained fn push(self, value: T)\n    where\n        T: Serialize,\n    {\n        let current_length = self.len();\n\n        // The slot corresponding to the index `current_length` is the first slot immediately after the end of the\n        // array, which is where we want to place the new value.\n        capsules::store(\n            self.contract_address,\n            self.slot_at(current_length),\n            value,\n            self.scope,\n        );\n\n        // Then we simply update the length.\n        let new_length = current_length + 1;\n        capsules::store(\n            self.contract_address,\n            self.base_slot,\n            new_length,\n            self.scope,\n        );\n    }\n\n    /// Retrieves the value stored in the array at `index`. Throws if the index is out of bounds.\n    pub unconstrained fn get(self, index: u32) -> T\n    where\n        T: Deserialize,\n    {\n        assert(index < self.len(), \"Attempted to read past the length of a CapsuleArray\");\n\n        capsules::load(self.contract_address, self.slot_at(index), self.scope).unwrap()\n    }\n\n    /// Deletes the value stored in the array at `index`. Throws if the index is out of bounds.\n    pub unconstrained fn remove(self, index: u32) {\n        let current_length = self.len();\n        assert(index < current_length, \"Attempted to delete past the length of a CapsuleArray\");\n\n        // In order to be able to remove elements at arbitrary indices, we need to shift the entire contents of the\n        // array past the removed element one slot backward so that we don't end up with a gap and preserve the\n        // contiguous slots. We can skip this when deleting the last element however.\n        if index != current_length - 1 {\n            // The source and destination regions overlap, but `copy` supports this.\n            capsules::copy(\n                self.contract_address,\n                self.slot_at(index + 1),\n                self.slot_at(index),\n                current_length - index - 1,\n                self.scope,\n            );\n        }\n\n        // We can now delete the last element (which has either been copied to the slot immediately before it, or was\n        // the element we meant to delete in the first place) and update the length.\n        capsules::delete(\n            self.contract_address,\n            self.slot_at(current_length - 1),\n            self.scope,\n        );\n        capsules::store(\n            self.contract_address,\n            self.base_slot,\n            current_length - 1,\n            self.scope,\n        );\n    }\n\n    /// Calls a function on each element of the array.\n    ///\n    /// The function `f` is called once with each array value and its corresponding index. The order in which values\n    /// are processed is arbitrary.\n    ///\n    /// ## Array Mutation\n    ///\n    /// It is safe to delete the current element (and only the current element) from inside the callback via `remove`:\n    /// ```noir\n    /// array.for_each(|index, value| {\n    ///   if some_condition(value) {\n    ///     array.remove(index); // safe only for this index\n    ///   }\n    /// }\n    /// ```\n    ///\n    /// If all elements in the array need to iterated over and then removed, then using `for_each` results in optimal\n    /// efficiency.\n    ///\n    /// It is **not** safe to push new elements into the array from inside the callback.\n    pub unconstrained fn for_each<Env>(self, f: unconstrained fn[Env](u32, T) -> ())\n    where\n        T: Deserialize,\n    {\n        // Iterating over all elements is simple, but we want to do it in such a way that a) deleting the current\n        // element is safe to do, and b) deleting *all* elements is optimally efficient. This is because CapsuleArrays\n        // are typically used to hold pending tasks, so iterating them while clearing completed tasks (sometimes\n        // unconditionally, resulting in a full clear) is a very common access pattern.\n        //\n        // The way we achieve this is by iterating backwards: each element can always be deleted since it won't change\n        // any preceding (lower) indices, and if every element is deleted then every element will (in turn) be the last\n        // element. This results in an optimal full clear since `remove` will be able to skip the `capsules::copy` call\n        // to shift any elements past the deleted one (because there will be none).\n        let mut i = self.len();\n        while i > 0 {\n            i -= 1;\n            f(i, self.get(i));\n        }\n    }\n\n    unconstrained fn slot_at(self, index: u32) -> Field {\n        // Elements are stored immediately after the base slot, so we add 1 to it to compute the slot for the first\n        // element.\n        self.base_slot + 1 + index as Field\n    }\n}\n\nmod test {\n    use crate::protocol::address::AztecAddress;\n    use crate::test::helpers::test_environment::TestEnvironment;\n    use super::CapsuleArray;\n\n    global SLOT: Field = 1230;\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xface };\n\n    #[test]\n    unconstrained fn empty_array() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array: CapsuleArray<Field> = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test(should_fail_with = \"Attempted to read past the length of a CapsuleArray\")]\n    unconstrained fn empty_array_read() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            let _: Field = array.get(0);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_push() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            array.push(5);\n\n            assert_eq(array.len(), 1);\n            assert_eq(array.get(0), 5);\n        });\n    }\n\n    #[test(should_fail_with = \"Attempted to read past the length of a CapsuleArray\")]\n    unconstrained fn read_past_len() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            array.push(5);\n\n            let _ = array.get(1);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_last() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(5);\n            array.remove(0);\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_some() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(7);\n            array.push(8);\n            array.push(9);\n\n            assert_eq(array.len(), 3);\n            assert_eq(array.get(0), 7);\n            assert_eq(array.get(1), 8);\n            assert_eq(array.get(2), 9);\n\n            array.remove(1);\n\n            assert_eq(array.len(), 2);\n            assert_eq(array.get(0), 7);\n            assert_eq(array.get(1), 9);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_all() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(7);\n            array.push(8);\n            array.push(9);\n\n            array.remove(1);\n            array.remove(1);\n            array.remove(0);\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_called_with_all_elements() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            // We store all values that we were called with and check that all (value, index) tuples are present. Note\n            // that we do not care about the order in which each tuple was passed to the closure.\n            let called_with = &mut BoundedVec::<(u32, Field), 3>::new();\n            array.for_each(|index, value| { called_with.push((index, value)); });\n\n            assert_eq(called_with.len(), 3);\n            assert(called_with.any(|(index, value)| (index == 0) & (value == 4)));\n            assert(called_with.any(|(index, value)| (index == 1) & (value == 5)));\n            assert(called_with.any(|(index, value)| (index == 2) & (value == 6)));\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_some() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            array.for_each(|index, _| {\n                if index == 1 {\n                    array.remove(index);\n                }\n            });\n\n            assert_eq(array.len(), 2);\n            assert_eq(array.get(0), 4);\n            assert_eq(array.get(1), 6);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_all() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            array.for_each(|index, _| { array.remove(index); });\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_all_no_copy() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            // We test that the aztec_utl_copyCapsule was never called, which is the expensive operation we want to\n            // avoid.\n            let mock = std::test::OracleMock::mock(\"aztec_utl_copyCapsule\");\n\n            array.for_each(|index, _| { array.remove(index); });\n\n            assert_eq(mock.times_called(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn different_scopes_are_isolated() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let scope_a = AztecAddress { inner: 0xaaa };\n            let scope_b = AztecAddress { inner: 0xbbb };\n\n            let array_a = CapsuleArray::at(contract_address, SLOT, scope_a);\n            let array_b = CapsuleArray::at(contract_address, SLOT, scope_b);\n\n            array_a.push(10);\n            array_a.push(20);\n            array_b.push(99);\n\n            assert_eq(array_a.len(), 2);\n            assert_eq(array_a.get(0), 10);\n            assert_eq(array_a.get(1), 20);\n\n            assert_eq(array_b.len(), 1);\n            assert_eq(array_b.get(0), 99);\n        });\n    }\n}\n"
    },
    "76": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/calls.nr",
      "source": "use crate::protocol::{abis::function_selector::FunctionSelector, address::AztecAddress, traits::{Deserialize, ToField}};\n\nuse crate::context::{gas::GasOpts, PrivateContext, PublicContext};\nuse crate::hash::{hash_args, hash_calldata_array};\nuse crate::oracle::execution_cache;\n\n// Having T associated on the structs and then instantiating it with `std::mem::zeroed()` is ugly but we need to do it\n// like this to avoid forcing users to specify the return type when calling functions on the structs (that's the only\n// way how we can specify the type when we generate the call stubs. The return types are specified in the\n// `external_functions_stubs.nr` file.)\n\n// PrivateCall\n\n#[must_use = \"Your private call needs to be passed into the `self.call(...)` method to be executed (e.g. `self.call(MyContract::at(address).my_private_function(...args))`\"]\npub struct PrivateCall<let M: u32, let N: u32, T> {\n    pub target_contract: AztecAddress,\n    pub selector: FunctionSelector,\n    pub name: str<M>,\n    args_hash: Field,\n    pub args: [Field; N],\n    return_type: T,\n}\n\nimpl<let M: u32, let N: u32, T> PrivateCall<M, N, T> {\n    pub fn new(target_contract: AztecAddress, selector: FunctionSelector, name: str<M>, args: [Field; N]) -> Self {\n        let args_hash = hash_args(args);\n        Self { target_contract, selector, name, args_hash, args, return_type: std::mem::zeroed() }\n    }\n}\n\nimpl<let M: u32, let N: u32, T> PrivateCall<M, N, T>\nwhere\n    T: Deserialize,\n{\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.call(MyContract::at(address).my_private_function(...args))` instead of\n    /// manually constructing and calling `PrivateCall`.\n    pub fn call(self, context: &mut PrivateContext) -> T {\n        execution_cache::store(self.args, self.args_hash);\n        let returns_hash =\n            context.call_private_function_with_args_hash(self.target_contract, self.selector, self.args_hash, false);\n\n        // If T is () (i.e. if the function does not return anything) then `get_preimage` will constrain that the\n        // returns hash is empty as per the protocol rules.\n        returns_hash.get_preimage()\n    }\n}\n\n// PrivateStaticCall\n\n#[must_use = \"Your private static call needs to be passed into the `self.view(...)` method to be executed (e.g. `self.view(MyContract::at(address).my_private_static_function(...args))`\"]\npub struct PrivateStaticCall<let M: u32, let N: u32, T> {\n    pub target_contract: AztecAddress,\n    pub selector: FunctionSelector,\n    pub name: str<M>,\n    args_hash: Field,\n    pub args: [Field; N],\n    return_type: T,\n}\n\nimpl<let M: u32, let N: u32, T> PrivateStaticCall<M, N, T> {\n    pub fn new(target_contract: AztecAddress, selector: FunctionSelector, name: str<M>, args: [Field; N]) -> Self {\n        let args_hash = hash_args(args);\n        Self { target_contract, selector, name, args_hash, args, return_type: std::mem::zeroed() }\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.view(MyContract::at(address).my_private_static_function(...args))`\n    /// instead of manually constructing and calling `PrivateCall`.\n    pub fn view(self, context: &mut PrivateContext) -> T\n    where\n        T: Deserialize,\n    {\n        execution_cache::store(self.args, self.args_hash);\n        let returns =\n            context.call_private_function_with_args_hash(self.target_contract, self.selector, self.args_hash, true);\n        returns.get_preimage()\n    }\n}\n\n// PublicCall\n\n#[must_use = \"Your public call needs to be passed into the `self.call(...)`, `self.enqueue(...)` or `self.enqueue_incognito(...)` method to be executed (e.g. `self.call(MyContract::at(address).my_public_function(...args))`\"]\npub struct PublicCall<let M: u32, let N: u32, T> {\n    pub target_contract: AztecAddress,\n    pub selector: FunctionSelector,\n    pub name: str<M>,\n    pub args: [Field; N],\n    gas_opts: GasOpts,\n    return_type: T,\n}\n\nimpl<let M: u32, let N: u32, T> PublicCall<M, N, T> {\n    pub fn new(target_contract: AztecAddress, selector: FunctionSelector, name: str<M>, args: [Field; N]) -> Self {\n        Self { target_contract, selector, name, args, gas_opts: GasOpts::default(), return_type: std::mem::zeroed() }\n    }\n\n    pub fn with_gas(mut self, gas_opts: GasOpts) -> Self {\n        self.gas_opts = gas_opts;\n        self\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.call(MyContract::at(address).my_public_function(...args))` instead of\n    /// manually constructing and calling `PublicCall`.\n    pub unconstrained fn call(self, context: PublicContext) -> T\n    where\n        T: Deserialize,\n    {\n        let returns = context.call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n        // If T is () (i.e. if the function does not return anything) then `as_array` will constrain that `returns` has\n        // a length of 0 (since that is ()'s deserialization length).\n        Deserialize::deserialize(returns.as_array())\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.enqueue(MyContract::at(address).my_public_function(...args))` instead of\n    /// manually constructing and calling `PublicCall`.\n    pub fn enqueue(self, context: &mut PrivateContext) {\n        self.enqueue_impl(context, false, false)\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.enqueue_incognito(MyContract::at(address).my_public_function(...args))`\n    /// instead of manually constructing and calling `PublicCall`.\n    pub fn enqueue_incognito(self, context: &mut PrivateContext) {\n        self.enqueue_impl(context, false, true)\n    }\n\n    fn enqueue_impl(self, context: &mut PrivateContext, is_static_call: bool, hide_msg_sender: bool) {\n        let calldata = [self.selector.to_field()].concat(self.args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        context.call_public_function_with_calldata_hash(\n            self.target_contract,\n            calldata_hash,\n            is_static_call,\n            hide_msg_sender,\n        )\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.set_as_teardown(MyContract::at(address).my_public_function(...args))`\n    /// instead of manually constructing and setting the teardown function `PublicCall`.\n    pub fn set_as_teardown(self, context: &mut PrivateContext) {\n        self.set_as_teardown_impl(context, false);\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API:\n    /// `self.set_as_teardown_incognito(MyContract::at(address).my_public_function(...args))` instead of manually\n    /// constructing and setting the teardown function `PublicCall`.\n    pub fn set_as_teardown_incognito(self, context: &mut PrivateContext) {\n        self.set_as_teardown_impl(context, true);\n    }\n\n    fn set_as_teardown_impl(self, context: &mut PrivateContext, hide_msg_sender: bool) {\n        let calldata = [self.selector.to_field()].concat(self.args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        context.set_public_teardown_function_with_calldata_hash(\n            self.target_contract,\n            calldata_hash,\n            false,\n            hide_msg_sender,\n        )\n    }\n}\n\n// PublicStaticCall\n\n#[must_use = \"Your public static call needs to be passed into the `self.view(...)`, `self.enqueue_view(...)` or `self.enqueue_view_incognito(...)` method to be executed (e.g. `self.view(MyContract::at(address).my_public_static_function(...args))`\"]\npub struct PublicStaticCall<let M: u32, let N: u32, T> {\n    pub target_contract: AztecAddress,\n    pub selector: FunctionSelector,\n    pub name: str<M>,\n    pub args: [Field; N],\n    return_type: T,\n    gas_opts: GasOpts,\n}\n\nimpl<let M: u32, let N: u32, T> PublicStaticCall<M, N, T> {\n    pub fn new(target_contract: AztecAddress, selector: FunctionSelector, name: str<M>, args: [Field; N]) -> Self {\n        Self { target_contract, selector, name, args, return_type: std::mem::zeroed(), gas_opts: GasOpts::default() }\n    }\n\n    pub fn with_gas(mut self, gas_opts: GasOpts) -> Self {\n        self.gas_opts = gas_opts;\n        self\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API: `self.view(MyContract::at(address).my_public_static_function(...args))`\n    /// instead of manually constructing and calling `PublicStaticCall`.\n    pub unconstrained fn view(self, context: PublicContext) -> T\n    where\n        T: Deserialize,\n    {\n        let returns =\n            context.static_call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n        Deserialize::deserialize(returns.as_array())\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API:\n    /// `self.enqueue_view(MyContract::at(address).my_public_static_function(...args))` instead of manually\n    /// constructing and calling `PublicStaticCall`.\n    pub fn enqueue_view(self, context: &mut PrivateContext) {\n        let calldata = [self.selector.to_field()].concat(self.args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        context\n            .call_public_function_with_calldata_hash(\n                self.target_contract,\n                calldata_hash,\n                /*static=*/\n                true,\n                false,\n            )\n    }\n\n    /// **DEPRECATED**.\n    ///\n    /// Please use the new contract API:\n    /// `self.enqueue_view_incognito(MyContract::at(address).my_public_static_function(...args))` instead of manually\n    /// constructing and calling `PublicStaticCall`.\n    pub fn enqueue_view_incognito(self, context: &mut PrivateContext) {\n        let calldata = [self.selector.to_field()].concat(self.args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        context\n            .call_public_function_with_calldata_hash(\n                self.target_contract,\n                calldata_hash,\n                /*static=*/\n                true,\n                true,\n            )\n    }\n}\n\n// UtilityCall\n\npub struct UtilityCall<let M: u32, let N: u32, T> {\n    pub target_contract: AztecAddress,\n    pub selector: FunctionSelector,\n    pub name: str<M>,\n    args_hash: Field,\n    pub args: [Field; N],\n    return_type: T,\n}\n\nimpl<let M: u32, let N: u32, T> UtilityCall<M, N, T> {\n    pub fn new(target_contract: AztecAddress, selector: FunctionSelector, name: str<M>, args: [Field; N]) -> Self {\n        let args_hash = hash_args(args);\n        Self { target_contract, selector, name, args_hash, args, return_type: std::mem::zeroed() }\n    }\n}\n"
    },
    "84": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/nullifier_existence_request.nr",
      "source": "use crate::protocol::address::aztec_address::AztecAddress;\n\n/// A request to assert the existence of a nullifier.\n///\n/// Used by [`crate::context::private_context::PrivateContext::assert_nullifier_exists`].\npub struct NullifierExistenceRequest {\n    nullifier: Field,\n    maybe_contract_address: Option<AztecAddress>,\n}\n\nimpl NullifierExistenceRequest {\n    /// Creates an existence request for a pending nullifier.\n    ///\n    /// Pending nullifiers have not been siloed with the contract address. These requests are created using the\n    /// unsiloed value and address of the contract that emitted the nullifier.\n    pub fn for_pending(unsiloed_nullifier: Field, contract_address: AztecAddress) -> Self {\n        // The kernel doesn't take options; it takes a nullifier and an address, and infers whether the request is\n        // siloed based on whether the address is zero or non-zero. When passing the value to the kernel, we use\n        // `maybe_addr.unwrap_or(Address::ZERO)`. Therefore, passing a zero address to `for_pending` is not allowed\n        // since it would be interpreted by the kernel as a settled request.\n        assert(!contract_address.is_zero(), \"Can't read a pending nullifier with a zero contract address\");\n        Self { nullifier: unsiloed_nullifier, maybe_contract_address: Option::some(contract_address) }\n    }\n\n    /// Creates an existence request for a settled nullifier.\n    ///\n    /// Unlike pending nullifiers, settled nullifiers have been siloed with their contract addresses before adding to\n    /// the nullifier tree, and their existence request is created using the siloed value.\n    pub fn for_settled(siloed_nullifier: Field) -> Self {\n        Self { nullifier: siloed_nullifier, maybe_contract_address: Option::none() }\n    }\n\n    pub(crate) fn nullifier(self) -> Field {\n        self.nullifier\n    }\n\n    pub(crate) fn maybe_contract_address(self) -> Option<AztecAddress> {\n        self.maybe_contract_address\n    }\n}\n"
    },
    "85": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
      "source": "use crate::{\n    context::{inputs::PrivateContextInputs, NoteExistenceRequest, NullifierExistenceRequest, ReturnsHash},\n    hash::{hash_args, hash_calldata_array},\n    keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, public_key_domain_separators},\n    messaging::process_l1_to_l2_message,\n    oracle::{\n        block_header::get_block_header_at,\n        call_private_function::call_private_function_internal,\n        execution_cache,\n        key_validation_request::get_key_validation_request,\n        logs::notify_created_contract_class_log,\n        notes::notify_nullified_note,\n        nullifiers::notify_created_nullifier,\n        public_call::assert_valid_public_call_data,\n        tx_phase::{is_execution_in_revertible_phase, notify_revertible_phase_start},\n    },\n};\nuse crate::logging::aztecnr_trace_log_format;\nuse crate::protocol::{\n    abis::{\n        block_header::BlockHeader,\n        call_context::CallContext,\n        function_selector::FunctionSelector,\n        gas_settings::GasSettings,\n        log_hash::LogHash,\n        note_hash::NoteHash,\n        nullifier::Nullifier,\n        private_call_request::PrivateCallRequest,\n        private_circuit_public_inputs::PrivateCircuitPublicInputs,\n        private_log::{PrivateLog, PrivateLogData},\n        public_call_request::PublicCallRequest,\n        validation_requests::{KeyValidationRequest, KeyValidationRequestAndSeparator},\n    },\n    address::{AztecAddress, EthAddress},\n    constants::{\n        CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n        MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n        MAX_NOTE_HASHES_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n        MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL, MAX_TX_LIFETIME,\n        NULL_MSG_SENDER_CONTRACT_ADDRESS, PRIVATE_LOG_CIPHERTEXT_LEN,\n    },\n    hash::poseidon2_hash,\n    messaging::l2_to_l1_message::L2ToL1Message,\n    side_effect::{Counted, scoped::Scoped},\n    traits::{Empty, Hash, ToField},\n    utils::arrays::{ClaimedLengthArray, trimmed_array_length_hint},\n};\n\n/// # PrivateContext\n///\n/// The **main interface** between an #[external(\"private\")] function and the Aztec blockchain.\n///\n/// An instance of the PrivateContext is initialized automatically at the outset of every private function, within the\n/// #[external(\"private\")] macro, so you'll never need to consciously instantiate this yourself.\n///\n/// The instance is always named `context`, and it is always be available within the body of every\n/// #[external(\"private\")] function in your smart contract.\n///\n/// > For those used to \"vanilla\" Noir, it might be jarring to have access to > `context` without seeing a declaration\n/// `let context = PrivateContext::new(...)` > within the body of your function. This is just a consequence of using >\n/// macros to tidy-up verbose boilerplate. You can use `nargo expand` to > expand all macros, if you dare.\n///\n/// Typical usage for a smart contract developer will be to call getter methods of the PrivateContext.\n///\n/// _Pushing_ data and requests to the context is mostly handled within aztec-nr's own functions, so typically a smart\n/// contract developer won't need to call any setter methods directly.\n///\n/// > Advanced users might occasionally wish to push data to the context > directly for lower-level control. If you\n/// find yourself doing this, please > open an issue on GitHub to describe your use case: it might be that > new\n/// functionality should be added to aztec-nr.\n///\n/// ## Responsibilities\n/// - Exposes contextual data to a private function:\n/// - Data relating to how this private function was called.\n/// - msg_sender\n/// - this_address - (the contract address of the private function being executed)\n/// - See `CallContext` for more data.\n/// - Data relating to the transaction in which this private function is being executed.\n/// - chain_id\n/// - version\n/// - gas_settings\n/// - Provides state access:\n/// - Access to the \"Anchor block\" header. Recall, a private function cannot read from the \"current\" block header, but\n/// must read from some historical block header, because as soon as private function execution begins (asynchronously,\n/// on a user's device), the public state of the chain (the \"current state\") will have progressed forward. We call this\n/// reference the \"Anchor block\". See `BlockHeader`.\n///   - Enables consumption of L1->L2 messages.\n/// - Enables calls to functions of other smart contracts:\n/// - Private function calls\n/// - Enqueueing of public function call requests (Since public functions are executed at a later time, by a block\n/// proposer, we say they are \"enqueued\").\n/// - Writes data to the blockchain:\n/// - New notes\n/// - New nullifiers\n/// - Private logs (for sending encrypted note contents or encrypted events)\n///   - New L2->L1 messages.\n/// - Provides args to the private function (handled by the #[external(\"private\")] macro).\n/// - Returns the return values of this private function (handled by the\n///   #[external(\"private\")] macro).\n/// - Makes Key Validation Requests.\n/// - Private functions are not allowed to see master secret keys, because we do not trust them. They are instead given\n/// \"app-siloed\" secret keys with a claim that they relate to a master public key. They can then request validation of\n/// this claim, by making a \"key validation request\" to the protocol's kernel circuits (which _are_ allowed to see\n/// certain master secret keys).\n///\n/// ## Advanced Responsibilities\n///\n/// - Ultimately, the PrivateContext is responsible for constructing the PrivateCircuitPublicInputs of the private\n/// function being executed. All private functions on Aztec must have public inputs which adhere to the rigid layout of\n/// the PrivateCircuitPublicInputs, in order to be compatible with the protocol's kernel circuits. A well-known\n/// misnomer:\n/// - \"public inputs\" contain both inputs and outputs of this function.\n/// - By \"outputs\" we mean a lot more side-effects than just the \"return values\" of the function.\n/// - Most of the so-called \"public inputs\" are kept _private_, and never leak to the outside world, because they are\n/// 'swallowed' by the protocol's kernel circuits before the tx is sent to the network. Only the following are exposed\n/// to the outside world:\n/// - New note_hashes\n/// - New nullifiers\n/// - New private logs\n///     - New L2->L1 messages\n/// - New enqueued public function call requests All the above-listed arrays of side-effects can be padded by the\n/// user's wallet (through instructions to the kernel circuits, via the PXE) to obscure their true lengths.\n///\n/// ## Syntax Justification\n///\n/// Both user-defined functions _and_ most functions in aztec-nr need access to the PrivateContext instance to\n/// read/write data. This is why you'll see the arguably-ugly pervasiveness of the \"context\" throughout your smart\n/// contract and the aztec-nr library. For example, `&mut context` is prevalent. In some languages, you can access and\n/// mutate a global variable (such as a PrivateContext instance) from a function without polluting the function's\n/// parameters. With Noir, a function must explicitly pass control of a mutable variable to another function, by\n/// reference. Since many functions in aztec-nr need to be able to push new data to the PrivateContext, they need to be\n/// handed a mutable reference _to_ the context as a parameter. For example, `Context` is prevalent as a generic\n/// parameter, to give better type safety at compile time. Many `aztec-nr` functions don't make sense if they're called\n/// in a particular runtime (private, public or utility), and so are intentionally only implemented over certain\n/// [Private|Public|Utility]Context structs. This gives smart contract developers a much faster feedback loop if\n/// they're making a mistake, as an error will be thrown by the LSP or when they compile their contract.\n///\n#[derive(Eq)]\npub struct PrivateContext {\n    // docs:start:private-context\n    pub inputs: PrivateContextInputs,\n    pub side_effect_counter: u32,\n\n    pub min_revertible_side_effect_counter: u32,\n    pub is_fee_payer: bool,\n\n    pub args_hash: Field,\n    pub return_hash: Field,\n\n    pub expiration_timestamp: u64,\n\n    pub(crate) note_hash_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n    pub(crate) nullifier_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n    key_validation_requests_and_separators: BoundedVec<KeyValidationRequestAndSeparator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n    pub note_hashes: BoundedVec<Counted<NoteHash>, MAX_NOTE_HASHES_PER_CALL>,\n    pub nullifiers: BoundedVec<Counted<Nullifier>, MAX_NULLIFIERS_PER_CALL>,\n\n    pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n    pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n    pub public_teardown_call_request: PublicCallRequest,\n    pub l2_to_l1_msgs: BoundedVec<Counted<L2ToL1Message>, MAX_L2_TO_L1_MSGS_PER_CALL>,\n    // docs:end:private-context\n\n    // Header of a block whose state is used during private execution (not the block the transaction is included in).\n    pub anchor_block_header: BlockHeader,\n\n    pub private_logs: BoundedVec<Counted<PrivateLogData>, MAX_PRIVATE_LOGS_PER_CALL>,\n    pub contract_class_logs_hashes: BoundedVec<Counted<LogHash>, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n    // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n    // fetching the same request multiple times. The index of the array corresponds to the key type (0 nullifier, 1\n    // incoming, 2 outgoing, 3 tagging).\n    pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n\n    pub expected_non_revertible_side_effect_counter: u32,\n    pub expected_revertible_side_effect_counter: u32,\n}\n\nimpl PrivateContext {\n    pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n        PrivateContext {\n            inputs,\n            side_effect_counter: inputs.start_side_effect_counter + 1,\n            min_revertible_side_effect_counter: 0,\n            is_fee_payer: false,\n            args_hash,\n            return_hash: 0,\n            expiration_timestamp: inputs.anchor_block_header.timestamp() + MAX_TX_LIFETIME,\n            note_hash_read_requests: BoundedVec::new(),\n            nullifier_read_requests: BoundedVec::new(),\n            key_validation_requests_and_separators: BoundedVec::new(),\n            note_hashes: BoundedVec::new(),\n            nullifiers: BoundedVec::new(),\n            anchor_block_header: inputs.anchor_block_header,\n            private_call_requests: BoundedVec::new(),\n            public_call_requests: BoundedVec::new(),\n            public_teardown_call_request: PublicCallRequest::empty(),\n            l2_to_l1_msgs: BoundedVec::new(),\n            private_logs: BoundedVec::new(),\n            contract_class_logs_hashes: BoundedVec::new(),\n            last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n            expected_non_revertible_side_effect_counter: 0,\n            expected_revertible_side_effect_counter: 0,\n        }\n    }\n\n    /// Returns the contract address that initiated this function call.\n    ///\n    /// This is similar to `msg.sender` in Solidity (hence the name).\n    ///\n    /// Important Note: Since Aztec doesn't have a concept of an EoA (Externally-owned Account), the msg_sender is\n    /// \"none\" for the first function call of every transaction. The first function call of a tx is likely to be a call\n    /// to the user's account contract, so this quirk will most often be handled by account contract developers.\n    ///\n    /// # Returns\n    /// * `Option<AztecAddress>` - The address of the smart contract that called this function (be it an app contract\n    /// or a user's account contract). Returns `Option<AztecAddress>::none` for the first function call of the tx. No\n    /// other _private_ function calls in the tx will have a `none` msg_sender, but _public_ function calls might (see\n    /// the PublicContext).\n    pub fn maybe_msg_sender(self) -> Option<AztecAddress> {\n        let maybe_msg_sender = self.inputs.call_context.msg_sender;\n        if maybe_msg_sender == NULL_MSG_SENDER_CONTRACT_ADDRESS {\n            Option::none()\n        } else {\n            Option::some(maybe_msg_sender)\n        }\n    }\n\n    /// Returns the contract address of the current function being executed.\n    ///\n    /// This is equivalent to `address(this)` in Solidity (hence the name). Use this to identify the current contract's\n    /// address, commonly needed for access control or when interacting with other contracts.\n    ///\n    /// # Returns\n    /// * `AztecAddress` - The contract address of the current function being executed.\n    ///\n    pub fn this_address(self) -> AztecAddress {\n        self.inputs.call_context.contract_address\n    }\n\n    /// Returns the chain ID of the current network.\n    ///\n    /// This is similar to `block.chainid` in Solidity. Returns the unique identifier for the blockchain network this\n    /// transaction is executing on.\n    ///\n    /// Helps prevent cross-chain replay attacks. Useful if implementing multi-chain contract logic.\n    ///\n    /// # Returns\n    /// * `Field` - The chain ID as a field element\n    ///\n    pub fn chain_id(self) -> Field {\n        self.inputs.tx_context.chain_id\n    }\n\n    /// Returns the Aztec protocol version that this transaction is executing under. Different versions may have\n    /// different rules, opcodes, or cryptographic primitives.\n    ///\n    /// This is similar to how Ethereum has different EVM versions.\n    ///\n    /// Useful for forward/backward compatibility checks\n    ///\n    /// Not to be confused with contract versions; this is the protocol version.\n    ///\n    /// # Returns\n    /// * `Field` - The protocol version as a field element\n    ///\n    pub fn version(self) -> Field {\n        self.inputs.tx_context.version\n    }\n\n    /// Returns the gas settings for the current transaction.\n    ///\n    /// This provides information about gas limits and pricing for the transaction, similar to `tx.gasprice` and gas\n    /// limits in Ethereum. However, Aztec has a more sophisticated gas model with separate accounting for L2\n    /// computation and data availability (DA) costs.\n    ///\n    /// # Returns\n    /// * `GasSettings` - Struct containing gas limits and fee information\n    ///\n    pub fn gas_settings(self) -> GasSettings {\n        self.inputs.tx_context.gas_settings\n    }\n\n    /// Returns the function selector of the currently executing function.\n    ///\n    /// Low-level function: Ordinarily, smart contract developers will not need to access this.\n    ///\n    /// This is similar to `msg.sig` in Solidity, which returns the first 4 bytes of the function signature. In Aztec,\n    /// the selector uniquely identifies which function within the contract is being called.\n    ///\n    /// # Returns\n    /// * `FunctionSelector` - The 4-byte function identifier\n    ///\n    /// # Advanced\n    /// Only #[external(\"private\")] functions have a function selector as a protocol- enshrined concept. The function\n    /// selectors of private functions are baked into the preimage of the contract address, and are used by the\n    /// protocol's kernel circuits to identify each private function and ensure the correct one is being executed.\n    ///\n    /// Used internally for function dispatch and call verification.\n    ///\n    pub fn selector(self) -> FunctionSelector {\n        self.inputs.call_context.function_selector\n    }\n\n    /// Returns the hash of the arguments passed to the current function.\n    ///\n    /// Very low-level function: You shouldn't need to call this. The #[external(\"private\")] macro calls this, and it\n    /// makes the arguments neatly available to the body of your private function.\n    ///\n    /// # Returns\n    /// * `Field` - Hash of the function arguments\n    ///\n    /// # Advanced\n    /// * Arguments are hashed to reduce proof size and verification time\n    /// * Enables efficient argument passing in recursive function calls\n    /// * The hash can be used to retrieve the original arguments from the PXE.\n    ///\n    pub fn get_args_hash(self) -> Field {\n        self.args_hash\n    }\n\n    /// Pushes a new note_hash to the Aztec blockchain's global Note Hash Tree (a state tree).\n    ///\n    /// A note_hash is a commitment to a piece of private state.\n    ///\n    /// Low-level function: Ordinarily, smart contract developers will not need to manually call this. Aztec-nr's state\n    /// variables (see `../state_vars/`) are designed to understand when to create and push new note hashes.\n    ///\n    /// # Arguments\n    /// * `note_hash` - The new note_hash.\n    ///\n    /// # Advanced\n    /// From here, the protocol's kernel circuits will take over and insert the note_hash into the protocol's \"note\n    /// hash tree\" (in the Base Rollup circuit). Before insertion, the protocol will:\n    /// - \"Silo\" the `note_hash` with the contract address of this function, to yield a `siloed_note_hash`. This\n    /// prevents state collisions between different smart contracts.\n    /// - Ensure uniqueness of the `siloed_note_hash`, to prevent Faerie-Gold attacks, by hashing the\n    /// `siloed_note_hash` with a unique value, to yield a `unique_siloed_note_hash` (see the protocol spec for more).\n    ///\n    /// In addition to calling this function, aztec-nr provides the contents of the newly-created note to the PXE, via\n    /// the `notify_created_note` oracle.\n    ///\n    /// > Advanced users might occasionally wish to push data to the context > directly for lower-level control. If you\n    /// find yourself doing this, > please open an issue on GitHub to describe your use case: it might be > that new\n    /// functionality should be added to aztec-nr.\n    ///\n    pub fn push_note_hash(&mut self, note_hash: Field) {\n        self.note_hashes.push(Counted::new(note_hash, self.next_counter()));\n    }\n\n    /// Creates a new [nullifier](crate::nullifier).\n    ///\n    /// ## Safety\n    ///\n    /// This is a low-level function that must be used with great care to avoid subtle corruption of contract state.\n    /// Instead of calling this function, consider using the higher-level [`crate::state_vars::SingleUseClaim`].\n    ///\n    /// In particular, callers must ensure all nullifiers created by a contract are properly domain-separated, so that\n    /// unrelated components don't interfere with one another (e.g. a transaction nullifier accidentally marking a\n    /// variable as initialized). Only [`PrivateContext::push_nullifier_for_note_hash`] should be used for note\n    /// nullifiers, never this one.\n    ///\n    /// ## Advanced\n    ///\n    /// The raw `nullifier` is not what is inserted into the Aztec state tree: it will be first siloed by contract\n    /// address via [`crate::protocol::hash::compute_siloed_nullifier`] in order to prevent accidental or malicious\n    /// interference of nullifiers from different contracts.\n    pub fn push_nullifier(&mut self, nullifier: Field) {\n        notify_created_nullifier(nullifier);\n        self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0 }.count(self.next_counter()));\n    }\n\n    /// Creates a new [nullifier](crate::nullifier) associated with a note.\n    ///\n    /// This is a variant of [`PrivateContext::push_nullifier`] that is used for note nullifiers, i.e. nullifiers that\n    /// correspond to a note. If a note and its nullifier are created in the same transaction, then the private kernels\n    /// will 'squash' these values, deleting them both as if they never existed and reducing transaction fees.\n    ///\n    /// The `nullification_note_hash` must be the result of calling\n    /// [`crate::note::utils::compute_confirmed_note_hash_for_nullification`] for pending notes, and `0` for settled\n    /// notes (which cannot be squashed).\n    ///\n    /// ## Safety\n    ///\n    /// This is a low-level function that must be used with great care to avoid subtle corruption of contract state.\n    /// Instead of calling this function, consider using the higher-level [`crate::note::lifecycle::destroy_note`].\n    ///\n    /// The precautions listed for [`PrivateContext::push_nullifier`] apply here as well, and callers should\n    /// additionally ensure `nullification_note_hash` corresponds to a note emitted by this contract, with its hash\n    /// computed in the same transaction execution phase as the call to this function. Finally, only this function\n    /// should be used for note nullifiers, never [`PrivateContext::push_nullifier`].\n    ///\n    /// Failure to do these things can result in unprovable contexts, accidental deletion of notes, or double-spend\n    /// attacks.\n    pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullification_note_hash: Field) {\n        let nullifier_counter = self.next_counter();\n        notify_nullified_note(nullifier, nullification_note_hash, nullifier_counter);\n        self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullification_note_hash }.count(\n            nullifier_counter,\n        ));\n    }\n\n    /// Returns the anchor block header - the historical block header that this private function is reading from.\n    ///\n    /// A private function CANNOT read from the \"current\" block header, but must read from some older block header,\n    /// because as soon as private function execution begins (asynchronously, on a user's device), the public state of\n    /// the chain (the \"current state\") will have progressed forward.\n    ///\n    /// # Returns\n    /// * `BlockHeader` - The anchor block header.\n    ///\n    /// # Advanced\n    /// * All private functions of a tx read from the same anchor block header.\n    /// * The protocol asserts that the `expiration_timestamp` of every tx is at most 24 hours beyond the timestamp of\n    /// the tx's chosen anchor block header. This enables the network's nodes to safely prune old txs from the mempool.\n    /// Therefore, the chosen block header _must_ be one from within the last 24 hours.\n    ///\n    pub fn get_anchor_block_header(self) -> BlockHeader {\n        self.anchor_block_header\n    }\n\n    /// Returns the header of any historical block at or before the anchor block.\n    ///\n    /// This enables private contracts to access information from even older blocks than the anchor block header.\n    ///\n    /// Useful for time-based contract logic that needs to compare against multiple historical points.\n    ///\n    /// # Arguments\n    /// * `block_number` - The block number to retrieve (must be <= anchor block number)\n    ///\n    /// # Returns\n    /// * `BlockHeader` - The header of the requested historical block\n    ///\n    /// # Advanced\n    /// This function uses an oracle to fetch block header data from the user's PXE. Depending on how much blockchain\n    /// data the user's PXE has been set up to store, this might require a query from the PXE to another Aztec node to\n    /// get the data. > This is generally true of all oracle getters (see `../oracle`).\n    ///\n    /// Each block header gets hashed and stored as a leaf in the protocol's Archive Tree. In fact, the i-th block\n    /// header gets stored at the i-th leaf index of the Archive Tree. Behind the scenes, this `get_block_header_at`\n    /// function will add Archive Tree merkle-membership constraints (~3k) to your smart contract function's circuit,\n    /// to prove existence of the block header in the Archive Tree.\n    ///\n    /// Note: we don't do any caching, so avoid making duplicate calls for the same block header, because each call\n    /// will add duplicate constraints.\n    ///\n    /// Calling this function is more expensive (constraint-wise) than getting the anchor block header (via\n    /// `get_block_header`). This is because the anchor block's merkle membership proof is handled by Aztec's protocol\n    /// circuits, and is only performed once for the entire tx because all private functions of a tx share a common\n    /// anchor block header. Therefore, the cost (constraint-wise) of calling `get_block_header` is effectively free.\n    ///\n    pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n        get_block_header_at(block_number, self)\n    }\n\n    /// Sets the hash of the return values for this private function.\n    ///\n    /// Very low-level function: this is called by the #[external(\"private\")] macro.\n    ///\n    /// # Arguments\n    /// * `serialized_return_values` - The serialized return values as a field array\n    ///\n    pub fn set_return_hash<let N: u32>(&mut self, serialized_return_values: [Field; N]) {\n        let return_hash = hash_args(serialized_return_values);\n        self.return_hash = return_hash;\n        execution_cache::store(serialized_return_values, return_hash);\n    }\n\n    /// Builds the PrivateCircuitPublicInputs for this private function, to ensure compatibility with the protocol's\n    /// kernel circuits.\n    ///\n    /// Very low-level function: This function is automatically called by the #[external(\"private\")] macro.\n    pub fn finish(self) -> PrivateCircuitPublicInputs {\n        PrivateCircuitPublicInputs {\n            call_context: self.inputs.call_context,\n            args_hash: self.args_hash,\n            returns_hash: self.return_hash,\n            min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n            is_fee_payer: self.is_fee_payer,\n            expiration_timestamp: self.expiration_timestamp,\n            note_hash_read_requests: ClaimedLengthArray::from_bounded_vec(self.note_hash_read_requests),\n            nullifier_read_requests: ClaimedLengthArray::from_bounded_vec(self.nullifier_read_requests),\n            key_validation_requests_and_separators: ClaimedLengthArray::from_bounded_vec(\n                self.key_validation_requests_and_separators,\n            ),\n            note_hashes: ClaimedLengthArray::from_bounded_vec(self.note_hashes),\n            nullifiers: ClaimedLengthArray::from_bounded_vec(self.nullifiers),\n            private_call_requests: ClaimedLengthArray::from_bounded_vec(self.private_call_requests),\n            public_call_requests: ClaimedLengthArray::from_bounded_vec(self.public_call_requests),\n            public_teardown_call_request: self.public_teardown_call_request,\n            l2_to_l1_msgs: ClaimedLengthArray::from_bounded_vec(self.l2_to_l1_msgs),\n            start_side_effect_counter: self.inputs.start_side_effect_counter,\n            end_side_effect_counter: self.side_effect_counter,\n            private_logs: ClaimedLengthArray::from_bounded_vec(self.private_logs),\n            contract_class_logs_hashes: ClaimedLengthArray::from_bounded_vec(self.contract_class_logs_hashes),\n            anchor_block_header: self.anchor_block_header,\n            tx_context: self.inputs.tx_context,\n            expected_non_revertible_side_effect_counter: self.expected_non_revertible_side_effect_counter,\n            expected_revertible_side_effect_counter: self.expected_revertible_side_effect_counter,\n        }\n    }\n\n    /// Designates this contract as the fee payer for the transaction.\n    ///\n    /// Unlike Ethereum, where the transaction sender always pays fees, Aztec allows any contract to voluntarily pay\n    /// transaction fees. This enables patterns like sponsored transactions or fee abstraction where users don't need\n    /// to hold fee-juice themselves. (Fee juice is a fee-paying asset for Aztec).\n    ///\n    /// Only one contract per transaction can declare itself as the fee payer, and it must have sufficient fee-juice\n    /// balance (>= the gas limits specified in the TxContext) by the time we reach the public setup phase of the tx.\n    ///\n    pub fn set_as_fee_payer(&mut self) {\n        aztecnr_trace_log_format!(\"Setting {0} as fee payer\")([self.this_address().to_field()]);\n        self.is_fee_payer = true;\n    }\n\n    pub fn in_revertible_phase(&mut self) -> bool {\n        let current_counter = self.side_effect_counter;\n\n        // Safety: Kernel will validate that the claim is correct by validating the expected counters.\n        let is_revertible = unsafe { is_execution_in_revertible_phase(current_counter) };\n\n        if is_revertible {\n            if (self.expected_revertible_side_effect_counter == 0)\n                | (current_counter < self.expected_revertible_side_effect_counter) {\n                self.expected_revertible_side_effect_counter = current_counter;\n            }\n        } else if current_counter > self.expected_non_revertible_side_effect_counter {\n            self.expected_non_revertible_side_effect_counter = current_counter;\n        }\n\n        is_revertible\n    }\n\n    /// Declares the end of the \"setup phase\" of this tx.\n    ///\n    /// Only one function per tx can declare the end of the setup phase.\n    ///\n    /// Niche function: Only wallet developers and paymaster contract developers (aka Fee-payment contracts) will need\n    /// to make use of this function.\n    ///\n    /// Aztec supports a three-phase execution model: setup, app logic, teardown. The phases exist to enable a fee\n    /// payer to take on the risk of paying a transaction fee, safe in the knowledge that their payment (in whatever\n    /// token or method the user chooses) will succeed, regardless of whether the app logic will succeed. The \"setup\"\n    /// phase enables such a payment to be made, because the setup phase _cannot revert_: a reverting function within\n    /// the setup phase would result in an invalid block which cannot be proven. Any side-effects generated during that\n    /// phase are guaranteed to be inserted into Aztec's state trees (except for squashed notes & nullifiers, of\n    /// course).\n    ///\n    /// Even though the end of the setup phase is declared within a private function, you might have noticed that\n    /// _public_ functions can also execute within the setup phase. This is because any public function calls which\n    /// were enqueued _within the setup phase_ by a private function are considered part of the setup phase.\n    ///\n    /// # Advanced\n    /// * Sets the minimum revertible side effect counter of this tx to be the PrivateContext's _current_ side effect\n    /// counter.\n    ///\n    pub fn end_setup(&mut self) {\n        // Incrementing the side effect counter when ending setup ensures non ambiguity for the counter where we change\n        // phases.\n        self.side_effect_counter += 1;\n        aztecnr_trace_log_format!(\"Ending setup at counter {0}\")([self.side_effect_counter as Field]);\n        self.min_revertible_side_effect_counter = self.next_counter();\n        notify_revertible_phase_start(self.min_revertible_side_effect_counter);\n    }\n\n    /// Sets a deadline (an \"include-by timestamp\") for when this transaction must be included in a block.\n    ///\n    /// Other functions in this tx might call this setter with differing values for the include-by timestamp. To ensure\n    /// that all functions' deadlines are met, the _minimum_ of all these include-by timestamps will be exposed when\n    /// this tx is submitted to the network.\n    ///\n    /// If the transaction is not included in a block by its include-by timestamp, it becomes invalid and it will never\n    /// be included.\n    ///\n    /// This expiry timestamp is publicly visible. See the \"Advanced\" section for privacy concerns.\n    ///\n    /// # Arguments\n    /// * `expiration_timestamp` - Unix timestamp (seconds) deadline for inclusion. The include-by timestamp of this tx\n    /// will be _at most_ the timestamp specified.\n    ///\n    /// # Advanced\n    /// * If multiple functions set differing `expiration_timestamp`s, the kernel circuits will set it to be the\n    /// _minimum_ of the two. This ensures the tx expiry requirements of all functions in the tx are met.\n    /// * Rollup circuits will reject expired txs.\n    /// * The protocol enforces that all transactions must be included within 24 hours of their chosen anchor block's\n    /// timestamp, to enable safe mempool pruning.\n    /// * The DelayedPublicMutable design makes heavy use of this functionality, to enable private functions to read\n    /// public state.\n    /// * A sophisticated Wallet should cleverly set an include-by timestamp to improve the privacy of the user and the\n    /// network as a whole. For example, if a contract interaction sets include-by to some publicly-known value (e.g.\n    /// the time when a contract upgrades), then the wallet might wish to set an even lower one to avoid revealing that\n    /// this tx is interacting with said contract. Ideally, all wallets should standardize on an approach in order to\n    ///   provide users with a large privacy set -- although the exact approach\n    /// will need to be discussed. Wallets that deviate from a standard might accidentally reveal which wallet each\n    /// transaction originates from.\n    ///\n    // docs:start:expiration-timestamp\n    pub fn set_expiration_timestamp(&mut self, expiration_timestamp: u64) {\n        // docs:end:expiration-timestamp\n        self.expiration_timestamp = std::cmp::min(self.expiration_timestamp, expiration_timestamp);\n    }\n\n    /// Asserts that a note has been created.\n    ///\n    /// This function will cause the transaction to fail unless the requested note exists. This is the preferred\n    /// mechanism for performing this check, and the only one that works for pending notes.\n    ///\n    /// ## Pending Notes\n    ///\n    /// Both settled notes (created in prior transactions) and pending notes (created in the current transaction) will\n    /// be considered by this function. Pending notes must have been created **before** this call is made for the check\n    /// to pass.\n    ///\n    /// ## Historical Notes\n    ///\n    /// If you need to assert that a note existed _by some specific block in the past_, instead of simply proving that\n    /// it exists by the current anchor block, use [`crate::history::note::assert_note_existed_by`] instead.\n    ///\n    /// ## Cost\n    ///\n    /// This uses up one of the call's kernel note hash read requests, which are limited. Like all kernel requests,\n    /// proving time costs are only incurred when the total number of requests exceeds the kernel's capacity, requiring\n    /// an additional invocation of the kernel reset circuit.\n    pub fn assert_note_exists(&mut self, note_existence_request: NoteExistenceRequest) {\n        // Note that the `note_hash_read_requests` array does not hold `NoteExistenceRequest` objects, but rather a\n        // custom kernel type. We convert from the aztec-nr type into it.\n\n        let note_hash = note_existence_request.note_hash();\n        let contract_address = note_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n        let side_effect = Scoped::new(\n            Counted::new(note_hash, self.next_counter()),\n            contract_address,\n        );\n\n        self.note_hash_read_requests.push(side_effect);\n    }\n\n    /// Asserts that a nullifier has been emitted.\n    ///\n    /// This function will cause the transaction to fail unless the requested nullifier exists. This is the preferred\n    /// mechanism for performing this check, and the only one that works for pending nullifiers.\n    ///\n    /// ## Pending Nullifiers\n    ///\n    /// Both settled nullifiers (emitted in prior transactions) and pending nullifiers (emitted in the current\n    /// transaction) will be considered by this function. Pending nullifiers must have been emitted **before** this\n    /// call is made for the check to pass.\n    ///\n    /// ## Historical Nullifiers\n    ///\n    /// If you need to assert that a nullifier existed _by some specific block in the past_, instead of simply proving\n    /// that it exists by the current anchor block, use [`crate::history::nullifier::assert_nullifier_existed_by`]\n    /// instead.\n    ///\n    /// ## Public vs Private\n    ///\n    /// In general, it is unsafe to check for nullifier non-existence in private, as that will not consider the\n    /// possibility of the nullifier having been emitted in any transaction between the anchor block and the inclusion\n    /// block. Private functions instead prove existence via this function and 'prove' non-existence by _emitting_ the\n    /// nullifer, which would cause the transaction to fail if the nullifier existed.\n    ///\n    /// This is not the case in public functions, which do have access to the tip of the blockchain and so can reliably\n    /// prove whether a nullifier exists or not via\n    /// [`crate::context::public_context::PublicContext::nullifier_exists_unsafe`].\n    ///\n    /// ## Cost\n    ///\n    /// This uses up one of the call's kernel nullifier read requests, which are limited. Like all kernel requests,\n    /// proving time costs are only incurred when the total number of requests exceeds the kernel's capacity, requiring\n    /// an additional invocation of the kernel reset circuit.\n    pub fn assert_nullifier_exists(&mut self, nullifier_existence_request: NullifierExistenceRequest) {\n        let nullifier = nullifier_existence_request.nullifier();\n        let contract_address = nullifier_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n        let request = Scoped::new(\n            Counted::new(nullifier, self.next_counter()),\n            contract_address,\n        );\n\n        self.nullifier_read_requests.push(request);\n    }\n\n    /// Requests the app-siloed nullifier hiding key (nhk_app) for the given (hashed) master nullifier public key\n    /// (npk_m), from the user's PXE.\n    ///\n    /// Advanced function: Only needed if you're designing your own notes and/or nullifiers.\n    ///\n    /// Contracts are not allowed to compute nullifiers for other contracts, as that would let them read parts of their\n    /// private state. Because of this, a contract is only given an \"app-siloed key\", which is constructed by\n    /// hashing the user's master nullifier hiding key with the contract's address. However, because contracts cannot\n    /// be trusted with a user's master nullifier hiding key (because we don't know which contracts are honest or\n    /// malicious), the PXE refuses to provide any master secret keys to any app smart contract function. This means\n    /// app functions are unable to prove that the derivation of an app-siloed nullifier hiding key has been computed\n    /// correctly. Instead, an app function can request to the kernel (via `request_nhk_app`) that it validates the\n    /// siloed derivation, since the kernel has been vetted to not leak any master secret keys.\n    ///\n    /// A common nullification scheme is to inject a nullifier hiding key into the preimage of a nullifier, to make the\n    /// nullifier deterministic but random-looking. This function enables that flow.\n    ///\n    /// # Arguments\n    /// * `npk_m_hash` - A hash of the master nullifier public key of the user whose PXE is executing this function.\n    ///\n    /// # Returns\n    /// * The app-siloed nullifier hiding key that corresponds to the given `npk_m_hash`.\n    ///\n    pub fn request_nhk_app(&mut self, npk_m_hash: Field) -> Field {\n        self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n    }\n\n    /// Requests the app-siloed nullifier secret key (nsk_app) for the given (hashed) master nullifier public key\n    /// (npk_m), from the user's PXE.\n    ///\n    /// See `request_nsk_app` and `request_sk_app` for more info.\n    ///\n    /// The intention of the \"outgoing\" keypair is to provide a second secret key for all of a user's outgoing activity\n    /// (i.e. for notes that a user creates, as opposed to notes that a user receives from others). The separation of\n    /// incoming and outgoing data was a distinction made by zcash, with the intention of enabling a user to optionally\n    /// share with a 3rd party a controlled view of only incoming or outgoing notes. Similar functionality of sharing\n    /// select data can be achieved with offchain zero-knowledge proofs. It is up to an app developer whether they\n    /// choose to make use of a user's outgoing keypair within their application logic, or instead simply use the same\n    /// keypair (the address keypair (which is effectively the same as the \"incoming\" keypair)) for all incoming &\n    /// outgoing messages to a user.\n    ///\n    /// Currently, all of the exposed encryption functions in aztec-nr ignore the outgoing viewing keys, and instead\n    /// encrypt all note logs and event logs to a user's address public key.\n    ///\n    /// # Arguments\n    /// * `ovpk_m_hash` - Hash of the outgoing viewing public key master\n    ///\n    /// # Returns\n    /// * The application-specific outgoing viewing secret key\n    ///\n    pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n        self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n    }\n\n    /// Pushes a Key Validation Request to the kernel.\n    ///\n    /// Private functions are not allowed to see a user's master secret keys, because we do not trust them. They are\n    /// instead given \"app-siloed\" secret keys with a claim that they relate to a master public key. They can then\n    /// request validation of this claim, by making a \"key validation request\" to the protocol's kernel circuits (which\n    /// _are_ allowed to see certain master secret keys).\n    ///\n    /// When a Key Validation Request tuple of (sk_app, Pk_m, app_address) is submitted to the kernel, it will perform\n    /// the following derivations to validate the relationship between the claimed sk_app and the user's Pk_m:\n    ///\n    ///       (sk_m) ----> * G ----> Pk_m\n    ///         |                     |\n    ///         v                       We use the kernel to prove this\n    ///  h(sk_m, app_address)         | sk_app-Pk_m relationship, because app\n    ///         |                       circuits must not be trusted to see sk_m.\n    ///         v                     |\n    /// sk_app - -  - - - - - - -\n    ///\n    /// The function is named \"request_\" instead of \"get_\" to remind the user that a Key Validation Request will be\n    /// emitted to the kernel.\n    ///\n    fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n        let cached_request =\n            self.last_key_validation_requests[key_index as u32].unwrap_or(KeyValidationRequest::empty());\n\n        if cached_request.pk_m.hash() == pk_m_hash {\n            // We get a match so the cached request is the latest one\n            cached_request.sk_app\n        } else {\n            // We didn't get a match meaning the cached result is stale Typically we'd validate keys by showing that\n            // they are the preimage of `pk_m_hash`, but that'd require the oracle returning the master secret keys,\n            // which could cause malicious contracts to leak it or learn about secrets from other contracts. We\n            // therefore silo secret keys, and rely on the private kernel to validate that we siloed secret key\n            // corresponds to correct siloing of the master secret key that hashes to `pk_m_hash`.\n\n            // Safety: Kernels verify that the key validation request is valid and below we verify that a request for\n            // the correct public key has been received.\n            let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n            assert(!request.pk_m.is_infinite, \"Infinite public key points are not allowed\");\n            assert_eq(request.pk_m.hash(), pk_m_hash, \"Obtained invalid key validation request\");\n\n            self.key_validation_requests_and_separators.push(\n                KeyValidationRequestAndSeparator {\n                    request,\n                    key_type_domain_separator: public_key_domain_separators[key_index as u32],\n                },\n            );\n            self.last_key_validation_requests[key_index as u32] = Option::some(request);\n            request.sk_app\n        }\n    }\n\n    /// Sends an \"L2 -> L1 message\" from this function (Aztec, L2) to a smart contract on Ethereum (L1). L1 contracts\n    /// which are designed to send/receive messages to/from Aztec are called \"Portal Contracts\".\n    ///\n    /// Common use cases include withdrawals, cross-chain asset transfers, and triggering L1 actions based on L2 state\n    /// changes.\n    ///\n    /// The message will be inserted into an Aztec \"Outbox\" contract on L1, when this transaction's block is proposed\n    /// to L1. Sending the message will not result in any immediate state changes in the target portal contract. The\n    /// message will need to be manually consumed from the Outbox through a separate Ethereum transaction: a user will\n    /// need to call a function of the portal contract -- a function specifically designed to make a call to the Outbox\n    /// to consume the message. The message will only be available for consumption once the _epoch_ proof has been\n    /// submitted. Given that there are multiple Aztec blocks within an epoch, it might take some time for this epoch\n    /// proof to be submitted -- especially if the block was near the start of an epoch.\n    ///\n    /// # Arguments\n    /// * `recipient` - Ethereum address that will receive the message\n    /// * `content` - Message content (32 bytes as a Field element). This content has a very\n    /// specific layout. docs:start:context_message_portal\n    pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n        let message = L2ToL1Message { recipient, content };\n        self.l2_to_l1_msgs.push(message.count(self.next_counter()));\n    }\n\n    /// Consumes a message sent from Ethereum (L1) to Aztec (L2).\n    ///\n    /// Common use cases include token bridging, cross-chain governance, and triggering L2 actions based on L1 events.\n    ///\n    /// Use this function if you only want the message to ever be \"referred to\" once. Once consumed using this method,\n    /// the message cannot be consumed again, because a nullifier is emitted. If your use case wants for the message to\n    /// be read unlimited times, then you can always read any historic message from the L1-to-L2 messages tree;\n    /// messages never technically get deleted from that tree.\n    ///\n    /// The message will first be inserted into an Aztec \"Inbox\" smart contract on L1. Sending the message will not\n    /// result in any immediate state changes in the target L2 contract. The message will need to be manually consumed\n    /// by the target contract through a separate Aztec transaction. The message will not be available for consumption\n    /// immediately. Messages get copied over from the L1 Inbox to L2 by the next Proposer in batches. So you will need\n    /// to wait until the messages are copied before you can consume them.\n    ///\n    /// # Arguments\n    /// * `content` - The message content that was sent from L1\n    /// * `secret` - Secret value used for message privacy (if needed)\n    /// * `sender` - Ethereum address that sent the message\n    /// * `leaf_index` - Index of the message in the L1-to-L2 message tree\n    ///\n    /// # Advanced\n    /// Validates message existence in the L1-to-L2 message tree and nullifies the message to prevent\n    /// double-consumption.\n    pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress, leaf_index: Field) {\n        let nullifier = process_l1_to_l2_message(\n            self.anchor_block_header.state.l1_to_l2_message_tree.root,\n            self.this_address(),\n            sender,\n            self.chain_id(),\n            self.version(),\n            content,\n            secret,\n            leaf_index,\n        );\n\n        // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n        self.push_nullifier(nullifier)\n    }\n\n    /// Emits a private log (an array of Fields) that will be published to an Ethereum blob.\n    ///\n    /// Private logs are intended for the broadcasting of ciphertexts: that is, encrypted events or encrypted note\n    /// contents. Since the data in the logs is meant to be _encrypted_, private_logs are broadcast to publicly-visible\n    /// Ethereum blobs. The intended recipients of such encrypted messages can then discover and decrypt these\n    /// encrypted logs using their viewing secret key. (See `../messages/discovery` for more details).\n    ///\n    /// Important note: This function DOES NOT _do_ any encryption of the input `log` fields. This function blindly\n    /// publishes whatever input `log` data is fed into it, so the caller of this function should have already\n    /// performed the encryption, and the `log` should be the result of that encryption.\n    ///\n    /// The protocol does not dictate what encryption scheme should be used: a smart contract developer can choose\n    /// whatever encryption scheme they like. Aztec-nr includes some off-the-shelf encryption libraries that developers\n    /// might wish to use, for convenience. These libraries not only encrypt a plaintext (to produce a ciphertext);\n    /// they also prepend the ciphertext with a `tag` and `ephemeral public key` for easier message discovery. This is\n    /// a very dense topic, and we will be writing more libraries and docs soon.\n    ///\n    /// > Currently, AES128 CBC encryption is the main scheme included in > aztec.nr. > We are currently making\n    /// significant changes to the interfaces of the > encryption library.\n    ///\n    /// In some niche use cases, an app might be tempted to publish _un-encrypted_ data via a private log, because\n    /// _public logs_ are not available to private functions. Be warned that emitting public data via private logs is\n    /// strongly discouraged, and is considered a \"privacy anti-pattern\", because it reveals identifiable information\n    /// about _which_ function has been executed. A tx which leaks such information does not contribute to the privacy\n    /// set of the network.\n    ///\n    /// * Unlike `emit_raw_note_log_unsafe`, this log is not tied to any specific note\n    ///\n    /// # Arguments\n    /// * `tag` - A tag placed at `fields[0]` of the emitted log. Used by recipients and nodes to identify and\n    /// filter for relevant logs without scanning all of them.\n    /// * `log` - The log data that will be publicly broadcast (so make sure it's already been encrypted before you\n    /// call this function). Private logs are bounded in size (`PRIVATE_LOG_CIPHERTEXT_LEN`), to encourage all logs\n    /// from all smart contracts look identical.\n    /// * `length` - The actual length of `log` (measured in number of Fields). Although the input log has a max\n    /// size of `PRIVATE_LOG_CIPHERTEXT_LEN`, the latter values of the array might all be 0's for small logs. This\n    /// `length` should reflect the trimmed length of the array. The protocol's kernel circuits can then append\n    /// random fields as \"padding\" after the `length`, so that the logs of this smart contract look\n    /// indistinguishable from (the same length as) the logs of all other applications. It's up to wallets how much\n    /// padding to apply, so ideally all wallets should agree on standards for this.\n    ///\n    /// ## Safety\n    ///\n    /// The `tag` should be domain-separated (e.g. via [`crate::protocol::hash::compute_log_tag`]) to prevent\n    /// collisions between logs from different sources. Without domain separation, two unrelated log types that\n    /// happen to share a raw tag value become indistinguishable. Prefer the higher-level APIs\n    /// ([`crate::messages::message_delivery::MessageDelivery`] for messages, `self.emit(event)` for events) which\n    /// handle tagging automatically.\n    pub fn emit_private_log_unsafe(&mut self, tag: Field, log: [Field; PRIVATE_LOG_CIPHERTEXT_LEN], length: u32) {\n        let counter = self.next_counter();\n        let full_log = [tag].concat(log);\n        self.private_logs.push(PrivateLogData { log: PrivateLog::new(full_log, length + 1), note_hash_counter: 0 }\n            .count(counter));\n    }\n\n    // TODO: rename.\n    /// Emits a private log that is explicitly tied to a newly-emitted note_hash, to convey to the kernel: \"this log\n    /// relates to this note\".\n    ///\n    /// This linkage is important in case the note gets squashed (due to being read later in this same tx), since we\n    /// can then squash the log as well.\n    ///\n    /// See `emit_private_log_unsafe` for more info about private log emission.\n    ///\n    /// # Arguments\n    /// * `tag` - A tag placed at `fields[0]`. See `emit_private_log_unsafe`.\n    /// * `log` - The log data as an array of Field elements\n    /// * `length` - The actual length of the `log` (measured in number of Fields).\n    /// * `note_hash_counter` - The side-effect counter that was assigned to the new note_hash when it was pushed to\n    /// this `PrivateContext`.\n    ///\n    /// Important: If your application logic requires the log to always be emitted regardless of note squashing,\n    /// consider using `emit_private_log_unsafe` instead, or emitting additional events.\n    ///\n    /// ## Safety\n    ///\n    /// Same as [`PrivateContext::emit_private_log_unsafe`]: the `tag` should be domain-separated.\n    pub fn emit_raw_note_log_unsafe(\n        &mut self,\n        tag: Field,\n        log: [Field; PRIVATE_LOG_CIPHERTEXT_LEN],\n        length: u32,\n        note_hash_counter: u32,\n    ) {\n        let counter = self.next_counter();\n        let full_log = [tag].concat(log);\n        let private_log = PrivateLogData { log: PrivateLog::new(full_log, length + 1), note_hash_counter };\n        self.private_logs.push(private_log.count(counter));\n    }\n\n    pub fn emit_contract_class_log<let N: u32>(&mut self, log: [Field; N]) {\n        let contract_address = self.this_address();\n        let counter = self.next_counter();\n\n        let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] =\n            log.concat([0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]);\n        // Note: the length is not always N, it is the number of fields we want to broadcast, omitting trailing zeros\n        // to save blob space.\n        // Safety: The below length is constrained in the base rollup, which will make sure that all the fields beyond\n        // length are zero. However, it won't be able to check that we didn't add extra padding (trailing zeroes) or\n        // that we cut trailing zeroes from the end.\n        let length = unsafe { trimmed_array_length_hint(log_to_emit) };\n        // We hash the entire padded log to ensure a user cannot pass a shorter length and so emit incorrect shorter\n        // bytecode.\n        let log_hash = poseidon2_hash(log_to_emit);\n        // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be\n        // constrained.\n        unsafe {\n            notify_created_contract_class_log(contract_address, log_to_emit, length, counter);\n        }\n\n        self.contract_class_logs_hashes.push(LogHash { value: log_hash, length: length }.count(counter));\n    }\n\n    /// Calls a private function on another contract (or the same contract).\n    ///\n    /// Very low-level function.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the called function\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    /// This enables contracts to interact with each other while maintaining privacy. This \"composability\" of private\n    /// contract functions is a key feature of the Aztec network.\n    ///\n    /// If a user's transaction includes multiple private function calls, then by the design of Aztec, the following\n    /// information will remain private[1]:\n    /// - The function selectors and contract addresses of all private function calls will remain private, so an\n    /// observer of the public mempool will not be able to look at a tx and deduce which private functions have been\n    /// executed.\n    /// - The arguments and return values of all private function calls will remain private.\n    /// - The person who initiated the tx will remain private.\n    /// - The notes and nullifiers and private logs that are emitted by all private function calls will (if designed\n    /// well) not leak any user secrets, nor leak which functions have been executed.\n    ///\n    /// [1] Caveats: Some of these privacy guarantees depend on how app developers design their smart contracts. Some\n    /// actions _can_ leak information, such as:\n    /// - Calling an internal public function.\n    /// - Calling a public function and not setting msg_sender to Option::none (feature not built yet - see github).\n    /// - Calling any public function will always leak details about the nature of the transaction, so devs should be\n    /// careful in their contract designs. If it can be done in a private function, then that will give the best\n    /// privacy.\n    /// - Not padding the side-effects of a tx to some standardized, uniform size. The kernel circuits can take hints\n    /// to pad side-effects, so a wallet should be able to request for a particular amount of padding. Wallets should\n    /// ideally agree on some standard.\n    /// - Padding should include:\n    /// - Padding the lengths of note & nullifier arrays\n    /// - Padding private logs with random fields, up to some standardized size. See also:\n    /// https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Advanced\n    /// * The call is added to the private call stack and executed by kernel circuits after this function completes\n    /// * The called function can modify its own contract's private state\n    /// * Side effects from the called function are included in this transaction\n    /// * The call inherits the current transaction's context and gas limits\n    ///\n    pub fn call_private_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n    ) -> ReturnsHash {\n        let args_hash = hash_args(args);\n        execution_cache::store(args, args_hash);\n        self.call_private_function_with_args_hash(contract_address, function_selector, args_hash, false)\n    }\n\n    /// Makes a read-only call to a private function on another contract.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state, emit L2->L2 messages, nor\n    /// emit events. Any nested calls are constrained to also be staticcalls.\n    ///\n    /// See `call_private_function` for more general info on private function calls.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract to call\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the called function\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn static_call_private_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n    ) -> ReturnsHash {\n        let args_hash = hash_args(args);\n        execution_cache::store(args, args_hash);\n        self.call_private_function_with_args_hash(contract_address, function_selector, args_hash, true)\n    }\n\n    /// Calls a private function that takes no arguments.\n    ///\n    /// This is a convenience function for calling private functions that don't require any input parameters. It's\n    /// equivalent to `call_private_function` but slightly more efficient to use when no arguments are needed.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn call_private_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n    ) -> ReturnsHash {\n        self.call_private_function_with_args_hash(contract_address, function_selector, 0, false)\n    }\n\n    /// Makes a read-only call to a private function which takes no arguments.\n    ///\n    /// This combines the optimisation of `call_private_function_no_args` with the safety of\n    /// `static_call_private_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn static_call_private_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n    ) -> ReturnsHash {\n        self.call_private_function_with_args_hash(contract_address, function_selector, 0, true)\n    }\n\n    /// Low-level private function call.\n    ///\n    /// This is the underlying implementation used by all other private function call methods. Instead of taking raw\n    /// arguments, it accepts a hash of the arguments.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args_hash` - Pre-computed hash of the function arguments\n    /// * `is_static_call` - Whether this should be a read-only call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values\n    ///\n    pub fn call_private_function_with_args_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args_hash: Field,\n        is_static_call: bool,\n    ) -> ReturnsHash {\n        let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n        let start_side_effect_counter = self.side_effect_counter;\n\n        // Safety: The oracle simulates the private call and returns the value of the side effects counter after\n        // execution of the call (which means that end_side_effect_counter - start_side_effect_counter is the number of\n        // side effects that took place), along with the hash of the return values. We validate these by requesting a\n        // private kernel iteration in which the return values are constrained to hash to `returns_hash` and the side\n        // effects counter to increment from start to end.\n        let (end_side_effect_counter, returns_hash) = unsafe {\n            call_private_function_internal(\n                contract_address,\n                function_selector,\n                args_hash,\n                start_side_effect_counter,\n                is_static_call,\n            )\n        };\n\n        self.private_call_requests.push(\n            PrivateCallRequest {\n                call_context: CallContext {\n                    msg_sender: self.this_address(),\n                    contract_address,\n                    function_selector,\n                    is_static_call,\n                },\n                args_hash,\n                returns_hash,\n                start_side_effect_counter,\n                end_side_effect_counter,\n            },\n        );\n\n        // TODO (fees) figure out why this crashes the prover and enable it we need this in order to pay fees inside\n        // child call contexts assert(\n        //     (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n        //     | (item.public_inputs.min_revertible_side_effect_counter\n        //         > self.min_revertible_side_effect_counter)\n        // ); if item.public_inputs.min_revertible_side_effect_counter\n        //     > self.min_revertible_side_effect_counter { self.min_revertible_side_effect_counter =\n        // item.public_inputs.min_revertible_side_effect_counter; }\n        self.side_effect_counter = end_side_effect_counter + 1; // TODO: call `next_counter`\n        // instead, for consistency\n        ReturnsHash::new(returns_hash)\n    }\n\n    /// Enqueues a call to a public function to be executed later.\n    ///\n    /// Unlike private functions which execute immediately on the user's device, public function calls are \"enqueued\"\n    /// and executed some time later by a block proposer.\n    ///\n    /// This means a public function cannot return any values back to a private function, because by the time the\n    /// public function is being executed, the private function which called it has already completed execution. (In\n    /// fact, the private function has been executed and proven, along with all other private function calls of the\n    /// user's tx. A single proof of the tx has been submitted to the Aztec network, and some time later a proposer has\n    /// picked the tx up from the mempool and begun executing all of the enqueued public functions).\n    ///\n    /// # Privacy warning Enqueueing a public function call is an inherently leaky action. Many interesting applications will require some interaction with public state, but smart contract developers should try to use public function calls sparingly, and carefully. _Internal_ public function calls are especially leaky, because they completely leak which private contract made the call. See also: https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the public function\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Enqueues a read-only call to a public function.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state or emit events. Any nested\n    /// calls are constrained to also be staticcalls.\n    ///\n    /// See also `call_public_function` for more important information about making private -> public function calls.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the public function\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn static_call_public_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, true, hide_msg_sender)\n    }\n\n    /// Enqueues a call to a public function that takes no arguments.\n    ///\n    /// This is an optimisation for calling public functions that don't take any input parameters. It's otherwise\n    /// equivalent to `call_public_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        hide_msg_sender: bool,\n    ) {\n        let calldata_hash = hash_calldata_array([function_selector.to_field()]);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Enqueues a read-only call to a public function with no arguments.\n    ///\n    /// This combines the optimisation of `call_public_function_no_args` with the safety of\n    /// `static_call_public_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn static_call_public_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        hide_msg_sender: bool,\n    ) {\n        let calldata_hash = hash_calldata_array([function_selector.to_field()]);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, true, hide_msg_sender)\n    }\n\n    /// Low-level public function call.\n    ///\n    /// This is the underlying implementation used by all other public function call methods. Instead of taking raw\n    /// arguments, it accepts a hash of the arguments.\n    ///\n    /// Advanced function: Most developers should use `call_public_function` or `static_call_public_function` instead.\n    /// This function is exposed for performance optimization and advanced use cases.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `calldata_hash` - Hash of the function calldata\n    /// * `is_static_call` - Whether this should be a read-only call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function_with_calldata_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        calldata_hash: Field,\n        is_static_call: bool,\n        hide_msg_sender: bool,\n    ) {\n        let counter = self.next_counter();\n\n        let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n\n        assert_valid_public_call_data(calldata_hash);\n\n        let msg_sender = if hide_msg_sender {\n            NULL_MSG_SENDER_CONTRACT_ADDRESS\n        } else {\n            self.this_address()\n        };\n\n        let call_request = PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n\n        self.public_call_requests.push(Counted::new(call_request, counter));\n    }\n\n    /// Enqueues a public function call, and designates it to be the teardown function for this tx. Only one teardown\n    /// function call can be made by a tx.\n    ///\n    /// Niche function: Only wallet developers and paymaster contract developers (aka Fee-payment contracts) will need\n    /// to make use of this function.\n    ///\n    /// Aztec supports a three-phase execution model: setup, app logic, teardown. The phases exist to enable a fee\n    /// payer to take on the risk of paying a transaction fee, safe in the knowledge that their payment (in whatever\n    /// token or method the user chooses) will succeed, regardless of whether the app logic will succeed. The \"setup\"\n    /// phase ensures the fee payer has sufficient balance to pay the proposer their fees. The teardown phase is\n    /// primarily intended to: calculate exactly how much the user owes, based on gas consumption, and refund the user\n    /// any change.\n    ///\n    /// Note: in some cases, the cost of refunding the user (i.e. DA costs of tx side-effects) might exceed the refund\n    /// amount. For app logic with fairly stable and predictable gas consumption, a material refund amount is unlikely.\n    /// For app logic with unpredictable gas consumption, a refund might be important to the user (e.g. if a hefty\n    /// function reverts very early). Wallet/FPC/Paymaster developers should be mindful of this.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the teardown function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - An array of fields to pass to the function.\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    pub fn set_public_teardown_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.set_public_teardown_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Low-level function to set the public teardown function.\n    ///\n    /// This is the underlying implementation for setting the teardown function call that will execute at the end of\n    /// the transaction. Instead of taking raw arguments, it accepts a hash of the arguments.\n    ///\n    /// Advanced function: Most developers should use `set_public_teardown_function` instead.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the teardown function\n    /// * `calldata_hash` - Hash of the function calldata\n    /// * `is_static_call` - Whether this should be a read-only call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn set_public_teardown_function_with_calldata_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        calldata_hash: Field,\n        is_static_call: bool,\n        hide_msg_sender: bool,\n    ) {\n        let is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n\n        assert_valid_public_call_data(calldata_hash);\n\n        let msg_sender = if hide_msg_sender {\n            NULL_MSG_SENDER_CONTRACT_ADDRESS\n        } else {\n            self.this_address()\n        };\n\n        self.public_teardown_call_request =\n            PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n    }\n\n    /// Increments the side-effect counter.\n    ///\n    /// Very low-level function.\n    ///\n    /// # Advanced\n    ///\n    /// Every side-effect of a private function is given a \"side-effect counter\", based on when it is created. This\n    /// PrivateContext is in charge of assigning the counters.\n    ///\n    /// The reason we have side-effect counters is complicated. Consider this illustrative pseudocode of inter-contract\n    /// function calls:\n    /// ```\n    /// contract A {\n    ///    let x = 5; // pseudocode for storage var x.\n    ///    fn a1 {\n    ///        read x; // value: 5, counter: 1.\n    ///        x = x + 1;\n    ///        write x; // value: 6, counter: 2.\n    ///\n    ///        B.b(); // start_counter: 2, end_counter: 4\n    ///\n    ///        read x; // value: 36, counter: 5.\n    ///        x = x + 1;\n    ///        write x; // value: 37, counter: 6.\n    ///    }\n    ///\n    ///    fn a2 {\n    ///        read x; // value: 6, counter: 3.\n    ///        x = x * x;\n    ///        write x; // value: 36, counter: 4.\n    ///    }\n    /// }\n    ///\n    /// contract B {\n    ///     fn b() {\n    ///         A.a2();\n    ///     }\n    /// }\n    /// ```\n    ///\n    /// Suppose a1 is the first function called. The comments show the execution counter of each side-effect, and what\n    /// the new value of `x` is.\n    ///\n    /// These (private) functions are processed by Aztec's kernel circuits in an order that is different from execution\n    /// order: All of A.a1 is proven before B.b is proven, before A.a2 is proven. So when we're in the 2nd execution\n    /// frame of A.a1 (after the call to B.b), the circuit needs to justify why x went from being `6` to `36`. But the\n    /// circuit doesn't know why, and given the order of proving, the kernel hasn't _seen_ a value of 36 get written\n    /// yet. The kernel needs to track big arrays of all side-effects of all private functions in a tx. Then, as it\n    /// recurses and processes B.b(), it will eventually see a value of 36 get written.\n    ///\n    /// Suppose side-effect counters weren't exposed: The kernel would only see this ordering (in order of proof\n    /// verification): [ A.a1.read, A.a1.write, A.a1.read, A.a1.write, A.a2.read, A.a2.write ]\n    /// [         5,          6,        36,         37,         6,         36 ]\n    /// The kernel wouldn't know _when_ B.b() was called within A.a1(), because it can't see what's going on within an\n    /// app circuit. So the kernel wouldn't know that the ordering of reads and writes should actually be: [ A.a1.read,\n    /// A.a1.write, A.a2.read, A.a2.write, A.a1.read, A.a1.write ]\n    /// [         5,          6,        6,         36,         36,         37 ]\n    ///\n    /// And so, we introduced side-effect counters: every private function must assign side-effect counters alongside\n    /// every side-effect that it emits, and also expose to the kernel the counters that it started and ended with.\n    /// This gives the kernel enough information to arrange all side-effects in the correct order. It can then catch\n    /// (for example) if a function tries to read state before it has been written (e.g. if A.a2() maliciously tried to\n    /// read a value of x=37) (e.g. if A.a1() maliciously tried to read x=6).\n    ///\n    /// If a malicious app contract _lies_ and does not count correctly:\n    /// - It cannot lie about its start and end counters because the kernel will catch this.\n    /// - It _could_ lie about its intermediate counters:\n    /// - 1. It could not increment its side-effects correctly\n    /// - 2. It could label its side-effects with counters outside of its start and end counters' range. The kernel\n    /// will catch 2. The kernel will not catch 1., but this would only cause corruption to the private state of the\n    /// malicious contract, and not any other contracts (because a contract can only modify its own state). If a \"good\"\n    /// contract is given _read access_ to a maliciously-counting contract (via an external getter function, or by\n    /// reading historic state from the archive tree directly), and they then make state changes to their _own_ state\n    /// accordingly, that could be dangerous. Developers should be mindful not to trust the claimed innards of external\n    /// contracts unless they have audited/vetted the contracts including vetting the side-effect counter\n    /// incrementation. This is a similar paradigm to Ethereum smart contract development: you must vet external\n    /// contracts that your contract relies upon, and you must not make any presumptions about their claimed behaviour.\n    /// (Hopefully if a contract imports a version of aztec-nr, we will get contract verification tooling that can\n    /// validate the authenticity of the imported aztec-nr package, and hence infer that the side- effect counting will\n    /// be correct, without having to re-audit such logic for every contract).\n    ///\n    fn next_counter(&mut self) -> u32 {\n        let counter = self.side_effect_counter;\n        self.side_effect_counter += 1;\n        counter\n    }\n}\n\nimpl Empty for PrivateContext {\n    fn empty() -> Self {\n        PrivateContext {\n            inputs: PrivateContextInputs::empty(),\n            side_effect_counter: 0 as u32,\n            min_revertible_side_effect_counter: 0 as u32,\n            is_fee_payer: false,\n            args_hash: 0,\n            return_hash: 0,\n            expiration_timestamp: 0,\n            note_hash_read_requests: BoundedVec::new(),\n            nullifier_read_requests: BoundedVec::new(),\n            key_validation_requests_and_separators: BoundedVec::new(),\n            note_hashes: BoundedVec::new(),\n            nullifiers: BoundedVec::new(),\n            private_call_requests: BoundedVec::new(),\n            public_call_requests: BoundedVec::new(),\n            public_teardown_call_request: PublicCallRequest::empty(),\n            l2_to_l1_msgs: BoundedVec::new(),\n            anchor_block_header: BlockHeader::empty(),\n            private_logs: BoundedVec::new(),\n            contract_class_logs_hashes: BoundedVec::new(),\n            last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n            expected_non_revertible_side_effect_counter: 0,\n            expected_revertible_side_effect_counter: 0,\n        }\n    }\n}\n"
    },
    "86": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/public_context.nr",
      "source": "use crate::{\n    context::gas::GasOpts,\n    hash::{\n        compute_l1_to_l2_message_hash, compute_l1_to_l2_message_nullifier, compute_secret_hash,\n        compute_siloed_nullifier,\n    },\n    oracle::avm,\n};\nuse crate::protocol::{\n    abis::function_selector::FunctionSelector,\n    address::{AztecAddress, EthAddress},\n    constants::{MAX_U32_VALUE, NULL_MSG_SENDER_CONTRACT_ADDRESS},\n    traits::{Empty, FromField, Packable, Serialize, ToField},\n    utils::writer::Writer,\n};\n\n/// # PublicContext\n///\n/// The **main interface** between an #[external(\"public\")] function and the Aztec blockchain.\n///\n/// An instance of the PublicContext is initialized automatically at the outset of every public function, within the\n/// #[external(\"public\")] macro, so you'll never need to consciously instantiate this yourself.\n///\n/// The instance is always named `context`, and it will always be available within the body of every\n/// #[external(\"public\")] function in your smart contract.\n///\n/// Typical usage for a smart contract developer will be to call getter methods of the PublicContext.\n///\n/// _Pushing_ data and requests to the context is mostly handled within aztec-nr's own functions, so typically a smart\n/// contract developer won't need to call any setter methods directly.\n///\n/// ## Responsibilities\n/// - Exposes contextual data to a public function:\n/// - Data relating to how this public function was called:\n/// - msg_sender, this_address\n/// - Data relating to the current blockchain state:\n/// - timestamp, block_number, chain_id, version\n/// - Gas and fee information\n/// - Provides state access:\n/// - Read/write public storage (key-value mapping)\n/// - Check existence of notes and nullifiers (Some patterns use notes & nullifiers to store public (not private)\n/// information)\n///   - Enables consumption of L1->L2 messages.\n/// - Enables calls to other public smart contract functions:\n/// - Writes data to the blockchain:\n/// - Updates to public state variables\n/// - New public logs (for events)\n///   - New L2->L1 messages\n/// - New notes & nullifiers (E.g. pushing public info to notes/nullifiers, or for completing \"partial notes\")\n///\n/// ## Key Differences from Private Execution\n///\n/// Unlike private functions -- which are executed on the user's device and which can only reference historic state --\n/// public functions are executed by a block proposer and are executed \"live\" on the _current_ tip of the chain. This\n/// means public functions can:\n/// - Read and write _current_ public state\n/// - Immediately see the effects of earlier transactions in the same block\n///\n/// Also, public functions are executed within a zkVM (the \"AVM\"), so that they can _revert_ whilst still ensuring\n/// payment to the proposer and prover. (Private functions cannot revert: they either succeed, or they cannot be\n/// included).\n///\n/// ## Optimising Public Functions\n///\n/// Using the AVM to execute public functions means they compile down to \"AVM bytecode\" instead of the ACIR that\n/// private functions (standalone circuits) compile to. Therefore the approach to optimising a public function is\n/// fundamentally different from optimising a public function.\n///\npub struct PublicContext {\n    pub args_hash: Option<Field>,\n    pub compute_args_hash: fn() -> Field,\n}\n\nimpl Eq for PublicContext {\n    fn eq(self, other: Self) -> bool {\n        (self.args_hash == other.args_hash)\n        // Can't compare the function compute_args_hash\n    }\n}\n\nimpl PublicContext {\n    /// Creates a new PublicContext instance.\n    ///\n    /// Low-level function: This is called automatically by the #[external(\"public\")] macro, so you shouldn't need to\n    /// be called directly by smart contract developers.\n    ///\n    /// # Arguments\n    /// * `compute_args_hash` - Function to compute the args_hash\n    ///\n    /// # Returns\n    /// * A new PublicContext instance\n    ///\n    pub fn new(compute_args_hash: fn() -> Field) -> Self {\n        PublicContext { args_hash: Option::none(), compute_args_hash }\n    }\n\n    /// Emits a _public_ log that will be visible onchain to everyone.\n    ///\n    /// # Arguments\n    /// * `tag` - A tag placed at `fields[0]` of the emitted log. Nodes index logs by this value, allowing\n    /// clients to efficiently query for matching logs without scanning all of them.\n    /// * `log` - The data to log, must implement Serialize trait.\n    ///\n    /// ## Safety\n    ///\n    /// The `tag` should be domain-separated (e.g. via [`crate::protocol::hash::compute_log_tag`]) to prevent\n    /// collisions between logs from different sources. Without domain separation, two unrelated log types that\n    /// happen to share a raw tag value become indistinguishable. Prefer `self.emit(event)` for events, which\n    /// handles tagging automatically.\n    pub fn emit_public_log_unsafe<T>(_self: Self, tag: Field, log: T)\n    where\n        T: Serialize,\n    {\n        // We use a Writer to serialize the log directly after the tag, avoiding an extra O(n) copy that would\n        // result from serializing first and then prepending the tag.\n        let mut writer: Writer<1 + <T as Serialize>::N> = Writer::new();\n        writer.write(tag);\n        Serialize::stream_serialize(log, &mut writer);\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::emit_public_log(writer.finish().as_vector()) };\n    }\n\n    /// Checks if a given note hash exists in the note hash tree at a particular leaf_index.\n    ///\n    /// # Arguments\n    /// * `note_hash` - The note hash to check for existence\n    /// * `leaf_index` - The index where the note hash should be located\n    ///\n    /// # Returns\n    /// * `bool` - True if the note hash exists at the specified index\n    ///\n    pub fn note_hash_exists(_self: Self, note_hash: Field, leaf_index: u64) -> bool {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::note_hash_exists(note_hash, leaf_index) } == 1\n    }\n\n    /// Checks if a specific L1-to-L2 message exists in the L1-to-L2 message tree at a particular leaf index.\n    ///\n    /// Common use cases include token bridging, cross-chain governance, and triggering L2 actions based on L1 events.\n    ///\n    /// This function should be called before attempting to consume an L1-to-L2 message.\n    ///\n    /// # Arguments\n    /// * `msg_hash` - Hash of the L1-to-L2 message to check\n    /// * `msg_leaf_index` - The index where the message should be located\n    ///\n    /// # Returns\n    /// * `bool` - True if the message exists at the specified index\n    ///\n    /// # Advanced\n    /// * Uses the AVM l1_to_l2_msg_exists opcode for tree lookup\n    /// * Messages are copied from L1 Inbox to L2 by block proposers\n    ///\n    pub fn l1_to_l2_msg_exists(_self: Self, msg_hash: Field, msg_leaf_index: Field) -> bool {\n        // Safety: AVM opcodes are constrained by the AVM itself TODO(alvaro): Make l1l2msg leaf index a u64 upstream\n        unsafe { avm::l1_to_l2_msg_exists(msg_hash, msg_leaf_index as u64) } == 1\n    }\n\n    /// Returns `true` if an `unsiloed_nullifier` has been emitted by `contract_address`.\n    ///\n    /// Note that unsiloed nullifiers are not the actual values stored in the nullifier tree: they are first siloed via\n    /// [`crate::hash::compute_siloed_nullifier`] with the emitting contract's address.\n    ///\n    /// ## Use Cases\n    ///\n    /// Nullifiers are typically used as a _privacy-preserving_ record of a one-time action, but they can also be used\n    /// to efficiently record _public_ one-time actions as well. This is cheaper than using public storage, and has the\n    /// added benefit of the nullifier being emittable from a private function.\n    ///\n    /// An example is to check whether a contract has been published: we emit a nullifier that is deterministic and\n    /// which has a _public_ preimage.\n    ///\n    /// ## Public vs Private\n    ///\n    /// In general, one should not attempt to prove nullifier non-existence in private, as that will not consider the\n    /// possibility of the nullifier having been emitted in any transaction between the anchor block and the inclusion\n    /// block. Private functions instead prove existence via\n    /// [`crate::context::PrivateContext::assert_nullifier_exists`]\n    /// and 'prove' non-existence by _emitting_ the nullifer, which would cause the transaction to fail if the\n    /// nullifier existed.\n    ///\n    /// This is not the case in public functions, which **do** have access to the tip of the blockchain and so can\n    /// reliably prove whether a nullifier exists or not.\n    ///\n    /// ## Safety\n    ///\n    /// While it is safe to rely on this function's return value to determine if a nullifier exists or not, it is often\n    /// **not** safe to infer additional information from that. In particular, it is **unsafe** to infer that the\n    /// existence of a nullifier emitted from a private function implies that all other side-effects of said private\n    /// execution have been completed, more concretely that any enqueued public calls have been executed.\n    ///\n    /// For example, if a function in contract `A` privately emits nullifier `X` and then enqueues public function `Y`,\n    /// then it is **unsafe** for a contract `B` to infer that `Y` has alredy executed simply because `X` exists.\n    ///\n    /// This is because **all** private transaction effects are committed _before_ enqueued public functions are run\n    /// (in\n    /// order to not reveal detailed timing information about the transaction), so it is possible to observe a\n    /// nullifier that was emitted alongside the enqueuing of a public call **before** said call has been completed.\n    ///\n    /// ## Cost\n    ///\n    /// This emits the `CHECKNULLIFIEREXISTS` opcode, which conceptually performs a merkle inclusion proof on the\n    /// nullifier tree (both when the nullifier exists and when it doesn't).\n    pub fn nullifier_exists_unsafe(_self: Self, unsiloed_nullifier: Field, contract_address: AztecAddress) -> bool {\n        let siloed_nullifier = compute_siloed_nullifier(contract_address, unsiloed_nullifier);\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::nullifier_exists(siloed_nullifier) } == 1\n    }\n\n    /// Consumes a message sent from Ethereum (L1) to Aztec (L2) -- effectively marking it as \"read\".\n    ///\n    /// Use this function if you only want the message to ever be \"referred to\" once. Once consumed using this method,\n    /// the message cannot be consumed again, because a nullifier is emitted. If your use case wants for the message to\n    /// be read unlimited times, then you can always read any historic message from the L1-to-L2 messages tree, using\n    /// the `l1_to_l2_msg_exists` method. Messages never technically get deleted from that tree.\n    ///\n    /// The message will first be inserted into an Aztec \"Inbox\" smart contract on L1. It will not be available for\n    /// consumption immediately. Messages get copied-over from the L1 Inbox to L2 by the next Proposer in batches. So\n    /// you will need to wait until the messages are copied before you can consume them.\n    ///\n    /// # Arguments\n    /// * `content` - The message content that was sent from L1\n    /// * `secret` - Secret value used for message privacy (if needed)\n    /// * `sender` - Ethereum address that sent the message\n    /// * `leaf_index` - Index of the message in the L1-to-L2 message tree\n    ///\n    /// # Advanced\n    /// * Validates message existence in the L1-to-L2 message tree\n    /// * Prevents double-consumption by emitting a nullifier\n    /// * Message hash is computed from all parameters + chain context\n    /// * Will revert if message doesn't exist or was already consumed\n    ///\n    pub fn consume_l1_to_l2_message(self: Self, content: Field, secret: Field, sender: EthAddress, leaf_index: Field) {\n        let secret_hash = compute_secret_hash(secret);\n        let message_hash = compute_l1_to_l2_message_hash(\n            sender,\n            self.chain_id(),\n            /*recipient=*/\n            self.this_address(),\n            self.version(),\n            content,\n            secret_hash,\n            leaf_index,\n        );\n        let nullifier = compute_l1_to_l2_message_nullifier(message_hash, secret);\n\n        assert(!self.nullifier_exists_unsafe(nullifier, self.this_address()), \"L1-to-L2 message is already nullified\");\n        assert(self.l1_to_l2_msg_exists(message_hash, leaf_index), \"Tried to consume nonexistent L1-to-L2 message\");\n\n        self.push_nullifier(nullifier);\n    }\n\n    /// Sends an \"L2 -> L1 message\" from this function (Aztec, L2) to a smart contract on Ethereum (L1). L1 contracts\n    /// which are designed to send/receive messages to/from Aztec are called \"Portal Contracts\".\n    ///\n    /// Common use cases include withdrawals, cross-chain asset transfers, and triggering L1 actions based on L2 state\n    /// changes.\n    ///\n    /// The message will be inserted into an Aztec \"Outbox\" contract on L1, when this transaction's block is proposed\n    /// to L1. Sending the message will not result in any immediate state changes in the target portal contract. The\n    /// message will need to be manually consumed from the Outbox through a separate Ethereum transaction: a user will\n    /// need to call a function of the portal contract -- a function specifically designed to make a call to the Outbox\n    /// to consume the message. The message will only be available for consumption once the _epoch_ proof has been\n    /// submitted. Given that there are multiple Aztec blocks within an epoch, it might take some time for this epoch\n    /// proof to be submitted -- especially if the block was near the start of an epoch.\n    ///\n    /// # Arguments\n    /// * `recipient` - Ethereum address that will receive the message\n    /// * `content` - Message content (32 bytes as a Field element)\n    ///\n    pub fn message_portal(_self: Self, recipient: EthAddress, content: Field) {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::send_l2_to_l1_msg(recipient, content) };\n    }\n\n    /// Calls a public function on another contract.\n    ///\n    /// Will revert if the called function reverts or runs out of gas.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract to call\n    /// * `function_selector` - Function to call on the target contract\n    /// * `args` - Arguments to pass to the function\n    /// * `gas_opts` - An optional allocation of gas to the called function.\n    ///\n    /// # Returns\n    /// * `[Field]` - Return data from the called function\n    ///\n    pub unconstrained fn call_public_function<let N: u32>(\n        _self: Self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; N],\n        gas_opts: GasOpts,\n    ) -> [Field] {\n        let calldata = [function_selector.to_field()].concat(args);\n\n        avm::call(\n            gas_opts.l2_gas.unwrap_or(MAX_U32_VALUE),\n            gas_opts.da_gas.unwrap_or(MAX_U32_VALUE),\n            contract_address,\n            calldata,\n        );\n        // Use success_copy to determine whether the call succeeded\n        let success = avm::success_copy();\n\n        let result_data = avm::returndata_copy(0, avm::returndata_size());\n        if !success {\n            // Rethrow the revert data.\n            avm::revert(result_data);\n        }\n        result_data\n    }\n\n    /// Makes a read-only call to a public function on another contract.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state or emit events. Any nested\n    /// calls are constrained to also be staticcalls.\n    ///\n    /// Useful for querying data from other contracts safely.\n    ///\n    /// Will revert if the called function reverts or runs out of gas.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract to call\n    /// * `function_selector` - Function to call on the target contract\n    /// * `args` - Array of arguments to pass to the called function\n    /// * `gas_opts` - An optional allocation of gas to the called function.\n    ///\n    /// # Returns\n    /// * `[Field]` - Return data from the called function\n    ///\n    pub unconstrained fn static_call_public_function<let N: u32>(\n        _self: Self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; N],\n        gas_opts: GasOpts,\n    ) -> [Field] {\n        let calldata = [function_selector.to_field()].concat(args);\n\n        avm::call_static(\n            gas_opts.l2_gas.unwrap_or(MAX_U32_VALUE),\n            gas_opts.da_gas.unwrap_or(MAX_U32_VALUE),\n            contract_address,\n            calldata,\n        );\n        // Use success_copy to determine whether the call succeeded\n        let success = avm::success_copy();\n\n        let result_data = avm::returndata_copy(0, avm::returndata_size());\n        if !success {\n            // Rethrow the revert data.\n            avm::revert(result_data);\n        }\n        result_data\n    }\n\n    /// Adds a new note hash to the Aztec blockchain's global Note Hash Tree.\n    ///\n    /// Notes are ordinarily constructed and emitted by _private_ functions, to ensure that both the content of the\n    /// note, and the contract that emitted the note, stay private.\n    ///\n    /// There are however some useful patterns whereby a note needs to contain _public_ data. The ability to push a new\n    /// note_hash from a _public_ function means that notes can be injected with public data immediately -- as soon as\n    /// the public value is known. The slower alternative would be to submit a follow-up transaction so that a private\n    /// function can inject the data. Both are possible on Aztec.\n    ///\n    /// Search \"Partial Note\" for a very common pattern which enables a note to be \"partially\" populated with some data\n    /// in a _private_ function, and then later \"completed\" with some data in a public function.\n    ///\n    /// # Arguments\n    /// * `note_hash` - The hash of the note to add to the tree\n    ///\n    /// # Advanced\n    /// * The note hash will be siloed with the contract address by the protocol\n    ///\n    pub fn push_note_hash(_self: Self, note_hash: Field) {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::emit_note_hash(note_hash) };\n    }\n\n    /// Creates a new [nullifier](crate::nullifier).\n    ///\n    /// While nullifiers are primarily intended as a _privacy-preserving_ record of a one-time action, they can also\n    /// be used to efficiently record _public_ one-time actions. This function allows creating nullifiers from public\n    /// contract functions, which behave just like those created from private functions.\n    ///\n    /// ## Safety\n    ///\n    /// This is a low-level function that must be used with great care to avoid subtle corruption of contract state.\n    ///\n    /// In particular, callers must ensure all nullifiers created by a contract are properly domain-separated, so that\n    /// unrelated components don't interfere with one another (e.g. a transaction nullifier accidentally marking a\n    /// variable as initialized). Note nullifiers should only be created via\n    /// [`crate::context::PrivateContext::push_nullifier_for_note_hash`].\n    ///\n    /// ## Advanced\n    ///\n    /// The raw `nullifier` is not what is inserted into the Aztec state tree: it will be first siloed by contract\n    /// address via [`crate::protocol::hash::compute_siloed_nullifier`] in order to prevent accidental or malicious\n    /// interference of nullifiers from different contracts.\n    pub fn push_nullifier(_self: Self, nullifier: Field) {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::emit_nullifier(nullifier) };\n    }\n\n    /// Returns the address of the current contract being executed.\n    ///\n    /// This is equivalent to `address(this)` in Solidity (hence the name). Use this to identify the current contract's\n    /// address, commonly needed for access control or when interacting with other contracts.\n    ///\n    /// # Returns\n    /// * `AztecAddress` - The contract address of the current function being executed.\n    ///\n    pub fn this_address(_self: Self) -> AztecAddress {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::address()\n        }\n    }\n\n    /// Returns the contract address that initiated this function call.\n    ///\n    /// This is similar to `msg.sender` in Solidity (hence the name).\n    ///\n    /// Important Note: If the calling function is a _private_ function, then it had the option of hiding its address\n    /// when enqueuing this public function call. In such cases, this method will return `Option<AztecAddress>::none`.\n    /// If the calling function is a _public_ function, it will always return an `Option<AztecAddress>::some` (i.e. a\n    /// non-null value).\n    ///\n    /// # Returns\n    /// * `Option<AztecAddress>` - The address of the smart contract that called this function (be it an app contract\n    /// or a user's account contract).\n    ///\n    /// # Advanced\n    /// * Value is provided by the AVM sender opcode\n    /// * In nested calls, this is the immediate caller, not the original transaction sender\n    ///\n    pub fn maybe_msg_sender(_self: Self) -> Option<AztecAddress> {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        let maybe_msg_sender = unsafe { avm::sender() };\n        if maybe_msg_sender == NULL_MSG_SENDER_CONTRACT_ADDRESS {\n            Option::none()\n        } else {\n            Option::some(maybe_msg_sender)\n        }\n    }\n\n    /// Returns the function selector of the currently-executing function.\n    ///\n    /// This is similar to `msg.sig` in Solidity, returning the first 4 bytes of the function signature.\n    ///\n    /// # Returns\n    /// * `FunctionSelector` - The 4-byte function identifier\n    ///\n    /// # Advanced\n    /// * Extracted from the first element of calldata\n    /// * Used internally for function dispatch in the AVM\n    ///\n    pub fn selector(_self: Self) -> FunctionSelector {\n        // The selector is the first element of the calldata when calling a public function through dispatch.\n        // Safety: AVM opcodes are constrained by the AVM itself.\n        let raw_selector: [Field; 1] = unsafe { avm::calldata_copy(0, 1) };\n        FunctionSelector::from_field(raw_selector[0])\n    }\n\n    /// Returns the hash of the arguments passed to the current function.\n    ///\n    /// Very low-level function: The #[external(\"public\")] macro uses this internally. Smart contract developers\n    /// typically won't need to access this directly as arguments are automatically made available.\n    ///\n    /// # Returns\n    /// * `Field` - Hash of the function arguments\n    ///\n    pub fn get_args_hash(mut self) -> Field {\n        if !self.args_hash.is_some() {\n            self.args_hash = Option::some((self.compute_args_hash)());\n        }\n\n        self.args_hash.unwrap_unchecked()\n    }\n\n    /// Returns the \"transaction fee\" for the current transaction. This is the final tx fee that will be deducted from\n    /// the fee_payer's \"fee-juice\" balance (in the protocol's Base Rollup circuit).\n    ///\n    /// # Returns\n    /// * `Field` - The actual, final cost of the transaction, taking into account: the actual gas used during the\n    /// setup and app-logic phases, and the fixed amount of gas that's been allocated by the user for the teardown\n    /// phase. I.e. effectiveL2FeePerGas * l2GasUsed + effectiveDAFeePerGas * daGasUsed\n    ///\n    /// This will return `0` during the \"setup\" and \"app-logic\" phases of tx execution (because the final tx fee is not\n    /// known at that time). This will only return a nonzero value during the \"teardown\" phase of execution, where the\n    /// final tx fee can actually be computed.\n    ///\n    /// Regardless of _when_ this function is called during the teardown phase, it will always return the same final tx\n    /// fee value. The teardown phase does not consume a variable amount of gas: it always consumes a pre-allocated\n    /// amount of gas, as specified by the user when they generate their tx.\n    ///\n    pub fn transaction_fee(_self: Self) -> Field {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::transaction_fee()\n        }\n    }\n\n    /// Returns the chain ID of the current network.\n    ///\n    /// This is similar to `block.chainid` in Solidity. Returns the unique identifier for the blockchain network this\n    /// transaction is executing on.\n    ///\n    /// Helps prevent cross-chain replay attacks. Useful if implementing multi-chain contract logic.\n    ///\n    /// # Returns\n    /// * `Field` - The chain ID as a field element\n    ///\n    pub fn chain_id(_self: Self) -> Field {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::chain_id()\n        }\n    }\n\n    /// Returns the Aztec protocol version that this transaction is executing under. Different versions may have\n    /// different rules, opcodes, or cryptographic primitives.\n    ///\n    /// This is similar to how Ethereum has different EVM versions.\n    ///\n    /// Useful for forward/backward compatibility checks\n    ///\n    /// Not to be confused with contract versions; this is the protocol version.\n    ///\n    /// # Returns\n    /// * `Field` - The protocol version as a field element\n    ///\n    pub fn version(_self: Self) -> Field {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::version()\n        }\n    }\n    /// Returns the current block number.\n    ///\n    /// This is similar to `block.number` in Solidity.\n    ///\n    /// Note: the current block number is only available within a public function (as opposed to a private function).\n    ///\n    /// Note: the time intervals between blocks should not be relied upon as being consistent:\n    /// - Timestamps of blocks fall within a range, rather than at exact regular intervals.\n    /// - Slots can be missed.\n    /// - Protocol upgrades can completely change the intervals between blocks (and indeed the current roadmap plans to\n    /// reduce the time between blocks, eventually). Use `context.timestamp()` for more-reliable time-based logic.\n    ///\n    /// # Returns\n    /// * `u32` - The current block number\n    ///\n    pub fn block_number(_self: Self) -> u32 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::block_number()\n        }\n    }\n\n    /// Returns the timestamp of the current block.\n    ///\n    /// This is similar to `block.timestamp` in Solidity.\n    ///\n    /// All functions of all transactions in a block share the exact same timestamp (even though technically each\n    /// transaction is executed one-after-the-other).\n    ///\n    /// Important note: Timestamps of Aztec blocks are not at reliably-fixed intervals. The proposer of the block has\n    /// some flexibility to choose a timestamp which is in a valid _range_: Obviously the timestamp of this block must\n    /// be strictly greater than that of the previous block, and must must be less than the timestamp of whichever\n    /// ethereum block the aztec block is proposed to. Furthermore, if the timestamp is not deemed close enough to the\n    /// actual current time, the committee of validators will not attest to the block.\n    ///\n    /// # Returns\n    /// * `u64` - Unix timestamp in seconds\n    ///\n    pub fn timestamp(_self: Self) -> u64 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::timestamp()\n        }\n    }\n\n    /// Returns the fee per unit of L2 gas for this transaction (aka the \"L2 gas price\"), as chosen by the user.\n    ///\n    /// L2 gas covers the cost of executing public functions and handling side-effects within the AVM.\n    ///\n    /// # Returns\n    /// * `u128` - Fee per unit of L2 gas\n    ///\n    /// Wallet developers should be mindful that the choice of gas price (which is publicly visible) can leak\n    /// information about the user, e.g.:\n    /// - which wallet software the user is using;\n    /// - the amount of time which has elapsed from the time the user's wallet chose a gas price (at the going rate),\n    /// to the time of tx submission. This can give clues about the proving time, and hence the nature of the tx.\n    /// - the urgency of the transaction (which is kind of unavoidable, if the tx is indeed urgent).\n    /// - the wealth of the user.\n    /// - the exact user (if the gas price is explicitly chosen by the user to be some unique number like 0.123456789,\n    /// or their favorite number). Wallet devs might wish to consider fuzzing the choice of gas price.\n    ///\n    pub fn min_fee_per_l2_gas(_self: Self) -> u128 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::min_fee_per_l2_gas()\n        }\n    }\n\n    /// Returns the fee per unit of DA (Data Availability) gas (aka the \"DA gas price\").\n    ///\n    /// DA gas covers the cost of making transaction data available on L1.\n    ///\n    /// See the warning in `min_fee_per_l2_gas` for how gas prices can be leaky.\n    ///\n    /// # Returns\n    /// * `u128` - Fee per unit of DA gas\n    ///\n    pub fn min_fee_per_da_gas(_self: Self) -> u128 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::min_fee_per_da_gas()\n        }\n    }\n\n    /// Returns the remaining L2 gas available for this transaction.\n    ///\n    /// Different AVM opcodes consume different amounts of gas.\n    ///\n    /// # Returns\n    /// * `u32` - Remaining L2 gas units\n    ///\n    pub fn l2_gas_left(_self: Self) -> u32 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::l2_gas_left()\n        }\n    }\n\n    /// Returns the remaining DA (Data Availability) gas available for this transaction.\n    ///\n    /// DA gas is consumed when emitting data that needs to be made available on L1, such as public logs or state\n    /// updates. All of the side-effects from the private part of the tx also consume DA gas before execution of any\n    /// public functions even begins.\n    ///\n    /// # Returns\n    /// * `u32` - Remaining DA gas units\n    ///\n    pub fn da_gas_left(_self: Self) -> u32 {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe {\n            avm::da_gas_left()\n        }\n    }\n\n    /// Checks if the current execution is within a staticcall context, where no state changes or logs are allowed to\n    /// be emitted (by this function or any nested function calls).\n    ///\n    /// # Returns\n    /// * `bool` - True if in staticcall context, false otherwise\n    ///\n    pub fn is_static_call(_self: Self) -> bool {\n        // Safety: AVM opcodes are constrained by the AVM itself\n        unsafe { avm::is_static_call() } == 1\n    }\n\n    /// Reads raw field values from public storage. Reads N consecutive storage slots starting from the given slot.\n    ///\n    /// Very low-level function. Users should typically use the public state variable abstractions to perform reads:\n    /// PublicMutable & PublicImmutable.\n    ///\n    /// # Arguments\n    /// * `storage_slot` - The starting storage slot to read from\n    ///\n    /// # Returns\n    /// * `[Field; N]` - Array of N field values from consecutive storage slots\n    ///\n    /// # Generic Parameters\n    /// * `N` - the number of consecutive slots to return, starting from the `storage_slot`.\n    ///\n    pub fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n        let mut out = [0; N];\n        for i in 0..N {\n            // Safety: AVM opcodes are constrained by the AVM itself\n            out[i] = unsafe { avm::storage_read(storage_slot + i as Field, self.this_address().to_field()) };\n        }\n        out\n    }\n\n    /// Reads a typed value from public storage.\n    ///\n    /// Low-level function. Users should typically use the public state variable abstractions to perform reads:\n    /// PublicMutable & PublicImmutable.\n    ///\n    /// # Arguments\n    /// * `storage_slot` - The storage slot to read from\n    ///\n    /// # Returns\n    /// * `T` - The deserialized value from storage\n    ///\n    /// # Generic Parameters\n    /// * `T` - The type that the caller expects to read from the `storage_slot`.\n    ///\n    pub fn storage_read<T>(self, storage_slot: Field) -> T\n    where\n        T: Packable,\n    {\n        T::unpack(self.raw_storage_read(storage_slot))\n    }\n\n    /// Writes raw field values to public storage. Writes to N consecutive storage slots starting from the given slot.\n    ///\n    /// Very low-level function. Users should typically use the public state variable abstractions to perform writes:\n    /// PublicMutable & PublicImmutable.\n    ///\n    /// Public storage writes take effect immediately.\n    ///\n    /// # Arguments\n    /// * `storage_slot` - The starting storage slot to write to\n    /// * `values` - Array of N Fields to write to storage\n    ///\n    pub fn raw_storage_write<let N: u32>(_self: Self, storage_slot: Field, values: [Field; N]) {\n        for i in 0..N {\n            // Safety: AVM opcodes are constrained by the AVM itself\n            unsafe { avm::storage_write(storage_slot + i as Field, values[i]) };\n        }\n    }\n\n    /// Writes a typed value to public storage.\n    ///\n    /// Low-level function. Users should typically use the public state variable abstractions to perform writes:\n    /// PublicMutable & PublicImmutable.\n    ///\n    /// # Arguments\n    /// * `storage_slot` - The storage slot to write to\n    /// * `value` - The typed value to write to storage\n    ///\n    /// # Generic Parameters\n    /// * `T` - The type to write to storage.\n    ///\n    pub fn storage_write<T>(self, storage_slot: Field, value: T)\n    where\n        T: Packable,\n    {\n        self.raw_storage_write(storage_slot, value.pack());\n    }\n}\n\nimpl Empty for PublicContext {\n    fn empty() -> Self {\n        PublicContext::new(|| 0)\n    }\n}\n"
    },
    "87": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/returns_hash.nr",
      "source": "use crate::{hash::hash_args, oracle::execution_cache};\nuse crate::protocol::traits::Deserialize;\n\n/// The hash of a private contract function call's return value.\n///\n/// Use [`ReturnsHash::get_preimage`] to get the underlying value.\n///\n/// The kernels don't process the actual return values but instead their hashes, so it is up to contracts to populate\n/// oracles with the preimages of these hashes on return to make them available to their callers.\n///\n/// Public calls don't utilize this mechanism since the AVM does process the full return values.\npub struct ReturnsHash {\n    hash: Field,\n}\n\nimpl ReturnsHash {\n    pub fn new(hash: Field) -> Self {\n        ReturnsHash { hash }\n    }\n\n    /// Fetches the underlying return value from an oracle, constraining that it corresponds to the return data hash.\n    pub fn get_preimage<T>(self) -> T\n    where\n        T: Deserialize,\n    {\n        // Safety: We verify that the value returned by `load` is the preimage of `hash`, fully constraining it. If `T`\n        // is `()`, then `preimage` must be an array of length 0 (since that is `()`'s deserialization length).\n        // `hash_args` handles empty arrays following the protocol rules (i.e. an empty args array is signaled with a\n        // zero hash), correctly constraining `self.hash`.\n        let preimage = unsafe { execution_cache::load(self.hash) };\n        assert_eq(self.hash, hash_args(preimage), \"Preimage mismatch\");\n\n        Deserialize::deserialize(preimage)\n    }\n}\n\nmod test {\n    use crate::{\n        hash::hash_args,\n        oracle::execution_cache,\n        test::{helpers::test_environment::TestEnvironment, mocks::MockStruct},\n    };\n    use crate::protocol::traits::Serialize;\n    use super::ReturnsHash;\n    use std::test::OracleMock;\n\n    #[test]\n    unconstrained fn retrieves_preimage() {\n        let env = TestEnvironment::new();\n        env.private_context(|_| {\n            let value = MockStruct::new(4, 7);\n            let serialized = value.serialize();\n\n            let hash = hash_args(serialized);\n            execution_cache::store(serialized, hash);\n\n            assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n        });\n    }\n\n    #[test]\n    unconstrained fn retrieves_empty_preimage() {\n        let env = TestEnvironment::new();\n        env.private_context(|_| {\n            let value = ();\n            let serialized = [];\n\n            let hash = hash_args(serialized);\n            execution_cache::store(serialized, hash);\n\n            assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n        });\n    }\n\n    #[test(should_fail_with = \"Preimage mismatch\")]\n    unconstrained fn rejects_bad_preimage() {\n        let value = MockStruct::new(4, 7);\n        let serialized = value.serialize();\n\n        let mut bad_serialized = serialized;\n        bad_serialized[0] += 1;\n\n        let hash = hash_args(serialized);\n\n        let _ = OracleMock::mock(\"aztec_prv_getHashPreimage\").returns(bad_serialized);\n        assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n    }\n}\n"
    },
    "88": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/utility_context.nr",
      "source": "use crate::oracle::{execution::get_utility_context, storage::storage_read};\nuse crate::protocol::{abis::block_header::BlockHeader, address::AztecAddress, traits::Packable};\n\n// If you'll modify this struct don't forget to update utility_context.ts as well.\npub struct UtilityContext {\n    block_header: BlockHeader,\n    contract_address: AztecAddress,\n}\n\nimpl UtilityContext {\n    pub unconstrained fn new() -> Self {\n        get_utility_context()\n    }\n\n    pub unconstrained fn at(contract_address: AztecAddress) -> Self {\n        // We get a context with default contract address, and then we construct the final context with the provided\n        // contract address.\n        let default_context = get_utility_context();\n\n        Self { block_header: default_context.block_header, contract_address }\n    }\n\n    pub fn block_header(self) -> BlockHeader {\n        self.block_header\n    }\n\n    pub fn block_number(self) -> u32 {\n        self.block_header.block_number()\n    }\n\n    pub fn timestamp(self) -> u64 {\n        self.block_header.timestamp()\n    }\n\n    pub fn this_address(self) -> AztecAddress {\n        self.contract_address\n    }\n\n    pub fn version(self) -> Field {\n        self.block_header.version()\n    }\n\n    pub fn chain_id(self) -> Field {\n        self.block_header.chain_id()\n    }\n\n    pub unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n        storage_read(self.block_header, self.this_address(), storage_slot)\n    }\n\n    pub unconstrained fn storage_read<T>(self, storage_slot: Field) -> T\n    where\n        T: Packable,\n    {\n        T::unpack(self.raw_storage_read(storage_slot))\n    }\n}\n"
    },
    "89": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/contract_self/contract_self_private.nr",
      "source": "//! The `self` contract value for private execution contexts.\n\nuse crate::{\n    context::{calls::{PrivateCall, PrivateStaticCall, PublicCall, PublicStaticCall}, PrivateContext},\n    event::{event_emission::emit_event_in_private, event_interface::EventInterface, EventMessage},\n};\nuse crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// Core interface for interacting with aztec-nr contract features in private execution contexts.\n///\n/// This struct is automatically injected into every [`external`](crate::macros::functions::external) and\n/// [`internal`](crate::macros::functions::internal) contract function marked with `\"private\"` by the Aztec macro\n/// system and is accessible through the `self` variable.\n///\n/// ## Usage in Contract Functions\n///\n/// Once injected, you can use `self` to:\n/// - Access storage: `self.storage.balances.at(owner).read()`\n/// - Call contracts: `self.call(Token::at(address).transfer(recipient, amount))`\n/// - Emit events: `self.emit(event).deliver_to(recipient, delivery_mode)`\n/// - Get the contract address: `self.address`\n/// - Get the caller: `self.msg_sender()`\n/// - Access low-level Aztec.nr APIs through the context: `self.context`\n///\n/// ## Example\n///\n/// ```noir\n/// #[external(\"private\")]\n/// fn withdraw(amount: u128, recipient: AztecAddress) {\n///     // Get the caller of this function\n///     let sender = self.msg_sender();\n///\n///     // Access storage\n///     let token = self.storage.donation_token.get_note().get_address();\n///\n///     // Call contracts\n///     self.call(Token::at(token).transfer(recipient, amount));\n/// }\n/// ```\n///\n/// ## Type Parameters\n///\n/// - `Storage`: The contract's storage struct (defined with [`storage`](crate::macros::storage::storage), or `()` if\n/// the contract has no storage\n/// - `CallSelf`: Macro-generated type for calling contract's own non-view functions\n/// - `EnqueueSelf`: Macro-generated type for enqueuing calls to the contract's own non-view functions\n/// - `CallSelfStatic`: Macro-generated type for calling contract's own view functions\n/// - `EnqueueSelfStatic`: Macro-generated type for enqueuing calls to the contract's own view functions\n/// - `CallInternal`: Macro-generated type for calling internal functions\npub struct ContractSelfPrivate<Storage, CallSelf, EnqueueSelf, CallSelfStatic, EnqueueSelfStatic, CallInternal> {\n    /// The address of this contract\n    pub address: AztecAddress,\n\n    /// The contract's storage instance, representing the struct to which the\n    /// [`storage`](crate::macros::storage::storage) macro was applied in your contract. If the contract has no\n    /// storage, the type of this will be `()`.\n    ///\n    /// This storage instance is specialized for the current execution context (private) and\n    /// provides access to the contract's state variables.\n    ///\n    /// ## Developer Note\n    ///\n    /// If you've arrived here while trying to access your contract's storage while the `Storage` generic type is set\n    /// to unit type `()`, it means you haven't yet defined a Storage struct using the\n    /// [`storage`](crate::macros::storage::storage) macro in your contract. For guidance on setting this up, please\n    /// refer to our docs: https://docs.aztec.network/developers/docs/guides/smart_contracts/storage\n    pub storage: Storage,\n\n    /// The private execution context.\n    pub context: &mut PrivateContext,\n\n    /// Provides type-safe methods for calling this contract's own non-view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.call_self.some_private_function(args)\n    /// ```\n    pub call_self: CallSelf,\n\n    /// Provides type-safe methods for enqueuing calls to this contract's own non-view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.enqueue_self.some_public_function(args)\n    /// ```\n    pub enqueue_self: EnqueueSelf,\n\n    /// Provides type-safe methods for calling this contract's own view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.call_self_static.some_view_function(args)\n    /// ```\n    pub call_self_static: CallSelfStatic,\n\n    /// Provides type-safe methods for enqueuing calls to the contract's own view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.enqueue_self_static.some_public_view_function(args)\n    /// ```\n    pub enqueue_self_static: EnqueueSelfStatic,\n\n    /// Provides type-safe methods for calling internal functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.internal.some_internal_function(args)\n    /// ```\n    pub internal: CallInternal,\n}\n\nimpl<Storage, CallSelf, EnqueueSelf, CallSelfStatic, EnqueueSelfStatic, CallInternal> ContractSelfPrivate<Storage, CallSelf, EnqueueSelf, CallSelfStatic, EnqueueSelfStatic, CallInternal> {\n    /// Creates a new `ContractSelfPrivate` instance for a private function.\n    ///\n    /// This constructor is called automatically by the macro system and should not be called directly.\n    pub fn new(\n        context: &mut PrivateContext,\n        storage: Storage,\n        call_self: CallSelf,\n        enqueue_self: EnqueueSelf,\n        call_self_static: CallSelfStatic,\n        enqueue_self_static: EnqueueSelfStatic,\n        internal: CallInternal,\n    ) -> Self {\n        Self {\n            context,\n            storage,\n            address: context.this_address(),\n            call_self,\n            enqueue_self,\n            call_self_static,\n            enqueue_self_static,\n            internal,\n        }\n    }\n\n    /// The address of the contract address that made this function call.\n    ///\n    /// This is similar to Solidity's `msg.sender` value.\n    ///\n    /// ## Transaction Entrypoints\n    ///\n    /// As there are no EOAs (externally owned accounts) in Aztec, unlike on Ethereum, the first contract function\n    /// executed in a transaction (i.e. transaction entrypoint) does **not** have a caller. This function panics when\n    /// executed in such a context.\n    ///\n    /// If you need to handle these cases, use [`PrivateContext::maybe_msg_sender`].\n    pub fn msg_sender(self) -> AztecAddress {\n        self.context.maybe_msg_sender().unwrap()\n    }\n\n    /// Emits an event privately.\n    ///\n    /// Unlike public events, private events do not reveal their contents publicly. They instead create an\n    /// [`EventMessage`] containing the private event information, which **MUST** be delivered to a recipient via\n    /// [`EventMessage::deliver_to`] in order for them to learn about the event. Multiple recipients can have the same\n    /// message be delivered to them.\n    ///\n    /// # Example\n    /// ```noir\n    /// #[event]\n    /// struct Transfer { from: AztecAddress, to: AztecAddress, amount: u128 }\n    ///\n    /// #[external(\"private\")]\n    /// fn transfer(to: AztecAddress, amount: u128) {\n    ///     let from = self.msg_sender();\n    ///\n    ///     let message: EventMessage = self.emit(Transfer { from, to, amount });\n    ///     message.deliver_to(from, MessageDelivery.OFFCHAIN);\n    ///     message.deliver_to(to, MessageDelivery.ONCHAIN_CONSTRAINED);\n    /// }\n    /// ```\n    ///\n    /// # Cost\n    ///\n    /// Private event emission always results in the creation of a nullifer, which acts as a commitment to the event\n    /// and is used by third parties to verify its authenticity. See [`EventMessage::deliver_to`] for the costs\n    /// associated to delivery.\n    ///\n    /// # Privacy\n    ///\n    /// The nullifier created when emitting a private event leaks nothing about the content of the event - it's a\n    /// commitment that includes a random value, so even with full knowledge of the event preimage determining if an\n    /// event was emitted or not requires brute-forcing the entire `Field` space.\n    pub fn emit<Event>(&mut self, event: Event) -> EventMessage<Event>\n    where\n        Event: EventInterface + Serialize,\n    {\n        emit_event_in_private(self.context, event)\n    }\n\n    /// Makes a private contract call.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the private function to invoke.\n    ///\n    /// # Returns\n    /// * `T` - Whatever data the called function has returned.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.call(Token::at(address).transfer_in_private(recipient, amount));\n    /// ```\n    ///\n    /// This enables contracts to interact with each other while maintaining privacy. This \"composability\" of private\n    /// contract functions is a key feature of the Aztec network.\n    ///\n    /// If a user's transaction includes multiple private function calls, then by the design of Aztec, the following\n    /// information will remain private[1]:\n    /// - The function selectors and contract addresses of all private function calls will remain private, so an\n    /// observer of the public mempool will not be able to look at a tx and deduce which private functions have been\n    /// executed.\n    /// - The arguments and return values of all private function calls will remain private.\n    /// - The person who initiated the tx will remain private.\n    /// - The notes and nullifiers and private logs that are emitted by all private function calls will (if designed\n    /// well) not leak any user secrets, nor leak which functions have been executed.\n    ///\n    /// [1] Caveats: Some of these privacy guarantees depend on how app developers design their smart contracts. Some\n    /// actions _can_ leak information, such as:\n    /// - Calling an internal public function.\n    /// - Calling a public function and not setting msg_sender to Option::none (see\n    /// https://github.com/AztecProtocol/aztec-packages/pull/16433)\n    /// - Calling any public function will always leak details about the nature of the transaction, so devs should be\n    /// careful in their contract designs. If it can be done in a private function, then that will give the best\n    /// privacy.\n    /// - Not padding the side-effects of a tx to some standardized, uniform size. The kernel circuits can take hints\n    /// to pad side-effects, so a wallet should be able to request for a particular amount of padding. Wallets should\n    /// ideally agree on some standard.\n    /// - Padding should include:\n    /// - Padding the lengths of note & nullifier arrays\n    /// - Padding private logs with random fields, up to some standardized size. See also:\n    /// https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Advanced\n    /// * The call is added to the private call stack and executed by kernel circuits after this function completes\n    /// * The called function can modify its own contract's private state\n    /// * Side effects from the called function are included in this transaction\n    /// * The call inherits the current transaction's context and gas limits\n    ///\n    pub fn call<let M: u32, let N: u32, T>(&mut self, call: PrivateCall<M, N, T>) -> T\n    where\n        T: Deserialize,\n    {\n        call.call(self.context)\n    }\n\n    /// Makes a read-only private contract call.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state, emit L2->L1 messages, nor\n    /// emit events. Any nested calls are constrained to also be static calls.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the read-only private function to invoke.\n    ///\n    /// # Returns\n    /// * `T` - Whatever data the called function has returned.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.view(Token::at(address).balance_of_private(recipient));\n    /// ```\n    pub fn view<let M: u32, let N: u32, T>(&mut self, call: PrivateStaticCall<M, N, T>) -> T\n    where\n        T: Deserialize,\n    {\n        call.view(self.context)\n    }\n\n    /// Enqueues a public contract call function.\n    ///\n    /// Unlike private functions which execute immediately on the user's device, public function calls are \"enqueued\"\n    /// and executed some time later by a block proposer.\n    ///\n    /// This means a public function cannot return any values back to a private function, because by the time the\n    /// public function is being executed, the private function which called it has already completed execution. (In\n    /// fact, the private function has been executed and proven, along with all other private function calls of the\n    /// user's tx. A single proof of the tx has been submitted to the Aztec network, and some time later a proposer has\n    /// picked the tx up from the mempool and begun executing all of the enqueued public functions).\n    ///\n    /// # Privacy warning Enqueueing a public function call is an inherently leaky action. Many interesting applications will require some interaction with public state, but smart contract developers should try to use public function calls sparingly, and carefully. _Internal_ public function calls are especially leaky, because they completely leak which private contract made the call. See also: https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Arguments\n    /// * `call` - The interface representing the public function to enqueue.\n    pub fn enqueue<let M: u32, let N: u32, T>(&mut self, call: PublicCall<M, N, T>) {\n        call.enqueue(self.context)\n    }\n\n    /// Enqueues a read-only public contract call function.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state, emit L2->L1 messages, nor\n    /// emit events. Any nested calls are constrained to also be static calls.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the read-only public function to enqueue.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.enqueue_view(MyContract::at(address).assert_timestamp_less_than(timestamp));\n    /// ```\n    pub fn enqueue_view<let M: u32, let N: u32, T>(&mut self, call: PublicStaticCall<M, N, T>) {\n        call.enqueue_view(self.context)\n    }\n\n    /// Enqueues a privacy-preserving public contract call function.\n    ///\n    /// This is the same as [`ContractSelfPrivate::enqueue`], except it hides this calling contract's address from the\n    /// target public function (i.e. [`ContractSelfPrivate::msg_sender`] will panic).\n    ///\n    /// This means the origin of the call (msg_sender) will not be publicly visible to any blockchain observers, nor to\n    /// the target public function. If the target public function reads `self.msg_sender()` the call will revert.\n    ///\n    /// NOTES:\n    /// - Not all public functions will accept a msg_sender of \"none\". Many public functions will require that\n    /// msg_sender is \"some\" and will revert otherwise. Therefore, if using `enqueue_incognito`, you must understand\n    /// whether the function you're calling will accept a msg_sender of \"none\". Lots of public bookkeeping patterns\n    /// rely on knowing which address made the call, so as to ascribe state against the caller's address. (There are\n    /// patterns whereby bookkeeping could instead be done in private-land).\n    /// - If you are enqueueing a call to an _internal_ public function (i.e. a public function that will only accept\n    /// calls from other functions of its own contract), then by definition a call to it cannot possibly be\n    /// \"incognito\": the msg_sender must be its own address, and indeed the called public function will assert this.\n    /// Tl;dr this is not usable for enqueued internal public calls.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the public function to enqueue.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.enqueue_incognito(Token::at(address).increase_total_supply_by(amount));\n    /// ```\n    ///\n    /// Advanced:\n    /// - The kernel circuits will permit _any_ private function to set the msg_sender field of any enqueued public\n    /// function call to NULL_MSG_SENDER_CONTRACT_ADDRESS.\n    /// - When the called public function calls `PublicContext::msg_sender()`, aztec-nr will translate\n    /// NULL_MSG_SENDER_CONTRACT_ADDRESS into `Option<AztecAddress>::none` for familiarity to devs.\n    ///\n    pub fn enqueue_incognito<let M: u32, let N: u32, T>(&mut self, call: PublicCall<M, N, T>) {\n        call.enqueue_incognito(self.context)\n    }\n\n    /// Enqueues a privacy-preserving read-only public contract call function.\n    ///\n    /// As per `enqueue_view`, but hides this calling contract's address from the target public function.\n    ///\n    /// See `enqueue_incognito` for more details relating to hiding msg_sender.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the read-only public function to enqueue.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.enqueue_view_incognito(MyContract::at(address).assert_timestamp_less_than(timestamp));\n    /// ```\n    ///\n    pub fn enqueue_view_incognito<let M: u32, let N: u32, T>(&mut self, call: PublicStaticCall<M, N, T>) {\n        call.enqueue_view_incognito(self.context)\n    }\n\n    /// Enqueues a call to the public function defined by the `call` parameter, and designates it to be the teardown\n    /// function for this tx. Only one teardown function call can be made by a tx.\n    ///\n    /// Niche function: Only wallet developers and paymaster contract developers (aka Fee-payment contracts) will need\n    /// to make use of this function.\n    ///\n    /// Aztec supports a three-phase execution model: setup, app logic, teardown. The phases exist to enable a fee\n    /// payer to take on the risk of paying a transaction fee, safe in the knowledge that their payment (in whatever\n    /// token or method the user chooses) will succeed, regardless of whether the app logic will succeed. The \"setup\"\n    /// phase ensures the fee payer has sufficient balance to pay the proposer their fees. The teardown phase is\n    /// primarily intended to: calculate exactly how much the user owes, based on gas consumption, and refund the user\n    /// any change.\n    ///\n    /// Note: in some cases, the cost of refunding the user (i.e. DA costs of tx side-effects) might exceed the refund\n    /// amount. For app logic with fairly stable and predictable gas consumption, a material refund amount is unlikely.\n    /// For app logic with unpredictable gas consumption, a refund might be important to the user (e.g. if a hefty\n    /// function reverts very early). Wallet/FPC/Paymaster developers should be mindful of this.\n    ///\n    /// See `enqueue` for more information about enqueuing public function calls.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the public function to designate as teardown.\n    ///\n    pub fn set_as_teardown<let M: u32, let N: u32, T>(&mut self, call: PublicCall<M, N, T>) {\n        call.set_as_teardown(self.context)\n    }\n\n    /// Enqueues a call to the public function defined by the `call` parameter, and designates it to be the teardown\n    /// function for this tx. Only one teardown function call can be made by a tx.\n    ///\n    /// As per `set_as_teardown`, but hides this calling contract's address from the target public function.\n    ///\n    /// See `enqueue_incognito` for more details relating to hiding msg_sender.\n    ///\n    pub fn set_as_teardown_incognito<let M: u32, let N: u32, T>(&mut self, call: PublicCall<M, N, T>) {\n        call.set_as_teardown_incognito(self.context)\n    }\n}\n"
    },
    "90": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/contract_self/contract_self_public.nr",
      "source": "//! The `self` contract value for public execution contexts.\n\nuse crate::{\n    context::{calls::{PublicCall, PublicStaticCall}, PublicContext},\n    event::{event_emission::emit_event_in_public, event_interface::EventInterface},\n};\nuse crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// Core interface for interacting with aztec-nr contract features in public execution contexts.\n///\n/// This struct is automatically injected into every [`external`](crate::macros::functions::external) and\n/// [`internal`](crate::macros::functions::internal) contract function marked with `\"public\"` by the Aztec macro\n/// system and is accessible through the `self` variable.\n///\n/// ## Type Parameters\n///\n/// - `Storage`: The contract's storage struct (defined with [`storage`](crate::macros::storage::storage), or `()` if\n/// the contract has no storage\n/// - `CallSelf`: Macro-generated type for calling contract's own non-view functions\n/// - `CallSelfStatic`: Macro-generated type for calling contract's own view functions\n/// - `CallInternal`: Macro-generated type for calling internal functions\npub struct ContractSelfPublic<Storage, CallSelf, CallSelfStatic, CallInternal> {\n    /// The address of this contract\n    pub address: AztecAddress,\n\n    /// The contract's storage instance, representing the struct to which the\n    /// [`storage`](crate::macros::storage::storage) macro was applied in your contract. If the contract has no\n    /// storage, the type of this will be `()`.\n    ///\n    /// This storage instance is specialized for the current execution context (public) and\n    /// provides access to the contract's state variables.\n    ///\n    /// ## Developer Note\n    ///\n    /// If you've arrived here while trying to access your contract's storage while the `Storage` generic type is set\n    /// to unit type `()`, it means you haven't yet defined a Storage struct using the\n    /// [`storage`](crate::macros::storage::storage) macro in your contract. For guidance on setting this up, please\n    /// refer to our docs: https://docs.aztec.network/developers/docs/guides/smart_contracts/storage\n    pub storage: Storage,\n\n    /// The public execution context.\n    pub context: PublicContext,\n\n    /// Provides type-safe methods for calling this contract's own non-view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.call_self.some_public_function(args)\n    /// ```\n    pub call_self: CallSelf,\n\n    /// Provides type-safe methods for calling this contract's own view functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.call_self_static.some_view_function(args)\n    /// ```\n    pub call_self_static: CallSelfStatic,\n\n    /// Provides type-safe methods for calling internal functions.\n    ///\n    /// Example API:\n    /// ```noir\n    /// self.internal.some_internal_function(args)\n    /// ```\n    pub internal: CallInternal,\n}\n\nimpl<Storage, CallSelf, CallSelfStatic, CallInternal> ContractSelfPublic<Storage, CallSelf, CallSelfStatic, CallInternal> {\n    /// Creates a new `ContractSelfPublic` instance for a public function.\n    ///\n    /// This constructor is called automatically by the macro system and should not be called directly.\n    pub fn new(\n        context: PublicContext,\n        storage: Storage,\n        call_self: CallSelf,\n        call_self_static: CallSelfStatic,\n        internal: CallInternal,\n    ) -> Self {\n        Self { context, storage, address: context.this_address(), call_self, call_self_static, internal }\n    }\n\n    /// The address of the contract address that made this function call.\n    ///\n    /// This is similar to Solidity's `msg.sender` value.\n    ///\n    /// ## Incognito Calls\n    ///\n    /// Contracts can call public functions from private ones hiding their identity (see\n    ///\n    /// [`ContractSelfPrivate::enqueue_incognito`](crate::contract_self::ContractSelfPrivate::enqueue_incognito)).\n    /// This function reverts when executed in such a context.\n    ///\n    /// If you need to handle these cases, use [`PublicContext::maybe_msg_sender`].\n    pub fn msg_sender(self: Self) -> AztecAddress {\n        self.context.maybe_msg_sender().unwrap()\n    }\n\n    /// Emits an event publicly.\n    ///\n    /// Public events are emitted as plaintext and are therefore visible to everyone. This is is the same as Solidity\n    /// events on EVM chains.\n    ///\n    /// Unlike private events, they don't require delivery of an event message.\n    ///\n    /// # Example\n    /// ```noir\n    /// #[event]\n    /// struct Update { value: Field }\n    ///\n    /// #[external(\"public\")]\n    /// fn publish_update(value: Field) {\n    ///     self.emit(Update { value });\n    /// }\n    /// ```\n    ///\n    /// # Cost\n    ///\n    /// Public event emission is achieved by emitting public transaction logs. A total of `N+1` fields are emitted,\n    /// where `N` is the serialization length of the event.\n    pub fn emit<Event>(&mut self, event: Event)\n    where\n        Event: EventInterface + Serialize,\n    {\n        emit_event_in_public(self.context, event);\n    }\n\n    /// Makes a public contract call.\n    ///\n    /// Will revert if the called function reverts or runs out of gas.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the public function to invoke.\n    ///\n    /// # Returns\n    /// * `T` - Whatever data the called function has returned.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.call(Token::at(address).transfer_in_public(recipient, amount));\n    /// ```\n    ///\n    pub unconstrained fn call<let M: u32, let N: u32, T>(self, call: PublicCall<M, N, T>) -> T\n    where\n        T: Deserialize,\n    {\n        call.call(self.context)\n    }\n\n    /// Makes a public read-only contract call.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state or emit events. Any nested\n    /// calls are constrained to also be static calls.\n    ///\n    /// Will revert if the called function reverts or runs out of gas.\n    ///\n    /// # Arguments\n    /// * `call` - The object representing the read-only public function to invoke.\n    ///\n    /// # Returns\n    /// * `T` - Whatever data the called function has returned.\n    ///\n    /// # Example\n    /// ```noir\n    /// self.view(Token::at(address).balance_of_public(recipient));\n    /// ```\n    ///\n    pub unconstrained fn view<let M: u32, let N: u32, T>(self, call: PublicStaticCall<M, N, T>) -> T\n    where\n        T: Deserialize,\n    {\n        call.view(self.context)\n    }\n}\n"
    },
    "94": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/event/event_interface.nr",
      "source": "use crate::{event::EventSelector, messages::logs::event::MAX_EVENT_SERIALIZED_LEN};\nuse crate::protocol::{\n    constants::DOM_SEP__EVENT_COMMITMENT,\n    hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_bounded_vec},\n    traits::{Serialize, ToField},\n};\n\npub trait EventInterface {\n    fn get_event_type_id() -> EventSelector;\n}\n\n/// A private event's commitment is a value stored on-chain which is used to verify that the event was indeed emitted.\n///\n/// It requires a `randomness` value that must be produced alongside the event in order to perform said validation.\n/// This random value prevents attacks in which someone guesses plausible events (e.g. 'Alice transfers to Bob an\n/// amount of 10'), since they will not be able to test for existence of their guessed events without brute-forcing the\n/// entire `Field` space by guessing `randomness` values.\npub fn compute_private_event_commitment<Event>(event: Event, randomness: Field) -> Field\nwhere\n    Event: EventInterface + Serialize,\n{\n    poseidon2_hash_with_separator(\n        [randomness, Event::get_event_type_id().to_field()].concat(event.serialize()),\n        DOM_SEP__EVENT_COMMITMENT,\n    )\n}\n\n/// Unconstrained variant of [`compute_private_event_commitment`] which takes the event in serialized form.\n///\n/// This function is unconstrained as the mechanism it uses to compute the commitment would be very inefficient in a\n/// constrained environment (due to the hashing of a dynamically sized array). This is not an issue as it is typically\n/// invoked when processing event messages, which is an unconstrained operation.\npub unconstrained fn compute_private_serialized_event_commitment(\n    serialized_event: BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>,\n    randomness: Field,\n    event_type_id: Field,\n) -> Field {\n    let mut commitment_preimage =\n        BoundedVec::<_, 2 + MAX_EVENT_SERIALIZED_LEN>::from_array([randomness, event_type_id]);\n    commitment_preimage.extend_from_bounded_vec(serialized_event);\n\n    poseidon2_hash_with_separator_bounded_vec(commitment_preimage, DOM_SEP__EVENT_COMMITMENT)\n}\n\nmod test {\n    use crate::event::event_interface::{\n        compute_private_event_commitment, compute_private_serialized_event_commitment, EventInterface,\n    };\n    use crate::messages::logs::event::MAX_EVENT_SERIALIZED_LEN;\n    use crate::protocol::traits::{Serialize, ToField};\n    use crate::test::mocks::mock_event::MockEvent;\n\n    global VALUE: Field = 7;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn max_size_serialized_event_commitment() {\n        let serialized_event = BoundedVec::from_array([0; MAX_EVENT_SERIALIZED_LEN]);\n        let _ = compute_private_serialized_event_commitment(serialized_event, 0, 0);\n    }\n\n    #[test]\n    unconstrained fn event_commitment_equivalence() {\n        let event = MockEvent::new(VALUE).build_event();\n\n        assert_eq(\n            compute_private_event_commitment(event, RANDOMNESS),\n            compute_private_serialized_event_commitment(\n                BoundedVec::from_array(event.serialize()),\n                RANDOMNESS,\n                MockEvent::get_event_type_id().to_field(),\n            ),\n        );\n    }\n}\n"
    },
    "96": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/event/event_selector.nr",
      "source": "use crate::protocol::{hash::poseidon2_hash_bytes, traits::{Deserialize, Empty, FromField, Serialize, ToField}};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct EventSelector {\n    // 1st 4-bytes (big-endian leftmost) of abi-encoding of an event.\n    inner: u32,\n}\n\nimpl FromField for EventSelector {\n    fn from_field(field: Field) -> Self {\n        Self { inner: field as u32 }\n    }\n}\n\nimpl ToField for EventSelector {\n    fn to_field(self) -> Field {\n        self.inner as Field\n    }\n}\n\nimpl Empty for EventSelector {\n    fn empty() -> Self {\n        Self { inner: 0 as u32 }\n    }\n}\n\nimpl EventSelector {\n    pub fn from_u32(value: u32) -> Self {\n        Self { inner: value }\n    }\n\n    pub fn from_signature<let N: u32>(signature: str<N>) -> Self {\n        let bytes = signature.as_bytes();\n        let hash = poseidon2_hash_bytes(bytes);\n\n        // `hash` is automatically truncated to fit within 32 bits.\n        EventSelector::from_field(hash)\n    }\n\n    pub fn zero() -> Self {\n        Self { inner: 0 }\n    }\n}\n"
    },
    "98": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/hash.nr",
      "source": "//! Aztec hash functions.\n\nuse crate::protocol::{\n    address::{AztecAddress, EthAddress},\n    constants::{\n        DOM_SEP__FUNCTION_ARGS, DOM_SEP__MESSAGE_NULLIFIER, DOM_SEP__PUBLIC_BYTECODE, DOM_SEP__PUBLIC_CALLDATA,\n        DOM_SEP__SECRET_HASH, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS,\n    },\n    hash::{poseidon2_hash_subarray, poseidon2_hash_with_separator, sha256_to_field},\n    traits::ToField,\n};\n\npub use crate::protocol::hash::compute_siloed_nullifier;\n\npub fn compute_secret_hash(secret: Field) -> Field {\n    poseidon2_hash_with_separator([secret], DOM_SEP__SECRET_HASH)\n}\n\npub fn compute_l1_to_l2_message_hash(\n    sender: EthAddress,\n    chain_id: Field,\n    recipient: AztecAddress,\n    version: Field,\n    content: Field,\n    secret_hash: Field,\n    leaf_index: Field,\n) -> Field {\n    let mut hash_bytes = [0 as u8; 224];\n    let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n    let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n    let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n    let version_bytes: [u8; 32] = version.to_be_bytes();\n    let content_bytes: [u8; 32] = content.to_be_bytes();\n    let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n    let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n    for i in 0..32 {\n        hash_bytes[i] = sender_bytes[i];\n        hash_bytes[i + 32] = chain_id_bytes[i];\n        hash_bytes[i + 64] = recipient_bytes[i];\n        hash_bytes[i + 96] = version_bytes[i];\n        hash_bytes[i + 128] = content_bytes[i];\n        hash_bytes[i + 160] = secret_hash_bytes[i];\n        hash_bytes[i + 192] = leaf_index_bytes[i];\n    }\n\n    sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n    poseidon2_hash_with_separator([message_hash, secret], DOM_SEP__MESSAGE_NULLIFIER)\n}\n\n// Computes the hash of input arguments or return values for private functions, or for authwit creation.\npub fn hash_args<let N: u32>(args: [Field; N]) -> Field {\n    if args.len() == 0 {\n        0\n    } else {\n        poseidon2_hash_with_separator(args, DOM_SEP__FUNCTION_ARGS)\n    }\n}\n\n// Computes the hash of calldata for public functions.\npub fn hash_calldata_array<let N: u32>(calldata: [Field; N]) -> Field {\n    poseidon2_hash_with_separator(calldata, DOM_SEP__PUBLIC_CALLDATA)\n}\n\n/// Computes the public bytecode commitment for a contract class. The commitment is `hash([(length | separator),\n/// ...bytecode])`.\n///\n/// @param packed_bytecode - The packed bytecode of the contract class. 0th word is the length in bytes.\n/// packed_bytecode is mutable so that we can avoid copying the array to construct one starting with first_field\n/// instead of length. @returns The public bytecode commitment.\npub fn compute_public_bytecode_commitment(\n    mut packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS],\n) -> Field {\n    // First field element contains the length of the bytecode\n    let bytecode_length_in_bytes: u32 = packed_public_bytecode[0] as u32;\n    let bytecode_length_in_fields: u32 = (bytecode_length_in_bytes / 31) + (bytecode_length_in_bytes % 31 != 0) as u32;\n    // Don't allow empty public bytecode. AVM doesn't handle execution of contracts that exist with empty bytecode.\n    assert(bytecode_length_in_fields != 0);\n    assert(bytecode_length_in_fields < MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS);\n\n    // Packed_bytecode's 0th entry is the length. Append it to the separator before hashing.\n    let first_field = DOM_SEP__PUBLIC_BYTECODE.to_field() + (packed_public_bytecode[0] as u64 << 32) as Field;\n    packed_public_bytecode[0] = first_field;\n\n    // `fields_to_hash` is the number of fields from the start of `packed_public_bytecode` that should be included in\n    // the hash. Fields after this length are ignored. +1 to account for the prepended field.\n    let num_fields_to_hash = bytecode_length_in_fields + 1;\n\n    poseidon2_hash_subarray(packed_public_bytecode, num_fields_to_hash)\n}\n\n#[test]\nunconstrained fn secret_hash_matches_typescript() {\n    let secret = 8;\n    let hash = compute_secret_hash(secret);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let secret_hash_from_ts = 0x1848b066724ab0ffb50ecb0ee3398eb839f162823d262bad959721a9c13d1e96;\n\n    assert_eq(hash, secret_hash_from_ts);\n}\n\n#[test]\nunconstrained fn var_args_hash_matches_typescript() {\n    let mut input = [0; 100];\n    for i in 0..100 {\n        input[i] = i as Field;\n    }\n    let hash = hash_args(input);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let var_args_hash_from_ts = 0x262e5e121a8efc0382566ab42f0ae2a78bd85db88484f83018fe07fc2552ba0c;\n\n    assert_eq(hash, var_args_hash_from_ts);\n}\n\n#[test]\nunconstrained fn compute_calldata_hash() {\n    let mut input = [0; 100];\n    for i in 0..input.len() {\n        input[i] = i as Field;\n    }\n    let hash = hash_calldata_array(input);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let calldata_hash_from_ts = 0x14a1539bdb1d26e03097cf4d40c87e02ca03f0bb50a3e617ace5a7bfd3943944;\n\n    // Used in cpp vm2 tests:\n    assert_eq(hash, calldata_hash_from_ts);\n}\n\n#[test]\nunconstrained fn public_bytecode_commitment() {\n    let mut input = [0; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS];\n    let len = 99;\n    for i in 1..len + 1 {\n        input[i] = i as Field;\n    }\n    input[0] = (len as Field) * 31;\n    let hash = compute_public_bytecode_commitment(input);\n    // Used in cpp vm2 tests:\n    assert_eq(hash, 0x09348974e76c3602893d7a4b4bb52c2ec746f1ade5004ac471d0fbb4587a81a6);\n}\n"
    },
    "106": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/history/storage.nr",
      "source": "//! Historical storage accesses.\n\nuse crate::protocol::{\n    abis::block_header::BlockHeader, address::AztecAddress, constants::DOM_SEP__PUBLIC_LEAF_SLOT,\n    data::public_data_storage_read, hash::poseidon2_hash_with_separator, merkle_tree::MembershipWitness,\n    traits::ToField,\n};\n\nuse crate::oracle::get_public_data_witness::get_public_data_witness;\n\nmod test;\n\npub fn public_storage_historical_read(\n    block_header: BlockHeader,\n    storage_slot: Field,\n    contract_address: AztecAddress,\n) -> Field {\n    // 1) Compute the leaf index by siloing the storage slot with the contract address\n    let public_data_tree_index = poseidon2_hash_with_separator(\n        [contract_address.to_field(), storage_slot],\n        DOM_SEP__PUBLIC_LEAF_SLOT,\n    );\n\n    // 2) Get the membership witness for the tree index.\n    // Safety: The witness is only used as a \"magical value\" that makes the proof below pass. Hence it's safe.\n    let witness = unsafe { get_public_data_witness(block_header, public_data_tree_index) };\n\n    public_data_storage_read(\n        block_header.state.partial.public_data_tree.root,\n        public_data_tree_index,\n        MembershipWitness { leaf_index: witness.index, sibling_path: witness.path },\n        witness.leaf_preimage,\n    )\n}\n"
    },
    "109": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/keys/ecdh_shared_secret.nr",
      "source": "use crate::protocol::{\n    address::aztec_address::AztecAddress,\n    constants::{DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, DOM_SEP__ECDH_FIELD_MASK, DOM_SEP__ECDH_SUBKEY},\n    hash::poseidon2_hash_with_separator,\n    point::Point,\n    scalar::Scalar,\n    traits::{FromField, ToField},\n};\nuse std::{embedded_curve_ops::multi_scalar_mul, ops::Neg};\n\n/// Computes a standard ECDH shared secret: secret * public_key = shared_secret.\n///\n/// The input secret is known only to one party. The output shared secret can be derived given knowledge of\n/// `public_key`'s key-pair and the public ephemeral secret, using this same function (with reversed inputs).\n///\n/// E.g.: Epk = esk * G // ephemeral key-pair\n///       Pk = sk * G // recipient key-pair\n///       Shared secret S = esk * Pk = sk * Epk\n///\n/// See also: https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman\npub fn derive_ecdh_shared_secret(secret: Scalar, public_key: Point) -> Point {\n    multi_scalar_mul([public_key], [secret])\n}\n\n/// Computes an app-siloed shared secret from a raw ECDH shared secret point and a contract address.\n///\n/// `s_app = h(DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, S.x, S.y, contract_address)`\npub(crate) fn compute_app_siloed_shared_secret(shared_secret: Point, contract_address: AztecAddress) -> Field {\n    poseidon2_hash_with_separator(\n        [shared_secret.x, shared_secret.y, contract_address.to_field()],\n        DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET,\n    )\n}\n\n/// Derives an indexed subkey from an app-siloed shared secret, used for AES key/IV derivation.\n///\n/// `s_i = h(DOM_SEP__ECDH_SUBKEY + i, s_app)`\npub(crate) fn derive_shared_secret_subkey(s_app: Field, index: u32) -> Field {\n    poseidon2_hash_with_separator([s_app], DOM_SEP__ECDH_SUBKEY + index)\n}\n\n/// Derives an indexed field mask from an app-siloed shared secret, used for masking ciphertext fields.\n///\n/// `m_i = h(DOM_SEP__ECDH_FIELD_MASK + i, s_app)`\npub(crate) fn derive_shared_secret_field_mask(s_app: Field, index: u32) -> Field {\n    poseidon2_hash_with_separator([s_app], DOM_SEP__ECDH_FIELD_MASK + index)\n}\n\n#[test]\nunconstrained fn test_consistency_with_typescript() {\n    let secret = Scalar {\n        lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n        hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n    };\n    let point = Point {\n        x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n        y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n        is_infinite: false,\n    };\n\n    let shared_secret = derive_ecdh_shared_secret(secret, point);\n\n    // This is just pasted from a test run. The original typescript code from which this could be generated seems to\n    // have been deleted by someone, and soon the typescript code for encryption and decryption won't be needed, so\n    // this will have to do.\n    let hard_coded_shared_secret = Point {\n        x: 0x15d55a5b3b2caa6a6207f313f05c5113deba5da9927d6421bcaa164822b911bc,\n        y: 0x0974c3d0825031ae933243d653ebb1a0b08b90ee7f228f94c5c74739ea3c871e,\n        is_infinite: false,\n    };\n    assert_eq(shared_secret, hard_coded_shared_secret);\n}\n\n#[test]\nunconstrained fn test_shared_secret_computation_in_both_directions() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };\n\n    let pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);\n    let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);\n    let shared_secret_alt = derive_ecdh_shared_secret(secret_b, pk_a);\n\n    assert_eq(shared_secret, shared_secret_alt);\n}\n\n#[test]\nunconstrained fn test_shared_secret_computation_from_address_in_both_directions() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };\n\n    let mut pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);\n    let mut pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);\n\n    let address_b = AztecAddress::from_field(pk_b.x);\n\n    // We were lazy in deriving the secret keys, and didn't check the resulting y-coordinates of the pk_a or pk_b to be\n    // less than half the field modulus. If needed, we negate the pk's so that they yield valid address points. (We\n    // could also have negated the secrets, but there's no negate method for EmbeddedCurvesScalar).\n    pk_a = if (AztecAddress::from_field(pk_a.x).to_address_point().unwrap().inner == pk_a) {\n        pk_a\n    } else {\n        pk_a.neg()\n    };\n    pk_b = if (address_b.to_address_point().unwrap().inner == pk_b) {\n        pk_b\n    } else {\n        pk_b.neg()\n    };\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, address_b.to_address_point().unwrap().inner);\n    let shared_secret_alt = derive_ecdh_shared_secret(secret_b, pk_a);\n\n    assert_eq(shared_secret, shared_secret_alt);\n}\n\n#[test]\nunconstrained fn test_app_siloed_shared_secret_differs_per_contract() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(Scalar { lo: 0x3456, hi: 0x4567 });\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);\n\n    let contract_a = AztecAddress::from_field(0xAAAA);\n    let contract_b = AztecAddress::from_field(0xBBBB);\n\n    let s_app_a = compute_app_siloed_shared_secret(shared_secret, contract_a);\n    let s_app_b = compute_app_siloed_shared_secret(shared_secret, contract_b);\n\n    assert(s_app_a != s_app_b, \"app-siloed secrets must differ for different contracts\");\n}\n"
    },
    "111": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr",
      "source": "use crate::{\n    keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX},\n    oracle::{\n        key_validation_request::get_key_validation_request,\n        keys::{get_public_keys_and_partial_address, try_get_public_keys_and_partial_address},\n    },\n};\nuse crate::protocol::{address::AztecAddress, public_keys::PublicKeys};\n\npub unconstrained fn get_nhk_app(npk_m_hash: Field) -> Field {\n    get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used in\n// unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\npub unconstrained fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n    get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all public keys for a given account, applying proper constraints to the context. We read all keys at once\n// since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// Fails if the public keys are not registered\npub fn get_public_keys(account: AztecAddress) -> PublicKeys {\n    // Safety: Public keys are constrained by showing their inclusion in the address's preimage.\n    let (public_keys, partial_address) = unsafe { get_public_keys_and_partial_address(account) };\n    assert_eq(account, AztecAddress::compute(public_keys, partial_address), \"Invalid public keys hint for address\");\n\n    public_keys\n}\n\n/// Returns all public keys for a given account, or `None` if the public keys are not registered in the PXE.\npub unconstrained fn try_get_public_keys(account: AztecAddress) -> Option<PublicKeys> {\n    try_get_public_keys_and_partial_address(account).map(|(public_keys, _)| public_keys)\n}\n\nmod test {\n    use super::get_public_keys;\n\n    use crate::test::helpers::test_environment::TestEnvironment;\n    use std::test::OracleMock;\n\n    global KEY_ORACLE_RESPONSE_LENGTH: u32 = 13; // 12 fields for the keys, one field for the partial address\n\n    #[test(should_fail_with = \"Invalid public keys hint for address\")]\n    unconstrained fn get_public_keys_fails_with_bad_hint() {\n        let mut env = TestEnvironment::new();\n        let account = env.create_light_account();\n\n        // Instead of querying for some unknown account, which would result in the oracle erroring out, we mock a bad\n        // oracle response to check that the circuit properly checks the address derivation.\n        let mut random_keys_and_partial_address = [0; KEY_ORACLE_RESPONSE_LENGTH];\n        // We use randomly generated points on the curve, and a random partial address to ensure that this combination\n        // does not derive the address and we should see the assertion fail. npk_m\n        random_keys_and_partial_address[0] = 0x292364b852c6c6f01472951e76a39cbcf074591fd0e063a81965e7b51ad868a5;\n        random_keys_and_partial_address[1] = 0x0a687b46cdc9238f1c311f126aaaa4acbd7a737bff2efd7aeabdb8d805843a27;\n        random_keys_and_partial_address[2] = 0x0000000000000000000000000000000000000000000000000000000000000000;\n        // ivpk_m\n        random_keys_and_partial_address[3] = 0x173c5229a00c5425255680dd6edc27e278c48883991f348fe6985de43b4ec25f;\n        random_keys_and_partial_address[4] = 0x1698608e23b5f6c2f43c49a559108bb64e2247b8fc2da842296a416817f40b7f;\n        random_keys_and_partial_address[5] = 0x0000000000000000000000000000000000000000000000000000000000000000;\n        // ovpk_m\n        random_keys_and_partial_address[6] = 0x1bad2f7d1ad960a1bd0fe4d2c8d17f5ab4a86ef8b103e0a9e7f67ec0d3b4795e;\n        random_keys_and_partial_address[7] = 0x206db87110abbecc9fbaef2c865189d94ef2c106202f734ee4eba9257fd28bf1;\n        random_keys_and_partial_address[8] = 0x0000000000000000000000000000000000000000000000000000000000000000;\n        // tpk_m\n        random_keys_and_partial_address[9] = 0x05e3bd9cfe6b47daa139613619cf7d7fd8bb0112b6f2908caa6d9b536ed948ed;\n        random_keys_and_partial_address[10] = 0x051066f877c9df47552d02e7dc32127ff4edefc8498e813bca1cbd3f5d1be429;\n        random_keys_and_partial_address[11] = 0x0000000000000000000000000000000000000000000000000000000000000000;\n        // partial address\n        random_keys_and_partial_address[12] = 0x236703e2cb00a182e024e98e9f759231b556d25ff19f98896cebb69e9e678cc9;\n\n        let _ = OracleMock::mock(\"aztec_utl_getPublicKeysAndPartialAddress\").returns(Option::some(\n            random_keys_and_partial_address,\n        ));\n        let _ = get_public_keys(account);\n    }\n}\n"
    },
    "114": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/logging.nr",
      "source": "// Not all log levels are currently used, but we provide the full set so that new call sites can use any level. Because\n// of that we tag all with `#[allow(dead_code)]` to prevent warnings.\n//\n// All wrappers resolve function paths at comptime via `resolve_fn` so that the emitted `Quoted` code works both inside\n// aztec-nr (where `crate::` = aztec) and inside macro-generated contract code (where `crate::` = the contract).\n\nuse std::meta::ctstring::AsCtString;\n\ncomptime fn log_prefix<let N: u32>(msg: str<N>) -> CtString {\n    \"[aztec-nr] \".as_ctstring().append_str(msg)\n}\n\n// --- No-args variants (direct call) ---\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_fatal_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::fatal_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_error_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::error_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_warn_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::warn_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_info_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::info_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_verbose_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::verbose_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_debug_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::debug_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_trace_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::trace_log });\n    quote { $f($msg) }\n}\n\n// --- Format variants (return lambda for runtime args) ---\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_fatal_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::fatal_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_error_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::error_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_warn_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::warn_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_info_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::info_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_verbose_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::verbose_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_debug_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::debug_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_trace_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::trace_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n// See module-level comment for why this is needed.\ncomptime fn resolve_fn(path: Quoted) -> TypedExpr {\n    path.as_expr().unwrap().resolve(Option::none())\n}\n"
    },
    "116": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/aztec/compute_note_hash_and_nullifier.nr",
      "source": "use crate::logging;\nuse crate::macros::{notes::NOTES, utils::get_trait_impl_method};\n\n/// Generates two contract library methods called `_compute_note_hash` and `_compute_note_nullifier`, plus a\n/// (deprecated) wrapper called `_compute_note_hash_and_nullifier`, which are used for note discovery (i.e. these are\n/// of the `aztec::messages::discovery::ComputeNoteHash` and `aztec::messages::discovery::ComputeNoteNullifier` types).\npub(crate) comptime fn generate_contract_library_methods_compute_note_hash_and_nullifier() -> Quoted {\n    let compute_note_hash = generate_contract_library_method_compute_note_hash();\n    let compute_note_nullifier = generate_contract_library_method_compute_note_nullifier();\n\n    quote {\n        $compute_note_hash\n        $compute_note_nullifier\n\n        /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash (non-siloed) and inner nullifier (non-siloed) assuming the note has been inserted into the note hash tree with `note_nonce`.\n        ///\n        /// This function is automatically injected by the `#[aztec]` macro.\n        #[contract_library_method]\n        #[allow(dead_code)]\n        unconstrained fn _compute_note_hash_and_nullifier(\n            packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n            owner: aztec::protocol::address::AztecAddress,\n            storage_slot: Field,\n            note_type_id: Field,\n            contract_address: aztec::protocol::address::AztecAddress,\n            randomness: Field,\n            note_nonce: Field,\n        ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n            _compute_note_hash(packed_note, owner, storage_slot, note_type_id, contract_address, randomness).map(|note_hash| {\n\n                let siloed_note_hash = aztec::protocol::hash::compute_siloed_note_hash(contract_address, note_hash);\n                let unique_note_hash = aztec::protocol::hash::compute_unique_note_hash(note_nonce, siloed_note_hash);\n                \n                let inner_nullifier = _compute_note_nullifier(unique_note_hash, packed_note, owner, storage_slot, note_type_id, contract_address, randomness);\n\n                aztec::messages::discovery::NoteHashAndNullifier {\n                    note_hash,\n                    inner_nullifier,\n                }\n            })\n        }\n    }\n}\n\ncomptime fn generate_contract_library_method_compute_note_hash() -> Quoted {\n    if NOTES.len() == 0 {\n        // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n        // simply throws immediately.\n        quote {\n            /// This contract does not use private notes, so this function should never be called as it will unconditionally fail.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_hash(\n                _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                _owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                _note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                panic(f\"This contract does not use private notes\")\n            }\n        }\n    } else {\n        // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n        // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n        // know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type,\n        // and\n        // compute the note hash (non-siloed).\n\n        // We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote\n        // block below.\n        let warn_length_mismatch = logging::aztecnr_warn_log_format(\n            \"Packed note length mismatch for note type id {0}: expected {1} fields, got {2}. Skipping note.\",\n        );\n        let warn_unknown_note_type = logging::aztecnr_warn_log_format(\"Unknown note type id {0}. Skipping note.\");\n\n        let mut if_note_type_id_match_statements_list = @[];\n        for i in 0..NOTES.len() {\n            let typ = NOTES.get(i);\n\n            let get_note_type_id = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteType },\n                quote { get_id },\n            );\n            let unpack = get_trait_impl_method(\n                typ,\n                quote { crate::protocol::traits::Packable },\n                quote { unpack },\n            );\n\n            let compute_note_hash = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteHash },\n                quote { compute_note_hash },\n            );\n\n            let if_or_else_if = if i == 0 {\n                quote { if }\n            } else {\n                quote { else if }\n            };\n\n            if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n                quote {\n                    $if_or_else_if note_type_id == $get_note_type_id() {\n                        // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n                        // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n                        // unpack function on it.\n                        let expected_len = <$typ as $crate::protocol::traits::Packable>::N;\n                        let actual_len = packed_note.len();\n                        if actual_len != expected_len {\n                            $warn_length_mismatch([note_type_id, expected_len as Field, actual_len as Field]);\n                            Option::none()\n                        } else {\n                            let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n                            Option::some($compute_note_hash(note, owner, storage_slot, randomness))\n                        }\n                    }\n                },\n            );\n        }\n\n        let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n        quote {\n            /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash (non-siloed).\n            ///\n            /// The signature of this function notably matches the `aztec::messages::discovery::ComputeNoteHash` type, and so it can be used to call functions from that module such as `do_sync_state` and `attempt_note_discovery`.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_hash(\n                packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                owner: aztec::protocol::address::AztecAddress,\n                storage_slot: Field,\n                note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                randomness: Field,\n            ) -> Option<Field> {\n                $if_note_type_id_match_statements\n                else {\n                    $warn_unknown_note_type([note_type_id]);\n                    Option::none()\n                }\n            }\n        }\n    }\n}\n\ncomptime fn generate_contract_library_method_compute_note_nullifier() -> Quoted {\n    if NOTES.len() == 0 {\n        // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n        // simply throws immediately.\n        quote {\n            /// This contract does not use private notes, so this function should never be called as it will unconditionally fail.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_nullifier(\n                _unique_note_hash: Field,\n                _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                _owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                _note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                panic(f\"This contract does not use private notes\")\n            }\n        }\n    } else {\n        // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n        // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n        // know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type,\n        // and\n        // compute the inner nullifier (non-siloed).\n\n        // We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote\n        // block below.\n        let warn_length_mismatch = logging::aztecnr_warn_log_format(\n            \"Packed note length mismatch for note type id {0}: expected {1} fields, got {2}. Skipping note.\",\n        );\n        let warn_unknown_note_type = logging::aztecnr_warn_log_format(\"Unknown note type id {0}. Skipping note.\");\n\n        let mut if_note_type_id_match_statements_list = @[];\n        for i in 0..NOTES.len() {\n            let typ = NOTES.get(i);\n\n            let get_note_type_id = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteType },\n                quote { get_id },\n            );\n            let unpack = get_trait_impl_method(\n                typ,\n                quote { crate::protocol::traits::Packable },\n                quote { unpack },\n            );\n\n            let compute_nullifier_unconstrained = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteHash },\n                quote { compute_nullifier_unconstrained },\n            );\n\n            let if_or_else_if = if i == 0 {\n                quote { if }\n            } else {\n                quote { else if }\n            };\n\n            if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n                quote {\n                    $if_or_else_if note_type_id == $get_note_type_id() {\n                        // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n                        // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n                        // unpack function on it.\n                        let expected_len = <$typ as $crate::protocol::traits::Packable>::N;\n                        let actual_len = packed_note.len();\n                        if actual_len != expected_len {\n                            $warn_length_mismatch([note_type_id, expected_len as Field, actual_len as Field]);\n                            Option::none()\n                        } else {\n                            let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n                            // The message discovery process finds settled notes, that is, notes that were created in\n                            // prior transactions and are therefore already part of the note hash tree. The note hash\n                            // for nullification is hence the unique note hash.\n                            $compute_nullifier_unconstrained(note, owner, unique_note_hash)\n                        }\n                    }\n                },\n            );\n        }\n\n        let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n        quote {\n            /// Computes a note's inner nullifier (non-siloed) given its unique note hash, preimage and extra data.\n            ///\n            /// The signature of this function notably matches the `aztec::messages::discovery::ComputeNoteNullifier` type, and so it can be used to call functions from that module such as `do_sync_state` and `attempt_note_discovery`.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_nullifier(\n                unique_note_hash: Field,\n                packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                $if_note_type_id_match_statements\n                else {\n                    $warn_unknown_note_type([note_type_id]);\n                    Option::none()\n                }\n            }\n        }\n    }\n}\n"
    },
    "117": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/aztec.nr",
      "source": "mod compute_note_hash_and_nullifier;\n\nuse crate::{\n    macros::{\n        calls_generation::{\n            external_functions::{generate_external_function_calls, generate_external_function_self_calls_structs},\n            internal_functions::generate_call_internal_struct,\n        },\n        dispatch::generate_public_dispatch,\n        emit_public_init_nullifier::generate_emit_public_init_nullifier,\n        internals_functions_generation::{create_fn_abi_exports, process_functions},\n        storage::STORAGE_LAYOUT_NAME,\n        utils::{is_fn_contract_library_method, is_fn_external, is_fn_internal, is_fn_test, module_has_storage},\n    },\n    messages::discovery::CustomMessageHandler,\n};\n\nuse compute_note_hash_and_nullifier::generate_contract_library_methods_compute_note_hash_and_nullifier;\n\n/// Configuration for the [`aztec`] macro.\n///\n/// This type lets users override different parts of the default aztec-nr contract behavior, such\n/// as message handling. These are advanced features that require careful understanding of\n/// the behavior of these systems.\n///\n/// ## Examples\n///\n/// ```noir\n/// #[aztec(aztec::macros::AztecConfig::new().custom_message_handler(my_handler))]\n/// contract MyContract { ... }\n/// ```\npub struct AztecConfig {\n    custom_message_handler: Option<CustomMessageHandler<()>>,\n}\n\nimpl AztecConfig {\n    /// Creates a new `AztecConfig` with default values.\n    ///\n    /// Calling `new` is equivalent to invoking the [`aztec`] macro with no parameters. The different methods\n    /// (e.g. [`AztecConfig::custom_message_handler`]) can then be used to change the default behavior.\n    pub comptime fn new() -> Self {\n        Self { custom_message_handler: Option::none() }\n    }\n\n    /// Sets a handler for custom messages.\n    ///\n    /// This enables contracts to process non-standard messages (i.e. any with a message type that is not in\n    /// [`crate::messages::msg_type`]).\n    ///\n    /// `handler` must be a `#[contract_library_method]` function that conforms to the\n    /// [`crate::messages::discovery::CustomMessageHandler`] type signature.\n    pub comptime fn custom_message_handler(_self: Self, handler: CustomMessageHandler<()>) -> Self {\n        Self { custom_message_handler: Option::some(handler) }\n    }\n}\n\n/// Enables aztec-nr features on a `contract`.\n///\n/// All aztec-nr contracts should have this macro invoked on them, as it is the one that processes all contract\n/// functions, notes, storage, generates interfaces for external calls, and creates the message processing\n/// boilerplate.\n///\n/// ## Examples\n///\n/// Most contracts can simply invoke the macro with no parameters, resulting in default aztec-nr behavior:\n/// ```noir\n/// #[aztec]\n/// contract MyContract { ... }\n/// ```\n///\n/// Advanced contracts can use [`AztecConfig`] to customize parts of its behavior, such as message\n/// processing.\n/// ```noir\n/// #[aztec(aztec::macros::AztecConfig::new().custom_message_handler(my_handler))]\n/// contract MyAdvancedContract { ... }\n/// ```\n#[varargs]\npub comptime fn aztec(m: Module, args: [AztecConfig]) -> Quoted {\n    let num_args = args.len();\n    let config = if num_args == 0 {\n        AztecConfig::new()\n    } else if num_args == 1 {\n        args[0]\n    } else {\n        panic(f\"#[aztec] expects 0 or 1 arguments, got {num_args}\")\n    };\n\n    // Functions that don't have #[external(...)], #[contract_library_method], or #[test] are not allowed in contracts.\n    check_each_fn_macroified(m);\n\n    // We generate new functions prefixed with `__aztec_nr_internals__` and we replace the original functions' bodies\n    // with `static_assert(false, ...)` to prevent them from being called directly from within the contract.\n    let functions = process_functions(m);\n\n    // We generate structs and their implementations necessary for convenient functions calls.\n    let interface = generate_contract_interface(m);\n    let self_call_structs = generate_external_function_self_calls_structs(m);\n    let call_internal_struct = generate_call_internal_struct(m);\n\n    // We generate ABI exports for all the external functions in the contract.\n    let fn_abi_exports = create_fn_abi_exports(m);\n\n    // We generate `_compute_note_hash`, `_compute_note_nullifier` (and the deprecated\n    // `_compute_note_hash_and_nullifier` wrapper) and `sync_state` functions only if they are not already implemented.\n    // If they are implemented we just insert empty quotes.\n    let contract_library_method_compute_note_hash_and_nullifier = if !m.functions().any(|f| {\n        // Note that we don't test for `_compute_note_hash` or `_compute_note_nullifier` in order to make this simpler\n        // - users must either implement all three or none.\n        // Down the line we'll remove this check and use `AztecConfig`.\n        f.name() == quote { _compute_note_hash_and_nullifier }\n    }) {\n        generate_contract_library_methods_compute_note_hash_and_nullifier()\n    } else {\n        quote {}\n    };\n    let process_custom_message_option = if config.custom_message_handler.is_some() {\n        let handler = config.custom_message_handler.unwrap();\n        quote { Option::some($handler) }\n    } else {\n        quote { Option::<aztec::messages::discovery::CustomMessageHandler<()>>::none() }\n    };\n\n    let offchain_inbox_sync_option = quote {\n        Option::some(aztec::messages::processing::offchain::sync_inbox)\n    };\n\n    let sync_state_fn_and_abi_export = if !m.functions().any(|f| f.name() == quote { sync_state }) {\n        generate_sync_state(process_custom_message_option, offchain_inbox_sync_option)\n    } else {\n        quote {}\n    };\n\n    if m.functions().any(|f| f.name() == quote { offchain_receive }) {\n        panic(\n            \"User-defined 'offchain_receive' is not allowed. The function is auto-injected by the #[aztec] macro. See https://docs.aztec.network/errors/7\",\n        );\n    }\n    let offchain_receive_fn_and_abi_export = generate_offchain_receive();\n\n    let (has_public_init_nullifier_fn, emit_public_init_nullifier_fn_body) = generate_emit_public_init_nullifier(m);\n    let public_dispatch = generate_public_dispatch(m, has_public_init_nullifier_fn);\n\n    quote {\n        $interface\n        $self_call_structs\n        $call_internal_struct\n        $functions\n        $fn_abi_exports\n        $contract_library_method_compute_note_hash_and_nullifier\n        $public_dispatch\n        $sync_state_fn_and_abi_export\n        $emit_public_init_nullifier_fn_body\n        $offchain_receive_fn_and_abi_export\n    }\n}\n\ncomptime fn generate_contract_interface(m: Module) -> Quoted {\n    let calls = generate_external_function_calls(m);\n\n    let module_name = m.name();\n\n    let has_storage_layout = module_has_storage(m) & STORAGE_LAYOUT_NAME.get(m).is_some();\n    let storage_layout_getter = if has_storage_layout {\n        let storage_layout_name = STORAGE_LAYOUT_NAME.get(m).unwrap();\n        quote {\n            pub fn storage_layout() -> StorageLayoutFields {\n                $storage_layout_name.fields\n            }\n        }\n    } else {\n        quote {}\n    };\n\n    let library_storage_layout_getter = if has_storage_layout {\n        quote {\n            #[contract_library_method]\n            $storage_layout_getter\n        }\n    } else {\n        quote {}\n    };\n\n    quote {\n        pub struct $module_name {\n            pub target_contract: aztec::protocol::address::AztecAddress\n        }\n\n        impl $module_name {\n            $calls\n\n            pub fn at(\n                addr: aztec::protocol::address::AztecAddress\n            ) -> Self {\n                Self { target_contract: addr }\n            }\n\n            pub fn interface() -> Self {\n                Self { target_contract: aztec::protocol::address::AztecAddress::zero() }\n            }\n\n            $storage_layout_getter\n        }\n\n        #[contract_library_method]\n        pub fn at(\n            addr: aztec::protocol::address::AztecAddress\n        ) -> $module_name {\n            $module_name { target_contract: addr }\n        }\n\n        #[contract_library_method]\n        pub fn interface() -> $module_name {\n            $module_name { target_contract: aztec::protocol::address::AztecAddress::zero() }\n        }\n\n        $library_storage_layout_getter\n\n    }\n}\n\n/// Generates the `sync_state` utility function that performs message discovery.\ncomptime fn generate_sync_state(process_custom_message_option: Quoted, offchain_inbox_sync_option: Quoted) -> Quoted {\n    quote {\n        pub struct sync_state_parameters {\n            pub scope: aztec::protocol::address::AztecAddress,\n        }\n\n        #[abi(functions)]\n        pub struct sync_state_abi {\n            parameters: sync_state_parameters,\n        }\n\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n        unconstrained fn sync_state(scope: aztec::protocol::address::AztecAddress) {\n            let address = aztec::context::UtilityContext::new().this_address();\n            aztec::messages::discovery::do_sync_state(\n                address,\n                _compute_note_hash,\n                _compute_note_nullifier,\n                $process_custom_message_option,\n                $offchain_inbox_sync_option,\n                scope,\n            );\n        }\n    }\n}\n\n/// Generates an `offchain_receive` utility function that lets callers add messages to the offchain message inbox.\n///\n/// For more details, see `aztec::messages::processing::offchain::receive`.\ncomptime fn generate_offchain_receive() -> Quoted {\n    quote {\n        pub struct offchain_receive_parameters {\n            pub messages: BoundedVec<\n                aztec::messages::processing::offchain::OffchainMessage,\n                aztec::messages::processing::offchain::MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL,\n            >,\n        }\n\n        #[abi(functions)]\n        pub struct offchain_receive_abi {\n            parameters: offchain_receive_parameters,\n        }\n\n        /// Receives offchain messages into this contract's offchain inbox for subsequent processing.\n        ///\n        /// Each message is routed to the inbox scoped to its `recipient` field.\n        ///\n        /// For more details, see `aztec::messages::processing::offchain::receive`.\n        ///\n        /// This function is automatically injected by the `#[aztec]` macro.\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n        unconstrained fn offchain_receive(\n            messages: BoundedVec<\n                aztec::messages::processing::offchain::OffchainMessage,\n                aztec::messages::processing::offchain::MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL,\n            >,\n        ) {\n            let address = aztec::context::UtilityContext::new().this_address();\n            aztec::messages::processing::offchain::receive(address, messages);\n        }\n    }\n}\n\n/// Checks that all functions in the module have a context macro applied.\n///\n/// Non-macroified functions are not allowed in contracts. They must all be one of\n/// [`crate::macros::functions::external`], [`crate::macros::functions::internal`] or `test`.\ncomptime fn check_each_fn_macroified(m: Module) {\n    for f in m.functions() {\n        let name = f.name();\n        if !is_fn_external(f) & !is_fn_contract_library_method(f) & !is_fn_internal(f) & !is_fn_test(f) {\n            // We  don't suggest that #[contract_library_method] is allowed because we don't want to introduce another\n            // concept\n            panic(\n                f\"Function {name} must be marked as either #[external(...)], #[internal(...)], or #[test]\",\n            );\n        }\n    }\n}\n"
    },
    "119": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/calls_generation/external_functions_stubs.nr",
      "source": "//! Stubs are auto-generated wrapper functions that provide an ergonomic interface for cross-contract calls. ! Instead\n// of manually serializing arguments and creating call interfaces, stubs allow natural syntax, e.g. for ! enqueuing\n// calls to public functions: ! !   ExternalContract.at(address).some_method(arg1, arg2).enqueue()\n\nuse crate::macros::utils::compute_fn_selector;\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::unquote;\n\ncomptime global FROM_FIELD: TypedExpr = {\n    let from_field_trait = quote { crate::protocol::traits::FromField }.as_trait_constraint();\n    let function_selector_typ = quote { crate::protocol::abis::function_selector::FunctionSelector }.as_type();\n    function_selector_typ.get_trait_impl(from_field_trait).unwrap().methods().filter(|m| {\n        m.name() == quote { from_field }\n    })[0]\n        .as_typed_expr()\n};\n\n/// Utility function creating stubs used by all the stub functions in this file.\ncomptime fn create_stub_base(f: FunctionDefinition) -> (Quoted, Quoted, Quoted, Quoted, u32, Quoted, u32, Field) {\n    // Dear privacy adventurer, chances are, you've command+clicked on the name of an external function call -- seeking\n    // to view that function -- only to end up here. Here's an explanation: The external contract that you're calling\n    // was likely annotated with the `#[aztec]` annotation -- as all good aztec contracts are. This triggers a macro\n    // which generates a \"contract interface\" for that contract, which is effectively a pretty interface that gives\n    // natural contract calling semantics:\n    //\n    // `MyImportedContract.at(some_address).my_method(arg1, arg2).enqueue();\n    //\n    // Unfortunately, the usage of macros makes it a bit of a black box. To actually view the target function, you\n    // could instead command+click on `MyImportedContract`, or you can just manually search it. If you want to view the\n    // noir code that gets generated by this macro, you can use `nargo expand` on your contract.\n    let fn_name = f.name();\n    let fn_parameters = f.parameters();\n    let fn_parameters_list = fn_parameters.map(|(name, typ): (Quoted, Type)| quote { $name: $typ }).join(quote {,});\n\n    let (serialized_args_array_construction, serialized_args_array_len_quote, serialized_args_array_name) =\n        derive_serialization_quotes(fn_parameters, false);\n    let serialized_args_array_len: u32 = unquote!(quote { ($serialized_args_array_len_quote) as u32 });\n\n    let fn_name_str = f\"\\\"{fn_name}\\\"\".quoted_contents();\n    let fn_name_len: u32 = unquote!(quote { $fn_name_str.as_bytes().len()});\n    let fn_selector: Field = compute_fn_selector(f.name(), f.parameters());\n\n    (\n        fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name,\n        serialized_args_array_len, fn_name_str, fn_name_len, fn_selector,\n    )\n}\n\npub(crate) comptime fn create_private_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            aztec::context::calls::PrivateCall::new(\n                self.target_contract,\n                selector,\n                $fn_name_str,\n                $serialized_args_array_name,\n            )\n        }\n    }\n}\n\npub(crate) comptime fn create_private_static_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PrivateStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            aztec::context::calls::PrivateStaticCall::new(\n                self.target_contract,\n                selector,\n                $fn_name_str,\n                $serialized_args_array_name,\n            )\n        }\n    }\n}\n\npub(crate) comptime fn create_public_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            aztec::context::calls::PublicCall::new(\n                self.target_contract,\n                selector,\n                $fn_name_str,\n                $serialized_args_array_name,\n            )\n        }\n    }\n}\n\npub(crate) comptime fn create_public_static_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::PublicStaticCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            aztec::context::calls::PublicStaticCall::new(\n                self.target_contract,\n                selector,\n                $fn_name_str,\n                $serialized_args_array_name,\n            )\n        }\n    }\n}\n\npub(crate) comptime fn create_utility_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, serialized_args_array_len, fn_name_str, fn_name_len, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> aztec::context::calls::UtilityCall<$fn_name_len, $serialized_args_array_len, $fn_return_type> {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            aztec::context::calls::UtilityCall::new(\n                self.target_contract,\n                selector,\n                $fn_name_str,\n                $serialized_args_array_name,\n            )\n        }\n    }\n}\n\n// Self-call stub generation functions for CallSelf, CallSelfStatic, EnqueueSelf, and EnqueueSelfStatic structs. Unlike\n// the stubs above, the self-call stubs directly perform the call instead of returning a struct that can be later used\n// to perform the call.\n\n/// Creates a stub for calling a private function (or static private function if `is_static` is true) from private\n/// context (for CallSelf<&mut PrivateContext> and CallSelfStatic<&mut PrivateContext>).\npub comptime fn create_private_self_call_stub(f: FunctionDefinition, is_static: bool) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, _, _, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            let args_hash = aztec::hash::hash_args($serialized_args_array_name);\n            aztec::oracle::execution_cache::store($serialized_args_array_name, args_hash);\n            let returns_hash = self.context.call_private_function_with_args_hash(\n                self.address,\n                selector,\n                args_hash,\n                $is_static\n            );\n            returns_hash.get_preimage()\n        }\n    }\n}\n\n/// Creates a stub for calling a public function from public context (for CallSelf<PublicContext>)\npub comptime fn create_public_self_call_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n    // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n    // unconstrained function. This is not a priority right now.\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            unsafe {\n                aztec::context::calls::PublicCall::new(\n                    self.address,\n                    selector,\n                    $fn_name_str,\n                    $serialized_args_array_name,\n                ).call(self.context)\n            }\n        }\n    }\n}\n\n/// Creates a static stub for calling a public view function from public context (for CallSelfStatic<PublicContext>)\npub comptime fn create_public_self_call_static_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _, fn_name_str, _, fn_selector) =\n        create_stub_base(f);\n    let fn_return_type = f.return_type();\n\n    // TODO: It makes sense to drop the use of PublicStaticCall struct here and just perform the call directly but\n    // before doing that we need to drop the use of slices from return values because we cannot return slices from an\n    // unconstrained function. This is not a priority right now.\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) -> $fn_return_type {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            unsafe {\n                aztec::context::calls::PublicStaticCall::new(\n                    self.address,\n                    selector,\n                    $fn_name_str,\n                    $serialized_args_array_name,\n                ).view(self.context)\n            }\n        }\n    }\n}\n\n/// Creates a static stub for enqueuing a public view function from private context (for EnqueueSelfStatic<&mut\n/// PrivateContext>)\npub comptime fn create_public_self_enqueue_static_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n        create_stub_base(f);\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n            let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n            aztec::oracle::execution_cache::store(calldata, calldata_hash);\n            self.context.call_public_function_with_calldata_hash(\n                self.address,\n                calldata_hash,\n                /*is_static_call=*/ true,\n                /*hide_msg_sender=*/ false,\n            );\n        }\n    }\n}\n\n/// Creates a stub for enqueuing a public function from private context (for EnqueueSelf<&mut PrivateContext>)\npub comptime fn create_public_self_enqueue_stub(f: FunctionDefinition) -> Quoted {\n    let (fn_name, fn_parameters_list, serialized_args_array_construction, serialized_args_array_name, _serialized_args_array_len, _fn_name_str, _fn_name_len, fn_selector) =\n        create_stub_base(f);\n\n    quote {\n        pub fn $fn_name(self, $fn_parameters_list) {\n            $serialized_args_array_construction\n            let selector = $FROM_FIELD($fn_selector);\n            let calldata = [aztec::protocol::traits::ToField::to_field(selector)].concat($serialized_args_array_name);\n            let calldata_hash = aztec::hash::hash_calldata_array(calldata);\n            aztec::oracle::execution_cache::store(calldata, calldata_hash);\n            self.context.call_public_function_with_calldata_hash(\n                self.address,\n                calldata_hash,\n                /*is_static_call=*/ false,\n                /*hide_msg_sender=*/ false,\n            );\n        }\n    }\n}\n"
    },
    "120": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/calls_generation/internal_functions.nr",
      "source": "//! Generates functionality such that the following API for performing calls to `#[internal(\"...\")]` functions is\n//! available:\n//!\n//! ```noir\n//! self.internal.my_internal_function(...)\n//! ```\n//!\n//! Injected into the contract by the `#[aztec]` macro.\n\nuse crate::macros::internals_functions_generation::internal_functions_registry;\n\n/// Generates a method for the `CallInternal` struct that makes a call to the `#[internal(\"private\")]` function `f`.\ncomptime fn generate_private_internal_function_call(f: FunctionDefinition) -> Quoted {\n    let original_function_name = f.name();\n    let original_return_type = f.return_type();\n    let original_params =\n        f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params_at_callsite = f.parameters().map(|(param_name, _)| quote { $param_name }).join(quote {, });\n\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n    quote {\n        pub fn $original_function_name(self: CallInternal<&mut aztec::context::PrivateContext>, $original_params) -> $original_return_type {\n            $fn_name(self.context, $params_at_callsite)\n        }\n    }\n}\n\n/// Generates a method for the `CallInternal` struct that makes a call to the `#[internal(\"public\")]` function `f`.\ncomptime fn generate_public_internal_function_call(f: FunctionDefinition) -> Quoted {\n    let original_function_name = f.name();\n    let original_return_type = f.return_type();\n    let original_params =\n        f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params_at_callsite = f.parameters().map(|(param_name, _)| quote { $param_name }).join(quote {, });\n\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n    quote {\n        pub unconstrained fn $original_function_name(self: CallInternal<aztec::context::PublicContext>, $original_params) -> $original_return_type {\n            $fn_name(self.context, $params_at_callsite)\n        }\n    }\n}\n\n/// Generates a struct which is injected into contracts via the `#[aztec]` macro and which is then instantiated in the\n/// external and internal functions' bodies and provided into the `ContractSelf` struct. This then allows for the\n/// following API:\n///\n/// ```noir\n/// self.internal.my_internal_function(arg1, arg2);\n/// ```\npub(crate) comptime fn generate_call_internal_struct(m: Module) -> Quoted {\n    let private_internal_functions = internal_functions_registry::get_private_functions(m);\n    let public_internal_functions = internal_functions_registry::get_public_functions(m);\n\n    let private_internal_functions_calls =\n        private_internal_functions.map(|function| generate_private_internal_function_call(function)).join(quote {});\n    let public_internal_functions_calls =\n        public_internal_functions.map(|function| generate_public_internal_function_call(function)).join(quote {});\n\n    quote {\n        pub struct CallInternal<Context> {\n            pub context: Context,\n        }\n\n        impl CallInternal<&mut aztec::context::PrivateContext> {\n            $private_internal_functions_calls\n        }\n\n        impl CallInternal<aztec::context::PublicContext> {\n            $public_internal_functions_calls\n        }\n    }\n}\n"
    },
    "122": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/dispatch.nr",
      "source": "use crate::macros::internals_functions_generation::external_functions_registry::get_public_functions;\nuse crate::protocol::meta::utils::get_params_len_quote;\nuse crate::utils::cmap::CHashMap;\nuse super::functions::initialization_utils::EMIT_PUBLIC_INIT_NULLIFIER_FN_NAME;\nuse super::utils::compute_fn_selector;\nuse std::panic;\n\n/// Generates a `public_dispatch` function for an Aztec contract module `m`.\n///\n/// The generated function dispatches public calls based on selector to the appropriate contract function. If\n/// `generate_emit_public_init_nullifier` is true, it also handles dispatch to the macro-generated\n/// `__emit_public_init_nullifier` function.\npub comptime fn generate_public_dispatch(m: Module, generate_emit_public_init_nullifier: bool) -> Quoted {\n    let functions = get_public_functions(m);\n\n    let unit = get_type::<()>();\n\n    let seen_selectors = &mut CHashMap::<Field, Quoted>::new();\n\n    let mut ifs = functions.map(|function: FunctionDefinition| {\n        let parameters = function.parameters();\n        let return_type = function.return_type();\n\n        let fn_name = function.name();\n        let selector: Field = compute_fn_selector(fn_name, parameters);\n\n        // Since function selectors are computed as the first 4 bytes of the hash of the function signature, it's\n        // possible to have collisions. With the following check, we ensure it doesn't happen within the same contract.\n        let existing_fn = seen_selectors.get(selector);\n        if existing_fn.is_some() {\n            let existing_fn = existing_fn.unwrap();\n            panic(\n                f\"Public function selector collision detected between functions '{fn_name}' and '{existing_fn}'\",\n            );\n        }\n        seen_selectors.insert(selector, fn_name);\n\n        let params_len_quote = get_params_len_quote(parameters);\n\n        let initial_read = if parameters.len() == 0 {\n            quote {}\n        } else {\n            // The initial calldata_copy offset is 1 to skip the Field selector The expected calldata is the\n            // serialization of\n            // - FunctionSelector: the selector of the function intended to dispatch\n            // - Parameters: the parameters of the function intended to dispatch That is, exactly what is expected for\n            // a call to the target function, but with a selector added at the beginning.\n            quote {\n                let input_calldata: [Field; $params_len_quote] = aztec::oracle::avm::calldata_copy(1, $params_len_quote);\n                let mut reader = aztec::protocol::utils::reader::Reader::new(input_calldata);\n            }\n        };\n\n        let parameter_index: &mut u32 = &mut 0;\n        let reads = parameters.map(|param: (Quoted, Type)| {\n            let parameter_index_value = *parameter_index;\n            let param_name = f\"arg{parameter_index_value}\".quoted_contents();\n            let param_type = param.1;\n            let read = quote {\n                let $param_name: $param_type = aztec::protocol::traits::Deserialize::stream_deserialize(&mut reader);\n            };\n            *parameter_index += 1;\n            quote { $read }\n        });\n        let read = reads.join(quote { });\n\n        let mut args = @[];\n        for parameter_index in 0..parameters.len() {\n            let param_name = f\"arg{parameter_index}\".quoted_contents();\n            args = args.push_back(quote { $param_name });\n        }\n\n        // We call a function whose name is prefixed with `__aztec_nr_internals__`. This is necessary because the\n        // original function is intentionally made uncallable, preventing direct invocation within the contract.\n        // Instead, a new function with the same name, but prefixed by `__aztec_nr_internals__`, has been generated to\n        // be called here. For more details see the `process_functions` function.\n        let name = f\"__aztec_nr_internals__{fn_name}\".quoted_contents();\n        let args = args.join(quote { , });\n        let call = quote { $name($args) };\n\n        let return_code = if return_type == unit {\n            quote {\n                $call;\n                // Force early return.\n                aztec::oracle::avm::avm_return([]);\n            }\n        } else {\n            quote {\n                let return_value = aztec::protocol::traits::Serialize::serialize($call);\n                aztec::oracle::avm::avm_return(return_value.as_vector());\n            }\n        };\n\n        let if_ = quote {\n            if selector == $selector {\n                $initial_read\n                $read\n                $return_code\n            }\n        };\n        if_\n    });\n\n    // If we injected the auto-generated public function to emit the public initialization nullifier, then\n    // we'll also need to handle its dispatch.\n    if generate_emit_public_init_nullifier {\n        let name = EMIT_PUBLIC_INIT_NULLIFIER_FN_NAME;\n        let init_nullifier_selector: Field = compute_fn_selector(name, @[]);\n\n        ifs = ifs.push_back(\n            quote {\n            if selector == $init_nullifier_selector {\n                $name();\n                aztec::oracle::avm::avm_return([]);\n            }\n        },\n        );\n    }\n\n    if ifs.len() == 0 {\n        // No dispatch function if there are no public functions\n        quote {}\n    } else {\n        let ifs = ifs.push_back(quote { panic(f\"Unknown selector {selector}\") });\n        let dispatch = ifs.join(quote {  });\n\n        let body = quote {\n            // We mark this as public because our whole system depends on public functions having this attribute.\n            #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n            pub unconstrained fn public_dispatch(selector: Field) {\n                $dispatch\n            }\n        };\n\n        body\n    }\n}\n\ncomptime fn get_type<T>() -> Type {\n    let t: T = std::mem::zeroed();\n    std::meta::type_of(t)\n}\n"
    },
    "126": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/functions/initialization_utils.nr",
      "source": "use crate::protocol::{\n    abis::function_selector::FunctionSelector,\n    address::AztecAddress,\n    constants::{\n        DOM_SEP__INITIALIZER, DOM_SEP__PRIVATE_INITIALIZATION_NULLIFIER, DOM_SEP__PUBLIC_INITIALIZATION_NULLIFIER,\n    },\n    hash::poseidon2_hash_with_separator,\n    traits::ToField,\n};\nuse std::meta::{ctstring::AsCtString, unquote};\n\nuse crate::{\n    context::{PrivateContext, PublicContext, UtilityContext},\n    macros::{\n        internals_functions_generation::external_functions_registry::get_public_functions, utils::fn_has_noinitcheck,\n    },\n    nullifier::utils::compute_nullifier_existence_request,\n    oracle::{\n        get_contract_instance::{\n            get_contract_instance, get_contract_instance_deployer_avm, get_contract_instance_initialization_hash_avm,\n        },\n        nullifiers::check_nullifier_exists,\n    },\n};\n\n/// The name of the auto-generated function that emits the public initialization nullifier.\n///\n/// This function is injected into the public dispatch table for contracts with initializers.\npub(crate) comptime global EMIT_PUBLIC_INIT_NULLIFIER_FN_NAME: Quoted = quote { __emit_public_init_nullifier };\n\n/// Returns `true` if the module has any public functions that require initialization checks (i.e. that don't have\n/// `#[noinitcheck]`). If all public functions skip initialization checks, there's no point emitting the public\n/// initialization nullifier since nothing will check it.\npub(crate) comptime fn has_public_init_checked_functions(m: Module) -> bool {\n    get_public_functions(m).any(|f: FunctionDefinition| !fn_has_noinitcheck(f))\n}\n\n/// Selector for `EMIT_PUBLIC_INIT_NULLIFIER_FN_NAME`, derived at comptime so it stays in sync.\nglobal EMIT_PUBLIC_INIT_NULLIFIER_SELECTOR: FunctionSelector = comptime {\n    let name = EMIT_PUBLIC_INIT_NULLIFIER_FN_NAME;\n    let sig = f\"{name}()\".as_ctstring();\n    unquote!(quote { FunctionSelector::from_signature($sig) })\n};\n\n/// Emits (only) the public initialization nullifier.\n///\n/// This function is called by the aztec-nr auto-generated external public contract function (enqueued by private\n/// [`initializer`](crate::macros::functions::initializer) functions), and also by\n/// [`mark_as_initialized_from_public_initializer`] for public initializers.\n///\n/// # Warning\n///\n/// This should not be called manually. Incorrect use can leave the contract in a broken initialization state (e.g.\n/// emitting the public nullifier without the private one). The macro-generated code handles this automatically.\npub fn mark_as_initialized_public(context: PublicContext) {\n    let init_nullifier = compute_public_initialization_nullifier(context.this_address());\n    context.push_nullifier(init_nullifier);\n}\n\nfn mark_as_initialized_private(context: &mut PrivateContext) {\n    let address = (*context).this_address();\n    let instance = get_contract_instance(address);\n    let init_nullifier = compute_private_initialization_nullifier(address, instance.initialization_hash);\n    context.push_nullifier(init_nullifier);\n}\n\n/// Emits the private initialization nullifier and, if relevant, enqueues the emission of the public one.\n///\n/// If the contract has public functions that perform initialization checks (i.e. that don't have `#[noinitcheck]`),\n/// this also enqueues a call to the auto-generated `__emit_public_init_nullifier` function so the public\n/// initialization nullifier is emitted in public. Called by private\n/// [`initializer`](crate::macros::functions::initializer) macros.\npub fn mark_as_initialized_from_private_initializer(context: &mut PrivateContext, emit_public_init_nullifier: bool) {\n    mark_as_initialized_private(context);\n    if emit_public_init_nullifier {\n        context.call_public_function((*context).this_address(), EMIT_PUBLIC_INIT_NULLIFIER_SELECTOR, [], false);\n    }\n}\n\n/// Emits both initialization nullifiers (private and public).\n///\n/// Called by public [`initializer`](crate::macros::functions::initializer) macros, since public initializers must set\n/// both so that both private and public functions see the contract as initialized.\npub fn mark_as_initialized_from_public_initializer(context: PublicContext) {\n    let address = context.this_address();\n    // `get_contract_instance_initialization_hash_avm` returns None when there is no deployed contract instance at the\n    // given address. This cannot happen here because we're querying `this_address()`, i.e. the contract that is\n    // currently executing, which by definition must have been deployed.\n    let init_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n    let private_nullifier = compute_private_initialization_nullifier(address, init_hash);\n    context.push_nullifier(private_nullifier);\n    mark_as_initialized_public(context);\n}\n\n/// Asserts that the contract has been initialized, from public's perspective.\n///\n/// Checks that the public initialization nullifier exists.\npub fn assert_is_initialized_public(context: PublicContext) {\n    let init_nullifier = compute_public_initialization_nullifier(context.this_address());\n    // Safety: the public initialization nullifier is only ever emitted by public functions, and so the timing\n    // concerns from nullifier_exists_unsafe do not apply. Additionally, it is emitted after all initializer\n    // functions have run, so initialization is guaranteed to be complete by the time it exists.\n    assert(context.nullifier_exists_unsafe(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\n/// Asserts that the contract has been initialized, from private's perspective.\n///\n/// Checks that the private initialization nullifier exists.\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n    let address = context.this_address();\n    let instance = get_contract_instance(address);\n    let init_nullifier = compute_private_initialization_nullifier(address, instance.initialization_hash);\n    let nullifier_existence_request = compute_nullifier_existence_request(init_nullifier, address);\n    context.assert_nullifier_exists(nullifier_existence_request);\n}\n\n/// Asserts that the contract has been initialized, from a utility function's perspective.\n///\n/// Only checks the private initialization nullifier in the settled nullifier tree. Since both nullifiers are emitted\n/// in the same transaction, the private nullifier's presence in settled state guarantees the public one is also\n/// settled.\npub unconstrained fn assert_is_initialized_utility(context: UtilityContext) {\n    let address = context.this_address();\n    let instance = get_contract_instance(address);\n    let initialization_nullifier = compute_private_initialization_nullifier(address, instance.initialization_hash);\n    assert(check_nullifier_exists(initialization_nullifier), \"Not initialized\");\n}\n\n/// Computes the private initialization nullifier for a contract.\n///\n/// Including `init_hash` ensures that an observer who knows only the contract address cannot reconstruct this value\n/// and scan the nullifier tree to determine initialization status. `init_hash` is only known to parties that hold\n/// the contract instance.\npub fn compute_private_initialization_nullifier(address: AztecAddress, init_hash: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [address.to_field(), init_hash],\n        DOM_SEP__PRIVATE_INITIALIZATION_NULLIFIER,\n    )\n}\n\nfn compute_public_initialization_nullifier(address: AztecAddress) -> Field {\n    poseidon2_hash_with_separator(\n        [address.to_field()],\n        DOM_SEP__PUBLIC_INITIALIZATION_NULLIFIER,\n    )\n}\n\n// Used by `create_assert_correct_initializer_args` (you won't find it through searching)\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n    let address = context.this_address();\n    let deployer = get_contract_instance_deployer_avm(address).unwrap();\n    let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n    let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n    assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n    assert(\n        (deployer.is_zero()) | (deployer == context.maybe_msg_sender().unwrap()),\n        \"Initializer address is not the contract deployer\",\n    );\n}\n\n// Used by `create_assert_correct_initializer_args` (you won't find it through searching)\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n    let address = context.this_address();\n    let instance = get_contract_instance(address);\n    let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n    assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n    assert(\n        (instance.deployer.is_zero()) | (instance.deployer == context.maybe_msg_sender().unwrap()),\n        \"Initializer address is not the contract deployer\",\n    );\n}\n\n/// This function is not only used in macros but it's also used by external people to check that an instance has been\n/// initialized with the correct constructor arguments. Don't hide this unless you implement factory functionality.\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [init_selector.to_field(), init_args_hash],\n        DOM_SEP__INITIALIZER,\n    )\n}\n"
    },
    "132": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/private.nr",
      "source": "use crate::macros::{\n    functions::initialization_utils::has_public_init_checked_functions,\n    internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n    utils::{\n        fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n        is_fn_view, module_has_initializer, module_has_storage,\n    },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n    let module_has_initializer = module_has_initializer(f.module());\n    let module_has_storage = module_has_storage(f.module());\n\n    // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n    // the Private Kernel Circuit. First we change the function signature so that it also receives\n    // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n    let original_params = f.parameters();\n\n    let original_params_quotes =\n        original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n    let mut body = f.body().as_block().unwrap();\n\n    // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n    // the correct values.\n    let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n    let storage_init = if module_has_storage {\n        // Contract has Storage defined so we initialize it.\n        quote {\n            let storage = Storage::init(&mut context);\n        }\n    } else {\n        // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n        // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n        // and higher constraint counts so we use the unit type `()` instead.\n        quote {\n            let storage = ();\n        }\n    };\n\n    let contract_self_creation = quote {\n        #[allow(unused_variables)]\n        let mut self = {\n            $args_serialization\n            let args_hash = aztec::hash::hash_args($serialized_args_name);\n            let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n            $storage_init\n            let self_address = context.this_address();\n            let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n            let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n            let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n            let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n            let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n            aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal)\n        };\n    };\n\n    let original_function_name = f.name();\n\n    // Modifications introduced by the different marker attributes.\n    let internal_check = if is_fn_only_self(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n        quote { assert(self.msg_sender() == self.address, $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let view_check = if is_fn_view(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n        quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n        let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n        (\n            quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n            quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n        )\n    } else {\n        (quote {}, quote {})\n    };\n\n    // Initialization checks are not included in contracts that don't have initializers.\n    let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n        quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n    } else {\n        quote {}\n    };\n\n    // Phase checks are skipped in functions that request to manually handle phases\n    let initial_phase_store = if fn_has_allow_phase_change(f) {\n        quote {}\n    } else {\n        quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n    };\n\n    let no_phase_change_check = if fn_has_allow_phase_change(f) {\n        quote {}\n    } else {\n        quote {   \n            assert_eq(\n                within_revertible_phase,\n                self.context.in_revertible_phase(),\n                f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n            ); \n        }\n    };\n\n    // Inject the authwit check if the function is marked with #[authorize_once].\n    let authorize_once_check = if fn_has_authorize_once(f) {\n        create_authorize_once_check(f, true)\n    } else {\n        quote {}\n    };\n\n    // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n    // circuit expects.\n    let return_value_var_name = quote { macro__returned__values };\n\n    let return_value_type = f.return_type();\n    let return_value = if body.len() == 0 {\n        quote {}\n    } else if return_value_type != type_of(()) {\n        // The original return value is serialized and hashed before being passed to the context.\n        let (body_without_return, last_body_expr) = body.pop_back();\n        let return_value = last_body_expr.quoted();\n        let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n        let (return_serialization, _, serialized_return_name) =\n            derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n        body = body_without_return;\n\n        quote {\n            $return_value_assignment\n            $return_serialization\n            self.context.set_return_hash($serialized_return_name);\n        }\n    } else {\n        let (body_without_return, last_body_expr) = body.pop_back();\n        if !last_body_expr.has_semicolon()\n            & last_body_expr.as_for().is_none()\n            & last_body_expr.as_assert().is_none()\n            & last_body_expr.as_for_range().is_none()\n            & last_body_expr.as_assert_eq().is_none()\n            & last_body_expr.as_let().is_none() {\n            let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n            body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n                .as_expr()\n                .unwrap());\n        }\n        quote {}\n    };\n\n    let context_finish = quote { self.context.finish() };\n\n    // Preserve all attributes that are relevant to the function's ABI.\n    let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n    let to_prepend = quote {\n        aztec::oracle::version::assert_compatible_oracle_version();\n        $contract_self_creation\n        $initial_phase_store\n        $assert_initializer\n        $init_check\n        $internal_check\n        $view_check\n        $authorize_once_check\n    };\n\n    let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n    // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n    // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n    // to re-enter into a half-initialized contract.\n    let to_append = quote {\n        $return_value\n        $mark_as_initialized\n        $no_phase_change_check\n        $context_finish\n    };\n\n    quote {\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n        $abi_relevant_attributes\n        fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n            $to_prepend\n            $body_quote\n            $to_append\n        }\n    }\n}\n"
    },
    "133": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/public.nr",
      "source": "use crate::macros::{\n    internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n    utils::{\n        fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self, is_fn_view,\n        module_has_initializer, module_has_storage,\n    },\n};\n\npub(crate) comptime fn generate_public_external(f: FunctionDefinition) -> Quoted {\n    let module_has_initializer = module_has_initializer(f.module());\n    let module_has_storage = module_has_storage(f.module());\n\n    // Public functions undergo a lot of transformations from their Aztec.nr form.\n    let original_params = f.parameters();\n\n    let args_len_quote = if original_params.len() == 0 {\n        // If the function has no parameters, we set the args_len to 0.\n        quote { 0 }\n    } else {\n        // The following will give us <type_of_struct_member_1 as Serialize>::N + <type_of_struct_member_2 as\n        // Serialize>::N + ...\n        original_params\n            .map(|(_, param_type): (Quoted, Type)| {\n                quote {\n            <$param_type as $crate::protocol::traits::Serialize>::N\n        }\n            })\n            .join(quote {+})\n    };\n\n    let storage_init = if module_has_storage {\n        quote {\n            let storage = Storage::init(context);\n        }\n    } else {\n        // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPublic requires\n        // a storage struct in its constructor. Using an Option type would lead to worse developer experience and\n        // higher constraint counts so we use the unit type `()` instead.\n        quote {\n            let storage = ();\n        }\n    };\n\n    // Unlike in the private case, in public the `context` does not need to receive the hash of the original params.\n    let contract_self_creation = quote {\n        #[allow(unused_variables)]\n        let mut self = {\n            let context = aztec::context::PublicContext::new(|| {\n            // We start from 1 because we skip the selector for the dispatch function.\n            let serialized_args : [Field; $args_len_quote] = aztec::oracle::avm::calldata_copy(1, $args_len_quote);\n            aztec::hash::hash_args(serialized_args)\n            });\n            $storage_init\n            let self_address = context.this_address();\n            let call_self: CallSelf<aztec::context::PublicContext> = CallSelf { address: self_address, context };\n            let call_self_static: CallSelfStatic<aztec::context::PublicContext> = CallSelfStatic { address: self_address, context };\n            let internal: CallInternal<aztec::context::PublicContext> = CallInternal { context };\n            aztec::contract_self::ContractSelfPublic::new(context, storage, call_self, call_self_static, internal)\n        };\n    };\n\n    let original_function_name = f.name();\n\n    // Modifications introduced by the different marker attributes.\n    let internal_check = if is_fn_only_self(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n        quote { assert(self.msg_sender() == self.address, $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let view_check = if is_fn_view(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n        quote { assert(self.context.is_static_call(), $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n        (\n            quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_public(self.context); },\n            quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_public_initializer(self.context); },\n        )\n    } else {\n        (quote {}, quote {})\n    };\n\n    // Initialization checks are not included in contracts that don't have initializers.\n    let init_check = if module_has_initializer & !fn_has_noinitcheck(f) & !is_fn_initializer(f) {\n        quote { aztec::macros::functions::initialization_utils::assert_is_initialized_public(self.context); }\n    } else {\n        quote {}\n    };\n\n    // Inject the authwit check if the function is marked with #[authorize_once].\n    let authorize_once_check = if fn_has_authorize_once(f) {\n        create_authorize_once_check(f, false)\n    } else {\n        quote {}\n    };\n\n    let to_prepend = quote {\n        $contract_self_creation\n        $assert_initializer\n        $init_check\n        $internal_check\n        $view_check\n        $authorize_once_check\n    };\n\n    // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n    // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n    // to re-enter into a half-initialized contract.\n    let to_append = quote {\n        $mark_as_initialized\n    };\n\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n    let body = f.body();\n    let return_type = f.return_type();\n\n    // New function parameters are the same as the original function's ones.\n    let params = original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    // Preserve all attributes that are relevant to the function's ABI.\n    let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n    // All public functions are automatically made unconstrained, even if they were not marked as such. This is because\n    // instead of compiling into a circuit, they will compile to bytecode that will be later transpiled into AVM\n    // bytecode.\n    quote {\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n        $abi_relevant_attributes\n        unconstrained fn $fn_name($params) -> pub $return_type {\n            $to_prepend\n            $body\n            $to_append\n        }\n    }\n}\n"
    },
    "136": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/internal.nr",
      "source": "use crate::macros::utils::module_has_storage;\n\n/// Generates a private internal function based on the function that was originally marked with #[internal(\"private\")].\n/// For more details on why we do this instead of just transforming the original function, see the documentation of\n/// this module.\npub(crate) comptime fn generate_private_internal(f: FunctionDefinition) -> Quoted {\n    let original_function_name = f.name();\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n    let return_type = f.return_type();\n\n    let original_params =\n        f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params = quote {\n        context: &mut aztec::context::PrivateContext,\n        $original_params\n    };\n\n    let storage_init = if module_has_storage(f.module()) {\n        quote {\n            let storage = Storage::init(context);\n        }\n    } else {\n        quote {\n            let storage = ();\n        }\n    };\n\n    let body = f.body();\n\n    // Internal functions are inlined within external functions. For this reason we mark them with\n    // #[contract_library_method] to prevent them from being compiled as entry points.\n    quote {\n        #[contract_library_method]\n        fn $fn_name($params) -> $return_type {\n            #[allow(unused_variables)]\n            let mut self = {\n                $storage_init\n                let self_address = context.this_address();\n                let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context };\n                let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context };\n                let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context };\n                let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context };\n                let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context };\n                aztec::contract_self::ContractSelfPrivate::new(context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal)\n            };\n            \n            $body\n        }\n    }\n}\n\n/// Generates a public internal function based on the function that was originally marked with #[internal(\"public\")].\n/// For more details on why we do this instead of just transforming the original function, see the documentation of\n/// this module.\npub(crate) comptime fn generate_public_internal(f: FunctionDefinition) -> Quoted {\n    let original_function_name = f.name();\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n    let return_type = f.return_type();\n\n    let original_params =\n        f.parameters().map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params = quote {\n        context: aztec::context::PublicContext,\n        $original_params\n    };\n\n    let storage_init = if module_has_storage(f.module()) {\n        quote {\n            let storage = Storage::init(context);\n        }\n    } else {\n        quote {\n            let storage = ();\n        }\n    };\n\n    let body = f.body();\n\n    // Internal public functions are marked as unconstrained because they are inlined within external public functions,\n    // which are also compiled as unconstrained and later transpiled to AVM bytecode. Since these internal functions\n    // are intended to be inlined, we mark them with #[contract_library_method] to prevent them from being compiled as\n    // entry points.\n    quote {\n        #[contract_library_method]\n        unconstrained fn $fn_name($params) -> $return_type {\n            #[allow(unused_variables)]\n            let mut self = {\n                $storage_init\n                let self_address = context.this_address();\n                let call_self: CallSelf<aztec::context::PublicContext> = CallSelf { address: self_address, context };\n                let call_self_static: CallSelfStatic<aztec::context::PublicContext> = CallSelfStatic { address: self_address, context };\n                let internal: CallInternal<aztec::context::PublicContext> = CallInternal { context };\n                aztec::contract_self::ContractSelfPublic::new(context, storage, call_self, call_self_static, internal)\n            };\n\n            $body\n        }\n    }\n}\n"
    },
    "143": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/mod.nr",
      "source": "use crate::logging::{aztecnr_debug_log, aztecnr_debug_log_format, aztecnr_warn_log_format};\nuse crate::protocol::address::AztecAddress;\n\npub(crate) mod nonce_discovery;\npub(crate) mod partial_notes;\npub(crate) mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n    capsules::CapsuleArray,\n    messages::{\n        discovery::process_message::process_message_ciphertext,\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::note::MAX_NOTE_PACKED_LEN,\n        processing::{\n            get_private_logs, MessageContext, offchain::OffchainInboxSync, OffchainMessageWithContext,\n            pending_tagged_log::PendingTaggedLog, validate_and_store_enqueued_notes_and_events,\n        },\n    },\n    utils::array,\n};\n\npub struct NoteHashAndNullifier {\n    /// The result of [`crate::note::note_interface::NoteHash::compute_note_hash`].\n    pub note_hash: Field,\n    /// The result of [`crate::note::note_interface::NoteHash::compute_nullifier_unconstrained`].\n    ///\n    /// This value is unconstrained, as all of message discovery is unconstrained. It is `None` if the nullifier\n    /// cannot be computed (e.g. because the nullifier hiding key is not available).\n    pub inner_nullifier: Option<Field>,\n}\n\n/// A contract's way of computing note hashes.\n///\n/// Each contract in the network is free to compute their note's hash as they see fit - the hash function itself is not\n/// enshrined or standardized. Some aztec-nr functions however do need to know the details of this computation (e.g.\n/// when finding new notes), which is what this type represents.\n///\n/// This function takes a note's packed content, storage slot, note type ID, address of the emitting contract and\n/// randomness, and attempts to compute its inner note hash (not siloed by address nor uniqued by nonce).\n///\n/// ## Transient Notes\n///\n/// This function is meant to always be used on **settled** notes, i.e. those that have been inserted into the trees\n/// and for which the nonce is known. It is never invoked in the context of a transient note, as those are not involved\n/// in message processing.\n///\n/// ## Automatic Implementation\n///\n/// The [`[#aztec]`](crate::macros::aztec::aztec) macro automatically creates a correct implementation of this function\n/// for each contract by inspecting all note types in use and the storage layout. This injected function is a\n/// `#[contract_library_method]` called `_compute_note_hash`, and it looks something like this:\n///\n/// ```noir\n/// |packed_note, owner, storage_slot, note_type_id, _contract_address, randomness| {\n///     if note_type_id == MyNoteType::get_id() {\n///         if packed_note.len() != MY_NOTE_TYPE_SERIALIZATION_LENGTH {\n///             Option::none()\n///         } else {\n///             let note = MyNoteType::unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n///             Option::some(note.compute_note_hash(owner, storage_slot, randomness))\n///         }\n///     } else if note_type_id == MyOtherNoteType::get_id() {\n///           ... // Similar to above but calling MyOtherNoteType::unpack\n///     } else {\n///         Option::none() // Unknown note type ID\n///     };\n/// }\n/// ```\npub type ComputeNoteHash = unconstrained fn(/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>, /*\n owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress, /*\nrandomness */ Field) -> Option<Field>;\n\n/// A contract's way of computing note nullifiers.\n///\n/// Like [`ComputeNoteHash`], each contract is free to derive nullifiers as they see fit. This function takes the\n/// unique note hash (used as the note hash for nullification for settled notes), plus the note's packed content and\n/// metadata, and attempts to compute the inner nullifier (not siloed by address).\n///\n/// ## Automatic Implementation\n///\n/// The [`[#aztec]`](crate::macros::aztec::aztec) macro automatically creates a correct implementation of this function\n/// for each contract called `_compute_note_nullifier`. It dispatches on `note_type_id` similarly to\n/// [`ComputeNoteHash`], then calls the note's\n/// [`compute_nullifier_unconstrained`](crate::note::note_interface::NoteHash::compute_nullifier_unconstrained) method.\npub type ComputeNoteNullifier = unconstrained fn(/* unique_note_hash */Field, /* packed_note */ BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n/* owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress,\n/* randomness */ Field) -> Option<Field>;\n\n/// Deprecated: use [`ComputeNoteHash`] and [`ComputeNoteNullifier`] instead.\npub type ComputeNoteHashAndNullifier<Env> = unconstrained fn[Env](/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n/* owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress,\n/*randomness */ Field, /* note nonce */ Field) -> Option<NoteHashAndNullifier>;\n\n/// A handler for custom messages.\n///\n/// Contracts that emit custom messages (i.e. any with a message type that is not in [`crate::messages::msg_type`])\n/// need to use [`crate::macros::AztecConfig::custom_message_handler`] with a function of this type in order to\n/// process them. They will otherwise be **silently ignored**.\npub type CustomMessageHandler<Env> = unconstrained fn[Env](\n/* contract_address */AztecAddress,\n/* msg_type_id */ u64,\n/* msg_metadata */ u64,\n/* msg_content */ BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n/* message_context */ MessageContext,\n/* scope */ AztecAddress);\n\n/// Synchronizes the contract's private state with the network.\n///\n/// As blocks are mined, it is possible for a contract's private state to change (e.g. with new notes being created),\n/// but because these changes are private they will be invisible to most actors. This is the function that processes\n/// new transactions in order to discover new notes, events, and other kinds of private state changes.\n///\n/// The private state will be synchronized up to the block that will be used for private transactions (i.e. the anchor\n/// block. This will typically be close to the tip of the chain.\npub unconstrained fn do_sync_state<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    offchain_inbox_sync: Option<OffchainInboxSync<()>>,\n    scope: AztecAddress,\n) {\n    aztecnr_debug_log!(\"Performing state synchronization\");\n\n    // First we process all private logs, which can contain different kinds of messages e.g. private notes, partial\n    // notes, private events, etc.\n    let logs = get_private_logs(contract_address, scope);\n    logs.for_each(|i, pending_tagged_log: PendingTaggedLog| {\n        if pending_tagged_log.log.len() == 0 {\n            aztecnr_warn_log_format!(\"Skipping empty log from tx {0}\")([pending_tagged_log.context.tx_hash]);\n        } else {\n            aztecnr_debug_log_format!(\"Processing log with tag {0}\")([pending_tagged_log.log.get(0)]);\n\n            // We remove the tag from the pending tagged log and process the message ciphertext contained in it.\n            let message_ciphertext = array::subbvec(pending_tagged_log.log, 1);\n\n            process_message_ciphertext(\n                contract_address,\n                compute_note_hash,\n                compute_note_nullifier,\n                process_custom_message,\n                message_ciphertext,\n                pending_tagged_log.context,\n                scope,\n            );\n        }\n\n        // We need to delete each log from the array so that we won't process them again. `CapsuleArray::for_each`\n        // allows deletion of the current element during iteration, so this is safe.\n        // Note that this (and all other database changes) will only be committed if contract execution succeeds,\n        // including any enqueued validation requests.\n        logs.remove(i);\n    });\n\n    if offchain_inbox_sync.is_some() {\n        let msgs: CapsuleArray<OffchainMessageWithContext> = offchain_inbox_sync.unwrap()(contract_address, scope);\n        msgs.for_each(|i, msg| {\n            process_message_ciphertext(\n                contract_address,\n                compute_note_hash,\n                compute_note_nullifier,\n                process_custom_message,\n                msg.message_ciphertext,\n                msg.message_context,\n                scope,\n            );\n            // The inbox sync returns _a copy_ of messages to process, so we clear them as we do so. This is a\n            // volatile array with the to-process message, not the actual persistent storage of them.\n            msgs.remove(i);\n        });\n    }\n\n    // Then we process all pending partial notes, regardless of whether they were found in the current or previous\n    // executions.\n    partial_notes::fetch_and_process_partial_note_completion_logs(\n        contract_address,\n        compute_note_hash,\n        compute_note_nullifier,\n        scope,\n    );\n\n    // Finally we validate all notes and events that were found as part of the previous processes, resulting in them\n    // being added to PXE's database and retrievable via oracles (get_notes) and our TS API (PXE::getPrivateEvents).\n    validate_and_store_enqueued_notes_and_events(contract_address, scope);\n}\n\nmod test {\n    use crate::{\n        capsules::CapsuleArray,\n        messages::{\n            discovery::{CustomMessageHandler, do_sync_state},\n            logs::note::MAX_NOTE_PACKED_LEN,\n            processing::{\n                offchain::OffchainInboxSync, pending_tagged_log::PendingTaggedLog, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT,\n            },\n        },\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use crate::protocol::address::AztecAddress;\n\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    #[test]\n    unconstrained fn do_sync_state_does_not_panic_on_empty_logs() {\n        let env = TestEnvironment::new();\n\n        let contract_address = AztecAddress { inner: 0xdeadbeef };\n\n        env.utility_context_at(contract_address, |_| {\n            let base_slot = PENDING_TAGGED_LOG_ARRAY_BASE_SLOT;\n\n            let logs: CapsuleArray<PendingTaggedLog> = CapsuleArray::at(contract_address, base_slot, SCOPE);\n            logs.push(PendingTaggedLog { log: BoundedVec::new(), context: std::mem::zeroed() });\n            assert_eq(logs.len(), 1);\n\n            let no_inbox_sync: Option<OffchainInboxSync<()>> = Option::none();\n            let no_handler: Option<CustomMessageHandler<()>> = Option::none();\n            do_sync_state(\n                contract_address,\n                dummy_compute_note_hash,\n                dummy_compute_note_nullifier,\n                no_handler,\n                no_inbox_sync,\n                SCOPE,\n            );\n\n            assert_eq(logs.len(), 0);\n        });\n    }\n\n    unconstrained fn dummy_compute_note_hash(\n        _packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        _owner: AztecAddress,\n        _storage_slot: Field,\n        _note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        Option::none()\n    }\n\n    unconstrained fn dummy_compute_note_nullifier(\n        _unique_note_hash: Field,\n        _packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        _owner: AztecAddress,\n        _storage_slot: Field,\n        _note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        Option::none()\n    }\n}\n"
    },
    "144": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/nonce_discovery.nr",
      "source": "use crate::messages::{discovery::{ComputeNoteHash, ComputeNoteNullifier}, logs::note::MAX_NOTE_PACKED_LEN};\n\nuse crate::logging::{aztecnr_debug_log_format, aztecnr_warn_log_format};\nuse crate::protocol::{\n    address::AztecAddress,\n    constants::MAX_NOTE_HASHES_PER_TX,\n    hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n    traits::ToField,\n};\n\n/// A struct with the discovered information of a complete note, required for delivery to PXE. Note that this is *not*\n/// the complete note information, since it does not include content, storage slot, etc.\npub(crate) struct DiscoveredNoteInfo {\n    pub(crate) note_nonce: Field,\n    pub(crate) note_hash: Field,\n    pub(crate) inner_nullifier: Field,\n}\n\n/// Searches for note nonces that will result in a note that was emitted in a transaction. While rare, it is possible\n/// for multiple notes to have the exact same packed content and storage slot but different nonces, resulting in\n/// different unique note hashes. Because of this this function returns a *vector* of discovered notes, though in most\n/// cases it will contain a single element.\n///\n/// Due to how nonces are computed, this function requires knowledge of the transaction in which the note was created,\n/// more specifically the list of all unique note hashes in it plus the value of its first nullifier.\npub(crate) unconstrained fn attempt_note_nonce_discovery(\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    contract_address: AztecAddress,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_type_id: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) -> BoundedVec<DiscoveredNoteInfo, MAX_NOTE_HASHES_PER_TX> {\n    let discovered_notes = &mut BoundedVec::new();\n\n    aztecnr_debug_log_format!(\n        \"Attempting nonce discovery on {0} potential notes on contract {1} for storage slot {2}\",\n    )(\n        [unique_note_hashes_in_tx.len() as Field, contract_address.to_field(), storage_slot],\n    );\n\n    let maybe_note_hash = compute_note_hash(\n        packed_note,\n        owner,\n        storage_slot,\n        note_type_id,\n        contract_address,\n        randomness,\n    );\n\n    if maybe_note_hash.is_none() {\n        aztecnr_warn_log_format!(\n            \"Unable to compute note hash for note of id {0} with packed length {1}, skipping nonce discovery\",\n        )(\n            [note_type_id, packed_note.len() as Field],\n        );\n    } else {\n        let note_hash = maybe_note_hash.unwrap();\n        let siloed_note_hash = compute_siloed_note_hash(contract_address, note_hash);\n\n        // We need to find nonces (typically just one) that result in the siloed note hash that being uniqued into one\n        // of the transaction's effects.\n        // The nonce is meant to be derived from the index of the note hash in the transaction effects array. However,\n        // due to an issue in the kernels the nonce might actually use any of the possible note hash indices - not\n        // necessarily the one that corresponds to the note hash. Hence, we need to try them all.\n        for i in 0..MAX_NOTE_HASHES_PER_TX {\n            let nonce_for_i = compute_note_hash_nonce(first_nullifier_in_tx, i);\n            let unique_note_hash_for_i = compute_unique_note_hash(nonce_for_i, siloed_note_hash);\n\n            let matching_notes = bvec_filter(\n                unique_note_hashes_in_tx,\n                |unique_note_hash_in_tx| unique_note_hash_in_tx == unique_note_hash_for_i,\n            );\n            if matching_notes.len() > 1 {\n                let identical_note_hashes = matching_notes.len();\n                // Note that we don't actually check that the note hashes array contains unique values, only that the\n                // note we found is unique. We don't expect for this to ever happen (it'd indicate a malicious node or\n                // PXE, which are both assumed to be cooperative) so testing for it just in case is unnecessary, but we\n                // _do_ need to handle it if we find a duplicate.\n                panic(\n                    f\"Received {identical_note_hashes} identical note hashes for a transaction - these should all be unique\",\n                )\n            } else if matching_notes.len() == 1 {\n                let maybe_inner_nullifier_for_i = compute_note_nullifier(\n                    unique_note_hash_for_i,\n                    packed_note,\n                    owner,\n                    storage_slot,\n                    note_type_id,\n                    contract_address,\n                    randomness,\n                );\n\n                if maybe_inner_nullifier_for_i.is_none() {\n                    // TODO: down the line we want to be able to store notes for which we don't know their nullifier,\n                    // e.g. notes that belong to someone that is not us (and for which we therefore don't know their\n                    // associated app-siloed nullifer hiding secret key).\n                    // https://linear.app/aztec-labs/issue/F-265/store-external-notes\n                    aztecnr_warn_log_format!(\n                        \"Unable to compute nullifier of unique note {0} with note type id {1} and owner {2}, skipping PXE insertion\",\n                    )(\n                        [unique_note_hash_for_i, note_type_id, owner.to_field()],\n                    );\n                } else {\n                    // Note that while we did check that the note hash is the preimage of a unique note hash, we\n                    // perform no validations on the nullifier - we fundamentally cannot, since only the application\n                    // knows how to compute nullifiers. We simply trust it to have provided the correct one: if it\n                    // hasn't, then PXE may fail to realize that a given note has been nullified already, and calls to\n                    // the application could result in invalid transactions (with duplicate nullifiers). This is not a\n                    // concern because an application already has more direct means of making a call to it fail the\n                    // transaction.\n                    discovered_notes.push(\n                        DiscoveredNoteInfo {\n                            note_nonce: nonce_for_i,\n                            note_hash,\n                            inner_nullifier: maybe_inner_nullifier_for_i.unwrap(),\n                        },\n                    );\n                }\n                // We don't exit the loop - it is possible (though rare) for the exact same note content to be present\n                // multiple times in the same transaction with different nonces. This typically doesn't happen due to\n                // notes containing random values in order to hide their contents.\n            }\n        }\n    }\n\n    *discovered_notes\n}\n\n// There is no BoundedVec::filter in the stdlib, so we use this until that is implemented.\nunconstrained fn bvec_filter<Env, T, let MAX_LEN: u32>(\n    bvec: BoundedVec<T, MAX_LEN>,\n    filter: fn[Env](T) -> bool,\n) -> BoundedVec<T, MAX_LEN> {\n    let filtered = &mut BoundedVec::new();\n\n    bvec.for_each(|value| {\n        if filter(value) {\n            filtered.push(value);\n        }\n    });\n\n    *filtered\n}\n\nmod test {\n    use crate::{\n        messages::logs::note::MAX_NOTE_PACKED_LEN,\n        note::{\n            note_interface::{NoteHash, NoteType},\n            note_metadata::SettledNoteMetadata,\n            utils::compute_note_hash_for_nullification,\n        },\n        oracle::random::random,\n        test::mocks::mock_note::MockNote,\n        utils::array,\n    };\n\n    use crate::protocol::{\n        address::AztecAddress,\n        hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n        traits::{FromField, Packable},\n    };\n\n    use super::attempt_note_nonce_discovery;\n\n    // This implementation could be simpler, but this serves as a nice example of the expected flow in a real\n    // implementation, and as a sanity check that the interface is sufficient.\n\n    unconstrained fn compute_note_hash(\n        packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        owner: AztecAddress,\n        storage_slot: Field,\n        note_type_id: Field,\n        _contract_address: AztecAddress,\n        randomness: Field,\n    ) -> Option<Field> {\n        if (note_type_id == MockNote::get_id()) & (packed_note.len() == <MockNote as Packable>::N) {\n            let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n            Option::some(note.compute_note_hash(owner, storage_slot, randomness))\n        } else {\n            Option::none()\n        }\n    }\n\n    unconstrained fn compute_note_nullifier(\n        unique_note_hash: Field,\n        packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        owner: AztecAddress,\n        _storage_slot: Field,\n        note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        if (note_type_id == MockNote::get_id()) & (packed_note.len() == <MockNote as Packable>::N) {\n            let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n            note.compute_nullifier_unconstrained(owner, unique_note_hash)\n        } else {\n            Option::none()\n        }\n    }\n\n    global VALUE: Field = 7;\n    global FIRST_NULLIFIER_IN_TX: Field = 47;\n    global CONTRACT_ADDRESS: AztecAddress = AztecAddress::from_field(13);\n    global OWNER: AztecAddress = AztecAddress::from_field(14);\n    global STORAGE_SLOT: Field = 99;\n    global RANDOMNESS: Field = 99;\n\n    #[test]\n    unconstrained fn no_note_hashes() {\n        let unique_note_hashes_in_tx = BoundedVec::new();\n        let packed_note = BoundedVec::new();\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            packed_note,\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn failed_hash_computation_is_ignored() {\n        let unique_note_hashes_in_tx = BoundedVec::from_array([random()]);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            |_, _, _, _, _, _| Option::none(),\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::new(),\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn failed_nullifier_computation_is_ignored() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            |_, _, _, _, _, _, _| Option::none(),\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    struct NoteAndData {\n        note: MockNote,\n        note_nonce: Field,\n        note_hash: Field,\n        unique_note_hash: Field,\n        inner_nullifier: Field,\n    }\n\n    unconstrained fn construct_note(value: Field, note_index_in_tx: u32) -> NoteAndData {\n        let note_nonce = compute_note_hash_nonce(FIRST_NULLIFIER_IN_TX, note_index_in_tx);\n\n        let hinted_note = MockNote::new(value)\n            .contract_address(CONTRACT_ADDRESS)\n            .owner(OWNER)\n            .randomness(RANDOMNESS)\n            .storage_slot(STORAGE_SLOT)\n            .note_metadata(SettledNoteMetadata::new(note_nonce).into())\n            .build_hinted_note();\n        let note = hinted_note.note;\n\n        let note_hash = note.compute_note_hash(OWNER, STORAGE_SLOT, RANDOMNESS);\n        let unique_note_hash = compute_unique_note_hash(\n            note_nonce,\n            compute_siloed_note_hash(CONTRACT_ADDRESS, note_hash),\n        );\n        let inner_nullifier = note\n            .compute_nullifier_unconstrained(OWNER, compute_note_hash_for_nullification(hinted_note))\n            .expect(f\"Could not compute nullifier for note owned by {OWNER}\");\n\n        NoteAndData { note, note_nonce, note_hash, unique_note_hash, inner_nullifier }\n    }\n\n    #[test]\n    unconstrained fn single_note() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test]\n    unconstrained fn multiple_notes_same_preimage() {\n        let first_note_index_in_tx = 3;\n        let first_note_and_data = construct_note(VALUE, first_note_index_in_tx);\n\n        let second_note_index_in_tx = 5;\n        let second_note_and_data = construct_note(VALUE, second_note_index_in_tx);\n\n        // Both notes have the same preimage (and therefore packed representation), so both should be found in the same\n        // call.\n        assert_eq(first_note_and_data.note, second_note_and_data.note);\n        let packed_note = first_note_and_data.note.pack();\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(first_note_index_in_tx, first_note_and_data.unique_note_hash);\n        unique_note_hashes_in_tx.set(second_note_index_in_tx, second_note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(packed_note),\n        );\n\n        assert_eq(discovered_notes.len(), 2);\n\n        assert(discovered_notes.any(|discovered_note| {\n            (discovered_note.note_nonce == first_note_and_data.note_nonce)\n                & (discovered_note.note_hash == first_note_and_data.note_hash)\n                & (discovered_note.inner_nullifier == first_note_and_data.inner_nullifier)\n        }));\n\n        assert(discovered_notes.any(|discovered_note| {\n            (discovered_note.note_nonce == second_note_and_data.note_nonce)\n                & (discovered_note.note_hash == second_note_and_data.note_hash)\n                & (discovered_note.inner_nullifier == second_note_and_data.inner_nullifier)\n        }));\n    }\n\n    #[test]\n    unconstrained fn single_note_misaligned_nonce() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The note is not at the correct index\n        unique_note_hashes_in_tx.set(note_index_in_tx + 1, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test]\n    unconstrained fn single_note_nonce_with_index_past_note_hashes_in_tx() {\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The nonce is computed with an index that does not exist in the tx\n        let note_index_in_tx = unique_note_hashes_in_tx.len() + 5;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        // The note is inserted at an arbitrary index - its true index is out of the array's bounds\n        unique_note_hashes_in_tx.set(2, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test(should_fail_with = \"identical note hashes for a transaction\")]\n    unconstrained fn duplicate_unique_note_hashes() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The same unique note hash is present in two indices in the array, which is not allowed. Note that we don't\n        // test all note hashes for uniqueness, only those that we actually find.\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n        unique_note_hashes_in_tx.set(note_index_in_tx + 1, note_and_data.unique_note_hash);\n\n        let _ = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n    }\n}\n"
    },
    "145": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/partial_notes.nr",
      "source": "use crate::{\n    capsules::CapsuleArray,\n    messages::{\n        discovery::{ComputeNoteHash, ComputeNoteNullifier, nonce_discovery::attempt_note_nonce_discovery},\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::partial_note::{decode_partial_note_private_message, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN},\n        processing::{\n            enqueue_note_for_validation,\n            get_pending_partial_notes_completion_logs,\n            log_retrieval_response::{LogRetrievalResponse, MAX_LOG_CONTENT_LEN},\n        },\n    },\n    utils::array,\n};\n\nuse crate::logging::aztecnr_debug_log_format;\nuse crate::protocol::{address::AztecAddress, hash::sha256_to_field, traits::{Deserialize, Serialize}};\n\n/// The slot in the PXE capsules where we store a `CapsuleArray` of `DeliveredPendingPartialNote`.\npub(crate) global DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT\".as_bytes(),\n);\n\n/// A partial note that was delivered but is still pending completion. Contains the information necessary to find the\n/// log that will complete it and lead to a note being discovered and delivered.\n#[derive(Serialize, Deserialize)]\npub(crate) struct DeliveredPendingPartialNote {\n    pub(crate) owner: AztecAddress,\n    pub(crate) randomness: Field,\n    pub(crate) note_completion_log_tag: Field,\n    pub(crate) note_type_id: Field,\n    pub(crate) packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>,\n}\n\npub(crate) unconstrained fn process_partial_note_private_msg(\n    contract_address: AztecAddress,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    let decoded = decode_partial_note_private_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        // We store the information of the partial note we found in a persistent capsule in PXE, so that we can later\n        // search for the public log that will complete it.\n        let (owner, randomness, note_completion_log_tag, note_type_id, packed_private_note_content) = decoded.unwrap();\n\n        let pending = DeliveredPendingPartialNote {\n            owner,\n            randomness,\n            note_completion_log_tag,\n            note_type_id,\n            packed_private_note_content,\n        };\n\n        CapsuleArray::at(\n            contract_address,\n            DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n            scope,\n        )\n            .push(pending);\n    } else {\n        aztecnr_debug_log_format!(\n            \"Could not decode partial note private message from tx {0}, ignoring\",\n        )(\n            [tx_hash],\n        );\n    }\n}\n\n/// Searches for logs that would result in the completion of pending partial notes, ultimately resulting in the notes\n/// being delivered to PXE if completed.\npub(crate) unconstrained fn fetch_and_process_partial_note_completion_logs(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    scope: AztecAddress,\n) {\n    let pending_partial_notes = CapsuleArray::at(\n        contract_address,\n        DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n        scope,\n    );\n\n    aztecnr_debug_log_format!(\"{} pending partial notes\")([pending_partial_notes.len() as Field]);\n\n    // Each of the pending partial notes might get completed by a log containing its public values. For performance\n    // reasons, we fetch all of these logs concurrently and then process them one by one, minimizing the amount of time\n    // waiting for the node roundtrip.\n    let maybe_completion_logs =\n        get_pending_partial_notes_completion_logs(contract_address, pending_partial_notes, scope);\n\n    // Each entry in the maybe completion logs array corresponds to the entry in the pending partial notes array at the\n    // same index. This means we can use the same index as we iterate through the responses to get both the partial\n    // note and the log that might complete it.\n    assert_eq(maybe_completion_logs.len(), pending_partial_notes.len());\n\n    maybe_completion_logs.for_each(|i, maybe_log: Option<LogRetrievalResponse>| {\n        // We clear the completion logs as we read them so that the array is empty by the time we next query it.\n        // TODO(#14943): use volatile arrays to avoid having to manually clear this.\n        maybe_completion_logs.remove(i);\n\n        let pending_partial_note = pending_partial_notes.get(i);\n\n        if maybe_log.is_none() {\n            aztecnr_debug_log_format!(\"Found no completion logs for partial note with tag {}\")(\n                [pending_partial_note.note_completion_log_tag],\n            );\n\n            // Note that we're not removing the pending partial note from the capsule array, so we will continue\n            // searching for this tagged log when performing message discovery in the future until we either find it or\n            // the entry is somehow removed from the array.\n        } else {\n            aztecnr_debug_log_format!(\"Completion log found for partial note with tag {}\")([\n                pending_partial_note.note_completion_log_tag,\n            ]);\n            let log = maybe_log.unwrap();\n\n            // The first field in the completion log payload is the storage slot, followed by the public note\n            // content fields.\n            let storage_slot = log.log_payload.get(0);\n            let public_note_content: BoundedVec<Field, MAX_LOG_CONTENT_LEN - 1> = array::subbvec(log.log_payload, 1);\n\n            // Public fields are assumed to all be placed at the end of the packed representation, so we combine\n            // the private and public packed fields (i.e. the contents of the private message and public log\n            // plaintext) to get the complete packed content.\n            let complete_packed_note = array::append(\n                pending_partial_note.packed_private_note_content,\n                public_note_content,\n            );\n\n            let discovered_notes = attempt_note_nonce_discovery(\n                log.unique_note_hashes_in_tx,\n                log.first_nullifier_in_tx,\n                compute_note_hash,\n                compute_note_nullifier,\n                contract_address,\n                pending_partial_note.owner,\n                storage_slot,\n                pending_partial_note.randomness,\n                pending_partial_note.note_type_id,\n                complete_packed_note,\n            );\n\n            // TODO(#11627): is there anything reasonable we can do if we get a log but it doesn't result in a note\n            // being found?\n            if discovered_notes.len() == 0 {\n                panic(\n                    f\"A partial note's completion log did not result in any notes being found - this should never happen\",\n                );\n            }\n\n            aztecnr_debug_log_format!(\"Discovered {0} notes for partial note with tag {1}\")([\n                discovered_notes.len() as Field,\n                pending_partial_note.note_completion_log_tag,\n            ]);\n\n            discovered_notes.for_each(|discovered_note| {\n                enqueue_note_for_validation(\n                    contract_address,\n                    pending_partial_note.owner,\n                    storage_slot,\n                    pending_partial_note.randomness,\n                    discovered_note.note_nonce,\n                    complete_packed_note,\n                    discovered_note.note_hash,\n                    discovered_note.inner_nullifier,\n                    log.tx_hash,\n                    scope,\n                );\n            });\n\n            // Because there is only a single log for a given tag, once we've processed the tagged log then we simply\n            // delete the pending work entry, regardless of whether it was actually completed or not.\n            pending_partial_notes.remove(i);\n        }\n    });\n}\n"
    },
    "146": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/private_events.nr",
      "source": "use crate::{\n    event::event_interface::compute_private_serialized_event_commitment,\n    messages::{\n        encoding::MAX_MESSAGE_CONTENT_LEN, logs::event::decode_private_event_message,\n        processing::enqueue_event_for_validation,\n    },\n};\nuse crate::protocol::{address::AztecAddress, logging::debug_log_format, traits::ToField};\n\npub(crate) unconstrained fn process_private_event_msg(\n    contract_address: AztecAddress,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    tx_hash: Field,\n    recipient: AztecAddress,\n) {\n    let decoded = decode_private_event_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        let (event_type_id, randomness, serialized_event) = decoded.unwrap();\n\n        let event_commitment =\n            compute_private_serialized_event_commitment(serialized_event, randomness, event_type_id.to_field());\n\n        enqueue_event_for_validation(\n            contract_address,\n            event_type_id,\n            randomness,\n            serialized_event,\n            event_commitment,\n            tx_hash,\n            recipient,\n        );\n    } else {\n        debug_log_format(\n            \"Could not decode private event message from tx {0}, ignoring\",\n            [tx_hash],\n        );\n    }\n}\n"
    },
    "147": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/private_notes.nr",
      "source": "use crate::{\n    logging::{aztecnr_debug_log_format, aztecnr_warn_log_format},\n    messages::{\n        discovery::{ComputeNoteHash, ComputeNoteNullifier, nonce_discovery::attempt_note_nonce_discovery},\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::note::{decode_private_note_message, MAX_NOTE_PACKED_LEN},\n        processing::enqueue_note_for_validation,\n    },\n    protocol::{address::AztecAddress, constants::MAX_NOTE_HASHES_PER_TX, traits::ToField},\n};\n\npub(crate) unconstrained fn process_private_note_msg(\n    contract_address: AztecAddress,\n    tx_hash: Field,\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    recipient: AztecAddress,\n) {\n    let decoded = decode_private_note_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        let (note_type_id, owner, storage_slot, randomness, packed_note) = decoded.unwrap();\n\n        attempt_note_discovery(\n            contract_address,\n            tx_hash,\n            unique_note_hashes_in_tx,\n            first_nullifier_in_tx,\n            compute_note_hash,\n            compute_note_nullifier,\n            owner,\n            storage_slot,\n            randomness,\n            note_type_id,\n            packed_note,\n            recipient,\n        );\n    } else {\n        aztecnr_debug_log_format!(\n            \"Could not decode private note message from tx {0}, ignoring\",\n        )(\n            [tx_hash],\n        );\n    }\n}\n\n/// Attempts discovery of a note given information about its contents and the transaction in which it is suspected the\n/// note was created.\npub unconstrained fn attempt_note_discovery(\n    contract_address: AztecAddress,\n    tx_hash: Field,\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_type_id: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n    recipient: AztecAddress,\n) {\n    let discovered_notes = attempt_note_nonce_discovery(\n        unique_note_hashes_in_tx,\n        first_nullifier_in_tx,\n        compute_note_hash,\n        compute_note_nullifier,\n        contract_address,\n        owner,\n        storage_slot,\n        randomness,\n        note_type_id,\n        packed_note,\n    );\n\n    if discovered_notes.len() == 0 {\n        // A private note message that results in no discovered notes means none of the computed note hashes matched\n        // any unique note hash in the transaction. This could indicate a malformed or malicious message (e.g. a sender\n        // providing bogus note content).\n        aztecnr_warn_log_format!(\n            \"Discarding private note message from tx {0} for contract {1}: no matching note hash found in the tx\",\n        )(\n            [tx_hash, contract_address.to_field()],\n        );\n    } else {\n        aztecnr_debug_log_format!(\n            \"Discovered {0} notes from a private message for contract {1}\",\n        )(\n            [discovered_notes.len() as Field, contract_address.to_field()],\n        );\n    }\n\n    discovered_notes.for_each(|discovered_note| {\n        enqueue_note_for_validation(\n            contract_address,\n            owner,\n            storage_slot,\n            randomness,\n            discovered_note.note_nonce,\n            packed_note,\n            discovered_note.note_hash,\n            discovered_note.inner_nullifier,\n            tx_hash,\n            recipient,\n        );\n    });\n}\n"
    },
    "148": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/process_message.nr",
      "source": "use crate::messages::{\n    discovery::{\n        ComputeNoteHash, ComputeNoteNullifier, CustomMessageHandler, partial_notes::process_partial_note_private_msg,\n        private_events::process_private_event_msg, private_notes::process_private_note_msg,\n    },\n    encoding::{decode_message, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN},\n    encryption::{aes128::AES128, message_encryption::MessageEncryption},\n    msg_type::{\n        MIN_CUSTOM_MSG_TYPE_ID, PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID, PRIVATE_EVENT_MSG_TYPE_ID, PRIVATE_NOTE_MSG_TYPE_ID,\n    },\n    processing::MessageContext,\n};\n\nuse crate::logging::{aztecnr_debug_log, aztecnr_warn_log_format};\nuse crate::protocol::address::AztecAddress;\n\n/// Processes a message that can contain notes, partial notes, or events.\n///\n/// Notes result in nonce discovery being performed prior to delivery, which requires knowledge of the transaction hash\n/// in which the notes would've been created (typically the same transaction in which the log was emitted), along with\n/// the list of unique note hashes in said transaction and the `compute_note_hash` and `compute_note_nullifier`\n/// functions. Once discovered, the notes are enqueued for validation.\n///\n/// Partial notes result in a pending partial note entry being stored in a PXE capsule, which will later be retrieved\n/// to search for the note's completion public log.\n///\n/// Events are processed by computing an event commitment from the serialized event data and its randomness field, then\n/// enqueueing the event data and commitment for validation.\npub unconstrained fn process_message_ciphertext<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    message_context: MessageContext,\n    recipient: AztecAddress,\n) {\n    let message_plaintext_option = AES128::decrypt(message_ciphertext, recipient, contract_address);\n\n    if message_plaintext_option.is_some() {\n        process_message_plaintext(\n            contract_address,\n            compute_note_hash,\n            compute_note_nullifier,\n            process_custom_message,\n            message_plaintext_option.unwrap(),\n            message_context,\n            recipient,\n        );\n    } else {\n        aztecnr_warn_log_format!(\"Could not decrypt message ciphertext from tx {0}, ignoring\")([message_context.tx_hash]);\n    }\n}\n\npub(crate) unconstrained fn process_message_plaintext<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    message_plaintext: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n    message_context: MessageContext,\n    recipient: AztecAddress,\n) {\n    // The first thing to do after decrypting the message is to determine what type of message we're processing. We\n    // have 3 message types: private notes, partial notes and events.\n\n    // We decode the message to obtain the message type id, metadata and content.\n    let decoded = decode_message(message_plaintext);\n\n    if decoded.is_some() {\n        let (msg_type_id, msg_metadata, msg_content) = decoded.unwrap();\n\n        if msg_type_id == PRIVATE_NOTE_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing private note msg\");\n\n            process_private_note_msg(\n                contract_address,\n                message_context.tx_hash,\n                message_context.unique_note_hashes_in_tx,\n                message_context.first_nullifier_in_tx,\n                compute_note_hash,\n                compute_note_nullifier,\n                msg_metadata,\n                msg_content,\n                recipient,\n            );\n        } else if msg_type_id == PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing partial note private msg\");\n\n            process_partial_note_private_msg(\n                contract_address,\n                msg_metadata,\n                msg_content,\n                message_context.tx_hash,\n                recipient,\n            );\n        } else if msg_type_id == PRIVATE_EVENT_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing private event msg\");\n\n            process_private_event_msg(\n                contract_address,\n                msg_metadata,\n                msg_content,\n                message_context.tx_hash,\n                recipient,\n            );\n        } else if msg_type_id < MIN_CUSTOM_MSG_TYPE_ID {\n            // The message type ID falls in the range reserved for aztec.nr built-in types but wasn't matched above.\n            // This most likely means the message is malformed or a custom message was incorrectly assigned a reserved\n            // ID. Custom message types must use IDs allocated via `custom_msg_type_id`.\n            aztecnr_warn_log_format!(\n                \"Message type ID {0} is in the reserved range but is not recognized, ignoring. See https://docs.aztec.network/errors/3\",\n            )(\n                [msg_type_id as Field],\n            );\n        } else if process_custom_message.is_some() {\n            process_custom_message.unwrap()(\n                contract_address,\n                msg_type_id,\n                msg_metadata,\n                msg_content,\n                message_context,\n                recipient,\n            );\n        } else {\n            // A custom message was received but no handler is configured. This likely means the contract emits custom\n            // messages but forgot to register a handler via `AztecConfig::custom_message_handler`.\n            aztecnr_warn_log_format!(\n                \"Received custom message with type id {0} but no handler is configured, ignoring. See https://docs.aztec.network/errors/2\",\n            )(\n                [msg_type_id as Field],\n            );\n        }\n    } else {\n        aztecnr_warn_log_format!(\"Could not decode message plaintext from tx {0}, ignoring\")([message_context.tx_hash]);\n    }\n}\n"
    },
    "149": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/encoding.nr",
      "source": "// TODO(#12750): don't make these values assume we're using AES.\nuse crate::protocol::constants::PRIVATE_LOG_CIPHERTEXT_LEN;\nuse crate::utils::array;\n\n// We reassign to the constant here to communicate the distinction between a log and a message. In Aztec.nr, unlike in\n// protocol circuits, we have a concept of a message that can be emitted either as a private log or as an offchain\n// message. Message is a piece of data that is to be eventually delivered to a contract via the `process_message(...)`\n// utility function function that is injected by the #[aztec] macro. Note: PRIVATE_LOG_CIPHERTEXT_LEN is an amount of\n// fields, so MESSAGE_CIPHERTEXT_LEN is the size of the message in fields.\npub global MESSAGE_CIPHERTEXT_LEN: u32 = PRIVATE_LOG_CIPHERTEXT_LEN;\n\n// TODO(#12750): The global variables below should not be here as they are AES128 specific.\n// The header plaintext is 2 bytes (ciphertext length), padded to the 16-byte AES block size by PKCS#7.\npub(crate) global HEADER_CIPHERTEXT_SIZE_IN_BYTES: u32 = 16;\n// AES PKCS#7 always adds at least one byte of padding. Since each plaintext field is 32 bytes (a multiple of the\n// 16-byte AES block size), a full 16-byte padding block is always appended.\npub(crate) global AES128_PKCS7_EXPANSION_IN_BYTES: u32 = 16;\n\npub global EPH_PK_X_SIZE_IN_FIELDS: u32 = 1;\n\n// (15 - 1) * 31 - 16 - 16 = 402. Note: We multiply by 31 because ciphertext bytes are stored in fields using\n// bytes_to_fields, which packs 31 bytes per field (since a Field is ~254 bits and can safely store 31 whole bytes).\npub(crate) global MESSAGE_PLAINTEXT_SIZE_IN_BYTES: u32 = (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31\n    - HEADER_CIPHERTEXT_SIZE_IN_BYTES\n    - AES128_PKCS7_EXPANSION_IN_BYTES;\n// The plaintext bytes represent Field values that were originally serialized using fields_to_bytes, which converts\n// each Field to 32 bytes. To convert the plaintext bytes back to fields, we divide by 32. 402 / 32 = 12\npub global MESSAGE_PLAINTEXT_LEN: u32 = MESSAGE_PLAINTEXT_SIZE_IN_BYTES / 32;\n\npub global MESSAGE_EXPANDED_METADATA_LEN: u32 = 1;\n\n// The standard message layout is composed of:\n//  - an initial field called the 'expanded metadata'\n//  - an arbitrary number of fields following that called the 'message content'\n//\n// ```\n// message: [ msg_expanded_metadata, ...msg_content ]\n// ```\n//\n// The expanded metadata itself is interpreted as a u128, of which:\n//  - the upper 64 bits are the message type id\n//  - the lower 64 bits are called the 'message metadata'\n//\n// ```\n// msg_expanded_metadata: [  msg_type_id    |  msg_metadata  ]\n//                        <---  64 bits --->|<--- 64 bits --->\n// ```\n//\n// The meaning of the message metadata and message content depend on the value of the message type id. Note that there\n// is nothing special about the message metadata, it _can_ be considered part of the content. It just has a different\n// name to make it distinct from the message content given that it is not a full field.\n\n/// The maximum length of a message's content, i.e. not including the expanded message metadata.\npub global MAX_MESSAGE_CONTENT_LEN: u32 = MESSAGE_PLAINTEXT_LEN - MESSAGE_EXPANDED_METADATA_LEN;\n\n/// Encodes a message following aztec-nr's standard message encoding. This message can later be decoded with\n/// `decode_message` to retrieve the original values.\n///\n/// - The `msg_type` is an identifier that groups types of messages that are all processed the same way, e.g. private\n/// notes or events. Possible values are defined in `aztec::messages::msg_type`.\n/// - The `msg_metadata` and `msg_content` are the values stored in the message, whose meaning depends on the\n/// `msg_type`. The only special thing about `msg_metadata` that separates it from `msg_content` is that it is a u64\n/// instead of a full Field (due to details of how messages are encoded), allowing applications that can fit values\n/// into this smaller variable to achieve higher data efficiency.\npub fn encode_message<let N: u32>(\n    msg_type: u64,\n    msg_metadata: u64,\n    msg_content: [Field; N],\n) -> [Field; (N + MESSAGE_EXPANDED_METADATA_LEN)] {\n    std::static_assert(\n        msg_content.len() <= MAX_MESSAGE_CONTENT_LEN,\n        \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\",\n    );\n\n    // If MESSAGE_EXPANDED_METADATA_LEN is changed, causing the assertion below to fail, then the destructuring of the\n    // message encoding below must be updated as well.\n    std::static_assert(\n        MESSAGE_EXPANDED_METADATA_LEN == 1,\n        \"unexpected value for MESSAGE_EXPANDED_METADATA_LEN\",\n    );\n    let mut message: [Field; (N + MESSAGE_EXPANDED_METADATA_LEN)] = std::mem::zeroed();\n\n    message[0] = to_expanded_metadata(msg_type, msg_metadata);\n    for i in 0..msg_content.len() {\n        message[MESSAGE_EXPANDED_METADATA_LEN + i] = msg_content[i];\n    }\n\n    message\n}\n\n/// Decodes a standard aztec-nr message, i.e. one created via `encode_message`, returning the original encoded values.\n///\n/// Returns `None` if the message is empty or has invalid (>128 bit) expanded metadata.\n///\n/// Note that `encode_message` returns a fixed size array while this function takes a `BoundedVec`: this is because\n/// prior to decoding the message type is unknown, and consequentially not known at compile time. If working with\n/// fixed-size messages, consider using `BoundedVec::from_array` to convert them.\npub unconstrained fn decode_message(\n    message: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n) -> Option<(u64, u64, BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>)> {\n    Option::some(message)\n        .and_then(|message| {\n            // If MESSAGE_EXPANDED_METADATA_LEN is changed, causing the assertion below to fail, then the destructuring\n            // of the\n            // message encoding below must be updated as well.\n            std::static_assert(\n                MESSAGE_EXPANDED_METADATA_LEN == 1,\n                \"unexpected value for MESSAGE_EXPANDED_METADATA_LEN\",\n            );\n            if message.len() < MESSAGE_EXPANDED_METADATA_LEN {\n                Option::none()\n            } else {\n                Option::some(message.get(0))\n            }\n        })\n        .and_then(|msg_expanded_metadata| from_expanded_metadata(msg_expanded_metadata))\n        .map(|(msg_type_id, msg_metadata)| {\n            let msg_content = array::subbvec(message, MESSAGE_EXPANDED_METADATA_LEN);\n            (msg_type_id, msg_metadata, msg_content)\n        })\n}\n\nglobal U64_SHIFT_MULTIPLIER: Field = 2.pow_32(64);\n\nfn to_expanded_metadata(msg_type: u64, msg_metadata: u64) -> Field {\n    // We use multiplication instead of bit shifting operations to shift the type bits as bit shift operations are\n    // expensive in circuits.\n    let type_field: Field = (msg_type as Field) * U64_SHIFT_MULTIPLIER;\n    let msg_metadata_field = msg_metadata as Field;\n\n    type_field + msg_metadata_field\n}\n\nglobal TWO_POW_128: Field = 2.pow_32(128);\n\n/// Unpacks expanded metadata into (msg_type, msg_metadata). Returns `None` if `input >= 2^128`.\nfn from_expanded_metadata(input: Field) -> Option<(u64, u64)> {\n    if input.lt(TWO_POW_128) {\n        let msg_metadata = (input as u64);\n        let msg_type = ((input - (msg_metadata as Field)) / U64_SHIFT_MULTIPLIER) as u64;\n        // Use division instead of bit shift since bit shifts are expensive in circuits\n        Option::some((msg_type, msg_metadata))\n    } else {\n        Option::none()\n    }\n}\n\nmod tests {\n    use crate::utils::array::subarray::subarray;\n    use super::{\n        decode_message, encode_message, from_expanded_metadata, MAX_MESSAGE_CONTENT_LEN, to_expanded_metadata,\n        TWO_POW_128,\n    };\n\n    global U64_MAX: u64 = (2.pow_32(64) - 1) as u64;\n    global U128_MAX: Field = (2.pow_32(128) - 1);\n\n    #[test]\n    unconstrained fn encode_decode_empty_message(msg_type: u64, msg_metadata: u64) {\n        let encoded = encode_message(msg_type, msg_metadata, []);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_short_message(\n        msg_type: u64,\n        msg_metadata: u64,\n        msg_content: [Field; MAX_MESSAGE_CONTENT_LEN / 2],\n    ) {\n        let encoded = encode_message(msg_type, msg_metadata, msg_content);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), msg_content.len());\n        assert_eq(subarray(decoded_msg_content.storage(), 0), msg_content);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_full_message(\n        msg_type: u64,\n        msg_metadata: u64,\n        msg_content: [Field; MAX_MESSAGE_CONTENT_LEN],\n    ) {\n        let encoded = encode_message(msg_type, msg_metadata, msg_content);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), msg_content.len());\n        assert_eq(subarray(decoded_msg_content.storage(), 0), msg_content);\n    }\n\n    #[test]\n    unconstrained fn to_expanded_metadata_packing() {\n        // Test case 1: All bits set\n        let packed = to_expanded_metadata(U64_MAX, U64_MAX);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 2: Only log type bits set\n        let packed = to_expanded_metadata(U64_MAX, 0);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, 0);\n\n        // Test case 3: Only msg_metadata bits set\n        let packed = to_expanded_metadata(0, U64_MAX);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 4: No bits set\n        let packed = to_expanded_metadata(0, 0);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, 0);\n    }\n\n    #[test]\n    unconstrained fn from_expanded_metadata_packing() {\n        // Test case 1: All bits set\n        let input = U128_MAX as Field;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 2: Only log type bits set\n        let input = (U128_MAX - U64_MAX as Field);\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, 0);\n\n        // Test case 3: Only msg_metadata bits set\n        let input = U64_MAX as Field;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 4: No bits set\n        let input = 0;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, 0);\n    }\n\n    #[test]\n    unconstrained fn to_from_expanded_metadata(original_msg_type: u64, original_msg_metadata: u64) {\n        let packed = to_expanded_metadata(original_msg_type, original_msg_metadata);\n        let (unpacked_msg_type, unpacked_msg_metadata) = from_expanded_metadata(packed).unwrap();\n\n        assert_eq(original_msg_type, unpacked_msg_type);\n        assert_eq(original_msg_metadata, unpacked_msg_metadata);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_max_size_message() {\n        let msg_type_id: u64 = 42;\n        let msg_metadata: u64 = 99;\n        let mut msg_content = [0; MAX_MESSAGE_CONTENT_LEN];\n        for i in 0..MAX_MESSAGE_CONTENT_LEN {\n            msg_content[i] = i as Field;\n        }\n\n        let encoded = encode_message(msg_type_id, msg_metadata, msg_content);\n        let (decoded_type_id, decoded_metadata, decoded_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_type_id, msg_type_id);\n        assert_eq(decoded_metadata, msg_metadata);\n        assert_eq(decoded_content, BoundedVec::from_array(msg_content));\n    }\n\n    #[test(should_fail_with = \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\")]\n    fn encode_oversized_message_fails() {\n        let msg_content = [0; MAX_MESSAGE_CONTENT_LEN + 1];\n        let _ = encode_message(0, 0, msg_content);\n    }\n\n    #[test]\n    unconstrained fn decode_empty_message_returns_none() {\n        assert(decode_message(BoundedVec::new()).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_message_with_oversized_metadata_returns_none() {\n        let message = BoundedVec::from_array([TWO_POW_128]);\n        assert(decode_message(message).is_none());\n    }\n}\n"
    },
    "150": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/encryption/aes128.nr",
      "source": "use crate::protocol::{address::AztecAddress, public_keys::AddressPoint, traits::ToField};\n\nuse crate::{\n    keys::{\n        ecdh_shared_secret::{\n            compute_app_siloed_shared_secret, derive_ecdh_shared_secret, derive_shared_secret_field_mask,\n            derive_shared_secret_subkey,\n        },\n        ephemeral::generate_positive_ephemeral_key_pair,\n    },\n    logging::aztecnr_warn_log_format,\n    messages::{\n        encoding::{\n            EPH_PK_X_SIZE_IN_FIELDS, HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN,\n            MESSAGE_PLAINTEXT_SIZE_IN_BYTES,\n        },\n        encryption::message_encryption::MessageEncryption,\n        logs::arithmetic_generics_utils::{\n            get_arr_of_size__message_bytes__from_PT, get_arr_of_size__message_bytes_padding__from_PT,\n        },\n    },\n    oracle::{aes128_decrypt::try_aes128_decrypt, random::random, shared_secret::get_shared_secret},\n    utils::{\n        array,\n        conversion::{\n            bytes_to_fields::{bytes_from_fields, bytes_to_fields},\n            fields_to_bytes::{fields_to_bytes, try_fields_from_bytes},\n        },\n        point::point_from_x_coord_and_sign,\n    },\n};\n\nuse std::aes128::aes128_encrypt;\n\n/// Computes N close-to-uniformly-random 256 bits from a given app-siloed shared secret.\n///\n/// NEVER re-use the same iv and sym_key. DO NOT call this function more than once with the same s_app.\n///\n/// This function is only known to be safe if s_app is derived from combining a random ephemeral key with an\n/// address point and a contract address. See big comment within the body of the function.\nfn extract_many_close_to_uniformly_random_256_bits_using_poseidon2<let N: u32>(s_app: Field) -> [[u8; 32]; N] {\n    /*\n     * Unsafe because of https://eprint.iacr.org/2010/264.pdf Page 13, Lemma 2 (and the two paragraphs below it).\n    *\n    * If you call this function, you need to be careful and aware of how the arg `s_app` has been derived.\n    *\n    * The paper says that the way you derive aes keys and IVs should be fine with poseidon2 (modelled as a RO),\n    * as long as you _don't_ use Poseidon2 as a PRG to generate the two exponents x & y which multiply to the\n    * shared secret S:\n    *\n    * S = [x*y]*G.\n    *\n    * (Otherwise, you would have to \"key\" poseidon2, i.e. generate a uniformly string K which can be public and\n    * compute Hash(x) as poseidon(K,x)).\n    * In that lemma, k would be 2*254=508, and m would be the number of points on the grumpkin curve (which is\n    * close to r according to the Hasse bound).\n    *\n    * Our shared secret S is [esk * address_sk] * G, and the question is: Can we compute hash(S) using poseidon2\n    * instead of sha256?\n    *\n    * Well, esk is random and not generated with poseidon2, so that's good.\n    * What about address_sk?\n    * Well, address_sk = poseidon2(stuff) + ivsk, so there was some discussion about whether address_sk is\n    * independent of poseidon2. Given that ivsk is random and independent of poseidon2, the address_sk is also\n    * independent of poseidon2.\n    *\n    * Tl;dr: we believe it's safe to hash S = [esk * address_sk] * G using poseidon2, in order to derive a\n    * symmetric key.\n    *\n    * If you're calling this function for a differently-derived `s_app`, be careful.\n    */\n    \n\n    /* The output of this function needs to be 32 random bytes.\n     * A single field won't give us 32 bytes of entropy. So we compute two \"random\" fields, by poseidon-hashing\n    * with two different indices. We then extract the last 16 (big endian) bytes of each \"random\" field.\n    * Note: we use to_be_bytes because it's slightly more efficient. But we have to be careful not to take bytes\n    * from the \"big end\", because the \"big\" byte is not uniformly random over the byte: it only has < 6 bits of\n    * randomness, because it's the big end of a 254-bit field element.\n    */\n\n    let mut all_bytes: [[u8; 32]; N] = std::mem::zeroed();\n    std::static_assert(N < 256, \"N too large\");\n    for k in 0..N {\n        let rand1: Field = derive_shared_secret_subkey(s_app, 2 * k);\n        let rand2: Field = derive_shared_secret_subkey(s_app, 2 * k + 1);\n\n        let rand1_bytes: [u8; 32] = rand1.to_be_bytes();\n        let rand2_bytes: [u8; 32] = rand2.to_be_bytes();\n\n        let mut bytes: [u8; 32] = [0; 32];\n        for i in 0..16 {\n            // We take bytes from the \"little end\" of the be-bytes arrays:\n            let j = 32 - i - 1;\n            bytes[i] = rand1_bytes[j];\n            bytes[16 + i] = rand2_bytes[j];\n        }\n\n        all_bytes[k] = bytes;\n    }\n\n    all_bytes\n}\n\nfn derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits<let N: u32>(\n    many_random_256_bits: [[u8; 32]; N],\n) -> [([u8; 16], [u8; 16]); N] {\n    // Many (sym_key, iv) pairs:\n    let mut many_pairs: [([u8; 16], [u8; 16]); N] = std::mem::zeroed();\n    for k in 0..N {\n        let random_256_bits = many_random_256_bits[k];\n        let mut sym_key = [0; 16];\n        let mut iv = [0; 16];\n        for i in 0..16 {\n            sym_key[i] = random_256_bits[i];\n            iv[i] = random_256_bits[i + 16];\n        }\n        many_pairs[k] = (sym_key, iv);\n    }\n\n    many_pairs\n}\n\npub fn derive_aes_symmetric_key_and_iv_from_shared_secret<let N: u32>(s_app: Field) -> [([u8; 16], [u8; 16]); N] {\n    let many_random_256_bits: [[u8; 32]; N] = extract_many_close_to_uniformly_random_256_bits_using_poseidon2(s_app);\n\n    derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits(many_random_256_bits)\n}\n\npub struct AES128 {}\n\nimpl MessageEncryption for AES128 {\n\n    /// AES128-CBC encryption for Aztec protocol messages.\n    ///\n    /// ## Overview\n    ///\n    /// The plaintext is an array of up to `MESSAGE_PLAINTEXT_LEN` (12) fields. The output is always exactly\n    /// `MESSAGE_CIPHERTEXT_LEN` (15) fields, regardless of plaintext size. All output fields except the\n    /// ephemeral public key are uniformly random `Field` values to any observer without knowledge of the\n    /// shared secret, making all encrypted messages indistinguishable by size or content.\n    ///\n    /// ## PKCS#7 Padding\n    ///\n    /// AES operates on 16-byte blocks, so the plaintext must be padded to a multiple of 16. PKCS#7 padding always\n    /// adds at least 1 byte (so the receiver can always detect and strip it), which means:\n    /// - 1 B plaintext  -> 15 B padding -> 16 B total\n    /// - 15 B plaintext ->  1 B padding -> 16 B total\n    /// - 16 B plaintext -> 16 B padding -> 32 B total (full extra block)\n    ///\n    /// In general: if the plaintext is already a multiple of 16, a full 16-byte padding block is appended.\n    ///\n    /// ## Encryption Steps\n    ///\n    /// **1. Body encryption.** The plaintext fields are serialized to bytes (32 bytes per field) and AES-128-CBC\n    /// encrypted. Since 32 is a multiple of 16, PKCS#7 always adds a full 16-byte padding block (see above):\n    ///\n    /// ```text\n    /// +---------------------------------------------+\n    /// |                   body ct                    |\n    /// |            PlaintextLen*32 + 16 B            |\n    /// +-------------------------------+--------------+\n    /// | encrypted plaintext fields    | PKCS#7 (16B) |\n    /// | (serialized at 32 B each)     |              |\n    /// +-------------------------------+--------------+\n    /// ```\n    ///\n    /// **2. Header encryption.** The byte length of `body_ct` is stored as a 2-byte big-endian integer. This 2-byte\n    /// header plaintext is then AES-encrypted; PKCS#7 pads the remaining 14 bytes to fill one 16-byte AES block,\n    /// producing a 16-byte header ciphertext:\n    ///\n    /// ```text\n    /// +---------------------------+\n    /// |         header ct         |\n    /// |            16 B           |\n    /// +--------+------------------+\n    /// | body ct| PKCS#7 (14B)     |\n    /// | length |                  |\n    /// | (2 B)  |                  |\n    /// +--------+------------------+\n    /// ```\n    ///\n    /// ## Wire Format\n    ///\n    /// Messages are transmitted as fields, not bytes. A field is ~254 bits and can safely store 31 whole bytes, so\n    /// we need to pack our byte data into 31-byte chunks. This packing drives the wire format.\n    ///\n    /// **Step 1 -- Assemble bytes.** The ciphertexts are laid out in a byte array, padded with zero bytes to a\n    /// multiple of 31 so it divides evenly into fields:\n    ///\n    /// ```text\n    /// +------------+-------------------------+---------+\n    /// | header ct  |        body ct          | byte pad|\n    /// |   16 B     | PlaintextLen*32 + 16 B  | (zeros) |\n    /// +------------+-------------------------+---------+\n    /// |<-------- padded to a multiple of 31 B -------->|\n    /// ```\n    ///\n    /// **Step 2 -- Pack and mask.** The byte array is split into 31-byte chunks, each stored in one field. A\n    /// Poseidon2-derived mask (see `derive_shared_secret_field_mask`) is added to each so that the resulting\n    /// fields appear as uniformly random `Field` values to any observer without knowledge of the shared secret,\n    /// hiding the fact that the underlying ciphertext consists of 128-bit AES blocks.\n    ///\n    /// **Step 3 -- Assemble ciphertext.** The ephemeral public key x-coordinate is prepended and random field padding\n    /// is appended to fill to 15 fields:\n    ///\n    /// ```text\n    /// +----------+-------------------------+-------------------+\n    /// | eph_pk.x |  masked message fields   | random field pad  |\n    /// |          | (packed 31 B per field)  |  (fills to 15)    |\n    /// +----------+-------------------------+-------------------+\n    /// |<---------- MESSAGE_CIPHERTEXT_LEN = 15 fields -------->|\n    /// ```\n    ///\n    /// ## Key Derivation\n    ///\n    /// The raw ECDH shared secret point is first app-siloed into a scalar `s_app` by hashing with the contract\n    /// address (see\n    /// [`compute_app_siloed_shared_secret`](crate::keys::ecdh_shared_secret::compute_app_siloed_shared_secret)).\n    /// Two (key, IV) pairs are then derived from `s_app` via indexed Poseidon2 hashing: one pair for the body\n    /// ciphertext and one for the header ciphertext.\n    fn encrypt<let PlaintextLen: u32>(\n        plaintext: [Field; PlaintextLen],\n        recipient: AztecAddress,\n        contract_address: AztecAddress,\n    ) -> [Field; MESSAGE_CIPHERTEXT_LEN] {\n        std::static_assert(\n            PlaintextLen <= MESSAGE_PLAINTEXT_LEN,\n            \"Plaintext length exceeds MESSAGE_PLAINTEXT_LEN\",\n        );\n\n        // AES 128 operates on bytes, not fields, so we need to convert the fields to bytes. (This process is then\n        // reversed when processing the message in `process_message_ciphertext`)\n        let plaintext_bytes = fields_to_bytes(plaintext);\n\n        // Derive ECDH shared secret with recipient using a fresh ephemeral keypair.\n        let (eph_sk, eph_pk) = generate_positive_ephemeral_key_pair();\n\n        let raw_shared_secret = derive_ecdh_shared_secret(\n            eph_sk,\n            recipient\n                .to_address_point()\n                .unwrap_or_else(|| {\n                    aztecnr_warn_log_format!(\n                        \"Attempted to encrypt message for an invalid recipient ({0})\",\n                    )(\n                        [recipient.to_field()],\n                    );\n\n                    // Safety: if the recipient is an invalid address, then it is not possible to encrypt a message for\n                    // them because we cannot establish a shared secret. This is never expected to occur during normal\n                    // operation. However, it is technically possible for us to receive an invalid address, and we must\n                    // therefore handle it. We could simply fail, but that'd introduce a potential security issue in\n                    // which an attacker forces a contract to encrypt a message for an invalid address, resulting in an\n                    // impossible transaction - this is sometimes called a 'king of the hill' attack. We choose instead\n                    // to not fail and encrypt the plaintext regardless using the shared secret that results from a\n                    // random valid address. The sender is free to choose this address and hence shared secret, but\n                    // this has no security implications as they already know not only the full plaintext but also the\n                    // ephemeral private key anyway.\n                    unsafe {\n                        random_address_point()\n                    }\n                })\n                .inner,\n        );\n\n        let s_app = compute_app_siloed_shared_secret(raw_shared_secret, contract_address);\n\n        // It is safe to derive AES keys from `s_app` using Poseidon2 because `s_app` was derived from an ECDH shared\n        // secret using an AztecAddress (the recipient). See the block comment in\n        // `extract_many_close_to_uniformly_random_256_bits_using_poseidon2` for more info.\n        let pairs = derive_aes_symmetric_key_and_iv_from_shared_secret::<2>(s_app);\n        let (body_sym_key, body_iv) = pairs[0];\n        let (header_sym_key, header_iv) = pairs[1];\n\n        let ciphertext_bytes = aes128_encrypt(plaintext_bytes, body_iv, body_sym_key);\n\n        // Each plaintext field is 32 bytes (a multiple of the 16-byte AES block\n        // size), so PKCS#7 always appends a full 16-byte padding block:\n        //   |ciphertext| = PlaintextLen*32 + 16 = 16 * (1 + PlaintextLen*32 / 16)\n        std::static_assert(\n            ciphertext_bytes.len() == 16 * (1 + (PlaintextLen * 32) / 16),\n            \"unexpected ciphertext length\",\n        );\n\n        // Encrypt a 2-byte header containing the body ciphertext length.\n        let header_plaintext = encode_header(ciphertext_bytes.len());\n\n        // Note: the aes128_encrypt builtin fn automatically appends bytes to the input, according to pkcs#7; hence why\n        // the output `header_ciphertext_bytes` is 16 bytes larger than the input in this case.\n        let header_ciphertext_bytes = aes128_encrypt(header_plaintext, header_iv, header_sym_key);\n        // Verify expected header ciphertext size at compile time.\n        std::static_assert(\n            header_ciphertext_bytes.len() == HEADER_CIPHERTEXT_SIZE_IN_BYTES,\n            \"unexpected ciphertext header length\",\n        );\n\n        // Assemble the message byte array:\n        //  [header_ct (16B)] [body_ct] [padding to mult of 31]\n        let message_bytes_padding_to_mult_31 = get_arr_of_size__message_bytes_padding__from_PT::<PlaintextLen * 32>();\n\n        let mut message_bytes = get_arr_of_size__message_bytes__from_PT::<PlaintextLen * 32>();\n\n        std::static_assert(\n            message_bytes.len() % 31 == 0,\n            \"Unexpected error: message_bytes.len() should be divisible by 31, by construction.\",\n        );\n\n        let mut offset = 0;\n        for i in 0..header_ciphertext_bytes.len() {\n            message_bytes[offset + i] = header_ciphertext_bytes[i];\n        }\n        offset += header_ciphertext_bytes.len();\n\n        for i in 0..ciphertext_bytes.len() {\n            message_bytes[offset + i] = ciphertext_bytes[i];\n        }\n        offset += ciphertext_bytes.len();\n\n        for i in 0..message_bytes_padding_to_mult_31.len() {\n            message_bytes[offset + i] = message_bytes_padding_to_mult_31[i];\n        }\n        offset += message_bytes_padding_to_mult_31.len();\n\n        // Ideally we would be able to have a static assert where we check that the offset would be such that we've\n        // written to the entire log_bytes array, but we cannot since Noir does not treat the offset as a comptime\n        // value (despite the values that it goes through being known at each stage). We instead check that the\n        // computation used to obtain the offset computes the expected value (which we _can_ do in a static check), and\n        // then add a cheap runtime check to also validate that the offset matches this.\n        std::static_assert(\n            header_ciphertext_bytes.len() + ciphertext_bytes.len() + message_bytes_padding_to_mult_31.len()\n                == message_bytes.len(),\n            \"unexpected message length\",\n        );\n        assert(offset == message_bytes.len(), \"unexpected encrypted message length\");\n\n        // Pack message bytes into fields (31 bytes per field) and prepend eph_pk.x.\n        let message_bytes_as_fields = bytes_to_fields(message_bytes);\n\n        let mut ciphertext: [Field; MESSAGE_CIPHERTEXT_LEN] = [0; MESSAGE_CIPHERTEXT_LEN];\n\n        ciphertext[0] = eph_pk.x;\n\n        // Mask each content field with a Poseidon2-derived value, so that they appear as uniformly random `Field`\n        // values\n        let mut offset = 1;\n        for i in 0..message_bytes_as_fields.len() {\n            let mask = derive_shared_secret_field_mask(s_app, i as u32);\n            ciphertext[offset + i] = message_bytes_as_fields[i] + mask;\n        }\n        offset += message_bytes_as_fields.len();\n\n        // Pad with random fields so that padding is indistinguishable from masked data fields.\n        for i in offset..MESSAGE_CIPHERTEXT_LEN {\n            // Safety: we assume that the sender wants for the message to be private - a malicious one could simply\n            // reveal its contents publicly. It is therefore fine to trust the sender to provide random padding.\n            ciphertext[i] = unsafe { random() };\n        }\n\n        ciphertext\n    }\n\n    unconstrained fn decrypt(\n        ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n        recipient: AztecAddress,\n        contract_address: AztecAddress,\n    ) -> Option<BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>> {\n        // Extract the ephemeral public key x-coordinate and masked fields, returning None for empty ciphertext.\n        if ciphertext.len() > 0 {\n            let masked_fields: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS> =\n                array::subbvec(ciphertext, EPH_PK_X_SIZE_IN_FIELDS);\n            Option::some((ciphertext.get(0), masked_fields))\n        } else {\n            Option::none()\n        }\n            .and_then(|(eph_pk_x, masked_fields)| {\n                // With the x-coordinate of the ephemeral public key we can reconstruct the point as we know that the\n                // y-coordinate must be positive. This may fail however, as not all x-coordinates are on the curve. In\n                // that case, we simply return `Option::none`.\n                point_from_x_coord_and_sign(eph_pk_x, true).and_then(|eph_pk| {\n                    let s_app = get_shared_secret(recipient, eph_pk, contract_address);\n\n                    let unmasked_fields = masked_fields.mapi(|i, field| {\n                        let unmasked = unmask_field(s_app, i, field);\n                        // If we failed to unmask the field, we are dealing with the random padding. We'll ignore it\n                        // later, so we can simply set it to 0\n                        unmasked.unwrap_or(0)\n                    });\n                    let ciphertext_without_eph_pk_x = bytes_from_fields(unmasked_fields);\n\n                    // Derive symmetric keys:\n                    let pairs = derive_aes_symmetric_key_and_iv_from_shared_secret::<2>(s_app);\n                    let (body_sym_key, body_iv) = pairs[0];\n                    let (header_sym_key, header_iv) = pairs[1];\n\n                    // Extract the header ciphertext\n                    let header_start = 0;\n                    let header_ciphertext: [u8; HEADER_CIPHERTEXT_SIZE_IN_BYTES] =\n                        array::subarray(ciphertext_without_eph_pk_x.storage(), header_start);\n                    // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's\n                    // designed to work with messages with unknown length at compile time. This would not be necessary\n                    // here as the header ciphertext length is fixed. But we do it anyway to not have to have duplicate\n                    // oracles.\n                    let header_ciphertext_bvec =\n                        BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(header_ciphertext);\n\n                    try_aes128_decrypt(header_ciphertext_bvec, header_iv, header_sym_key)\n                    // Extract ciphertext length from header (2 bytes, big-endian)\n                    .and_then(|header_plaintext| extract_ciphertext_length(header_plaintext))\n                        .filter(|ciphertext_length| ciphertext_length <= MESSAGE_PLAINTEXT_SIZE_IN_BYTES)\n                        .map(|ciphertext_length| {\n                            // Extract and decrypt main ciphertext\n                            let ciphertext_start = header_start + HEADER_CIPHERTEXT_SIZE_IN_BYTES;\n                            let ciphertext_with_padding: [u8; MESSAGE_PLAINTEXT_SIZE_IN_BYTES] =\n                                array::subarray(ciphertext_without_eph_pk_x.storage(), ciphertext_start);\n                            BoundedVec::from_parts(ciphertext_with_padding, ciphertext_length)\n                        })\n                        // Decrypt main ciphertext and return it\n                        .and_then(|ciphertext| try_aes128_decrypt(ciphertext, body_iv, body_sym_key))\n                        // Convert bytes back to fields (32 bytes per field). Returns None if the actual bytes are\n                        // not valid.\n                        .and_then(|plaintext_bytes| try_fields_from_bytes(plaintext_bytes))\n                })\n            })\n    }\n}\n\n/// Encodes the body ciphertext length into a 2-byte big-endian header.\nfn encode_header(ciphertext_length: u32) -> [u8; 2] {\n    [(ciphertext_length >> 8) as u8, ciphertext_length as u8]\n}\n\n/// Extracts the body ciphertext length from a decrypted header as a 2-byte big-endian integer.\n///\n/// Returns `Option::none()` if the header has fewer than 2 bytes.\nunconstrained fn extract_ciphertext_length<let N: u32>(header: BoundedVec<u8, N>) -> Option<u32> {\n    if header.len() >= 2 {\n        Option::some(((header.get(0) as u32) << 8) | (header.get(1) as u32))\n    } else {\n        Option::none()\n    }\n}\n\n/// 2^248: upper bound for values that fit in 31 bytes\nglobal TWO_POW_248: Field = 2.pow_32(248);\n\n/// Removes the Poseidon2-derived mask from a ciphertext field. Returns the unmasked value if it fits in 31 bytes\n/// (a content field), or `None` if it doesn't (random padding). Unconstrained to prevent accidental use in\n/// constrained context.\nunconstrained fn unmask_field(s_app: Field, index: u32, masked: Field) -> Option<Field> {\n    let unmasked = masked - derive_shared_secret_field_mask(s_app, index);\n    if unmasked.lt(TWO_POW_248) {\n        Option::some(unmasked)\n    } else {\n        Option::none()\n    }\n}\n\n/// Produces a random valid address point, i.e. one that is on the curve. This is equivalent to calling\n/// [`AztecAddress::to_address_point`] on a random valid address.\nunconstrained fn random_address_point() -> AddressPoint {\n    let mut result = std::mem::zeroed();\n\n    loop {\n        // We simply produce random x coordinates until we find one that is on the curve. About half of the x\n        // coordinates fulfill this condition, so this should only take a few iterations at most.\n        let x_coord = random();\n        let point = point_from_x_coord_and_sign(x_coord, true);\n        if point.is_some() {\n            result = AddressPoint { inner: point.unwrap() };\n            break;\n        }\n    }\n\n    result\n}\n\nmod test {\n    use crate::{\n        keys::ecdh_shared_secret::{compute_app_siloed_shared_secret, derive_ecdh_shared_secret},\n        messages::{\n            encoding::{HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_PLAINTEXT_LEN, MESSAGE_PLAINTEXT_SIZE_IN_BYTES},\n            encryption::message_encryption::MessageEncryption,\n        },\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use crate::protocol::{address::AztecAddress, traits::FromField};\n    use super::{AES128, encode_header, random_address_point};\n    use std::{embedded_curve_ops::EmbeddedCurveScalar, test::OracleMock};\n\n    #[test]\n    unconstrained fn encrypt_decrypt_deterministic() {\n        let env = TestEnvironment::new();\n\n        // Message decryption requires oracles that are only available during private execution\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n\n            let recipient = AztecAddress::from_field(\n                0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n            );\n\n            // Mock random values for deterministic test\n            let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n            let _ = OracleMock::mock(\"aztec_utl_getRandomField\").returns(eph_sk).times(1);\n\n            let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n            let _ = OracleMock::mock(\"aztec_utl_getRandomField\").returns(randomness).times(1000000);\n\n            let _ = OracleMock::mock(\"aztec_prv_getNextAppTagAsSender\").returns(42);\n\n            // Encrypt the message\n            let encrypted_message = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            // Compute the same app-siloed shared secret that the oracle would return\n            let raw_shared_secret = derive_ecdh_shared_secret(\n                EmbeddedCurveScalar::from_field(eph_sk),\n                recipient.to_address_point().unwrap().inner,\n            );\n            let s_app = compute_app_siloed_shared_secret(raw_shared_secret, contract_address);\n\n            let _ = OracleMock::mock(\"aztec_utl_getSharedSecret\").returns(s_app);\n\n            // Decrypt the message\n            let decrypted = AES128::decrypt(encrypted_message, recipient, contract_address).unwrap();\n\n            // The decryption function spits out a BoundedVec because it's designed to work with messages with unknown\n            // length at compile time. For this reason we need to convert the original input to a BoundedVec.\n            let plaintext_bvec = BoundedVec::<Field, MESSAGE_PLAINTEXT_LEN>::from_array(plaintext);\n\n            // Verify decryption matches original plaintext\n            assert_eq(decrypted, plaintext_bvec, \"Decrypted bytes should match original plaintext\");\n\n            // The following is a workaround of \"struct is never constructed\" Noir compilation error (we only ever use\n            // static methods of the struct).\n            let _ = AES128 {};\n        });\n    }\n\n    #[test]\n    unconstrained fn encrypt_decrypt_random() {\n        // Same as `encrypt_decrypt_deterministic`, except we don't mock any of the oracles and rely on\n        // `TestEnvironment` instead.\n        let mut env = TestEnvironment::new();\n\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            assert_eq(\n                AES128::decrypt(\n                    BoundedVec::from_array(ciphertext),\n                    recipient,\n                    contract_address,\n                )\n                    .unwrap(),\n                BoundedVec::from_array(plaintext),\n            );\n        });\n    }\n\n    #[test]\n    unconstrained fn encrypt_to_invalid_address() {\n        // x = 3 is a non-residue for this curve, resulting in an invalid address\n        let invalid_address = AztecAddress { inner: 3 };\n        let contract_address = AztecAddress { inner: 42 };\n\n        let _ = AES128::encrypt([1, 2, 3, 4], invalid_address, contract_address);\n    }\n\n    // Documents the PKCS#7 padding behavior that `encrypt` relies on (see its static_assert).\n    #[test]\n    fn pkcs7_padding_always_adds_at_least_one_byte() {\n        let key = [0 as u8; 16];\n        let iv = [0 as u8; 16];\n\n        // 1 byte input + 15 bytes padding = 16 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 1], iv, key).len(), 16);\n\n        // 15 bytes input + 1 byte padding = 16 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 15], iv, key).len(), 16);\n\n        // 16 bytes input (block-aligned) + full 16-byte padding block = 32 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 16], iv, key).len(), 32);\n    }\n\n    #[test]\n    unconstrained fn encrypt_decrypt_max_size_plaintext() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let mut plaintext = [0; MESSAGE_PLAINTEXT_LEN];\n            for i in 0..MESSAGE_PLAINTEXT_LEN {\n                plaintext[i] = i as Field;\n            }\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            assert_eq(\n                AES128::decrypt(\n                    BoundedVec::from_array(ciphertext),\n                    recipient,\n                    contract_address,\n                )\n                    .unwrap(),\n                BoundedVec::from_array(plaintext),\n            );\n        });\n    }\n\n    #[test(should_fail_with = \"Plaintext length exceeds MESSAGE_PLAINTEXT_LEN\")]\n    unconstrained fn encrypt_oversized_plaintext() {\n        let address = AztecAddress { inner: 3 };\n        let contract_address = AztecAddress { inner: 42 };\n        let plaintext: [Field; MESSAGE_PLAINTEXT_LEN + 1] = [0; MESSAGE_PLAINTEXT_LEN + 1];\n        let _ = AES128::encrypt(plaintext, address, contract_address);\n    }\n\n    #[test]\n    unconstrained fn random_address_point_produces_valid_points() {\n        // About half of random addresses are invalid, so testing just a couple gives us high confidence that\n        // `random_address_point` is indeed producing valid addresses.\n        for _ in 0..10 {\n            let random_address = AztecAddress { inner: random_address_point().inner.x };\n            assert(random_address.to_address_point().is_some());\n        }\n    }\n\n    #[test]\n    unconstrained fn decrypt_invalid_ephemeral_public_key() {\n        let mut env = TestEnvironment::new();\n\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3, 4];\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            // The first field of the ciphertext is the x-coordinate of the ephemeral public key. We set it to a known\n            // non-residue (3), causing `decrypt` to fail to produce a decryption shared secret.\n            let mut bad_ciphertext = BoundedVec::from_array(ciphertext);\n            bad_ciphertext.set(0, 3);\n\n            assert(AES128::decrypt(bad_ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n    #[test]\n    unconstrained fn decrypt_returns_none_on_empty_ciphertext() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            assert(AES128::decrypt(BoundedVec::new(), recipient, contract_address).is_none());\n        });\n    }\n\n    // Mocks the header AES decrypt oracle to return an empty result. The TS oracle never throws on invalid\n    // input: it decrypts to garbage bytes or returns empty\n    #[test]\n    unconstrained fn decrypt_returns_none_on_empty_header() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            let empty_header = BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::new();\n            let _ = OracleMock::mock(\"aztec_utl_decryptAes128\").returns(Option::some(empty_header)).times(1);\n\n            assert(AES128::decrypt(ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n    // Mocks the header oracle to return a 2-byte header that decodes to a ciphertext_length one past the maximum\n    // allowed value, verifying the edge case is handled correctly.\n    #[test]\n    unconstrained fn decrypt_returns_none_on_oversized_ciphertext_length() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            let bad_header = BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(encode_header(\n                MESSAGE_PLAINTEXT_SIZE_IN_BYTES + 1,\n            ));\n            let _ = OracleMock::mock(\"aztec_utl_decryptAes128\").returns(Option::some(bad_header)).times(1);\n\n            assert(AES128::decrypt(ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n}\n"
    },
    "155": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/event.nr",
      "source": "use crate::{\n    event::{event_interface::EventInterface, EventSelector},\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PRIVATE_EVENT_MSG_TYPE_ID,\n    },\n    utils::array,\n};\nuse crate::protocol::traits::{FromField, Serialize, ToField};\n\n/// The number of fields in a private event message content that are not the event's serialized representation (1 field\n/// for randomness).\npub(crate) global PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 1;\npub(crate) global PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 0;\n\n/// The maximum length of the packed representation of an event's contents. This is limited by private log size,\n/// encryption overhead and extra fields in the message (e.g. message type id, randomness, etc.).\npub global MAX_EVENT_SERIALIZED_LEN: u32 = MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a private event message (i.e. one of type [`PRIVATE_EVENT_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_private_event_message`].\npub fn encode_private_event_message<Event>(\n    event: Event,\n    randomness: Field,\n) -> [Field; PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Event as Serialize>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    Event: EventInterface + Serialize,\n{\n    // We use `Serialize` because we want for events to be processable by off-chain actors, e.g. block explorers,\n    // wallets and apps, without having to rely on contract invocation. If we used `Packable` we'd need to call utility\n    // functions in order to unpack events, which would introduce a level of complexity we don't currently think is\n    // worth the savings in DA (for public events) and proving time (when encrypting private event messages).\n    let serialized_event = event.serialize();\n\n    // If PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n    // encoding below must be updated as well.\n    std::static_assert(\n        PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 1,\n        \"unexpected value for PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n    );\n\n    let mut msg_plaintext = [0; PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Event as Serialize>::N];\n    msg_plaintext[PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n\n    for i in 0..serialized_event.len() {\n        msg_plaintext[PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = serialized_event[i];\n    }\n\n    // The event type id is stored in the message metadata\n    encode_message(\n        PRIVATE_EVENT_MSG_TYPE_ID,\n        Event::get_event_type_id().to_field() as u64,\n        msg_plaintext,\n    )\n}\n\n/// Decodes the plaintext from a private event message (i.e. one of type [`PRIVATE_EVENT_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_private_event_message`].\n///\n/// Note that while [`encode_private_event_message`] returns a fixed-size array, this function takes a [`BoundedVec`]\n/// instead. This is because when decoding we're typically processing runtime-sized plaintexts, more specifically,\n/// those that originate from [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_private_event_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(EventSelector, Field, BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>)> {\n    if msg_content.len() <= PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let event_type_id = EventSelector::from_field(msg_metadata as Field);\n\n        // If PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n        // destructuring of the private event message encoding below must be updated as well.\n        std::static_assert(\n            PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 1,\n            \"unexpected value for PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n        );\n\n        let randomness = msg_content.get(PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let serialized_event = array::subbvec(msg_content, PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN);\n\n        Option::some((event_type_id, randomness, serialized_event))\n    }\n}\n\nmod test {\n    use crate::{\n        event::event_interface::EventInterface,\n        messages::{\n            encoding::decode_message,\n            logs::event::{decode_private_event_message, encode_private_event_message},\n            msg_type::PRIVATE_EVENT_MSG_TYPE_ID,\n        },\n    };\n    use crate::protocol::traits::Serialize;\n    use crate::test::mocks::mock_event::MockEvent;\n\n    global VALUE: Field = 7;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        let event = MockEvent::new(VALUE).build_event();\n\n        let message_plaintext = encode_private_event_message(event, RANDOMNESS);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_EVENT_MSG_TYPE_ID);\n\n        let (event_type_id, randomness, serialized_event) =\n            decode_private_event_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(event_type_id, MockEvent::get_event_type_id());\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(serialized_event, BoundedVec::from_array(event.serialize()));\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_private_event_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_with_only_reserved_fields_returns_none() {\n        let content = BoundedVec::from_array([0]);\n        assert(decode_private_event_message(0, content).is_none());\n    }\n}\n"
    },
    "157": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/note.nr",
      "source": "use crate::{\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PRIVATE_NOTE_MSG_TYPE_ID,\n    },\n    note::note_interface::NoteType,\n    utils::array,\n};\nuse crate::protocol::{address::AztecAddress, traits::{FromField, Packable, ToField}};\n\n/// The number of fields in a private note message content that are not the note's packed representation.\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 3;\n\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX: u32 = 0;\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX: u32 = 1;\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 2;\n\n/// The maximum length of the packed representation of a note's contents. This is limited by private log size,\n/// encryption overhead and extra fields in the message (e.g. message type id, storage slot, randomness, etc.).\npub global MAX_NOTE_PACKED_LEN: u32 = MAX_MESSAGE_CONTENT_LEN - PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a private note message (i.e. one of type [`PRIVATE_NOTE_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_private_note_message`].\npub fn encode_private_note_message<Note>(\n    note: Note,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n) -> [Field; PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Note as Packable>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    Note: NoteType + Packable,\n{\n    let packed_note = note.pack();\n\n    // If PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n    // encoding below must be updated as well.\n    std::static_assert(\n        PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n        \"unexpected value for PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n    );\n\n    let mut msg_content = [0; PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Note as Packable>::N];\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX] = owner.to_field();\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX] = storage_slot;\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n    for i in 0..packed_note.len() {\n        msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = packed_note[i];\n    }\n\n    // Notes use the note type id for metadata\n    encode_message(PRIVATE_NOTE_MSG_TYPE_ID, Note::get_id() as u64, msg_content)\n}\n\n/// Decodes the plaintext from a private note message (i.e. one of type [`PRIVATE_NOTE_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_private_note_message`].\n///\n/// Note that while [`encode_private_note_message`] returns a fixed-size array, this function takes a [`BoundedVec`]\n/// instead. This is because when decoding we're typically processing runtime-sized plaintexts, more specifically,\n/// those that originate from [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_private_note_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(Field, AztecAddress, Field, Field, BoundedVec<Field, MAX_NOTE_PACKED_LEN>)> {\n    if msg_content.len() <= PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let note_type_id = msg_metadata as Field; // TODO: make note type id not be a full field\n\n        // If PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n        // decoding below must be updated as well.\n        std::static_assert(\n            PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n            \"unexpected value for PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n        );\n\n        let owner = AztecAddress::from_field(msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX));\n        let storage_slot = msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX);\n        let randomness = msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let packed_note = array::subbvec(msg_content, PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN);\n\n        Option::some((note_type_id, owner, storage_slot, randomness, packed_note))\n    }\n}\n\nmod test {\n    use crate::{\n        messages::{\n            encoding::decode_message,\n            logs::note::{decode_private_note_message, encode_private_note_message, MAX_NOTE_PACKED_LEN},\n            msg_type::PRIVATE_NOTE_MSG_TYPE_ID,\n        },\n        note::note_interface::NoteType,\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, Packable}};\n    use crate::test::mocks::mock_note::MockNote;\n\n    global VALUE: Field = 7;\n    global OWNER: AztecAddress = AztecAddress::from_field(8);\n    global STORAGE_SLOT: Field = 9;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        let note = MockNote::new(VALUE).build_note();\n\n        let message_plaintext = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_NOTE_MSG_TYPE_ID);\n\n        let (note_type_id, owner, storage_slot, randomness, packed_note) =\n            decode_private_note_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MockNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(storage_slot, STORAGE_SLOT);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(packed_note, BoundedVec::from_array(note.pack()));\n    }\n\n    #[derive(Packable)]\n    struct MaxSizeNote {\n        data: [Field; MAX_NOTE_PACKED_LEN],\n    }\n\n    impl NoteType for MaxSizeNote {\n        fn get_id() -> Field {\n            0\n        }\n    }\n\n    #[test]\n    unconstrained fn encode_decode_max_size_note() {\n        let mut data = [0; MAX_NOTE_PACKED_LEN];\n        for i in 0..MAX_NOTE_PACKED_LEN {\n            data[i] = i as Field;\n        }\n        let note = MaxSizeNote { data };\n\n        let encoded = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n        let (msg_type_id, msg_metadata, msg_content) = decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_NOTE_MSG_TYPE_ID);\n\n        let (note_type_id, owner, storage_slot, randomness, packed_note) =\n            decode_private_note_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MaxSizeNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(storage_slot, STORAGE_SLOT);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(packed_note, BoundedVec::from_array(data));\n    }\n\n    #[derive(Packable)]\n    struct OversizedNote {\n        data: [Field; MAX_NOTE_PACKED_LEN + 1],\n    }\n\n    impl NoteType for OversizedNote {\n        fn get_id() -> Field {\n            0\n        }\n    }\n\n    #[test(should_fail_with = \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\")]\n    fn encode_oversized_note_fails() {\n        let note = OversizedNote { data: [0; MAX_NOTE_PACKED_LEN + 1] };\n        let _ = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_private_note_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_with_only_reserved_fields_returns_none() {\n        let content = BoundedVec::from_array([0, 0, 0]);\n        assert(decode_private_note_message(0, content).is_none());\n    }\n}\n"
    },
    "158": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/partial_note.nr",
      "source": "use crate::{\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n    },\n    note::note_interface::NoteType,\n    utils::array,\n};\nuse crate::protocol::{address::AztecAddress, traits::{FromField, Packable, ToField}};\n\n/// The number of fields in a private note message content that are not the note's packed representation.\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 3;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX: u32 = 0;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 1;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX: u32 = 2;\n\n/// Partial notes have a maximum packed length of their private fields bound by extra content in their private message\n/// (e.g. the storage slot, note completion log tag, etc.).\npub global MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN: u32 =\n    MAX_MESSAGE_CONTENT_LEN - PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a partial note private message (i.e. one of type [`PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_partial_note_private_message`].\npub fn encode_partial_note_private_message<PartialNotePrivateContent>(\n    partial_note_private_content: PartialNotePrivateContent,\n    owner: AztecAddress,\n    randomness: Field,\n    note_completion_log_tag: Field,\n    ) -> [Field; PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <PartialNotePrivateContent as Packable>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    PartialNotePrivateContent: NoteType + Packable,\n{\n    let packed_private_content = partial_note_private_content.pack();\n\n    // If PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN is changed, causing the assertion below to fail, then\n    // the encoding below must be updated as well.\n    std::static_assert(\n        PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n        \"unexpected value for PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN\",\n    );\n\n    let mut msg_content =\n        [0; PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <PartialNotePrivateContent as Packable>::N];\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX] = owner.to_field();\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX] = note_completion_log_tag;\n\n    for i in 0..packed_private_content.len() {\n        msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = packed_private_content[i];\n    }\n\n    encode_message(\n        PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n        // Notes use the note type id for metadata\n        PartialNotePrivateContent::get_id() as u64,\n        msg_content,\n    )\n}\n\n/// Decodes the plaintext from a partial note private message (i.e. one of type\n/// [`PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_partial_note_private_message`].\n///\n/// Note that while [`encode_partial_note_private_message`] returns a fixed-size array, this function takes a\n/// [`BoundedVec`] instead. This is because when decoding we're typically processing runtime-sized plaintexts, more\n/// specifically, those that originate from\n/// [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_partial_note_private_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(AztecAddress, Field, Field, Field, BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>)> {\n    if msg_content.len() < PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let note_type_id: Field = msg_metadata as Field; // TODO: make note type id not be a full field\n\n        // If PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN is changed, causing the assertion below to fail,\n        // then the destructuring of the partial note private message encoding below must be updated as well.\n        std::static_assert(\n            PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n            \"unexpected value for PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN\",\n        );\n\n        // We currently have three fields that are not the partial note's packed representation, which are the owner,\n        // the randomness, and the note completion log tag.\n        let owner = AztecAddress::from_field(\n            msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX),\n        );\n        let randomness = msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let note_completion_log_tag = msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX);\n\n        let packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN> = array::subbvec(\n            msg_content,\n            PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN,\n        );\n\n        Option::some(\n            (owner, randomness, note_completion_log_tag, note_type_id, packed_private_note_content),\n        )\n    }\n}\n\nmod test {\n    use crate::{\n        messages::{\n            encoding::decode_message,\n            logs::partial_note::{decode_partial_note_private_message, encode_partial_note_private_message},\n            msg_type::PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n        },\n        note::note_interface::NoteType,\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, Packable}};\n    use crate::test::mocks::mock_note::MockNote;\n\n    global VALUE: Field = 7;\n    global OWNER: AztecAddress = AztecAddress::from_field(8);\n    global RANDOMNESS: Field = 10;\n    global NOTE_COMPLETION_LOG_TAG: Field = 11;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        // Note that here we use MockNote as the private fields of a partial note\n        let note = MockNote::new(VALUE).build_note();\n\n        let message_plaintext = encode_partial_note_private_message(note, OWNER, RANDOMNESS, NOTE_COMPLETION_LOG_TAG);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID);\n\n        let (owner, randomness, note_completion_log_tag, note_type_id, packed_note) =\n            decode_partial_note_private_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MockNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(note_completion_log_tag, NOTE_COMPLETION_LOG_TAG);\n        assert_eq(packed_note, BoundedVec::from_array(note.pack()));\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_partial_note_private_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_succeeds_with_only_reserved_fields() {\n        let content = BoundedVec::from_array([0, 0, 0]);\n        let (_, _, _, _, packed_note) = decode_partial_note_private_message(0, content).unwrap();\n        assert_eq(packed_note.len(), 0);\n    }\n}\n"
    },
    "168": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/processing/mod.nr",
      "source": "pub(crate) mod event_validation_request;\npub mod offchain;\n\nmod message_context;\npub use message_context::MessageContext;\n\npub(crate) mod note_validation_request;\npub(crate) mod log_retrieval_request;\npub(crate) mod log_retrieval_response;\npub(crate) mod pending_tagged_log;\n\nuse crate::{\n    capsules::CapsuleArray,\n    event::EventSelector,\n    messages::{\n        discovery::partial_notes::DeliveredPendingPartialNote,\n        encoding::MESSAGE_CIPHERTEXT_LEN,\n        logs::{event::MAX_EVENT_SERIALIZED_LEN, note::MAX_NOTE_PACKED_LEN},\n        processing::{\n            log_retrieval_request::LogRetrievalRequest, log_retrieval_response::LogRetrievalResponse,\n            note_validation_request::NoteValidationRequest, pending_tagged_log::PendingTaggedLog,\n        },\n    },\n    oracle,\n};\nuse crate::protocol::{\n    address::AztecAddress,\n    constants::DOM_SEP__NOTE_COMPLETION_LOG_TAG,\n    hash::{compute_log_tag, sha256_to_field},\n    traits::{Deserialize, Serialize},\n};\nuse event_validation_request::EventValidationRequest;\n\n// Base slot for the pending tagged log array to which the fetch_tagged_logs oracle inserts found private logs.\npub(crate) global PENDING_TAGGED_LOG_ARRAY_BASE_SLOT: Field =\n    sha256_to_field(\"AZTEC_NR::PENDING_TAGGED_LOG_ARRAY_BASE_SLOT\".as_bytes());\n\nglobal NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\n/// An offchain-delivered message with resolved context, ready for processing during sync.\n#[derive(Serialize, Deserialize)]\npub struct OffchainMessageWithContext {\n    pub message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    pub message_context: MessageContext,\n}\n\n/// Searches for private logs emitted by `contract_address` that might contain messages for the given `scope`.\npub(crate) unconstrained fn get_private_logs(\n    contract_address: AztecAddress,\n    scope: AztecAddress,\n) -> CapsuleArray<PendingTaggedLog> {\n    // We will eventually perform log discovery via tagging here, but for now we simply call the `fetchTaggedLogs`\n    // oracle. This makes PXE synchronize tags, download logs and store the pending tagged logs in a capsule array.\n    oracle::message_processing::fetch_tagged_logs(PENDING_TAGGED_LOG_ARRAY_BASE_SLOT, scope);\n\n    CapsuleArray::at(contract_address, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT, scope)\n}\n\n/// Enqueues a note for validation and storage by PXE.\n///\n/// Once validated, the note becomes retrievable via the `get_notes` oracle. The note will be scoped to\n/// `contract_address`, meaning other contracts will not be able to access it unless authorized.\n///\n/// In order for the note validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many note validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\n///\n/// The `packed_note` is what `getNotes` will later return. PXE indexes notes by `storage_slot`, so this value is\n/// typically used to filter notes that correspond to different state variables. `note_hash` and `nullifier` are the\n/// inner hashes, i.e. the raw hashes returned by `NoteHash::compute_note_hash` and `NoteHash::compute_nullifier`. PXE\n/// will verify that the siloed unique note hash was inserted into the tree at `tx_hash`, and will store the nullifier\n/// to later check for nullification.\n///\n/// `owner` is the address used in note hash and nullifier computation, often requiring knowledge of their nullifier\n/// secret key.\n///\n/// `scope` is the account to which the note message was delivered (i.e. the address the message was encrypted to).\n/// This determines which PXE account can see the note - other accounts will not be able to access it (e.g. other\n/// accounts will not be able to see one another's token balance notes, even in the same PXE) unless authorized. In\n/// most cases `recipient` equals `owner`, but they can differ in scenarios like delegated discovery.\npub unconstrained fn enqueue_note_for_validation(\n    contract_address: AztecAddress,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_nonce: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n    note_hash: Field,\n    nullifier: Field,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n    // Noir `NoteValidationRequest`\n    CapsuleArray::at(\n        contract_address,\n        NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    )\n        .push(\n            NoteValidationRequest {\n                contract_address,\n                owner,\n                storage_slot,\n                randomness,\n                note_nonce,\n                packed_note,\n                note_hash,\n                nullifier,\n                tx_hash,\n            },\n        )\n}\n\n/// Enqueues an event for validation and storage by PXE.\n///\n/// This is the primary way for custom message handlers (registered via\n/// [`crate::macros::AztecConfig::custom_message_handler`]) to deliver reassembled events back to PXE after processing\n/// application-specific message formats.\n///\n/// In order for the event validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many event validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\n///\n/// Note that `validate_and_store_enqueued_notes_and_events` is called by Aztec.nr after processing messages, so custom\n/// message processors do not need to be concerned with this.\npub unconstrained fn enqueue_event_for_validation(\n    contract_address: AztecAddress,\n    event_type_id: EventSelector,\n    randomness: Field,\n    serialized_event: BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>,\n    event_commitment: Field,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n    // Noir `EventValidationRequest`\n    CapsuleArray::at(\n        contract_address,\n        EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    )\n        .push(\n            EventValidationRequest {\n                contract_address,\n                event_type_id,\n                randomness,\n                serialized_event,\n                event_commitment,\n                tx_hash,\n            },\n        )\n}\n\n/// Validates and stores all enqueued notes and events.\n///\n/// Processes all requests enqueued via [`enqueue_note_for_validation`] and [`enqueue_event_for_validation`], inserting\n/// them into the note database and event store respectively, making them queryable via `get_notes` oracle and our TS\n/// API (PXE::getPrivateEvents).\n///\n/// This automatically clears both validation request queues, so no further work needs to be done by the caller.\npub unconstrained fn validate_and_store_enqueued_notes_and_events(contract_address: AztecAddress, scope: AztecAddress) {\n    oracle::message_processing::validate_and_store_enqueued_notes_and_events(\n        contract_address,\n        NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        MAX_NOTE_PACKED_LEN as Field,\n        MAX_EVENT_SERIALIZED_LEN as Field,\n        scope,\n    );\n}\n\n/// Resolves message contexts for a list of tx hashes stored in a CapsuleArray.\n///\n/// The `message_context_requests_array_base_slot` must point to a CapsuleArray<Field> containing tx hashes.\n/// PXE will store `Option<MessageContextResponse>` values into the responses array at\n/// `message_context_responses_array_base_slot`.\npub unconstrained fn get_message_contexts_by_tx_hash(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    oracle::message_processing::get_message_contexts_by_tx_hash(\n        contract_address,\n        message_context_requests_array_base_slot,\n        message_context_responses_array_base_slot,\n        scope,\n    );\n}\n\n/// Efficiently queries the node for logs that result in the completion of all `DeliveredPendingPartialNote`s stored in\n/// a `CapsuleArray` by performing all node communication concurrently. Returns a second `CapsuleArray` with Options\n/// for the responses that correspond to the pending partial notes at the same index.\n///\n/// For example, given an array with pending partial notes `[ p1, p2, p3 ]`, where `p1` and `p3` have corresponding\n/// completion logs but `p2` does not, the returned `CapsuleArray` will have contents `[some(p1_log), none(),\n/// some(p3_log)]`.\npub(crate) unconstrained fn get_pending_partial_notes_completion_logs(\n    contract_address: AztecAddress,\n    pending_partial_notes: CapsuleArray<DeliveredPendingPartialNote>,\n    scope: AztecAddress,\n) -> CapsuleArray<Option<LogRetrievalResponse>> {\n    let log_retrieval_requests = CapsuleArray::at(\n        contract_address,\n        LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    );\n\n    // We create a LogRetrievalRequest for each PendingPartialNote in the CapsuleArray. Because we need the indices in\n    // the request array to match the indices in the partial note array, we can't use CapsuleArray::for_each, as that\n    // function has arbitrary iteration order. Instead, we manually iterate the array from the beginning and push into\n    // the requests array, which we expect to be empty.\n    let mut i = 0;\n    let pending_partial_notes_count = pending_partial_notes.len();\n    while i < pending_partial_notes_count {\n        let pending_partial_note = pending_partial_notes.get(i);\n        // Partial note completion logs are emitted with a domain-separated tag. To find matching logs, we apply the\n        // same domain separation to the stored raw tag.\n        let log_tag = compute_log_tag(\n            pending_partial_note.note_completion_log_tag,\n            DOM_SEP__NOTE_COMPLETION_LOG_TAG,\n        );\n        log_retrieval_requests.push(LogRetrievalRequest { contract_address, unsiloed_tag: log_tag });\n        i += 1;\n    }\n\n    oracle::message_processing::get_logs_by_tag(\n        contract_address,\n        LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT,\n        LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT,\n        scope,\n    );\n\n    CapsuleArray::at(\n        contract_address,\n        LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT,\n        scope,\n    )\n}\n"
    },
    "170": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/processing/offchain.nr",
      "source": "use crate::{\n    capsules::CapsuleArray,\n    context::UtilityContext,\n    messages::{\n        encoding::MESSAGE_CIPHERTEXT_LEN,\n        processing::{get_message_contexts_by_tx_hash, MessageContext, OffchainMessageWithContext},\n    },\n    oracle::contract_sync::set_contract_sync_cache_invalid,\n    protocol::{\n        address::AztecAddress,\n        constants::MAX_TX_LIFETIME,\n        hash::sha256_to_field,\n        traits::{Deserialize, Serialize},\n    },\n};\n\n/// Base capsule slot for the persistent inbox of [`PendingOffchainMsg`] entries.\n///\n/// This is the slot where we accumulate messages received through [`receive`].\nglobal OFFCHAIN_INBOX_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_INBOX_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to pass tx hash resolution requests to PXE.\nglobal OFFCHAIN_CONTEXT_REQUESTS_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_CONTEXT_REQUESTS_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to read tx context responses from PXE.\nglobal OFFCHAIN_CONTEXT_RESPONSES_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_CONTEXT_RESPONSES_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to collect messages ready for processing.\nglobal OFFCHAIN_READY_MESSAGES_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_READY_MESSAGES_SLOT\".as_bytes());\n\n/// Maximum number of offchain messages accepted by `offchain_receive` in a single call.\npub global MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL: u32 = 16;\n\n/// Tolerance added to the `MAX_TX_LIFETIME` cap for message expiration.\nglobal TX_EXPIRATION_TOLERANCE: u64 = 7200; // 2 hours\n\n/// Maximum time-to-live for a tx-bound offchain message.\n///\n/// After `anchor_block_timestamp + MAX_MSG_TTL`, the message is evicted from the inbox.\nglobal MAX_MSG_TTL: u64 = MAX_TX_LIFETIME + TX_EXPIRATION_TOLERANCE;\n\n/// A function that manages offchain-delivered messages for processing during sync.\n///\n/// Offchain messages are messages that are not broadcasted via onchain logs. They are instead delivered to the\n/// recipient by calling the `offchain_receive` utility function (injected by the `#[aztec]` macro). Message transport\n/// is the app's responsibility. Typical examples of transport methods are: messaging apps, email, QR codes, etc.\n///\n/// Once offchain messages are delivered to the recipient's private environment via `offchain_receive`, messages are\n/// locally stored in a persistent inbox.\n///\n/// This function determines when each message in said inbox is ready for processing, when it can be safely disposed\n/// of, etc.\n///\n/// The only current implementation of an `OffchainInboxSync` is [`sync_inbox`], which manages an inbox with expiration\n/// based eviction and automatic transaction context resolution.\npub(crate) type OffchainInboxSync<Env> = unconstrained fn[Env](\n/* contract_address */AztecAddress, /* scope */ AztecAddress) -> CapsuleArray<OffchainMessageWithContext>;\n\n/// A message delivered via the `offchain_receive` utility function.\npub struct OffchainMessage {\n    /// The encrypted message payload.\n    pub ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    /// The intended recipient of the message.\n    pub recipient: AztecAddress,\n    /// The hash of the transaction that produced this message. `Option::none` indicates a tx-less message.\n    pub tx_hash: Option<Field>,\n    /// Anchor block timestamp at message emission.\n    pub anchor_block_timestamp: u64,\n}\n\n/// An offchain message awaiting processing (or re-processing) in the inbox.\n///\n/// Messages remain in the inbox until they expire, even if they have already been processed. This is necessary to\n/// handle reorgs: a processed message may need to be re-processed if the transaction that provided its context is\n/// reverted. On each sync, resolved messages are promoted to [`OffchainMessageWithContext`] for processing.\n#[derive(Serialize, Deserialize)]\nstruct PendingOffchainMsg {\n    /// The encrypted message payload.\n    ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    /// The intended recipient of the message.\n    recipient: AztecAddress,\n    /// The hash of the transaction that produced this message. A value of 0 indicates a tx-less message.\n    tx_hash: Field,\n    /// Anchor block timestamp at message emission. Used to compute the effective expiration: messages are evicted\n    /// after `anchor_block_timestamp + MAX_MSG_TTL`.\n    anchor_block_timestamp: u64,\n}\n\n/// Delivers offchain messages to the given contract's offchain inbox for subsequent processing.\n///\n/// Offchain messages are transaction effects that are not broadcasted via onchain logs. Instead, the sender shares the\n/// message to the recipient through an external channel (e.g. a URL accessible by the recipient). The recipient then\n/// calls this function to hand the messages to the contract so they can be processed through the same mechanisms as\n/// onchain messages.\n///\n/// Each message is routed to the inbox scoped to its `recipient` field, so messages for different accounts are\n/// automatically isolated.\n///\n/// Messages are processed when their originating transaction is found onchain (providing the context needed to\n/// validate resulting notes and events).\n///\n/// Messages are kept in the inbox until they expire. The effective expiration is\n/// `anchor_block_timestamp + MAX_MSG_TTL`.\n///\n/// Processing order is not guaranteed.\npub unconstrained fn receive(\n    contract_address: AztecAddress,\n    messages: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL>,\n) {\n    // May contain duplicates if multiple messages target the same recipient. This is harmless since\n    // cache invalidation on the TS side is idempotent (deleting an already-deleted key is a no-op).\n    let mut scopes: BoundedVec<AztecAddress, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n    let mut i = 0;\n    let messages_len = messages.len();\n    while i < messages_len {\n        let msg = messages.get(i);\n        let tx_hash = if msg.tx_hash.is_some() {\n            msg.tx_hash.unwrap()\n        } else {\n            0\n        };\n        let inbox: CapsuleArray<PendingOffchainMsg> =\n            CapsuleArray::at(contract_address, OFFCHAIN_INBOX_SLOT, msg.recipient);\n        inbox.push(\n            PendingOffchainMsg {\n                ciphertext: msg.ciphertext,\n                recipient: msg.recipient,\n                tx_hash,\n                anchor_block_timestamp: msg.anchor_block_timestamp,\n            },\n        );\n        scopes.push(msg.recipient);\n        i += 1;\n    }\n\n    set_contract_sync_cache_invalid(contract_address, scopes);\n}\n\n/// Returns offchain-delivered messages to process during sync.\n///\n/// Messages remain in the inbox and are reprocessed on each sync until their originating transaction is no longer at\n/// risk of being dropped by a reorg.\npub unconstrained fn sync_inbox(\n    contract_address: AztecAddress,\n    scope: AztecAddress,\n) -> CapsuleArray<OffchainMessageWithContext> {\n    let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(contract_address, OFFCHAIN_INBOX_SLOT, scope);\n    let context_resolution_requests: CapsuleArray<Field> =\n        CapsuleArray::at(contract_address, OFFCHAIN_CONTEXT_REQUESTS_SLOT, scope);\n    let resolved_contexts: CapsuleArray<Option<MessageContext>> =\n        CapsuleArray::at(contract_address, OFFCHAIN_CONTEXT_RESPONSES_SLOT, scope);\n    let ready_to_process: CapsuleArray<OffchainMessageWithContext> =\n        CapsuleArray::at(contract_address, OFFCHAIN_READY_MESSAGES_SLOT, scope);\n\n    // Clear any stale ready messages from a previous run.\n    ready_to_process.for_each(|i, _| { ready_to_process.remove(i); });\n\n    // Clear any stale context resolution requests/responses from a previous run.\n    context_resolution_requests.for_each(|i, _| { context_resolution_requests.remove(i); });\n    resolved_contexts.for_each(|i, _| { resolved_contexts.remove(i); });\n\n    // Build a request list aligned with the inbox indices.\n    let mut i = 0;\n    let inbox_len = inbox.len();\n    while i < inbox_len {\n        let msg = inbox.get(i);\n        context_resolution_requests.push(msg.tx_hash);\n        i += 1;\n    }\n\n    // Ask PXE to resolve contexts for all requested tx hashes.\n    get_message_contexts_by_tx_hash(\n        contract_address,\n        OFFCHAIN_CONTEXT_REQUESTS_SLOT,\n        OFFCHAIN_CONTEXT_RESPONSES_SLOT,\n        scope,\n    );\n\n    assert_eq(resolved_contexts.len(), inbox_len);\n\n    let now = UtilityContext::new().timestamp();\n\n    let mut j = inbox_len;\n    while j > 0 {\n        // This loop decides what to do with each message in the offchain message inbox. We need to handle 3\n        // different scenarios for each message.\n        //\n        // 1. The TX that emitted this message is still not known to PXE: in this case we can't yet process this\n        // message, as any notes or events discovered will fail to be validated. So we leave the message in the inbox,\n        // awaiting for future syncs to detect that the TX became available.\n        //\n        // 2. The message is not associated to a TX to begin with. The current version of offchain message processing\n        // does not support this case, but in the future it will. Right now, a message without an associated TX will\n        // sit in the inbox until it expires.\n        //\n        // 3. The TX that emitted this message has been found by PXE. That gives us all the information needed to\n        // process the message. We add the message to the `ready_to_process` CapsuleArray so that the `sync_state` loop\n        // processes it.\n        //\n        // In all cases, if the message has expired (i.e. `now > anchor_block_timestamp + MAX_MSG_TTL`), we remove it\n        // from the inbox.\n        //\n        // Note: the loop runs backwards because it might call `inbox.remove(j)` to purge expired messages and we also\n        // need to align it with `resolved_contexts.get(j)`. Going from last to first simplifies the algorithm as\n        // not yet visited element indexes remain stable.\n        j -= 1;\n        let maybe_ctx = resolved_contexts.get(j);\n        let msg = inbox.get(j);\n\n        // Compute the message's effective expiration timestamp to determine if we can purge it from the inbox.\n        let effective_expiration = msg.anchor_block_timestamp + MAX_MSG_TTL;\n\n        // Message expired. We remove it from the inbox.\n        if now > effective_expiration {\n            inbox.remove(j);\n        }\n\n        // Scenario 1: associated TX not yet available. We keep the message in the inbox, as it might become\n        // processable as new blocks get mined.\n        // Scenario 2: no TX associated to message. The message will sit in the inbox until it expires.\n        if maybe_ctx.is_none() {\n            continue;\n        }\n\n        // Scenario 3: Message is ready to process, add to result array. Note we still keep it in the inbox unless we\n        // consider it has expired: this is because we need to account for reorgs. If reorg occurs after we processed\n        // a message, the effects of processing the message get rewind. However, the associated TX can be included in\n        // a subsequent block. Should that happen, the message must be re-processed to ensure consistency.\n        let message_context = maybe_ctx.unwrap();\n        ready_to_process.push(OffchainMessageWithContext { message_ciphertext: msg.ciphertext, message_context });\n    }\n\n    ready_to_process\n}\n\nmod test {\n    use crate::{\n        capsules::CapsuleArray, oracle::random::random, protocol::address::AztecAddress,\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use super::{\n        MAX_MSG_TTL, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL, OFFCHAIN_INBOX_SLOT, OffchainMessage, PendingOffchainMsg,\n        receive, sync_inbox,\n    };\n\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    /// Creates an `OffchainMessage` with dummy ciphertext and `SCOPE` as recipient.\n    fn make_msg(tx_hash: Option<Field>, anchor_block_timestamp: u64) -> OffchainMessage {\n        OffchainMessage { ciphertext: BoundedVec::new(), recipient: SCOPE, tx_hash, anchor_block_timestamp }\n    }\n\n    /// Advances the TXE block timestamp by `offset` seconds and returns the resulting timestamp.\n    unconstrained fn advance_by(env: TestEnvironment, offset: u64) -> u64 {\n        env.advance_next_block_timestamp_by(offset);\n        env.mine_block();\n        env.last_block_timestamp()\n    }\n\n    #[test]\n    unconstrained fn empty_inbox_returns_empty_result() {\n        let env = TestEnvironment::new();\n        env.utility_context(|context| {\n            let result = sync_inbox(context.this_address(), SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> =\n                CapsuleArray::at(context.this_address(), OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0);\n            assert_eq(inbox.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_bound_msg_expires_after_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, MAX_MSG_TTL + 1);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 0); // expired, removed\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_bound_msg_not_expired_before_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance, but not past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 1); // not expired, stays\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_less_msg_expires_after_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::none(), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, MAX_MSG_TTL + 1);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 0); // expired, removed\n        });\n    }\n\n    #[test]\n    unconstrained fn unresolved_tx_stays_in_inbox() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // not resolved, not ready\n            assert_eq(inbox.len(), 1); // not expired, stays\n        });\n    }\n\n    #[test]\n    unconstrained fn multiple_messages_mixed_expiration() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        let survivor_tx_hash = random();\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            // Message 0: tx-bound, anchor_ts in the past so it expires at\n            // anchor_ts + MAX_MSG_TTL. We set anchor to 0 so it expires quickly.\n            msgs.push(make_msg(Option::some(random()), 0));\n            // Message 1: tx-bound, anchor_ts is recent so it survives.\n            msgs.push(make_msg(Option::some(survivor_tx_hash), anchor_ts));\n            // Message 2: tx-less, anchor_ts=0 so it also expires.\n            msgs.push(make_msg(Option::none(), 0));\n            receive(address, msgs);\n        });\n\n        // Advance past MAX_MSG_TTL for anchor_ts=0, but not for anchor_ts=anchor_ts.\n        let _now = advance_by(env, MAX_MSG_TTL);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // all contexts are None\n            // Message 0 expired (anchor=0), message 1 survived (anchor=anchor_ts),\n            // Message 2 expired (anchor=0).\n            assert_eq(inbox.len(), 1);\n            assert_eq(inbox.get(0).tx_hash, survivor_tx_hash);\n        });\n    }\n\n    // -- Resolved context (ready to process) ------------------------------\n\n    #[test]\n    unconstrained fn resolved_msg_is_ready_to_process() {\n        let env = TestEnvironment::new();\n        // TestEnvironment::new() deploys protocol contracts, creating blocks with tx effects.\n        // In TXE, tx hashes equal Fr(blockNumber), so Fr(1) is the tx effect from block 1.\n        // We use this as a \"known resolvable\" tx hash.\n        let known_tx_hash: Field = 1;\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(known_tx_hash), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            // The message should be ready to process since its tx context was resolved.\n            assert_eq(result.len(), 1);\n\n            let ctx = result.get(0).message_context;\n            assert_eq(ctx.tx_hash, known_tx_hash);\n            assert(ctx.first_nullifier_in_tx != 0, \"resolved context must have a first nullifier\");\n\n            // Message stays in inbox (not expired) for potential reorg reprocessing.\n            assert_eq(inbox.len(), 1);\n        });\n    }\n}\n"
    },
    "185": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/note/utils.nr",
      "source": "use crate::{context::NoteExistenceRequest, note::{ConfirmedNote, HintedNote, note_interface::NoteHash}};\n\nuse crate::protocol::{\n    constants::{DOM_SEP__NOTE_HASH, DOM_SEP__NOTE_NULLIFIER},\n    hash::{compute_siloed_note_hash, compute_unique_note_hash, poseidon2_hash_with_separator},\n};\n\n/// Computes a domain-separated note hash.\n///\n/// Receives the `storage_slot` of the [`crate::state_vars::StateVariable`] that holds the note, plus any arbitrary\n/// note `data`. This typically includes randomness, owner, and domain specific values (e.g. numeric amount, address,\n/// id, etc.).\n///\n/// Usage of this function guarantees that different state variables will never produce colliding note hashes, even if\n/// their underlying notes have different implementations.\npub fn compute_note_hash<let N: u32>(storage_slot: Field, data: [Field; N]) -> Field {\n    // All state variables have different storage slots, so by placing this at a fixed first position in the preimage\n    // we prevent collisions.\n    poseidon2_hash_with_separator([storage_slot].concat(data), DOM_SEP__NOTE_HASH)\n}\n\n/// Computes a domain-separated note nullifier.\n///\n/// Receives the `note_hash_for_nullification` of the note (usually returned by\n/// [`compute_confirmed_note_hash_for_nullification`]), plus any arbitrary note `data`. This typically includes\n/// secrets, such as the app-siloed nullifier hiding key of the note's owner.\n///\n/// Usage of this function guarantees that different state variables will never produce colliding note nullifiers, even\n/// if their underlying notes have different implementations.\npub fn compute_note_nullifier<let N: u32>(note_hash_for_nullification: Field, data: [Field; N]) -> Field {\n    // All notes have different note hashes for nullification (i.e. transient or settled), so by placing this at a\n    // fixed first position in the preimage we prevent collisions.\n    poseidon2_hash_with_separator(\n        [note_hash_for_nullification].concat(data),\n        DOM_SEP__NOTE_NULLIFIER,\n    )\n}\n\n/// Returns the [`NoteExistenceRequest`] used to prove a note exists.\npub fn compute_note_existence_request<Note>(hinted_note: HintedNote<Note>) -> NoteExistenceRequest\nwhere\n    Note: NoteHash,\n{\n    let note_hash =\n        hinted_note.note.compute_note_hash(hinted_note.owner, hinted_note.storage_slot, hinted_note.randomness);\n\n    if hinted_note.metadata.is_settled() {\n        // Settled notes are read by siloing with contract address and nonce (resulting in the final unique note hash,\n        // which is already in the note hash tree).\n        let siloed_note_hash = compute_siloed_note_hash(hinted_note.contract_address, note_hash);\n        NoteExistenceRequest::for_settled(compute_unique_note_hash(\n            hinted_note.metadata.to_settled().note_nonce(),\n            siloed_note_hash,\n        ))\n    } else {\n        // Pending notes (both same phase and previous phase ones) are read by their non-siloed hash (not even by\n        // contract address), which is what is stored in the new note hashes array (at the position hinted by note hash\n        // counter).\n        NoteExistenceRequest::for_pending(note_hash, hinted_note.contract_address)\n    }\n}\n\n/// Unconstrained variant of [`compute_confirmed_note_hash_for_nullification`].\npub unconstrained fn compute_note_hash_for_nullification<Note>(hinted_note: HintedNote<Note>) -> Field\nwhere\n    Note: NoteHash,\n{\n    // Creating a ConfirmedNote like we do here is typically unsafe, as we've not confirmed existence. We can do it\n    // here because this is an unconstrained function, so the returned value should not make its way to a constrained\n    // function. This lets us reuse the `compute_confirmed_note_hash_for_nullification` implementation.\n    compute_confirmed_note_hash_for_nullification(ConfirmedNote::new(\n        hinted_note,\n        compute_note_existence_request(hinted_note).note_hash(),\n    ))\n}\n\n/// Returns the note hash to use when computing its nullifier.\n///\n/// The `note_hash_for_nullification` parameter [`NoteHash::compute_nullifier`] takes depends on the note's stage, e.g.\n/// settled notes use the unique note hash, but pending notes cannot as they have no nonce. This function returns the\n/// correct note hash to use.\n///\n/// Use [`compute_note_hash_for_nullification`] when computing this value in unconstrained functions.\npub fn compute_confirmed_note_hash_for_nullification<Note>(confirmed_note: ConfirmedNote<Note>) -> Field {\n    // There is just one instance in which the note hash for nullification does not match the note hash used for a read\n    // request, which is when dealing with pending previous phase notes. These had their existence proven using their\n    // non-siloed note hash along with the note hash counter (like all pending notes), but since they will be\n    // unconditionally inserted in the note hash tree (since they cannot be squashed) they must be nullified using the\n    // *unique* note hash. If we didn't, it'd be possible to emit a second different nullifier for the same note in a\n    // follow up transaction, once the note is settled, resulting in a double spend.\n\n    if confirmed_note.metadata.is_pending_previous_phase() {\n        let siloed_note_hash = compute_siloed_note_hash(\n            confirmed_note.contract_address,\n            confirmed_note.proven_note_hash,\n        );\n        let note_nonce = confirmed_note.metadata.to_pending_previous_phase().note_nonce();\n\n        compute_unique_note_hash(note_nonce, siloed_note_hash)\n    } else {\n        confirmed_note.proven_note_hash\n    }\n}\n"
    },
    "187": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/nullifier/utils.nr",
      "source": "use crate::{context::NullifierExistenceRequest, oracle::nullifiers::is_nullifier_pending};\n\nuse crate::protocol::{address::aztec_address::AztecAddress, hash::compute_siloed_nullifier};\n\n/// Returns the [`NullifierExistenceRequest`] used to prove a nullifier exists.\npub fn compute_nullifier_existence_request(\n    unsiloed_nullifier: Field,\n    contract_address: AztecAddress,\n) -> NullifierExistenceRequest {\n    let pending_read_request = NullifierExistenceRequest::for_pending(unsiloed_nullifier, contract_address);\n\n    let siloed_nullifier = compute_siloed_nullifier(contract_address, unsiloed_nullifier);\n    let settled_read_request = NullifierExistenceRequest::for_settled(siloed_nullifier);\n\n    // Safety: This is a hint to check whether we are reading a pending or settled nullifier. The chosen read request\n    // will be validated by the kernel. Failure to provide a correct hint will cause the read request validation to\n    // fail.\n    let should_use_pending_read_request = unsafe { is_nullifier_pending(unsiloed_nullifier, contract_address) };\n\n    if should_use_pending_read_request {\n        pending_read_request\n    } else {\n        settled_read_request\n    }\n}\n"
    },
    "188": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/aes128_decrypt.nr",
      "source": "#[oracle(aztec_utl_decryptAes128)]\nunconstrained fn aes128_decrypt_oracle<let N: u32>(\n    ciphertext: BoundedVec<u8, N>,\n    iv: [u8; 16],\n    sym_key: [u8; 16],\n) -> Option<BoundedVec<u8, N>> {}\n\n/// Attempts to decrypt a ciphertext using AES128.\n///\n/// Returns `Option::some(plaintext)` on success, or `Option::none()` if decryption fails (e.g. due to malformed\n/// ciphertext). Note that decryption with the wrong key will still return `Some` with garbage data, it's up to\n/// the calling function to verify correctness (e.g. via a MAC check).\n///\n/// Note that we accept ciphertext as a BoundedVec, not as an array. This is because this function is typically used\n/// when processing logs and at that point we don't have comptime information about the length of the ciphertext as\n/// the log is not specific to any individual note.\n// TODO(F-498): review naming consistency\npub unconstrained fn try_aes128_decrypt<let N: u32>(\n    ciphertext: BoundedVec<u8, N>,\n    iv: [u8; 16],\n    sym_key: [u8; 16],\n) -> Option<BoundedVec<u8, N>> {\n    aes128_decrypt_oracle(ciphertext, iv, sym_key)\n}\n\nmod test {\n    use crate::{\n        keys::ecdh_shared_secret::compute_app_siloed_shared_secret,\n        messages::encryption::aes128::derive_aes_symmetric_key_and_iv_from_shared_secret,\n        utils::{array::subarray::subarray, point::point_from_x_coord},\n    };\n    use crate::protocol::address::AztecAddress;\n    use crate::test::helpers::test_environment::TestEnvironment;\n    use super::try_aes128_decrypt;\n    use poseidon::poseidon2::Poseidon2;\n    use std::aes128::aes128_encrypt;\n\n    global CONTRACT_ADDRESS: AztecAddress = AztecAddress { inner: 42 };\n    global TEST_PLAINTEXT_LENGTH: u32 = 10;\n    global TEST_CIPHERTEXT_LENGTH: u32 = 16;\n    global TEST_PADDING_LENGTH: u32 = TEST_CIPHERTEXT_LENGTH - TEST_PLAINTEXT_LENGTH;\n\n    #[test]\n    unconstrained fn aes_encrypt_then_decrypt() {\n        let env = TestEnvironment::new();\n\n        env.utility_context(|_| {\n            let shared_secret_point = point_from_x_coord(1).unwrap();\n            let s_app = compute_app_siloed_shared_secret(shared_secret_point, CONTRACT_ADDRESS);\n\n            let (sym_key, iv) = derive_aes_symmetric_key_and_iv_from_shared_secret::<1>(s_app)[0];\n\n            let plaintext: [u8; TEST_PLAINTEXT_LENGTH] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n            let ciphertext: [u8; TEST_CIPHERTEXT_LENGTH] = aes128_encrypt(plaintext, iv, sym_key);\n\n            let ciphertext_bvec = BoundedVec::<u8, TEST_CIPHERTEXT_LENGTH>::from_array(ciphertext);\n\n            let received_plaintext = try_aes128_decrypt(ciphertext_bvec, iv, sym_key).unwrap();\n            assert_eq(received_plaintext.len(), TEST_PLAINTEXT_LENGTH);\n            assert_eq(received_plaintext.max_len(), TEST_CIPHERTEXT_LENGTH);\n            assert_eq(subarray::<_, _, TEST_PLAINTEXT_LENGTH>(received_plaintext.storage(), 0), plaintext);\n            assert_eq(\n                subarray::<_, _, TEST_PADDING_LENGTH>(received_plaintext.storage(), TEST_PLAINTEXT_LENGTH),\n                [0 as u8; TEST_PADDING_LENGTH],\n            );\n        })\n    }\n\n    global TEST_MAC_LENGTH: u32 = 32;\n\n    #[test(should_fail_with = \"mac does not match\")]\n    unconstrained fn aes_encrypt_then_decrypt_with_bad_sym_key_is_caught() {\n        let env = TestEnvironment::new();\n\n        env.utility_context(|_| {\n            // The AES decryption oracle will not fail for any valid ciphertext; it will always return\n            // `Some` with some data. Whether the decryption was successful is up to the app to check in a\n            // custom way.\n            //\n            // E.g. if it's a note that's been encrypted, upon decryption the app can check whether the\n            // note hash exists onchain. If it doesn't, that's a strong indicator that decryption failed.\n            //\n            // E.g. for non-note messages, the plaintext could include a MAC\n            // (https://en.wikipedia.org/wiki/Message_authentication_code). We demonstrate this approach in\n            // this test: we compute a MAC, include it in the plaintext, encrypt, and then verify that\n            // decryption with a bad key produces a MAC mismatch.\n            let shared_secret_point = point_from_x_coord(1).unwrap();\n            let s_app = compute_app_siloed_shared_secret(shared_secret_point, CONTRACT_ADDRESS);\n\n            let (sym_key, iv) = derive_aes_symmetric_key_and_iv_from_shared_secret::<1>(s_app)[0];\n\n            let mac_preimage = 0x42;\n            let mac = Poseidon2::hash([mac_preimage], 1);\n            let mac_as_bytes = mac.to_be_bytes::<TEST_MAC_LENGTH>();\n\n            let plaintext: [u8; TEST_PLAINTEXT_LENGTH] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n            // We append the mac to the plaintext. It doesn't necessarily have to be 32 bytes; that's quite an extreme\n            // length. 16 bytes or 8 bytes might be sufficient, and would save on data broadcasting costs. The shorter\n            // the mac, the more possibility of false positive decryptions (decryption seemingly succeeding, but the\n            // decrypted plaintext being garbage). Some projects use the `iv` (all 16 bytes or the first 8 bytes) as a\n            // mac.\n            let mut plaintext_with_mac = [0 as u8; TEST_PLAINTEXT_LENGTH + TEST_MAC_LENGTH];\n            for i in 0..TEST_PLAINTEXT_LENGTH {\n                plaintext_with_mac[i] = plaintext[i];\n            }\n            for i in 0..TEST_MAC_LENGTH {\n                plaintext_with_mac[TEST_PLAINTEXT_LENGTH + i] = mac_as_bytes[i];\n            }\n\n            let ciphertext = aes128_encrypt(plaintext_with_mac, iv, sym_key);\n\n            // We now would broadcast the tuple [ciphertext, mac] to the network. The recipient will then decrypt the\n            // ciphertext, and if the mac inside the received plaintext matches the mac that was broadcast, then the\n            // recipient knows that decryption was successful.\n\n            // For this test, we intentionally mutate the sym_key to a bad one, so that decryption fails. This allows\n            // us to explore how the recipient can detect failed decryption by checking the decrypted mac against the\n            // broadcasted mac.\n            let mut bad_sym_key = sym_key;\n            bad_sym_key[0] = 0;\n\n            // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's designed to\n            // work with logs of unknown length.\n            let ciphertext_bvec = BoundedVec::<u8, 48>::from_array(ciphertext);\n            // Decryption with wrong key still returns Some (with garbage).\n            let received_plaintext = try_aes128_decrypt(ciphertext_bvec, iv, bad_sym_key).unwrap();\n\n            let extracted_mac_as_bytes: [u8; TEST_MAC_LENGTH] =\n                subarray(received_plaintext.storage(), TEST_PLAINTEXT_LENGTH);\n\n            assert_eq(mac_as_bytes, extracted_mac_as_bytes, \"mac does not match\");\n        });\n    }\n}\n"
    },
    "190": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/avm.nr",
      "source": "//! AVM oracles.\n//!\n//! There are only available during public execution. Calling any of them from a private or utility function will\n//! result in runtime errors.\n\nuse crate::protocol::address::{AztecAddress, EthAddress};\n\npub unconstrained fn address() -> AztecAddress {\n    address_opcode()\n}\npub unconstrained fn sender() -> AztecAddress {\n    sender_opcode()\n}\npub unconstrained fn transaction_fee() -> Field {\n    transaction_fee_opcode()\n}\npub unconstrained fn chain_id() -> Field {\n    chain_id_opcode()\n}\npub unconstrained fn version() -> Field {\n    version_opcode()\n}\npub unconstrained fn block_number() -> u32 {\n    block_number_opcode()\n}\npub unconstrained fn timestamp() -> u64 {\n    timestamp_opcode()\n}\npub unconstrained fn min_fee_per_l2_gas() -> u128 {\n    min_fee_per_l2_gas_opcode()\n}\npub unconstrained fn min_fee_per_da_gas() -> u128 {\n    min_fee_per_da_gas_opcode()\n}\npub unconstrained fn l2_gas_left() -> u32 {\n    l2_gas_left_opcode()\n}\npub unconstrained fn da_gas_left() -> u32 {\n    da_gas_left_opcode()\n}\npub unconstrained fn is_static_call() -> u1 {\n    is_static_call_opcode()\n}\npub unconstrained fn note_hash_exists(note_hash: Field, leaf_index: u64) -> u1 {\n    note_hash_exists_opcode(note_hash, leaf_index)\n}\npub unconstrained fn emit_note_hash(note_hash: Field) {\n    emit_note_hash_opcode(note_hash)\n}\npub unconstrained fn nullifier_exists(siloed_nullifier: Field) -> u1 {\n    nullifier_exists_opcode(siloed_nullifier)\n}\npub unconstrained fn emit_nullifier(nullifier: Field) {\n    emit_nullifier_opcode(nullifier)\n}\npub unconstrained fn emit_public_log(message: [Field]) {\n    emit_public_log_opcode(message)\n}\npub unconstrained fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: u64) -> u1 {\n    l1_to_l2_msg_exists_opcode(msg_hash, msg_leaf_index)\n}\npub unconstrained fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) {\n    send_l2_to_l1_msg_opcode(recipient, content)\n}\n\npub unconstrained fn call<let N: u32>(\n    l2_gas_allocation: u32,\n    da_gas_allocation: u32,\n    address: AztecAddress,\n    args: [Field; N],\n) {\n    call_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn call_static<let N: u32>(\n    l2_gas_allocation: u32,\n    da_gas_allocation: u32,\n    address: AztecAddress,\n    args: [Field; N],\n) {\n    call_static_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn calldata_copy<let N: u32>(cdoffset: u32, copy_size: u32) -> [Field; N] {\n    calldata_copy_opcode(cdoffset, copy_size)\n}\n\n/// `success_copy` is placed immediately after the CALL opcode to get the success value\npub unconstrained fn success_copy() -> bool {\n    success_copy_opcode()\n}\n\npub unconstrained fn returndata_size() -> u32 {\n    returndata_size_opcode()\n}\n\npub unconstrained fn returndata_copy(rdoffset: u32, copy_size: u32) -> [Field] {\n    returndata_copy_opcode(rdoffset, copy_size)\n}\n\n/// The additional prefix is to avoid clashing with the `return` Noir keyword.\npub unconstrained fn avm_return(returndata: [Field]) {\n    return_opcode(returndata)\n}\n\n/// This opcode reverts using the exact data given. In general it should only be used to do rethrows, where the revert\n/// data is the same as the original revert data. For normal reverts, use Noir's `assert` which, on top of reverting,\n/// will also add an error selector to the revert data.\npub unconstrained fn revert(revertdata: [Field]) {\n    revert_opcode(revertdata)\n}\n\npub unconstrained fn storage_read(storage_slot: Field, contract_address: Field) -> Field {\n    storage_read_opcode(storage_slot, contract_address)\n}\n\npub unconstrained fn storage_write(storage_slot: Field, value: Field) {\n    storage_write_opcode(storage_slot, value);\n}\n\n#[oracle(aztec_avm_address)]\nunconstrained fn address_opcode() -> AztecAddress {}\n\n#[oracle(aztec_avm_sender)]\nunconstrained fn sender_opcode() -> AztecAddress {}\n\n#[oracle(aztec_avm_transactionFee)]\nunconstrained fn transaction_fee_opcode() -> Field {}\n\n#[oracle(aztec_avm_chainId)]\nunconstrained fn chain_id_opcode() -> Field {}\n\n#[oracle(aztec_avm_version)]\nunconstrained fn version_opcode() -> Field {}\n\n#[oracle(aztec_avm_blockNumber)]\nunconstrained fn block_number_opcode() -> u32 {}\n\n#[oracle(aztec_avm_timestamp)]\nunconstrained fn timestamp_opcode() -> u64 {}\n\n#[oracle(aztec_avm_minFeePerL2Gas)]\nunconstrained fn min_fee_per_l2_gas_opcode() -> u128 {}\n\n#[oracle(aztec_avm_minFeePerDaGas)]\nunconstrained fn min_fee_per_da_gas_opcode() -> u128 {}\n\n#[oracle(aztec_avm_l2GasLeft)]\nunconstrained fn l2_gas_left_opcode() -> u32 {}\n\n#[oracle(aztec_avm_daGasLeft)]\nunconstrained fn da_gas_left_opcode() -> u32 {}\n\n#[oracle(aztec_avm_isStaticCall)]\nunconstrained fn is_static_call_opcode() -> u1 {}\n\n#[oracle(aztec_avm_noteHashExists)]\nunconstrained fn note_hash_exists_opcode(note_hash: Field, leaf_index: u64) -> u1 {}\n\n#[oracle(aztec_avm_emitNoteHash)]\nunconstrained fn emit_note_hash_opcode(note_hash: Field) {}\n\n#[oracle(aztec_avm_nullifierExists)]\nunconstrained fn nullifier_exists_opcode(siloed_nullifier: Field) -> u1 {}\n\n#[oracle(aztec_avm_emitNullifier)]\nunconstrained fn emit_nullifier_opcode(nullifier: Field) {}\n\n#[oracle(aztec_avm_emitPublicLog)]\nunconstrained fn emit_public_log_opcode(message: [Field]) {}\n\n#[oracle(aztec_avm_l1ToL2MsgExists)]\nunconstrained fn l1_to_l2_msg_exists_opcode(msg_hash: Field, msg_leaf_index: u64) -> u1 {}\n\n#[oracle(aztec_avm_sendL2ToL1Msg)]\nunconstrained fn send_l2_to_l1_msg_opcode(recipient: EthAddress, content: Field) {}\n\n#[oracle(aztec_avm_calldataCopy)]\nunconstrained fn calldata_copy_opcode<let N: u32>(cdoffset: u32, copy_size: u32) -> [Field; N] {}\n\n#[oracle(aztec_avm_returndataSize)]\nunconstrained fn returndata_size_opcode() -> u32 {}\n\n#[oracle(aztec_avm_returndataCopy)]\nunconstrained fn returndata_copy_opcode(rdoffset: u32, copy_size: u32) -> [Field] {}\n\n#[oracle(aztec_avm_return)]\nunconstrained fn return_opcode(returndata: [Field]) {}\n\n#[oracle(aztec_avm_revert)]\nunconstrained fn revert_opcode(revertdata: [Field]) {}\n\n// While the length parameter might seem unnecessary given that we have N we keep it around because at the AVM bytecode\n// level, we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally take\n// that route.\n#[oracle(aztec_avm_call)]\nunconstrained fn call_opcode<let N: u32>(\n    l2_gas_allocation: u32,\n    da_gas_allocation: u32,\n    address: AztecAddress,\n    length: u32,\n    args: [Field; N],\n) {}\n\n// While the length parameter might seem unnecessary given that we have N we keep it around because at the AVM bytecode\n// level, we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally take\n// that route.\n#[oracle(aztec_avm_staticCall)]\nunconstrained fn call_static_opcode<let N: u32>(\n    l2_gas_allocation: u32,\n    da_gas_allocation: u32,\n    address: AztecAddress,\n    length: u32,\n    args: [Field; N],\n) {}\n\n#[oracle(aztec_avm_successCopy)]\nunconstrained fn success_copy_opcode() -> bool {}\n\n#[oracle(aztec_avm_storageRead)]\nunconstrained fn storage_read_opcode(storage_slot: Field, contract_address: Field) -> Field {}\n\n#[oracle(aztec_avm_storageWrite)]\nunconstrained fn storage_write_opcode(storage_slot: Field, value: Field) {}\n"
    },
    "192": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
      "source": "use crate::protocol::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(aztec_prv_callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n    _contract_address: AztecAddress,\n    _function_selector: FunctionSelector,\n    _args_hash: Field,\n    _start_side_effect_counter: u32,\n    _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n    contract_address: AztecAddress,\n    function_selector: FunctionSelector,\n    args_hash: Field,\n    start_side_effect_counter: u32,\n    is_static_call: bool,\n) -> (u32, Field) {\n    let fields = call_private_function_oracle(\n        contract_address,\n        function_selector,\n        args_hash,\n        start_side_effect_counter,\n        is_static_call,\n    );\n\n    let mut reader = Reader::new(fields);\n    let end_side_effect_counter = reader.read_u32();\n    let returns_hash = reader.read();\n\n    (end_side_effect_counter, returns_hash)\n}\n"
    },
    "193": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/capsules.nr",
      "source": "use crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// Stores arbitrary information in a per-contract non-volatile database, which can later be retrieved with `load`. If\n/// data was already stored at this slot, it is overwritten.\n// TODO(F-498): review naming consistency\npub unconstrained fn store<T>(contract_address: AztecAddress, slot: Field, value: T, scope: AztecAddress)\nwhere\n    T: Serialize,\n{\n    let serialized = value.serialize();\n    set_capsule_oracle(contract_address, slot, serialized, scope);\n}\n\n/// Returns data previously stored via `storeCapsule` in the per-contract non-volatile database. Returns\n/// Option::none() if nothing was stored at the given slot.\n// TODO(F-498): review naming consistency\npub unconstrained fn load<T>(contract_address: AztecAddress, slot: Field, scope: AztecAddress) -> Option<T>\nwhere\n    T: Deserialize,\n{\n    let serialized_option = get_capsule_oracle(contract_address, slot, <T as Deserialize>::N, scope);\n    serialized_option.map(|arr| Deserialize::deserialize(arr))\n}\n\n/// Deletes data in the per-contract non-volatile database. Does nothing if no data was present.\npub unconstrained fn delete(contract_address: AztecAddress, slot: Field, scope: AztecAddress) {\n    delete_oracle(contract_address, slot, scope);\n}\n\n/// Copies a number of contiguous entries in the per-contract non-volatile database. This allows for efficient data\n/// structures by avoiding repeated calls to `loadCapsule` and `storeCapsule`. Supports overlapping source and\n/// destination regions (which will result in the overlapped source values being overwritten). All copied slots must\n/// exist in the database (i.e. have been stored and not deleted)\npub unconstrained fn copy(\n    contract_address: AztecAddress,\n    src_slot: Field,\n    dst_slot: Field,\n    num_entries: u32,\n    scope: AztecAddress,\n) {\n    copy_oracle(contract_address, src_slot, dst_slot, num_entries, scope);\n}\n\n#[oracle(aztec_utl_setCapsule)]\nunconstrained fn set_capsule_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    slot: Field,\n    values: [Field; N],\n    scope: AztecAddress,\n) {}\n\n/// We need to pass in `array_len` (the value of N) as a parameter to tell the oracle how many fields the response must\n/// have.\n///\n/// Note that the oracle returns an Option<[Field; N]> because we cannot return an Option<T> directly. That would\n/// require for the oracle resolver to know the shape of T (e.g. if T were a struct of 3 u32 values then the expected\n/// response shape would be 3 single items, whereas it were a struct containing `u32, [Field;10], u32` then the\n/// expected shape would be single, array, single.). Instead, we return the serialization and deserialize in Noir.\n#[oracle(aztec_utl_getCapsule)]\nunconstrained fn get_capsule_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    slot: Field,\n    array_len: u32,\n    scope: AztecAddress,\n) -> Option<[Field; N]> {}\n\n#[oracle(aztec_utl_deleteCapsule)]\nunconstrained fn delete_oracle(contract_address: AztecAddress, slot: Field, scope: AztecAddress) {}\n\n#[oracle(aztec_utl_copyCapsule)]\nunconstrained fn copy_oracle(\n    contract_address: AztecAddress,\n    src_slot: Field,\n    dst_slot: Field,\n    num_entries: u32,\n    scope: AztecAddress,\n) {}\n\nmod test {\n    // These tests are sort of redundant since we already test the oracle implementation directly in TypeScript, but\n    // they are cheap regardless and help ensure both that the TXE implementation works accordingly and that the Noir\n    // oracles are hooked up correctly.\n\n    use crate::{\n        oracle::capsules::{copy, delete, load, store},\n        test::{helpers::test_environment::TestEnvironment, mocks::MockStruct},\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, ToField}};\n\n    global SLOT: Field = 1;\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    #[test]\n    unconstrained fn stores_and_loads() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n\n            assert_eq(load(contract_address, SLOT, SCOPE).unwrap(), value);\n        });\n    }\n\n    #[test]\n    unconstrained fn store_overwrites() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n\n            let new_value = MockStruct::new(7, 8);\n            store(contract_address, SLOT, new_value, SCOPE);\n\n            assert_eq(load(contract_address, SLOT, SCOPE).unwrap(), new_value);\n        });\n    }\n\n    #[test]\n    unconstrained fn loads_empty_slot() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn deletes_stored_value() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n            delete(contract_address, SLOT, SCOPE);\n\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn deletes_empty_slot() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            delete(contract_address, SLOT, SCOPE);\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_non_overlapping_values() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 5;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 10;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_overlapping_values_with_src_ahead() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 1;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 2;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n\n            // src[1] and src[2] should have been overwritten since they are also dst[0] and dst[1]\n            assert_eq(load(contract_address, src, SCOPE).unwrap(), values[0]); // src[0] (unchanged)\n            assert_eq(load(contract_address, src + 1, SCOPE).unwrap(), values[0]); // dst[0]\n            assert_eq(load(contract_address, src + 2, SCOPE).unwrap(), values[1]); // dst[1]\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_overlapping_values_with_dst_ahead() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 2;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 1;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n\n            // src[0] and src[1] should have been overwritten since they are also dst[1] and dst[2]\n            assert_eq(load(contract_address, src, SCOPE).unwrap(), values[1]); // dst[1]\n            assert_eq(load(contract_address, src + 1, SCOPE).unwrap(), values[2]); // dst[2]\n            assert_eq(load(contract_address, src + 2, SCOPE).unwrap(), values[2]); // src[2] (unchanged)\n        });\n    }\n\n    #[test(should_fail_with = \"copy empty slot\")]\n    unconstrained fn cannot_copy_empty_values() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            copy(contract_address, SLOT, SLOT, 1, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_store_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            let value = MockStruct::new(5, 6);\n            store(other_contract_address, SLOT, value, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_load_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            let _: Option<MockStruct> = load(other_contract_address, SLOT, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_delete_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            delete(other_contract_address, SLOT, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_copy_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            copy(other_contract_address, SLOT, SLOT, 0, SCOPE);\n        });\n    }\n}\n"
    },
    "194": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/contract_sync.nr",
      "source": "use crate::protocol::address::AztecAddress;\n\n#[oracle(aztec_utl_setContractSyncCacheInvalid)]\nunconstrained fn set_contract_sync_cache_invalid_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    scopes: BoundedVec<AztecAddress, N>,\n) {}\n\n/// Forces the PXE to re-sync the given contract for a set of scopes on the next query.\n///\n/// Call this after writing data (e.g. offchain messages) that the contract's `sync_state` function needs to discover.\n/// Without invalidation, the sync cache would skip re-running `sync_state` until the next block.\npub unconstrained fn set_contract_sync_cache_invalid<let N: u32>(\n    contract_address: AztecAddress,\n    scopes: BoundedVec<AztecAddress, N>,\n) {\n    set_contract_sync_cache_invalid_oracle(contract_address, scopes);\n}\n"
    },
    "195": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/execution.nr",
      "source": "use crate::context::UtilityContext;\n\n#[oracle(aztec_utl_getUtilityContext)]\nunconstrained fn get_utility_context_oracle() -> UtilityContext {}\n\n/// Returns a utility context built from the global variables of anchor block and the contract address of the function\n/// being executed.\npub unconstrained fn get_utility_context() -> UtilityContext {\n    get_utility_context_oracle()\n}\n"
    },
    "196": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/execution_cache.nr",
      "source": "/// Stores values represented as slice in execution cache to be later obtained by its hash.\n// TODO(F-498): review naming consistency\npub fn store<let N: u32>(values: [Field; N], hash: Field) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to\n    // call. When loading the values, however, the caller must check that the values are indeed the preimage.\n    unsafe { set_hash_preimage_oracle_wrapper(values, hash) };\n}\n\nunconstrained fn set_hash_preimage_oracle_wrapper<let N: u32>(values: [Field; N], hash: Field) {\n    set_hash_preimage_oracle(values, hash);\n}\n\n// TODO(F-498): review naming consistency\npub unconstrained fn load<let N: u32>(hash: Field) -> [Field; N] {\n    get_hash_preimage_oracle(hash)\n}\n\n#[oracle(aztec_prv_setHashPreimage)]\nunconstrained fn set_hash_preimage_oracle<let N: u32>(_values: [Field; N], _hash: Field) {}\n\n#[oracle(aztec_prv_getHashPreimage)]\nunconstrained fn get_hash_preimage_oracle<let N: u32>(_hash: Field) -> [Field; N] {}\n"
    },
    "197": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr",
      "source": "use crate::protocol::{\n    address::AztecAddress, contract_class_id::ContractClassId, contract_instance::ContractInstance, traits::FromField,\n};\n\n// NOTE: this is for use in private only\n#[oracle(aztec_utl_getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> ContractInstance {}\n\n// NOTE: this is for use in private only\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> ContractInstance {\n    get_contract_instance_oracle(address)\n}\n\n// NOTE: this is for use in private only\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n    // Safety: The to_address function combines all values in the instance object to produce an address, so by checking\n    // that we get the expected address we validate the entire struct.\n    let instance = unsafe { get_contract_instance_internal(address) };\n    assert_eq(instance.to_address(), address);\n\n    instance\n}\n\nstruct GetContractInstanceResult {\n    exists: bool,\n    member: Field,\n}\n\n// These oracles each return a ContractInstance member plus a boolean indicating whether the instance was found.\n#[oracle(aztec_avm_getContractInstanceDeployer)]\nunconstrained fn get_contract_instance_deployer_oracle_avm(_address: AztecAddress) -> [GetContractInstanceResult; 1] {}\n#[oracle(aztec_avm_getContractInstanceClassId)]\nunconstrained fn get_contract_instance_class_id_oracle_avm(_address: AztecAddress) -> [GetContractInstanceResult; 1] {}\n#[oracle(aztec_avm_getContractInstanceInitializationHash)]\nunconstrained fn get_contract_instance_initialization_hash_oracle_avm(\n    _address: AztecAddress,\n) -> [GetContractInstanceResult; 1] {}\n\nunconstrained fn get_contract_instance_deployer_internal_avm(address: AztecAddress) -> [GetContractInstanceResult; 1] {\n    get_contract_instance_deployer_oracle_avm(address)\n}\nunconstrained fn get_contract_instance_class_id_internal_avm(address: AztecAddress) -> [GetContractInstanceResult; 1] {\n    get_contract_instance_class_id_oracle_avm(address)\n}\nunconstrained fn get_contract_instance_initialization_hash_internal_avm(\n    address: AztecAddress,\n) -> [GetContractInstanceResult; 1] {\n    get_contract_instance_initialization_hash_oracle_avm(address)\n}\n\npub fn get_contract_instance_deployer_avm(address: AztecAddress) -> Option<AztecAddress> {\n    // Safety: AVM opcodes are constrained by the AVM itself\n    let GetContractInstanceResult { exists, member } =\n        unsafe { get_contract_instance_deployer_internal_avm(address)[0] };\n    if exists {\n        Option::some(AztecAddress::from_field(member))\n    } else {\n        Option::none()\n    }\n}\npub fn get_contract_instance_class_id_avm(address: AztecAddress) -> Option<ContractClassId> {\n    // Safety: AVM opcodes are constrained by the AVM itself\n    let GetContractInstanceResult { exists, member } =\n        unsafe { get_contract_instance_class_id_internal_avm(address)[0] };\n    if exists {\n        Option::some(ContractClassId::from_field(member))\n    } else {\n        Option::none()\n    }\n}\npub fn get_contract_instance_initialization_hash_avm(address: AztecAddress) -> Option<Field> {\n    // Safety: AVM opcodes are constrained by the AVM itself\n    let GetContractInstanceResult { exists, member } =\n        unsafe { get_contract_instance_initialization_hash_internal_avm(address)[0] };\n    if exists {\n        Option::some(member)\n    } else {\n        Option::none()\n    }\n}\n"
    },
    "201": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr",
      "source": "use crate::protocol::{\n    abis::block_header::BlockHeader,\n    constants::PUBLIC_DATA_TREE_HEIGHT,\n    data::PublicDataTreeLeafPreimage,\n    traits::{Deserialize, Hash, Serialize},\n};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct PublicDataWitness {\n    pub index: Field,\n    pub leaf_preimage: PublicDataTreeLeafPreimage,\n    pub path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(aztec_utl_getPublicDataWitness)]\nunconstrained fn get_public_data_witness_oracle(\n    _block_hash: Field,\n    _public_data_tree_index: Field,\n) -> PublicDataWitness {}\n\npub unconstrained fn get_public_data_witness(\n    block_header: BlockHeader,\n    public_data_tree_index: Field,\n) -> PublicDataWitness {\n    let block_hash = block_header.hash();\n    get_public_data_witness_oracle(block_hash, public_data_tree_index)\n}\n"
    },
    "202": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr",
      "source": "use crate::protocol::abis::validation_requests::KeyValidationRequest;\n\n#[oracle(aztec_utl_getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(_pk_m_hash: Field, _key_index: Field) -> KeyValidationRequest {}\n\npub unconstrained fn get_key_validation_request(pk_m_hash: Field, key_index: Field) -> KeyValidationRequest {\n    get_key_validation_request_oracle(pk_m_hash, key_index)\n}\n"
    },
    "203": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/keys.nr",
      "source": "use crate::protocol::{\n    address::{AztecAddress, PartialAddress},\n    point::Point,\n    public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n};\n\n// TODO(F-498): review naming consistency\npub unconstrained fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n    try_get_public_keys_and_partial_address(address).expect(f\"Public keys not registered for account {address}\")\n}\n\n#[oracle(aztec_utl_getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> Option<[Field; 13]> {}\n\n// TODO(F-498): review naming consistency\npub unconstrained fn try_get_public_keys_and_partial_address(\n    address: AztecAddress,\n) -> Option<(PublicKeys, PartialAddress)> {\n    get_public_keys_and_partial_address_oracle(address).map(|result: [Field; 13]| {\n        let keys = PublicKeys {\n            npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] != 0 } },\n            ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] != 0 } },\n            ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] != 0 } },\n            tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] != 0 } },\n        };\n\n        let partial_address = PartialAddress::from_field(result[12]);\n\n        (keys, partial_address)\n    })\n}\n"
    },
    "205": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/message_processing.nr",
      "source": "use crate::protocol::address::AztecAddress;\n\n/// Finds new private logs that may have been sent to all registered accounts in PXE in the current contract and makes\n/// them available for later processing in Noir by storing them in a capsule array.\n// TODO(F-498): review naming consistency\npub unconstrained fn fetch_tagged_logs(pending_tagged_log_array_base_slot: Field, scope: AztecAddress) {\n    get_pending_tagged_logs_oracle(pending_tagged_log_array_base_slot, scope);\n}\n\n#[oracle(aztec_utl_getPendingTaggedLogs)]\nunconstrained fn get_pending_tagged_logs_oracle(pending_tagged_log_array_base_slot: Field, scope: AztecAddress) {}\n\n// This must be a single oracle and not one for notes and one for events because the entire point is to validate all\n// notes and events in one go, minimizing node round-trips.\npub(crate) unconstrained fn validate_and_store_enqueued_notes_and_events(\n    contract_address: AztecAddress,\n    note_validation_requests_array_base_slot: Field,\n    event_validation_requests_array_base_slot: Field,\n    max_note_packed_len: Field,\n    max_event_serialized_len: Field,\n    scope: AztecAddress,\n) {\n    validate_and_store_enqueued_notes_and_events_oracle(\n        contract_address,\n        note_validation_requests_array_base_slot,\n        event_validation_requests_array_base_slot,\n        max_note_packed_len,\n        max_event_serialized_len,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_validateAndStoreEnqueuedNotesAndEvents)]\nunconstrained fn validate_and_store_enqueued_notes_and_events_oracle(\n    contract_address: AztecAddress,\n    note_validation_requests_array_base_slot: Field,\n    event_validation_requests_array_base_slot: Field,\n    max_note_packed_len: Field,\n    max_event_serialized_len: Field,\n    scope: AztecAddress,\n) {}\n\npub(crate) unconstrained fn get_logs_by_tag(\n    contract_address: AztecAddress,\n    log_retrieval_requests_array_base_slot: Field,\n    log_retrieval_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    get_logs_by_tag_oracle(\n        contract_address,\n        log_retrieval_requests_array_base_slot,\n        log_retrieval_responses_array_base_slot,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_getLogsByTag)]\nunconstrained fn get_logs_by_tag_oracle(\n    contract_address: AztecAddress,\n    log_retrieval_requests_array_base_slot: Field,\n    log_retrieval_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {}\n\npub(crate) unconstrained fn get_message_contexts_by_tx_hash(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    get_message_contexts_by_tx_hash_oracle(\n        contract_address,\n        message_context_requests_array_base_slot,\n        message_context_responses_array_base_slot,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_getMessageContextsByTxHash)]\nunconstrained fn get_message_contexts_by_tx_hash_oracle(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {}\n"
    },
    "208": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/nullifiers.nr",
      "source": "//! Nullifier creation, existence checks, etc.\n\nuse crate::protocol::address::aztec_address::AztecAddress;\n\n/// Notifies the simulator that a nullifier has been created, so that its correct status (pending or settled) can be\n/// determined when reading nullifiers in subsequent private function calls. The first non-revertible nullifier emitted\n/// is also used to compute note nonces.\npub fn notify_created_nullifier(inner_nullifier: Field) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to\n    // call.\n    unsafe { notify_created_nullifier_oracle(inner_nullifier) };\n}\n\n#[oracle(aztec_prv_notifyCreatedNullifier)]\nunconstrained fn notify_created_nullifier_oracle(_inner_nullifier: Field) {}\n\n/// Returns `true` if the nullifier has been emitted in the same transaction, i.e. if [`notify_created_nullifier`] has\n/// been\n/// called for this inner nullifier from the contract with the specified address.\n///\n/// Note that despite sharing pending transaction information with the app, this is not a privacy leak: anyone in the\n/// network can always determine in which transaction a inner nullifier was emitted by a given contract by simply\n/// inspecting transaction effects. What _would_ constitute a leak would be to share the list of inner pending\n/// nullifiers, as that would reveal their preimages.\npub unconstrained fn is_nullifier_pending(inner_nullifier: Field, contract_address: AztecAddress) -> bool {\n    is_nullifier_pending_oracle(inner_nullifier, contract_address)\n}\n\n#[oracle(aztec_prv_isNullifierPending)]\nunconstrained fn is_nullifier_pending_oracle(_inner_nullifier: Field, _contract_address: AztecAddress) -> bool {}\n\n/// Returns `true` if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before\n/// the current transaction is included in a block. While this might seem of little use at first, certain design\n/// patterns benefit from this abstraction (see e.g. `PrivateMutable`).\n// TODO(F-498): review naming consistency\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n    does_nullifier_exist_oracle(inner_nullifier)\n}\n\n#[oracle(aztec_utl_doesNullifierExist)]\nunconstrained fn does_nullifier_exist_oracle(_inner_nullifier: Field) -> bool {}\n"
    },
    "209": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/offchain_effect.nr",
      "source": "use crate::protocol::traits::Serialize;\n\n/// Emits data that will be delivered to PXE unaltered. This data can be interpreted freely by a downstream consumer\n/// (such as a wallet).\n///\n/// # Arguments\n///\n/// * `data` - The data to emit.\npub unconstrained fn emit_offchain_effect<T>(data: T)\nwhere\n    T: Serialize,\n{\n    emit_offchain_effect_oracle(data.serialize());\n}\n\n#[oracle(aztec_utl_emitOffchainEffect)]\nunconstrained fn emit_offchain_effect_oracle<let N: u32>(data: [Field; N]) {}\n"
    },
    "210": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr",
      "source": "/// Validates public calldata by checking that the preimage exists and the cumulative size is within limits.\n///\n/// The check is unconstrained and the only purpose of it is to fail early in case of calldata overflow or a bug in\n/// calldata hashing.\npub(crate) fn assert_valid_public_call_data(calldata_hash: Field) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects (validating the calldata).\n    // It is therefore always safe to call.\n    unsafe {\n        assert_valid_public_call_data_oracle_wrapper(calldata_hash)\n    }\n}\n\nunconstrained fn assert_valid_public_call_data_oracle_wrapper(calldata_hash: Field) {\n    assert_valid_public_call_data_oracle(calldata_hash)\n}\n\n#[oracle(aztec_prv_assertValidPublicCalldata)]\nunconstrained fn assert_valid_public_call_data_oracle(_calldata_hash: Field) {}\n"
    },
    "212": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/shared_secret.nr",
      "source": "use crate::protocol::address::aztec_address::AztecAddress;\nuse crate::protocol::point::Point;\n\n#[oracle(aztec_utl_getSharedSecret)]\nunconstrained fn get_shared_secret_oracle(\n    address: AztecAddress,\n    ephPk: Point,\n    contract_address: AztecAddress,\n) -> Field {}\n\n/// Returns an app-siloed shared secret between `address` and someone who knows the secret key behind an ephemeral\n/// public key `ephPk`.\n///\n/// The returned value is a Field `s_app`, computed as:\n///\n/// ```text\n/// S     = address_secret * ephPk          (raw ECDH point)\n/// s_app = h(DOM_SEP, S.x, S.y, contract)  (app-siloed scalar)\n/// ```\n///\n/// where `contract` is the address of the calling contract. The oracle host validates this matches its execution\n/// context.\n///\n/// Without app-siloing, a malicious contract could call this oracle with public information (address, ephPk) and\n/// obtain the same raw secret as the legitimate contract, enabling cross-contract decryption. By including the\n/// contract address in the hash, each contract receives a different `s_app`, preventing this attack.\n///\n/// Callers derive indexed subkeys from `s_app` via\n/// [`derive_shared_secret_subkey`](crate::keys::ecdh_shared_secret::derive_shared_secret_subkey).\npub unconstrained fn get_shared_secret(address: AztecAddress, ephPk: Point, contract_address: AztecAddress) -> Field {\n    get_shared_secret_oracle(address, ephPk, contract_address)\n}\n"
    },
    "213": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/storage.nr",
      "source": "use crate::protocol::{abis::block_header::BlockHeader, address::AztecAddress, traits::{Hash, Packable, ToField}};\n\n#[oracle(aztec_utl_getFromPublicStorage)]\nunconstrained fn get_from_public_storage_oracle<let N: u32>(\n    block_hash: Field,\n    address: Field,\n    storage_slot: Field,\n    length: u32,\n) -> [Field; N] {}\n\n// TODO(F-498): review naming consistency\npub unconstrained fn raw_storage_read<let N: u32>(\n    block_hash_to_read_from: Field,\n    address: AztecAddress,\n    storage_slot: Field,\n) -> [Field; N] {\n    get_from_public_storage_oracle(block_hash_to_read_from, address.to_field(), storage_slot, N)\n}\n\n// TODO(F-498): review naming consistency\npub unconstrained fn storage_read<T>(header_to_read_from: BlockHeader, address: AztecAddress, storage_slot: Field) -> T\nwhere\n    T: Packable,\n{\n    let block_hash_to_read_from = header_to_read_from.hash();\n    T::unpack(\n        raw_storage_read(block_hash_to_read_from, address, storage_slot),\n    )\n}\n"
    },
    "214": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/tx_phase.nr",
      "source": "/// Notifies PXE of the side effect counter at which the revertible phase begins.\n///\n/// PXE uses it to classify notes and nullifiers as revertible or non-revertible in its note cache. This information is\n/// then fed to kernels as hints.\npub(crate) fn notify_revertible_phase_start(counter: u32) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to\n    // call.\n    unsafe { notify_revertible_phase_start_oracle_wrapper(counter) };\n}\n\n/// Returns whether a side effect counter falls in the revertible phase of the transaction.\npub(crate) unconstrained fn is_execution_in_revertible_phase(current_counter: u32) -> bool {\n    is_execution_in_revertible_phase_oracle(current_counter)\n}\n\nunconstrained fn notify_revertible_phase_start_oracle_wrapper(counter: u32) {\n    notify_revertible_phase_start_oracle(counter);\n}\n\n#[oracle(aztec_prv_notifyRevertiblePhaseStart)]\nunconstrained fn notify_revertible_phase_start_oracle(_counter: u32) {}\n\n#[oracle(aztec_prv_isExecutionInRevertiblePhase)]\nunconstrained fn is_execution_in_revertible_phase_oracle(current_counter: u32) -> bool {}\n"
    },
    "215": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
      "source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is\n/// called and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 22;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n    // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n    // compatible. It is therefore always safe to call.\n    unsafe {\n        assert_compatible_oracle_version_wrapper();\n    }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n    assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(aztec_utl_assertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n    use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n    #[test]\n    unconstrained fn compatible_oracle_version() {\n        assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n    }\n\n    #[test(should_fail_with = \"Incompatible aztec cli version:\")]\n    unconstrained fn incompatible_oracle_version() {\n        let arbitrary_incorrect_version = 318183437;\n        assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n    }\n}\n"
    },
    "230": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr",
      "source": "use crate::{\n    context::{PrivateContext, PublicContext, UtilityContext},\n    nullifier::utils::compute_nullifier_existence_request,\n    oracle::nullifiers::check_nullifier_exists,\n    state_vars::StateVariable,\n    utils::WithHash,\n};\nuse crate::protocol::{\n    constants::DOM_SEP__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator, traits::Packable,\n};\n\nmod test;\n\n/// Immutable public values.\n///\n/// This is one of the most basic public state variables. It is similar to an `immutable` or `constant` Solidity state\n/// variable.\n///\n/// It represents a public value of type `T` that can be initialized **just once** during the lifetime of the contract,\n/// allowing this single value to be read.\n///\n/// Unlike Solidity's `immutable` or `constant`, a `PublicImmutable`'s initialization does not need to occur during\n/// contract initialization - it can happen at any point in time (but only once). This also makes it possible to have a\n/// [`Map`](crate::state_vars::Map) of `PublicImmutable`s.\n///\n/// ## Access Patterns\n///\n/// A value stored in a `PublicImmutable` can be read and initialized from public contract functions.\n///\n/// Unlike [`PublicMutable`](crate::state_vars::PublicMutable) it is **also** possible to read a `PublicImmutable` from\n/// a private contract function, though it is not possible to initialize one. A common pattern is to have these\n/// functions [enqueue a public self calls](crate::contract_self::ContractSelfPrivate::enqueue_self) in which the\n/// initialization operation is performed.\n///\n/// For a mutable (with restrictions) variant which also can be read from private functions see\n/// [`DelayedPublicMutable`](crate::state_vars::DelayedPublicMutable).\n///\n/// ## Privacy\n///\n/// `PublicImmutable` provides zero privacy in terms of the value stored and any public accesses: the entire network\n/// can see these and the data involved.\n///\n/// Reading a `PublicImmutable` from a private contract function however is completely private, and leaks zero\n/// information about the fact that the value was read.\n///\n/// ## Use Cases\n///\n/// This is suitable for any kind of fixed global configuration that needs to be accessible by private contract\n/// functions, such as token decimals, related contracts in a multi-contract configuration, etc.\n///\n/// It is also useful for fixed per-user configuration by combining it with a [`Map`](crate::state_vars::Map), e.g. a\n/// registry of their account types.\n///\n/// `PublicImmutable`'s main limitation is the immutability, which in many cases leads to\n/// [`DelayedPublicMutable`](crate::state_vars::DelayedPublicMutable) being used instead. But in those cases where\n/// fixed values are not a problem, this is a fine choice for storage.\n///\n/// ## Examples\n///\n/// Declaring a `PublicImmutable` in the contract's [`storage`](crate::macros::storage::storage) struct requires\n/// specifying the type `T` that is stored in the variable:\n///\n/// ```noir\n/// #[storage]\n/// struct Storage<C> {\n///     decimals: PublicImmutable<u8, C>,\n///\n///     account_types: Map<AztecAddress, PublicImmutable<AccountType, C>, C>,\n/// }\n/// ```\n///\n/// ## Requirements\n///\n/// The type `T` stored in the `PublicImmutable` must implement the `Eq` and\n/// [`Packable`](crate::protocol::traits::Packable) traits.\n///\n/// ## Implementation Details\n///\n/// Values are packed and stored directly in the public storage tree, along with the hash of the packed representation.\n/// A `PublicImmutable` therefore takes up as many storage slots as the packing length of the stored type `T`, plus\n/// one. This hash allows for efficient private reads, such that only a single public storage value is read. For more\n/// details, see [`WithHash`](crate::utils::WithHash).\n///\n/// An initialization nullifier prevents re-initialization of the `PublicImmutable`. This allows reading an initialized\n/// `PublicImmutable` from a private contract function, since the value is guaranteed to not change.\n///\n/// Private contract functions however **cannot** determine that a `PublicImmutable` has not been initialized, as they\n/// do not have access to the current network state, only the _past_ state at the anchor block. They _can_ perform\n/// historical non-inclusion proofs of the initialization nullifier at past times, but they have no way to guarantee\n/// that it has not been emitted since then.\npub struct PublicImmutable<T, Context> {\n    context: Context,\n    storage_slot: Field,\n}\n\n// `PublicImmutable` stores both the packed value (using M fields) and its hash (1 field), requiring M + 1 total\n// fields.\nimpl<T, Context, let M: u32> StateVariable<M + 1, Context> for PublicImmutable<T, Context>\nwhere\n    T: Packable<N = M>,\n{\n    fn new(context: Context, storage_slot: Field) -> Self {\n        assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n        PublicImmutable { context, storage_slot }\n    }\n\n    fn get_storage_slot(self) -> Field {\n        self.storage_slot\n    }\n}\n\nimpl<T, Context> PublicImmutable<T, Context> {\n    /// Returns the inner nullifier emitted during initialization.\n    pub fn compute_initialization_inner_nullifier(self) -> Field {\n        poseidon2_hash_with_separator([self.storage_slot], DOM_SEP__INITIALIZATION_NULLIFIER)\n    }\n}\n\nimpl<T> PublicImmutable<T, PublicContext> {\n    /// Stores a permanent value.\n    ///\n    /// This function can only be called once on a given `PublicImmutable`: subsequent calls will fail with a duplicate\n    /// nullifier.\n    ///\n    /// ## Examples\n    ///\n    /// Contract initialization:\n    /// ```noir\n    /// #[external(\"public\")]\n    /// #[initializer]\n    /// fn initialize(decimals: u8) {\n    ///     self.storage.decimals.initialize(decimals);\n    /// }\n    /// ```\n    ///\n    /// Non-initializer initialization:\n    /// ```noir\n    /// // Can only be called once per account\n    /// #[external(\"public\")]\n    /// fn set_account_type(account_type: AccountType) {\n    ///     self.storage.account_types.at(self.msg_sender()).initialize(account_type);\n    /// }\n    /// ```\n    ///\n    /// ## Cost\n    ///\n    /// The `SSTORE` AVM opcode is invoked a number of times equal to `T`'s packed length plus one, and the\n    /// `EMITNULLIFIER` AVM opcode is invoked once.\n    pub fn initialize(self, value: T)\n    where\n        T: Packable + Eq,\n    {\n        // We emit an initialization nullifier to indicate that the struct is initialized. This also prevents the value\n        // from being initialized again as each nullifier can be emitted only once.\n        let nullifier = self.compute_initialization_inner_nullifier();\n        self.context.push_nullifier(nullifier);\n\n        self.context.storage_write(self.storage_slot, WithHash::new(value));\n    }\n\n    /// Reads the permanent value.\n    ///\n    /// This function reverts the transaction if the `PublicImmutable` is not initialized.\n    ///\n    /// ## Examples\n    ///\n    /// A public getter that returns the permanent value:\n    /// ```noir\n    /// #[external(\"public\")]\n    /// fn get_decimals() -> u8 {\n    ///     self.storage.decimals.read()\n    /// }\n    /// ```\n    ///\n    /// ## Cost\n    ///\n    /// The `SLOAD` AVM opcode is invoked a number of times equal to `T`'s packed length, and the `NULLIFIEREXISTS` AVM\n    /// opcode is invoked once.\n    pub fn read(self) -> T\n    where\n        T: Packable + Eq,\n    {\n        assert(self.is_initialized(), \"Trying to read from uninitialized PublicImmutable\");\n        WithHash::public_storage_read(self.context, self.storage_slot)\n    }\n\n    /// Reads the permanent value, skipping the initialization check.\n    ///\n    /// This is cheaper than [`PublicImmutable::read`], but it should only be used if the `PublicImmutable` is known to\n    /// be initialized.\n    ///\n    /// If the `PublicImmutable` is not initialized, this returns the default empty public storage value, which is all\n    /// zeroes - equivalent to `let t = T::unpack(std::mem::zeroed());`.\n    ///\n    /// ## Examples\n    ///\n    /// A public getter that returns the permanent value:\n    /// ```noir\n    /// #[external(\"public\")]\n    /// fn get_decimals() -> u8 {\n    ///     // This call is safe because `decimals` is initialized in the contract's initializer function\n    ///     self.storage.decimals.read_unsafe()\n    /// }\n    /// ```\n    ///\n    /// ## Cost\n    ///\n    /// The `SLOAD` AVM opcode is invoked a number of times equal to `T`'s packed length.\n    pub fn read_unsafe(self) -> T\n    where\n        T: Packable + Eq,\n    {\n        WithHash::public_storage_read(self.context, self.storage_slot)\n    }\n\n    /// Returns `true` if the `PublicImmutable` has been initialized.\n    ///\n    /// ## Examples:\n    ///\n    /// Conditional initialization:\n    /// ```noir\n    /// #[external(\"public\")]\n    /// fn set_account_type_if_not_set(account_type: AccountType) {\n    ///     if !self.storage.account_types.at(self.msg_sender()).is_initialized() {\n    ///         self.storage.account_types.at(self.msg_sender()).initialize(account_type);\n    ///     }\n    /// }\n    /// ```\n    ///\n    /// ## Cost\n    ///\n    /// The `NULLIFIEREXISTS` AVM opcode is invoked once.\n    pub fn is_initialized(self) -> bool {\n        let nullifier = self.compute_initialization_inner_nullifier();\n\n        // Safety: it is safe to assume that the state variable has been initialized if the initialization nullifier\n        // exists because the nullifier was emitted in a public function, at the same time the state variable's public\n        // storage was written to. This would only be unsafe if the nullifier was emitted in a private function which\n        // then enqueued the public storage write, which is not the case.\n        self.context.nullifier_exists_unsafe(nullifier, self.context.this_address())\n    }\n}\n\nimpl<T> PublicImmutable<T, UtilityContext> {\n    /// Reads the permanent value.\n    ///\n    /// This function throws if the `PublicImmutable` is not initialized.\n    ///\n    /// ## Examples\n    ///\n    /// ```noir\n    /// #[external(\"utility\")]\n    /// fn get_decimals() -> u8 {\n    ///     self.storage.decimals.read()\n    /// }\n    /// ```\n    pub unconstrained fn read(self) -> T\n    where\n        T: Packable + Eq,\n    {\n        assert(self.is_initialized(), \"Trying to read from uninitialized PublicImmutable\");\n        WithHash::utility_public_storage_read(self.context, self.storage_slot)\n    }\n\n    /// Returns `true` if the `PublicImmutable` has been initialized.\n    pub unconstrained fn is_initialized(self) -> bool {\n        let nullifier = self.compute_initialization_inner_nullifier();\n        check_nullifier_exists(nullifier)\n    }\n}\n\nimpl<T> PublicImmutable<T, &mut PrivateContext> {\n    /// Reads the permanent value.\n    ///\n    /// This function throws if the `PublicImmutable` is not initialized.\n    ///\n    /// ## Examples\n    ///\n    /// ```noir\n    /// #[external(\"private\")]\n    /// fn get_decimals() -> u8 {\n    ///     self.storage.decimals.read()\n    /// }\n    /// ```\n    ///\n    /// ## Cost\n    ///\n    /// A nullifier existence request is pushed to the context, which will be verified by the kernel circuit.\n    /// Additionally, a historical public storage read at the anchor block (which is on the order of 4k gates) is\n    /// performed for a single storage slot, **regardless of `T`'s packed length**. This is because\n    /// [`PublicImmutable::initialize`] stores not just the value but also its hash: this function obtains the preimage\n    /// from an oracle and proves that it matches the hash from public storage.\n    ///\n    /// Because of this reason it is convenient to group together all of a contract's public immutable values that are\n    /// read privately in a single type `T`:\n    ///\n    /// ```noir\n    /// // Bad: reading both `decimals` and `symbol` will require two historical public storage reads\n    /// #[storage]\n    /// struct Storage<Context> {\n    ///     decimals: PublicImmutable<u8, Context>,\n    ///     symbol: PublicImmutable<FieldCompressedString, Context>,\n    /// }\n    ///\n    /// // Good: both `decimals` and `symbol` are retrieved in a single historical public storage read\n    /// #[derive(Packable)]\n    /// struct Config {\n    ///     decimals: u8,\n    ///     symbol: FieldCompressedString,\n    /// }\n    ///\n    /// #[storage]\n    /// struct Storage<Context> {\n    ///     config: PublicImmutable<Config, Context>,\n    /// }\n    /// ```\n    pub fn read(self) -> T\n    where\n        T: Packable + Eq,\n    {\n        let nullifier = self.compute_initialization_inner_nullifier();\n\n        // Safety: We use this check to be able to test this function works properly on synthetic envs\n        // like TXE. We assert the returned value only to provide a clear error message. The actual\n        // constrained check that the nullifier exists is done below with `assert_nullifier_exists`\n        // We should improve our synthetic envs because this check forces an unnecesary roundtrip\n        let nullifier_exists = unsafe { check_nullifier_exists(nullifier) };\n        assert(nullifier_exists, \"Trying to read from uninitialized PublicImmutable\");\n\n        let nullifier_existence_request = compute_nullifier_existence_request(nullifier, self.context.this_address());\n        self.context.assert_nullifier_exists(nullifier_existence_request);\n        WithHash::historical_public_storage_read(\n            self.context.get_anchor_block_header(),\n            self.context.this_address(),\n            self.storage_slot,\n        )\n    }\n}\n"
    },
    "261": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/append.nr",
      "source": "/// Appends the elements of the second `BoundedVec` to the end of the first one. The resulting `BoundedVec` can have\n/// any arbitrary maximum length, but it must be large enough to fit all of the elements of both the first and second\n/// vectors.\npub fn append<T, let ALen: u32, let BLen: u32, let DstLen: u32>(\n    a: BoundedVec<T, ALen>,\n    b: BoundedVec<T, BLen>,\n) -> BoundedVec<T, DstLen> {\n    let mut dst = BoundedVec::new();\n\n    dst.extend_from_bounded_vec(a);\n    dst.extend_from_bounded_vec(b);\n\n    dst\n}\n\nmod test {\n    use super::append;\n\n    #[test]\n    unconstrained fn append_empty_vecs() {\n        let a: BoundedVec<_, 3> = BoundedVec::new();\n        let b: BoundedVec<_, 14> = BoundedVec::new();\n\n        let result: BoundedVec<Field, 5> = append(a, b);\n\n        assert_eq(result.len(), 0);\n        assert_eq(result.storage(), std::mem::zeroed());\n    }\n\n    #[test]\n    unconstrained fn append_non_empty_vecs() {\n        let a: BoundedVec<_, 3> = BoundedVec::from_array([1, 2, 3]);\n        let b: BoundedVec<_, 14> = BoundedVec::from_array([4, 5, 6]);\n\n        let result: BoundedVec<Field, 8> = append(a, b);\n\n        assert_eq(result.len(), 6);\n        assert_eq(result.storage(), [1, 2, 3, 4, 5, 6, std::mem::zeroed(), std::mem::zeroed()]);\n    }\n\n    #[test(should_fail_with = \"out of bounds\")]\n    unconstrained fn append_non_empty_vecs_insufficient_max_len() {\n        let a: BoundedVec<_, 3> = BoundedVec::from_array([1, 2, 3]);\n        let b: BoundedVec<_, 14> = BoundedVec::from_array([4, 5, 6]);\n\n        let _: BoundedVec<Field, 5> = append(a, b);\n    }\n}\n"
    },
    "264": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
      "source": "/// Returns `DstLen` elements from a source array, starting at `offset`. `DstLen` must not be larger than the number of\n/// 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 SrcLen: u32, let DstLen: u32>(src: [T; SrcLen], offset: u32) -> [T; DstLen] {\n    assert(offset + DstLen <= SrcLen, \"DstLen too large for offset\");\n\n    let mut dst: [T; DstLen] = std::mem::zeroed();\n    for i in 0..DstLen {\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 DstLen to be 0, so we always get back an empty 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 = \"DstLen 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"
    },
    "265": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/subbvec.nr",
      "source": "use crate::utils::array;\n\n/// Returns `DstMaxLen` elements from a source BoundedVec, starting at `offset`. `offset` must not be larger than the\n/// original length, and `DstLen` must not be larger than the total number of elements past `offset` (including the\n/// zeroed elements past `len()`).\n///\n/// Only elements at the beginning of the vector can be removed: it is not possible to also remove elements at the end\n/// of the vector by passing a value for `DstLen` that is smaller than `len() - offset`.\n///\n/// Examples:\n/// ```\n/// let foo = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n/// assert_eq(subbvec(foo, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n///\n/// let bar: BoundedVec<_, 1> = subbvec(foo, 2); // fails - we can't return just 1 element since 3 remain\n/// let baz: BoundedVec<_, 10> = subbvec(foo, 3); // fails - we can't return 10 elements since only 7 remain\n/// ```\npub fn subbvec<T, let SrcMaxLen: u32, let DstMaxLen: u32>(\n    bvec: BoundedVec<T, SrcMaxLen>,\n    offset: u32,\n) -> BoundedVec<T, DstMaxLen> {\n    // from_parts_unchecked does not verify that the elements past len are zeroed, but that is not an issue in our case\n    // because we're constructing the new storage array as a subarray of the original one (which should have zeroed\n    // storage past len), guaranteeing correctness. This is because `subarray` does not allow extending arrays past\n    // their original length.\n    BoundedVec::from_parts_unchecked(array::subarray(bvec.storage(), offset), bvec.len() - offset)\n}\n\nmod test {\n    use super::subbvec;\n\n    #[test]\n    unconstrained fn subbvec_empty() {\n        let bvec = BoundedVec::<Field, 0>::from_array([]);\n        assert_eq(subbvec(bvec, 0), bvec);\n    }\n\n    #[test]\n    unconstrained fn subbvec_complete() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 0), bvec);\n\n        let smaller_capacity = BoundedVec::<_, 5>::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 0), smaller_capacity);\n    }\n\n    #[test]\n    unconstrained fn subbvec_partial() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        assert_eq(subbvec(bvec, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n        assert_eq(subbvec(bvec, 2), BoundedVec::<_, 3>::from_array([3, 4, 5]));\n    }\n\n    #[test]\n    unconstrained fn subbvec_into_empty() {\n        let bvec: BoundedVec<_, 10> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 5), BoundedVec::<_, 5>::from_array([]));\n    }\n\n    #[test(should_fail)]\n    unconstrained fn subbvec_offset_past_len() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n        let _: BoundedVec<_, 1> = subbvec(bvec, 6);\n    }\n\n    #[test(should_fail)]\n    unconstrained fn subbvec_insufficient_dst_len() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // We're not providing enough space to hold all of the items inside the original BoundedVec. subbvec can cause\n        // for the capacity to reduce, but not the length (other than by len - offset).\n        let _: BoundedVec<_, 1> = subbvec(bvec, 2);\n    }\n\n    #[test(should_fail_with = \"DstLen too large for offset\")]\n    unconstrained fn subbvec_dst_len_causes_enlarge() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // subbvec does not support capacity increases\n        let _: BoundedVec<_, 11> = subbvec(bvec, 0);\n    }\n\n    #[test(should_fail_with = \"DstLen too large for offset\")]\n    unconstrained fn subbvec_dst_len_too_large_for_offset() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // This effectively requests a capacity increase, since there'd be just one element plus the 5 empty slots,\n        // which is less than 7.\n        let _: BoundedVec<_, 7> = subbvec(bvec, 4);\n    }\n}\n"
    },
    "268": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/conversion/bytes_to_fields.nr",
      "source": "use std::static_assert;\n\n// These functions are used to facilitate the conversion of log ciphertext between byte and field representations.\n//\n// `bytes_to_fields` uses fixed-size arrays since encryption contexts have compile-time size information.\n// `bytes_from_fields` uses BoundedVec for flexibility in unconstrained contexts where sizes are dynamic.\n//\n// Together they provide bidirectional conversion between bytes and fields when processing encrypted logs.\n\n/// Converts the input bytes into an array of fields. A Field is ~254 bits meaning that each field can store 31 whole\n/// bytes. Use `bytes_from_fields` to obtain the original bytes array.\n///\n/// The input bytes are chunked into chunks of 31 bytes. Each 31-byte chunk is viewed as big-endian, and is converted\n/// into a Field. For example, [1, 10, 3, ..., 0] (31 bytes) is encoded as [1 * 256^30 + 10 * 256^29 + 3 * 256^28 + ...\n/// + 0] Note: N must be a multiple of 31 bytes\npub fn bytes_to_fields<let N: u32>(bytes: [u8; N]) -> [Field; N / 31] {\n    // Assert that N is a multiple of 31\n    static_assert(N % 31 == 0, \"N must be a multiple of 31\");\n\n    let mut fields = [0; N / 31];\n\n    // Since N is a multiple of 31, we can simply process all chunks fully\n    for i in 0..N / 31 {\n        let mut field = 0;\n        for j in 0..31 {\n            // Shift the existing value left by 8 bits and add the new byte\n            field = field * 256 + bytes[i * 31 + j] as Field;\n        }\n        fields[i] = field;\n    }\n\n    fields\n}\n\n/// Converts an input BoundedVec of fields into a BoundedVec of bytes in big-endian order. Arbitrary Field arrays are\n/// not allowed: this is assumed to be an array obtained via `bytes_to_fields`, i.e. one that actually represents\n/// bytes. To convert a Field array into bytes, use `fields_to_bytes`.\n///\n/// Each input field must contain at most 31 bytes (this is constrained to be so). Each field is converted into 31\n/// big-endian bytes, and the resulting 31-byte chunks are concatenated back together in the order of the original\n/// fields.\npub fn bytes_from_fields<let N: u32>(fields: BoundedVec<Field, N>) -> BoundedVec<u8, N * 31> {\n    let mut bytes = BoundedVec::new();\n\n    for i in 0..fields.len() {\n        let field = fields.get(i);\n\n        // We expect that the field contains at most 31 bytes of information.\n        field.assert_max_bit_size::<248>();\n\n        // Now we can safely convert the field to 31 bytes.\n        let field_as_bytes: [u8; 31] = field.to_be_bytes();\n\n        for j in 0..31 {\n            bytes.push(field_as_bytes[j]);\n        }\n    }\n\n    bytes\n}\n\nmod tests {\n    use crate::utils::array::subarray;\n    use super::{bytes_from_fields, bytes_to_fields};\n\n    #[test]\n    unconstrained fn random_bytes_to_fields_and_back(input: [u8; 93]) {\n        let fields = bytes_to_fields(input);\n\n        // At this point in production, the log flies through the system and we get a BoundedVec on the other end. So\n        // we need to convert the field array to a BoundedVec to be able to feed it to the `bytes_from_fields`\n        // function.\n        let fields_as_bounded_vec = BoundedVec::<_, 6>::from_array(fields);\n\n        let bytes_back = bytes_from_fields(fields_as_bounded_vec);\n\n        // Compare the original input with the round-tripped result\n        assert_eq(bytes_back.len(), input.len());\n        assert_eq(subarray(bytes_back.storage(), 0), input);\n    }\n\n    #[test(should_fail_with = \"N must be a multiple of 31\")]\n    unconstrained fn bytes_to_fields_input_length_not_multiple_of_31() {\n        // Try to convert 32 bytes (not a multiple of 31) to fields\n        let _fields = bytes_to_fields([0; 32]);\n    }\n\n}\n"
    },
    "269": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/conversion/fields_to_bytes.nr",
      "source": "// These functions are used to facilitate the conversion of log plaintext represented as fields into bytes and back.\n//\n// `fields_to_bytes` uses fixed-size arrays since encryption contexts have compile-time size information.\n// `fields_from_bytes` uses BoundedVec for flexibility in unconstrained contexts where sizes are dynamic.\n//\n// Together they provide bidirectional conversion between fields and bytes.\n\n/// Converts an input array of fields into a single array of bytes. Use `fields_from_bytes` to obtain the original\n/// field array. Each field is converted to a 32-byte big-endian array.\n///\n/// For example, if you have a field array [123, 456], it will be converted to a 64-byte array:\n/// [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,  // First field (32 bytes)\n/// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,200]  // Second field (32 bytes)\n///\n/// Since a field is ~254 bits, you'll end up with a subtle 2-bit \"gap\" at the big end, every 32 bytes. Be careful that\n/// such a gap doesn't leak information! This could happen if you for example expected the output to be\n/// indistinguishable from random bytes.\npub fn fields_to_bytes<let N: u32>(fields: [Field; N]) -> [u8; 32 * N] {\n    let mut bytes = [0; 32 * N];\n\n    for i in 0..N {\n        let field_as_bytes: [u8; 32] = fields[i].to_be_bytes();\n\n        for j in 0..32 {\n            bytes[i * 32 + j] = field_as_bytes[j];\n        }\n    }\n\n    bytes\n}\n\n/// Converts an input BoundedVec of bytes into a BoundedVec of fields. Arbitrary byte arrays are not allowed: this is\n/// assumed to be an array obtained via `fields_to_bytes`, i.e. one that actually represents fields. To convert a byte\n/// array into Fields, use `bytes_to_fields`.\n///\n/// The input bytes are chunked into chunks of 32 bytes. Each 32-byte chunk is viewed as big-endian, and is converted\n/// into a Field. For example, [1, 10, 3, ..., 0] (32 bytes) is encoded as [1 * 256^31 + 10 * 256^30 + 3 * 256^29 + ...\n/// + 0] Note 1: N must be a multiple of 32 bytes Note 2: The max value check code was taken from\n/// std::field::to_be_bytes function.\npub fn fields_from_bytes<let N: u32>(bytes: BoundedVec<u8, N>) -> BoundedVec<Field, N / 32> {\n    // Assert that input length is a multiple of 32\n    assert(bytes.len() % 32 == 0, \"Input length must be a multiple of 32\");\n\n    try_fields_from_bytes(bytes).expect(f\"Value does not fit in field\")\n}\n\n/// Converts a single 32-byte big-endian chunk (starting at `offset`) into a Field, returning\n/// `Option::none()` if the chunk's value is >= the field modulus.\nfn try_field_from_be_bytes<let N: u32>(bytes: BoundedVec<u8, N>, offset: u32) -> Option<Field> {\n    let p = std::field::modulus_be_bytes();\n    let mut field = 0;\n    // Field arithmetic silently wraps values >= the modulus, so we compare each 32-byte chunk against\n    // the modulus byte-by-byte (big-endian, most significant first). The first byte that differs\n    // determines the result: if our byte is smaller we're valid, if larger we've overflowed.\n    // cmp tracks the result: 0 = equal so far, 1 = less than modulus, 2 = exceeds modulus.\n    let mut cmp: u8 = 0;\n    for j in 0..32 {\n        let byte = bytes.get(offset + j);\n        field = field * 256 + byte as Field;\n\n        if cmp == 0 {\n            if byte < p[j] {\n                cmp = 1;\n            } else if byte > p[j] {\n                cmp = 2;\n            }\n        }\n    }\n    if cmp == 1 {\n        Option::some(field)\n    } else {\n        Option::none()\n    }\n}\n\n/// Non-panicking version of `fields_from_bytes`. Returns `Option::none()` if the input\n/// length is not a multiple of 32 or if any 32-byte chunk exceeds the field modulus.\npub(crate) fn try_fields_from_bytes<let N: u32>(bytes: BoundedVec<u8, N>) -> Option<BoundedVec<Field, N / 32>> {\n    if bytes.len() % 32 == 0 {\n        let mut fields = BoundedVec::new();\n        let num_chunks = bytes.len() / 32;\n        for i in 0..num_chunks {\n            let field = try_field_from_be_bytes(bytes, i * 32);\n            if field.is_some() {\n                fields.push(field.unwrap());\n            }\n        }\n        if fields.len() as u32 == num_chunks {\n            Option::some(fields)\n        } else {\n            Option::none()\n        }\n    } else {\n        Option::none()\n    }\n}\n\nmod tests {\n    use crate::utils::array::subarray;\n    use super::{fields_from_bytes, fields_to_bytes, try_fields_from_bytes};\n\n    #[test]\n    unconstrained fn random_fields_to_bytes_and_back(input: [Field; 3]) {\n        // Convert to bytes\n        let bytes = fields_to_bytes(input);\n\n        // At this point in production, the log flies through the system and we get a BoundedVec on the other end. So\n        // we need to convert the field array to a BoundedVec to be able to feed it to the `fields_from_bytes`\n        // function. 113 is an arbitrary max length that is larger than the input length of 96.\n        let bytes_as_bounded_vec = BoundedVec::<_, 113>::from_array(bytes);\n\n        // Convert back to fields\n        let fields_back = fields_from_bytes(bytes_as_bounded_vec);\n\n        // Compare the original input with the round-tripped result\n        assert_eq(fields_back.len(), input.len());\n        assert_eq(subarray(fields_back.storage(), 0), input);\n    }\n\n    #[test(should_fail_with = \"Input length must be a multiple of 32\")]\n    unconstrained fn to_fields_assert() {\n        // 143 is an arbitrary max length that is larger than 33\n        let input = BoundedVec::<_, 143>::from_array([\n            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,\n            30, 31, 32, 33,\n        ]);\n\n        // This should fail since 33 is not a multiple of 32\n        let _fields = fields_from_bytes(input);\n    }\n\n    #[test]\n    unconstrained fn fields_from_bytes_max_value() {\n        let max_field_as_bytes: [u8; 32] = (-1).to_be_bytes();\n        let input = BoundedVec::<_, 32>::from_array(max_field_as_bytes);\n\n        let fields = fields_from_bytes(input);\n\n        // The result should be a largest value storable in a field (-1 since we are modulo-ing)\n        assert_eq(fields.get(0), -1);\n    }\n\n    // In this test we verify that overflow check works by taking the max allowed value, bumping a random byte and then\n    // feeding it to `fields_from_bytes` as input.\n    #[test(should_fail_with = \"Value does not fit in field\")]\n    unconstrained fn fields_from_bytes_overflow(random_value: u8) {\n        let index_of_byte_to_bump = random_value % 32;\n\n        // Obtain the byte representation of the maximum field value\n        let max_field_value_as_bytes: [u8; 32] = (-1).to_be_bytes();\n\n        let byte_to_bump = max_field_value_as_bytes[index_of_byte_to_bump as u32];\n\n        // Skip test execution if the selected byte is already at maximum value (255). This is acceptable since we are\n        // using fuzz testing to generate many test cases.\n        if byte_to_bump != 255 {\n            let mut input = BoundedVec::<_, 32>::from_array(max_field_value_as_bytes);\n\n            // Increment the selected byte to exceed the field's maximum value\n            input.set(index_of_byte_to_bump as u32, byte_to_bump + 1);\n\n            // Attempt the conversion, which should fail due to the value exceeding the field's capacity\n            let _fields = fields_from_bytes(input);\n        }\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_returns_none_on_unaligned_length() {\n        let input = BoundedVec::<_, 64>::from_parts([0 as u8; 64], 33);\n        assert(try_fields_from_bytes(input).is_none());\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_returns_none_on_field_modulus() {\n        // The field modulus itself is not a valid field value (it wraps to 0).\n        let p: [u8; 32] = std::field::modulus_be_bytes().as_array();\n        let input = BoundedVec::<u8, 32>::from_array(p);\n        assert(try_fields_from_bytes(input).is_none());\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_round_trips(input: [Field; 3]) {\n        let bytes = BoundedVec::<_, 113>::from_array(fields_to_bytes(input));\n        let fields = try_fields_from_bytes(bytes).unwrap();\n\n        assert_eq(fields.len(), input.len());\n        assert_eq(subarray(fields.storage(), 0), input);\n    }\n}\n"
    },
    "272": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/point.nr",
      "source": "use crate::protocol::{point::Point, utils::field::sqrt};\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Returns: true if p.y <= MOD_DIV_2, else false.\npub fn get_sign_of_point(p: Point) -> bool {\n    // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get the\n    // sign we check if the y coordinate is less or equal than the field's modulus minus 1 divided by 2. Ideally we'd\n    // do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is equivalent,\n    // and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n    !BN254_FR_MODULUS_DIV_2.lt(p.y)\n}\n\n/// Returns a `Point` in the Grumpkin curve given its x coordinate.\n///\n/// Because not all values in the field are valid x coordinates of points in the curve (i.e. there is no corresponding\n/// y value in the field that satisfies the curve equation), it may not be possible to reconstruct a `Point`.\n/// `Option::none()` is returned in such cases.\npub fn point_from_x_coord(x: Field) -> Option<Point> {\n    // y ^ 2 = x ^ 3 - 17\n    let rhs = x * x * x - 17;\n    sqrt(rhs).map(|y| Point { x, y, is_infinite: false })\n}\n\n/// Returns a `Point` in the Grumpkin curve given its x coordinate and sign for the y coordinate.\n///\n/// Because not all values in the field are valid x coordinates of points in the curve (i.e. there is no corresponding\n/// y value in the field that satisfies the curve equation), it may not be possible to reconstruct a `Point`.\n/// `Option::none()` is returned in such cases.\n///\n/// @param x - The x coordinate of the point @param sign - The \"sign\" of the y coordinate - determines whether y <=\n/// (Fr.MODULUS - 1) / 2\npub fn point_from_x_coord_and_sign(x: Field, sign: bool) -> Option<Point> {\n    // y ^ 2 = x ^ 3 - 17\n    let rhs = x * x * x - 17;\n\n    sqrt(rhs).map(|y| {\n        // If there is a square root, we need to ensure it has the correct \"sign\"\n        let y_is_positive = !BN254_FR_MODULUS_DIV_2.lt(y);\n        let final_y = if y_is_positive == sign { y } else { -y };\n        Point { x, y: final_y, is_infinite: false }\n    })\n}\n\nmod test {\n    use crate::protocol::point::Point;\n    use crate::utils::point::{\n        BN254_FR_MODULUS_DIV_2, get_sign_of_point, point_from_x_coord, point_from_x_coord_and_sign,\n    };\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_and_sign() {\n        // Test positive y coordinate\n        let x = 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73;\n        let sign = true;\n        let p = point_from_x_coord_and_sign(x, sign).unwrap();\n\n        assert_eq(p.x, x);\n        assert_eq(p.y, 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a);\n        assert_eq(p.is_infinite, false);\n\n        // Test negative y coordinate\n        let x2 = 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5;\n        let sign2 = false;\n        let p2 = point_from_x_coord_and_sign(x2, sign2).unwrap();\n\n        assert_eq(p2.x, x2);\n        assert_eq(p2.y, 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0);\n        assert_eq(p2.is_infinite, false);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_valid() {\n        // x = 8 is a known quadratic residue - should give a valid point\n        let result = point_from_x_coord(Field::from(8));\n        assert(result.is_some());\n\n        let point = result.unwrap();\n        assert_eq(point.x, Field::from(8));\n        // Check curve equation y^2 = x^3 - 17\n        assert_eq(point.y * point.y, point.x * point.x * point.x - 17);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_invalid() {\n        // x = 3 is a non-residue for this curve - should give None\n        let x = Field::from(3);\n        let maybe_point = point_from_x_coord(x);\n        assert(maybe_point.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_both_roots_satisfy_curve() {\n        // Derive a point from x = 8 (known to be valid from test_point_from_x_coord_valid)\n        let x: Field = 8;\n        let point = point_from_x_coord(x).unwrap();\n\n        // Check y satisfies curve equation\n        assert_eq(point.y * point.y, x * x * x - 17);\n\n        // Check -y also satisfies curve equation\n        let neg_y = 0 - point.y;\n        assert_eq(neg_y * neg_y, x * x * x - 17);\n\n        // Verify they are different (unless y = 0)\n        assert(point.y != neg_y);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_and_sign_invalid() {\n        // x = 3 has no valid point on the curve (from test_point_from_x_coord_invalid)\n        let x = Field::from(3);\n        let result_positive = point_from_x_coord_and_sign(x, true);\n        let result_negative = point_from_x_coord_and_sign(x, false);\n\n        assert(result_positive.is_none());\n        assert(result_negative.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_get_sign_of_point() {\n        // Derive a point from x = 8, then test both possible y values\n        let point = point_from_x_coord(8).unwrap();\n        let neg_point = Point { x: point.x, y: 0 - point.y, is_infinite: false };\n\n        // One should be \"positive\" (y <= MOD_DIV_2) and one \"negative\"\n        let sign1 = get_sign_of_point(point);\n        let sign2 = get_sign_of_point(neg_point);\n        assert(sign1 != sign2);\n\n        // y = 0 should return true (0 <= MOD_DIV_2)\n        let zero_y_point = Point { x: 0, y: 0, is_infinite: false };\n        assert(get_sign_of_point(zero_y_point) == true);\n\n        // y = MOD_DIV_2 should return true (exactly at boundary)\n        let boundary_point = Point { x: 0, y: BN254_FR_MODULUS_DIV_2, is_infinite: false };\n        assert(get_sign_of_point(boundary_point) == true);\n\n        // y = MOD_DIV_2 + 1 should return false (just over boundary)\n        let over_boundary_point = Point { x: 0, y: BN254_FR_MODULUS_DIV_2 + 1, is_infinite: false };\n        assert(get_sign_of_point(over_boundary_point) == false);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_zero() {\n        // x = 0: y^2 = 0^3 - 17 = -17, which is not a quadratic residue in BN254 scalar field\n        let result = point_from_x_coord(0);\n        assert(result.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_bn254_fr_modulus_div_2() {\n        // Verify that BN254_FR_MODULUS_DIV_2 == (p - 1) / 2 This means: 2 * BN254_FR_MODULUS_DIV_2 + 1 == p == 0 (in\n        // the field)\n        assert_eq(2 * BN254_FR_MODULUS_DIV_2 + 1, 0);\n    }\n\n}\n"
    },
    "274": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/with_hash.nr",
      "source": "use crate::{context::{PublicContext, UtilityContext}, history::storage::public_storage_historical_read, oracle};\nuse crate::protocol::{abis::block_header::BlockHeader, address::AztecAddress, hash::poseidon2_hash, traits::Packable};\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 and then proving inclusion\n/// only of the hash in public storage. This reduces the number of required tree inclusion proofs from `M` to 1.\n///\n/// # Type Parameters\n/// - `T`: The underlying type being wrapped, must implement `Packable<N>`\n/// - `M`: The number of field elements required to pack values of type `T`\npub struct WithHash<T, let M: u32> {\n    value: T,\n    packed: [Field; M],\n    hash: Field,\n}\n\nimpl<T, let M: u32> WithHash<T, M>\nwhere\n    T: Packable<N = M> + 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    /// Reads the value stored in this [`WithHash`] from public storage.\n    ///\n    /// Note that unlike a full public storage read, this will _not_ read (not return) the stored hash of the value,\n    /// resulting in reduced gas costs.\n    ///\n    /// This is the public counterpart to [`WithHash::utility_public_storage_read`] and\n    /// [`WithHash::historical_public_storage_read`].\n    pub fn public_storage_read(context: PublicContext, storage_slot: Field) -> T {\n        context.storage_read(storage_slot)\n    }\n\n    pub unconstrained fn utility_public_storage_read(context: UtilityContext, storage_slot: Field) -> T {\n        context.storage_read(storage_slot)\n    }\n\n    pub fn historical_public_storage_read(\n        header_to_read_from: BlockHeader,\n        address: AztecAddress,\n        storage_slot: Field,\n    ) -> T {\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\n        // 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 { oracle::storage::storage_read(header_to_read_from, address, storage_slot) },\n        );\n\n        // The actual `value` (of type T, of packed length M fields) is stored in contiguous fields from the\n        // `storage_slot`. The _hash_ of the `value` is stored at the end, at slot: `storage_slot + M`.\n        let hash = public_storage_historical_read(header_to_read_from, storage_slot + M 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 (i.e.\n            // the default value for public storage) as well.\n            assert_eq(hint.get_value(), T::unpack(std::mem::zeroed()), \"Non-zero hint for zero hash\");\n        };\n\n        hint.get_value()\n    }\n}\n\n// Note: I don't derive Packable on `WithHash` because `derive_serialize` function does not support setting \"N = M\" as\n// I do here 3 lines below. This could be worked around by placing the \"where\" clause directly on the `WithHash`\n// struct, but Jake mentioned that the syntax is not expected to be supported at least until Noir 1.0. Relevant\n// discussion on Slack:\n// https://aztecprotocol.slack.com/archives/C04QF64EDNV/p1752593876160699?thread_ts=1752589887.955379&cid=C04QF64EDNV\nimpl<T, let M: u32> Packable for WithHash<T, M>\nwhere\n    T: Packable<N = M>,\n{\n    let N: u32 = M + 1;\n\n    fn pack(self) -> [Field; Self::N] {\n        let mut result: [Field; Self::N] = std::mem::zeroed();\n        for i in 0..M {\n            result[i] = self.packed[i];\n        }\n        result[M] = self.hash;\n\n        result\n    }\n\n    fn unpack(packed: [Field; Self::N]) -> Self {\n        let mut value_packed = [0; M];\n        for i in 0..M {\n            value_packed[i] = packed[i];\n        }\n        let hash = packed[M];\n\n        Self { value: T::unpack(value_packed), packed: value_packed, hash }\n    }\n}\n\nmod test {\n    use crate::protocol::{hash::poseidon2_hash, traits::{Hash, Packable, ToField}};\n    use crate::{test::{helpers::test_environment::TestEnvironment, mocks::MockStruct}, utils::with_hash::WithHash};\n\n    use std::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 env = TestEnvironment::new();\n\n        env.private_context(|context| {\n            let result = WithHash::<MockStruct, _>::historical_public_storage_read(\n                context.anchor_block_header,\n                context.this_address(),\n                STORAGE_SLOT,\n            );\n\n            assert_eq(result, std::mem::zeroed());\n        });\n    }\n\n    #[test]\n    unconstrained fn read_initialized_value() {\n        let env = TestEnvironment::new();\n\n        let value = MockStruct { a: 5, b: 3 };\n        let value_with_hash = WithHash::new(value);\n\n        env.public_context(|context| { context.storage_write(STORAGE_SLOT, value_with_hash); });\n\n        env.private_context(|context| {\n            let result = WithHash::<MockStruct, _>::historical_public_storage_read(\n                context.anchor_block_header,\n                context.this_address(),\n                STORAGE_SLOT,\n            );\n            assert_eq(result, value);\n        });\n    }\n\n    #[test(should_fail_with = \"Non-zero hint for zero hash\")]\n    unconstrained fn bad_hint_uninitialized_value() {\n        let env = TestEnvironment::new();\n\n        env.private_context(|context| {\n            let block_header = context.anchor_block_header;\n            let address = context.this_address();\n\n            // Mock the oracle to return a non-zero hint/packed value\n            let value_packed = MockStruct { a: 1, b: 1 }.pack();\n            let _ = OracleMock::mock(\"aztec_utl_getFromPublicStorage\")\n                .with_params((block_header.hash(), address.to_field(), STORAGE_SLOT, value_packed.len()))\n                .returns(value_packed)\n                .times(1);\n\n            // This should fail because the hint value is non-zero and the hash is zero (default value of storage)\n            let _ = WithHash::<MockStruct, _>::historical_public_storage_read(block_header, address, STORAGE_SLOT);\n        });\n    }\n\n    #[test(should_fail_with = \"Hint values do not match hash\")]\n    unconstrained fn bad_hint_initialized_value() {\n        let env = TestEnvironment::new();\n\n        env.public_context(|context| {\n            // Write the value and hash separately so that the hash is wrong\n            let value = MockStruct { a: 5, b: 3 };\n            context.storage_write(STORAGE_SLOT, value);\n\n            let incorrect_hash = 13;\n            let hash_storage_slot = STORAGE_SLOT + (value.pack().len() as Field);\n            context.storage_write(hash_storage_slot, [incorrect_hash]);\n        });\n\n        env.private_context(|context| {\n            let _ = WithHash::<MockStruct, _>::historical_public_storage_read(\n                context.anchor_block_header,\n                context.this_address(),\n                STORAGE_SLOT,\n            );\n        });\n    }\n}\n"
    },
    "282": {
      "path": "/home/runner/nargo/github.com/noir-lang/poseidon/v0.2.3/src/poseidon2.nr",
      "source": "use std::default::Default;\nuse std::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)\n    }\n\n    pub(crate) 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        self.state[0] += self.cache[0];\n        self.state[1] += self.cache[1];\n        self.state[2] += self.cache[2];\n        self.state = crate::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>(input: [Field; N], in_len: u32) -> Field {\n        let two_pow_64 = 18446744073709551616;\n        let iv: Field = (in_len as Field) * two_pow_64;\n        let mut state = [0; 4];\n        state[RATE] = iv;\n\n        if std::runtime::is_unconstrained() {\n            for i in 0..(in_len / RATE) {\n                state[0] += input[i * RATE];\n                state[1] += input[i * RATE + 1];\n                state[2] += input[i * RATE + 2];\n                state = crate::poseidon2_permutation(state, 4);\n            }\n\n            // handle remaining elements after last full RATE-sized chunk\n            let num_extra_fields = in_len % RATE;\n            if num_extra_fields != 0 {\n                let remainder_start = in_len - num_extra_fields;\n                state[0] += input[remainder_start];\n                if num_extra_fields > 1 {\n                    state[1] += input[remainder_start + 1]\n                }\n            }\n        } else {\n            let mut states: [[Field; 4]; N / RATE + 1] = [[0; 4]; N / RATE + 1];\n            states[0] = state;\n\n            // process all full RATE-sized chunks, storing state after each permutation\n            for chunk_idx in 0..(N / RATE) {\n                for i in 0..RATE {\n                    state[i] += input[chunk_idx * RATE + i];\n                }\n                state = crate::poseidon2_permutation(state, 4);\n                states[chunk_idx + 1] = state;\n            }\n\n            // get state at the last full block before in_len\n            let first_partially_filled_chunk = in_len / RATE;\n            state = states[first_partially_filled_chunk];\n\n            // handle remaining elements after last full RATE-sized chunk\n            let remainder_start = (in_len / RATE) * RATE;\n            for j in 0..RATE {\n                let idx = remainder_start + j;\n                if idx < in_len {\n                    state[j] += input[idx];\n                }\n            }\n        }\n\n        // always run final permutation unless we just completed a full chunk\n        // still need to permute once if in_len is 0\n        if (in_len == 0) | (in_len % RATE != 0) {\n            state = crate::poseidon2_permutation(state, 4)\n        };\n\n        state[0]\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"
    },
    "293": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/abis/block_header.nr",
      "source": "use crate::{\n    abis::{\n        append_only_tree_snapshot::AppendOnlyTreeSnapshot, global_variables::GlobalVariables,\n        state_reference::StateReference,\n    },\n    constants::{BLOCK_HEADER_LENGTH, DOM_SEP__BLOCK_HEADER_HASH, GENESIS_BLOCK_HEADER_HASH},\n    hash::poseidon2_hash_with_separator,\n    traits::{Deserialize, Empty, Hash, Serialize},\n};\nuse std::meta::derive;\n\n// docs:start:block-header\n#[derive(Deserialize, Eq, Serialize)]\npub struct BlockHeader {\n    pub last_archive: AppendOnlyTreeSnapshot,\n    pub state: StateReference,\n\n    // The hash of the sponge blob for this block, which commits to the tx effects added in this block.\n    // Note: it may also include tx effects from previous blocks within the same checkpoint.\n    // When proving tx effects from this block only, we must refer to the `sponge_blob_hash` in the previous block\n    // header to show that the effect was added after the previous block.\n    // The previous block header can be validated using a membership proof of the last leaf in `last_archive`.\n    pub sponge_blob_hash: Field,\n\n    pub global_variables: GlobalVariables,\n    pub total_fees: Field,\n    pub total_mana_used: Field,\n}\n// docs:end:block-header\n\nimpl BlockHeader {\n    pub fn chain_id(self) -> Field {\n        self.global_variables.chain_id\n    }\n\n    pub fn version(self) -> Field {\n        self.global_variables.version\n    }\n\n    pub fn block_number(self) -> u32 {\n        self.global_variables.block_number\n    }\n\n    pub fn timestamp(self) -> u64 {\n        self.global_variables.timestamp\n    }\n}\n\nimpl Empty for BlockHeader {\n    fn empty() -> Self {\n        Self {\n            last_archive: AppendOnlyTreeSnapshot::empty(),\n            state: StateReference::empty(),\n            sponge_blob_hash: 0,\n            global_variables: GlobalVariables::empty(),\n            total_fees: 0,\n            total_mana_used: 0,\n        }\n    }\n}\n\nimpl Hash for BlockHeader {\n    fn hash(self) -> Field {\n        poseidon2_hash_with_separator(self.serialize(), DOM_SEP__BLOCK_HEADER_HASH)\n    }\n}\n\n#[test]\nfn serialization_of_empty() {\n    let header = BlockHeader::empty();\n    // We use the BLOCK_HEADER_LENGTH constant to ensure that there is a match\n    // between the derived trait implementation and the constant.\n    let serialized: [Field; BLOCK_HEADER_LENGTH] = header.serialize();\n    let deserialized = BlockHeader::deserialize(serialized);\n    assert(header.eq(deserialized));\n}\n\n#[test]\nfn hash_of_genesis_block_header() {\n    let mut header = BlockHeader::empty();\n    // The following values are taken from world_state.test.cpp > WorldStateTest.GetInitialTreeInfoForAllTrees.\n    header.state.l1_to_l2_message_tree.root =\n        0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5;\n    header.state.partial.note_hash_tree.root =\n        0x2ac5dda169f6bb3b9ca09bbac34e14c94d1654597db740153a1288d859a8a30a;\n    header.state.partial.nullifier_tree.root =\n        0x1ec3788cd1c32e54d889d67fe29e481114f9d4afe9b44b229aa29d8ad528dd31;\n    header.state.partial.nullifier_tree.next_available_leaf_index = 128;\n    header.state.partial.public_data_tree.root =\n        0x23c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9;\n    header.state.partial.public_data_tree.next_available_leaf_index = 128;\n\n    let hash = header.hash();\n    assert_eq(hash, GENESIS_BLOCK_HEADER_HASH);\n}\n\n#[test]\nfn hash_of_empty_block_header_match_typescript() {\n    let header = BlockHeader::empty();\n    let hash = header.hash();\n\n    // Value from block_header.test.ts \"computes empty hash\" test\n    let test_data_empty_hash = 0x0bdc537052dea0f80db9698585dff9f32063b86b6d4934ac17c30c81e8e416d3;\n    assert_eq(hash, test_data_empty_hash);\n}\n"
    },
    "302": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr",
      "source": "use crate::traits::{Deserialize, Empty, FromField, Serialize, ToField};\nuse std::meta::derive;\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct FunctionSelector {\n    // 1st 4-bytes (big-endian leftmost) of abi-encoding of an event.\n    pub inner: u32,\n}\n\nimpl FromField for FunctionSelector {\n    fn from_field(field: Field) -> Self {\n        Self { inner: field as u32 }\n    }\n}\n\nimpl ToField for FunctionSelector {\n    fn to_field(self) -> Field {\n        self.inner as Field\n    }\n}\n\nimpl Empty for FunctionSelector {\n    fn empty() -> Self {\n        Self { inner: 0 as u32 }\n    }\n}\n\nimpl FunctionSelector {\n    pub fn from_u32(value: u32) -> Self {\n        Self { inner: value }\n    }\n\n    pub fn from_signature<let N: u32>(signature: str<N>) -> Self {\n        let bytes = signature.as_bytes();\n        let hash = crate::hash::poseidon2_hash_bytes(bytes);\n\n        // `hash` is automatically truncated to fit within 32 bits.\n        FunctionSelector::from_field(hash)\n    }\n\n    pub fn zero() -> Self {\n        Self { inner: 0 }\n    }\n}\n\n#[test]\nfn test_is_valid_selector() {\n    let selector = FunctionSelector::from_signature(\"IS_VALID()\");\n    assert_eq(selector.to_field(), 0x73cdda47);\n}\n\n#[test]\nfn test_long_selector() {\n    let selector =\n        FunctionSelector::from_signature(\"foo_and_bar_and_baz_and_foo_bar_baz_and_bar_foo\");\n    assert_eq(selector.to_field(), 0x7590a997);\n}\n"
    },
    "340": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
      "source": "use crate::{\n    address::{\n        partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n    },\n    constants::{AZTEC_ADDRESS_LENGTH, DOM_SEP__CONTRACT_ADDRESS_V1, MAX_FIELD_VALUE},\n    contract_class_id::ContractClassId,\n    hash::poseidon2_hash_with_separator,\n    public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, ToPoint, TpkM},\n    traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n    utils::field::sqrt,\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse std::{\n    embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n    ops::Add,\n};\nuse std::meta::derive;\n\n// Aztec address\n#[derive(Deserialize, Eq, Packable, Serialize)]\npub struct AztecAddress {\n    pub inner: Field,\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 AztecAddress {\n    pub fn zero() -> Self {\n        Self { inner: 0 }\n    }\n\n    /// Returns `true` if the address is valid.\n    ///\n    /// An invalid address is one that can be proven to not be correctly derived, meaning it contains no contract code,\n    /// public keys, etc., and can therefore not receive messages nor execute calls.\n    pub fn is_valid(self) -> bool {\n        self.get_y().is_some()\n    }\n\n    /// Returns an address's [`AddressPoint`].\n    ///\n    /// This can be used to create shared secrets with the owner of the address. If the address is invalid (see\n    /// [`AztecAddress::is_valid`]) then this returns `Option::none()`, and no shared secrets can be created.\n    pub fn to_address_point(self) -> Option<AddressPoint> {\n        self.get_y().map(|y| {\n            // If we get a negative y coordinate (y > (r - 1) / 2), we swap it to the\n            // positive one (where y <= (r - 1) / 2) by negating it.\n            let final_y = if Self::is_positive(y) { y } else { -y };\n\n            AddressPoint { inner: Point { x: self.inner, y: final_y, is_infinite: false } }\n        })\n    }\n\n    /// Determines whether a y-coordinate is in the lower (positive) or upper (negative) \"half\" of the field.\n    /// I.e.\n    /// y <= (r - 1)/2 => positive.\n    /// y > (r - 1)/2 => negative.\n    /// An AddressPoint always uses the \"positive\" y.\n    fn is_positive(y: Field) -> bool {\n        // Note: The field modulus r is MAX_FIELD_VALUE + 1.\n        let MID = MAX_FIELD_VALUE / 2; // (r - 1) / 2\n        let MID_PLUS_1 = MID + 1; // (r - 1)/2 + 1\n        // Note: y <= m implies y < m + 1.\n        y.lt(MID_PLUS_1)\n    }\n\n    /// Returns one of the two possible y-coordinates.\n    ///\n    /// Not all `AztecAddresses` are valid, in which case there is no corresponding y-coordinate. This returns\n    /// `Option::none()` for invalid addresses.\n    ///\n    /// An `AztecAddress` is defined by an x-coordinate, for which two y-coordinates exist as solutions to the curve\n    /// equation. This function returns either of them. Note that an [`AddressPoint`] must **always** have a positive\n    /// y-coordinate - if trying to obtain the underlying point use [`AztecAddress::to_address_point`] instead.\n    fn get_y(self) -> Option<Field> {\n        // We compute the address point by taking our address as x, and then solving for y in the\n        // equation which defines the grumpkin curve:\n        // y^2 = x^3 - 17; x = address\n        let x = self.inner;\n        let y_squared = x * x * x - 17;\n\n        sqrt(y_squared)\n    }\n\n    pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n        //\n        //                          address = address_point.x\n        //                                          |\n        //                                    address_point = pre_address * G + Ivpk_m (always choose \"positive\" y-coord)\n        //                                                        |               ^\n        //                                                        |               |.....................\n        //                                                    pre_address                              .\n        //                                               /                   \\                         .\n        //                                             /                       \\                       .\n        //                               partial_address                        public_keys_hash       .\n        //                           /                    \\                     /   /    \\    \\        .\n        //                         /                        \\              Npk_m Ivpk_m Ovpk_m Tpk_m   .\n        //          contract_class_id                         \\                     |...................\n        //             /   |    \\                               \\\n        // artifact_hash   |    public_bytecode_commitment       salted_initialization_hash\n        //                 |                                         /     /        \\\n        //     private_function_tree_root              deployer_address  salt   initialization_hash\n        //             /       \\                                                /              \\\n        //          ...          ...                              constructor_fn_selector   constructor_args_hash\n        //         /                \\\n        //     /     \\            /      \\\n        //   leaf   leaf        leaf    leaf\n        //           ^\n        //           |\n        //           |---h(function_selector, vk_hash)\n        //               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n        //               Each of these represents a private function of the contract.\n\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            DOM_SEP__CONTRACT_ADDRESS_V1,\n        );\n\n        // Note: `.add()` will fail within the blackbox fn if either of the points are not on the curve. (See tests below).\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 secret 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_class_id(\n        contract_class_id: ContractClassId,\n        salted_initialization_hash: SaltedInitializationHash,\n        public_keys: PublicKeys,\n    ) -> Self {\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 check_max_field_value() {\n    // Check that it is indeed r-1.\n    assert_eq(MAX_FIELD_VALUE + 1, 0);\n}\n\n#[test]\nfn check_is_positive() {\n    assert(AztecAddress::is_positive(0));\n    assert(AztecAddress::is_positive(1));\n    assert(!AztecAddress::is_positive(-1));\n    assert(AztecAddress::is_positive(MAX_FIELD_VALUE / 2));\n    assert(!AztecAddress::is_positive((MAX_FIELD_VALUE / 2) + 1));\n}\n\n// Gives us confidence that we don't need to manually check that the input public keys need to be on the curve for `add`,\n// because the blackbox function does this check for us.\n#[test(should_fail_with = \"is not on curve\")]\nfn check_embedded_curve_point_add() {\n    // Choose a point not on the curve:\n    let p1 = Point { x: 1, y: 1, is_infinite: false };\n    let p2 = Point::generator();\n    let _ = p1 + p2;\n}\n\n// Gives us confidence that we don't need to manually check that the input public keys need to be on the curve for `add`,\n// because the blackbox function does this check for us.\n#[test(should_fail_with = \"is not on curve\")]\nfn check_embedded_curve_point_add_2() {\n    // Choose a point not on the curve in the 2nd position.\n    let p1 = Point::generator();\n    let p2 = Point { x: 1, y: 1, is_infinite: false };\n    let _ = p1 + p2;\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        0x2f66081d4bb077fbe8e8abe96a3516a713a3d7e34360b4e985da0da95092b37d;\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], DOM_SEP__CONTRACT_ADDRESS_V1);\n    let expected_computed_preaddress_from_partial_and_pubkey =\n        0x286c7755f2924b1e53b00bcaf1adaffe7287bd74bba7a02f4ab867e3892d28da;\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    // We use the AZTEC_ADDRESS_LENGTH constant to ensure that there is a match between the derived trait\n    // implementation and the constant.\n    let serialized: [Field; AZTEC_ADDRESS_LENGTH] = address.serialize();\n    let deserialized = AztecAddress::deserialize(serialized);\n    assert_eq(address, deserialized);\n}\n\n#[test]\nfn to_address_point_valid() {\n    // x = 8 where x^3 - 17 = 512 - 17 = 495, which is a residue in this field\n    let address = AztecAddress { inner: 8 };\n\n    assert(address.get_y().is_some()); // We don't bother checking the result of get_y as it is only used internally\n    assert(address.is_valid());\n\n    let maybe_point = address.to_address_point();\n    assert(maybe_point.is_some());\n\n    let point = maybe_point.unwrap().inner;\n    // check that x is preserved\n    assert_eq(point.x, Field::from(8));\n\n    // check that the curve equation holds: y^2 == x^3 - 17\n    assert_eq(point.y * point.y, point.x * point.x * point.x - 17);\n}\n\n#[test]\nunconstrained fn to_address_point_invalid() {\n    // x = 3 where x^3 - 17 = 27 - 17 = 10, which is a non-residue in this field\n    let address = AztecAddress { inner: 3 };\n\n    assert(address.get_y().is_none());\n    assert(!address.is_valid());\n\n    assert(address.to_address_point().is_none());\n}\n"
    },
    "343": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
      "source": "use crate::{\n    address::{aztec_address::AztecAddress, salted_initialization_hash::SaltedInitializationHash},\n    constants::DOM_SEP__PARTIAL_ADDRESS,\n    contract_class_id::ContractClassId,\n    hash::poseidon2_hash_with_separator,\n    traits::{Deserialize, Empty, Serialize, ToField},\n};\nuse std::meta::derive;\n\n// Partial address\n#[derive(Deserialize, Eq, Serialize)]\npub struct PartialAddress {\n    pub inner: Field,\n}\n\nimpl ToField for PartialAddress {\n    fn to_field(self) -> Field {\n        self.inner\n    }\n}\n\nimpl Empty for PartialAddress {\n    fn empty() -> Self {\n        Self { inner: 0 }\n    }\n}\n\nimpl PartialAddress {\n    pub fn from_field(field: Field) -> Self {\n        Self { inner: field }\n    }\n\n    pub fn compute(\n        contract_class_id: ContractClassId,\n        salt: Field,\n        initialization_hash: Field,\n        deployer: AztecAddress,\n    ) -> Self {\n        PartialAddress::compute_from_salted_initialization_hash(\n            contract_class_id,\n            SaltedInitializationHash::compute(salt, initialization_hash, deployer),\n        )\n    }\n\n    pub fn compute_from_salted_initialization_hash(\n        contract_class_id: ContractClassId,\n        salted_initialization_hash: SaltedInitializationHash,\n    ) -> Self {\n        PartialAddress::from_field(poseidon2_hash_with_separator(\n            [contract_class_id.to_field(), salted_initialization_hash.to_field()],\n            DOM_SEP__PARTIAL_ADDRESS,\n        ))\n    }\n\n    pub fn to_field(self) -> Field {\n        self.inner\n    }\n\n    pub fn is_zero(self) -> bool {\n        self.to_field() == 0\n    }\n\n    pub fn assert_is_zero(self) {\n        assert(self.to_field() == 0);\n    }\n}\n\nmod test {\n    use crate::{address::partial_address::PartialAddress, traits::{Deserialize, Serialize}};\n\n    #[test]\n    fn serialization_of_partial_address() {\n        let item = PartialAddress::from_field(1);\n        let serialized: [Field; 1] = item.serialize();\n        let deserialized = PartialAddress::deserialize(serialized);\n        assert_eq(item, deserialized);\n    }\n}\n"
    },
    "345": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr",
      "source": "use crate::{\n    address::aztec_address::AztecAddress, constants::DOM_SEP__PARTIAL_ADDRESS,\n    hash::poseidon2_hash_with_separator, traits::ToField,\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\n#[derive(Eq)]\npub struct SaltedInitializationHash {\n    pub inner: Field,\n}\n\nimpl ToField for SaltedInitializationHash {\n    fn to_field(self) -> Field {\n        self.inner\n    }\n}\n\nimpl SaltedInitializationHash {\n    pub fn from_field(field: Field) -> Self {\n        Self { inner: field }\n    }\n\n    pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n        SaltedInitializationHash::from_field(poseidon2_hash_with_separator(\n            [salt, initialization_hash, deployer.to_field()],\n            DOM_SEP__PARTIAL_ADDRESS,\n        ))\n    }\n\n    pub fn assert_is_zero(self) {\n        assert(self.to_field() == 0);\n    }\n}\n"
    },
    "355": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
      "source": "use crate::{\n    address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n    contract_class_id::ContractClassId,\n    public_keys::PublicKeys,\n    traits::{Deserialize, Hash, Serialize, ToField},\n};\nuse std::meta::derive;\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct ContractInstance {\n    pub salt: Field,\n    pub deployer: AztecAddress,\n    pub contract_class_id: ContractClassId,\n    pub initialization_hash: Field,\n    pub public_keys: PublicKeys,\n}\n\nimpl Hash for ContractInstance {\n    fn hash(self) -> Field {\n        self.to_address().to_field()\n    }\n}\n\nimpl ContractInstance {\n    pub fn to_address(self) -> AztecAddress {\n        AztecAddress::compute(\n            self.public_keys,\n            PartialAddress::compute(\n                self.contract_class_id,\n                self.salt,\n                self.initialization_hash,\n                self.deployer,\n            ),\n        )\n    }\n}\n\nmod test {\n    use crate::{\n        address::AztecAddress,\n        constants::CONTRACT_INSTANCE_LENGTH,\n        contract_class_id::ContractClassId,\n        contract_instance::ContractInstance,\n        public_keys::PublicKeys,\n        traits::{Deserialize, FromField, Serialize},\n    };\n\n    #[test]\n    fn serde() {\n        let instance = ContractInstance {\n            salt: 6,\n            deployer: AztecAddress::from_field(12),\n            contract_class_id: ContractClassId::from_field(13),\n            initialization_hash: 156,\n            public_keys: PublicKeys::default(),\n        };\n\n        // We use the CONTRACT_INSTANCE_LENGTH constant to ensure that there is a match between the derived trait\n        // implementation and the constant.\n        let serialized: [Field; CONTRACT_INSTANCE_LENGTH] = instance.serialize();\n\n        let deserialized = ContractInstance::deserialize(serialized);\n\n        assert(instance.eq(deserialized));\n    }\n\n}\n"
    },
    "359": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr",
      "source": "use crate::{\n    data::public_data_tree_leaf::PublicDataTreeLeaf,\n    merkle_tree::{IndexedTreeLeafPreimage, LeafPreimage},\n    traits::{Deserialize, Empty, Hash, Serialize},\n};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct PublicDataTreeLeafPreimage {\n    pub slot: Field,\n    pub value: Field,\n    pub next_slot: Field,\n    pub next_index: Field,\n}\n\n/// An empty public data tree leaf preimage never actually exists in the tree.\n///\n/// Unlike the nullifier tree, where nullifiers are inserted in fixed-size batches (padded with empty preimages when\n/// a transaction doesn't fill a full batch), the AVM inserts public data leaves one by one, so no padding is needed.\n///\n/// The tree is initialized with non-empty leaf preimages (see table below). To insert an empty leaf preimage\n/// (slot = 0), we would need to find a valid low leaf satisfying: low_leaf.slot < 0 < low_leaf.next_slot.\n/// Since all slots in the tree are non-negative, no such low leaf exists, making insertion impossible.\n///\n/// In fact, slot 0 already exists in the initial tree state. The preimage { slot: 0, value: 0, next_slot: 1,\n/// next_index: 1 } can be used to prove membership and update the value at slot 0. However, it's practically\n/// impossible for a contract to produce a storage slot where `compute_public_data_leaf_slot` returns 0.\n///\n/// Note: Tree leaves beyond next_available_leaf_index contain zero hashes (the default empty leaf value in Merkle\n/// trees). These are NOT hashes of empty leaf preimages - the hash of an empty public data leaf preimage is\n/// 0x20be000d93b852c82d4e02c94e9e61fa3a0e79949aac3af4010620651d416134\n///\n/// Initial state of the Public Data Tree (initialized in content_addressed_indexed_tree.hpp with N = 128):\n///\n///   Index |  slot    value   next_slot  next_index\n///   ----- |  ----    -----   ---------  ---------\n///   0     |  0       0       1          1\n///   1     |  1       0       2          2\n///   2     |  2       0       3          3\n///   ...   |  ...     ...     ...        ...\n///   N-2   |  N-2     0       N-1        N-1\n///   N-1   |  N-1     0       0          0          (points to infinity)\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 Hash for PublicDataTreeLeafPreimage {\n    fn hash(self) -> Field {\n        crate::hash::poseidon2_hash(self.serialize())\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: Field) -> 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\n#[test]\nfn public_data_tree_leaf_preimage_hash_matches_typescript() {\n    let leaf = PublicDataTreeLeafPreimage { slot: 123, value: 45, next_slot: 67, next_index: 890 };\n    let hash = leaf.hash();\n\n    // The following value was generated by `yarn-project/stdlib/src/trees/public_data_leaf.test.ts`\n    let hash_from_ts = 0x2efdfcfc865cbb7543183fae69374ee5106dde9741545afd2fbf12868b550614;\n\n    assert_eq(hash, hash_from_ts);\n}\n"
    },
    "360": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/data/storage_read.nr",
      "source": "use crate::{\n    constants::PUBLIC_DATA_TREE_HEIGHT,\n    data::public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage,\n    merkle_tree::{conditionally_check_membership, MembershipWitness},\n};\n\n/// Read the value from public storage at the given `leaf_slot`.\n///\n/// Parameters:\n/// - `public_data_tree_root`: The root of the public data tree.\n/// - `public_data_leaf_slot`: The slot of the leaf in the public data tree.\n/// - `witness`: A hint to prove that the `leaf_preimage` exists in the tree.\n///\n/// The slot could either exist (has been initialized) in the tree or not:\n/// - If it's in the tree, `leaf_preimage` should be the preimage for the slot.\n/// - If it's not in the tree, `leaf_preimage` should be the preimage for the low leaf of the slot.\n///\n/// Returns:\n/// - `Field`: The value read from the public data tree.\npub fn public_data_storage_read(\n    public_data_tree_root: Field,\n    public_data_leaf_slot: Field,\n    witness: MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>,\n    leaf_preimage: PublicDataTreeLeafPreimage,\n) -> Field {\n    // Use the given `leaf_preimage` hint to determine whether we are reading a slot that's been written to the tree or\n    // not.\n    let is_slot_in_tree = leaf_preimage.slot == public_data_leaf_slot;\n\n    let (_, is_expected_leaf, is_leaf_in_tree) = conditionally_check_membership(\n        public_data_leaf_slot,\n        is_slot_in_tree,\n        leaf_preimage,\n        witness,\n        public_data_tree_root,\n    );\n\n    // In the case of the state existing in the tree, `is_leaf_in_tree = true`.\n    // In the case of the state not existing in the tree, the above membership check was done against the _low_ leaf,\n    // so rather confusingly, we still expect `is_leaf_in_tree = true` (because it's a different kind of leaf in this case).\n    assert(is_leaf_in_tree, \"Proving public value inclusion failed\");\n    assert(\n        is_expected_leaf,\n        \"The provided public data tree leaf preimage is not the correct leaf for the requested slot\",\n    );\n\n    // Note: An empty leaf preimage would pass validation as a low leaf. However, it is not a valid leaf and is never\n    // inserted into the tree, since we do not perform batch insertions with padded empty leaves in the public data\n    // tree, and the tree's genesis state contains only non-empty leaves.\n    // (See the comment in `PublicDataTreeLeafPreimage` for more details.)\n    // Therefore, even if an empty leaf preimage is provided, it will fail the membership check because\n    // `is_leaf_in_tree` will be false.\n\n    if is_slot_in_tree {\n        leaf_preimage.value\n    } else {\n        0\n    }\n}\n\nmod tests {\n    use crate::{\n        constants::PUBLIC_DATA_TREE_HEIGHT,\n        data::public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage,\n        merkle_tree::{MembershipWitness, test_utils::SingleSubtreeMerkleTree},\n        traits::{Empty, Hash},\n    };\n    use super::public_data_storage_read;\n\n    struct TestBuilder {\n        public_data_tree_root: Field,\n        public_data_leaf_slot: Field,\n        witness: MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>,\n        leaf_preimage: PublicDataTreeLeafPreimage,\n        public_data_tree: SingleSubtreeMerkleTree<4, 2, PUBLIC_DATA_TREE_HEIGHT>,\n    }\n\n    impl TestBuilder {\n        pub fn new() -> Self {\n            // Create a tree with 4 prefilled leaves.\n            // slot 0 -> slot 11 -> slot 22 -> slot 33 -> infinity\n            let prefilled_leaves = [\n                PublicDataTreeLeafPreimage { slot: 0, value: 0, next_slot: 11, next_index: 3 },\n                PublicDataTreeLeafPreimage { slot: 22, value: 123, next_slot: 33, next_index: 2 },\n                PublicDataTreeLeafPreimage { slot: 33, value: 789, next_slot: 0, next_index: 0 },\n                PublicDataTreeLeafPreimage { slot: 11, value: 456, next_slot: 22, next_index: 1 },\n            ];\n            let public_data_tree = SingleSubtreeMerkleTree::<4, 2, PUBLIC_DATA_TREE_HEIGHT>::new(\n                prefilled_leaves.map(|l| l.hash()),\n            );\n\n            let public_data_tree_root = public_data_tree.get_root();\n\n            // Default to reading from slot 22 (exists in tree at index 1).\n            let leaf_index = 1;\n            let public_data_leaf_slot = 22;\n            let leaf_preimage = prefilled_leaves[1];\n            let witness = MembershipWitness {\n                leaf_index,\n                sibling_path: public_data_tree.get_sibling_path(leaf_index),\n            };\n\n            Self {\n                public_data_tree_root,\n                public_data_leaf_slot,\n                witness,\n                leaf_preimage,\n                public_data_tree,\n            }\n        }\n\n        pub fn read_value(self) -> Field {\n            public_data_storage_read(\n                self.public_data_tree_root,\n                self.public_data_leaf_slot,\n                self.witness,\n                self.leaf_preimage,\n            )\n        }\n    }\n\n    #[test]\n    fn read_existing_slot() {\n        let builder = TestBuilder::new();\n\n        let value = builder.read_value();\n\n        // Slot 22 has value 123.\n        assert_eq(value, 123);\n    }\n\n    #[test]\n    fn read_non_existing_slot_using_low_leaf() {\n        let mut builder = TestBuilder::new();\n\n        // Read from slot 30, which doesn't exist in the tree.\n        // Use the leaf at slot 22 as the low leaf (22 < 30 < 33).\n        builder.public_data_leaf_slot = 30;\n        // The leaf preimage at index 1 (slot 22) is a valid low leaf for slot 30.\n        // The witness is already pointing to index 1.\n\n        let value = builder.read_value();\n\n        // Non-existing slot should return 0.\n        assert_eq(value, 0);\n    }\n\n    #[test]\n    fn read_non_existing_slot_greater_than_max() {\n        let mut builder = TestBuilder::new();\n\n        // Read from slot 600, which is greater than the max slot in the tree (33).\n        // Use the leaf at slot 33 as the low leaf (points to infinity).\n        builder.public_data_leaf_slot = 600;\n        let leaf_index = 2;\n        builder.witness = MembershipWitness {\n            leaf_index,\n            sibling_path: builder.public_data_tree.get_sibling_path(leaf_index),\n        };\n        builder.leaf_preimage =\n            PublicDataTreeLeafPreimage { slot: 33, value: 789, next_slot: 0, next_index: 0 };\n\n        let value = builder.read_value();\n\n        // Non-existing slot should return 0.\n        assert_eq(value, 0);\n    }\n\n    #[test(should_fail_with = \"Proving public value inclusion failed\")]\n    fn wrong_membership_witness_index() {\n        let mut builder = TestBuilder::new();\n\n        // Use the wrong leaf index for the witness.\n        builder.witness.leaf_index += 1;\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"Proving public value inclusion failed\")]\n    fn wrong_tree_root() {\n        let mut builder = TestBuilder::new();\n\n        // Use a different tree root.\n        builder.public_data_tree_root = 12345;\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"The provided public data tree leaf preimage is not the correct leaf for the requested slot\")]\n    fn wrong_leaf_preimage_for_existing_slot() {\n        let mut builder = TestBuilder::new();\n\n        // Slot 22 exists, but provide a different preimage (for slot 11).\n        let leaf_index = 3;\n        builder.witness = MembershipWitness {\n            leaf_index,\n            sibling_path: builder.public_data_tree.get_sibling_path(leaf_index),\n        };\n        builder.leaf_preimage =\n            PublicDataTreeLeafPreimage { slot: 11, value: 456, next_slot: 22, next_index: 1 };\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"The provided public data tree leaf preimage is not the correct leaf for the requested slot\")]\n    fn invalid_low_leaf_slot_too_high() {\n        let mut builder = TestBuilder::new();\n\n        // Try to read slot 15. Provide low leaf at slot 22, which is > 15.\n        builder.public_data_leaf_slot = 15;\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"The provided public data tree leaf preimage is not the correct leaf for the requested slot\")]\n    fn invalid_low_leaf_next_slot_too_low() {\n        let mut builder = TestBuilder::new();\n\n        // Try to read slot 25. Use low leaf at slot 11, whose next_slot = 22, which is < 25.\n        builder.public_data_leaf_slot = 25;\n        let leaf_index = 3;\n        builder.witness = MembershipWitness {\n            leaf_index,\n            sibling_path: builder.public_data_tree.get_sibling_path(leaf_index),\n        };\n        builder.leaf_preimage =\n            PublicDataTreeLeafPreimage { slot: 11, value: 456, next_slot: 22, next_index: 1 };\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"Proving public value inclusion failed\")]\n    fn bypass_existing_slot_using_empty_leaf() {\n        let mut builder = TestBuilder::new();\n\n        // Slot 22 exists, but try to bypass it using an empty leaf at an unused index.\n        let leaf_index = builder.public_data_tree.get_next_available_index();\n        builder.witness = MembershipWitness {\n            leaf_index,\n            sibling_path: builder.public_data_tree.get_sibling_path(leaf_index),\n        };\n        builder.leaf_preimage = PublicDataTreeLeafPreimage::empty();\n\n        let _ = builder.read_value();\n    }\n\n    #[test(should_fail_with = \"Proving public value inclusion failed\")]\n    fn leaf_preimage_mismatch_value() {\n        let mut builder = TestBuilder::new();\n\n        // Provide a preimage with the correct slot but wrong value.\n        // The slot matches, so the function treats this as \"slot exists in tree\".\n        // But the preimage hash won't match the actual leaf in the tree, so membership fails.\n        builder.leaf_preimage =\n            PublicDataTreeLeafPreimage { slot: 22, value: 9999, next_slot: 33, next_index: 2 };\n\n        let _ = builder.read_value();\n    }\n}\n"
    },
    "371": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
      "source": "mod poseidon2_chunks;\n\nuse crate::{\n    abis::{\n        contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n        function_selector::FunctionSelector, nullifier::Nullifier, private_log::PrivateLog,\n        transaction::tx_request::TxRequest,\n    },\n    address::{AztecAddress, EthAddress},\n    constants::{\n        CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n        DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n        DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n        TWO_POW_64,\n    },\n    merkle_tree::root_from_sibling_path,\n    messaging::l2_to_l1_message::L2ToL1Message,\n    poseidon2::Poseidon2Sponge,\n    side_effect::{Counted, Scoped},\n    traits::{FromField, Hash, ToField},\n    utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\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\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 compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), note_hash],\n        DOM_SEP__SILOED_NOTE_HASH,\n    )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n///   Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n///   before they send it to the network. If a tx makes public function calls, then _revertible_\n///   note_hashes that are created in private will not be made unique in private by the Reset circuit,\n///   but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n///   until the AVM has executed the public functions of the tx. (See an explanation in\n///   reset_output_composer.nr for why).\n///   For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n///   for txs whose public functions create a varying number of non-revertible notes (determined at\n///   runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n///   tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n    let inputs = [note_nonce, siloed_note_hash];\n    poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\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        DOM_SEP__NOTE_HASH_NONCE,\n    )\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n    siloed_note_hash: Field,\n    first_nullifier: Field,\n    note_index_in_tx: u32,\n) -> Field {\n    let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n    compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), nullifier],\n        DOM_SEP__SILOED_NULLIFIER,\n    )\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n    // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n    // can have counter 1 (see `validate_as_first_call` for that assertion).\n    Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n        NULL_MSG_SENDER_CONTRACT_ADDRESS,\n    )\n}\n\npub fn compute_log_tag(raw_tag: Field, dom_sep: u32) -> Field {\n    poseidon2_hash_with_separator([raw_tag], dom_sep)\n}\n\npub fn compute_siloed_private_log_first_field(\n    contract_address: AztecAddress,\n    field: Field,\n) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), field],\n        DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n    )\n}\n\npub fn compute_siloed_private_log(contract_address: AztecAddress, log: PrivateLog) -> PrivateLog {\n    let mut fields = log.fields;\n    fields[0] = compute_siloed_private_log_first_field(contract_address, fields[0]);\n    PrivateLog::new(fields, log.length)\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n    poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n    master_secret_key: EmbeddedCurveScalar,\n    app_address: AztecAddress,\n    key_type_domain_separator: Field,\n) -> Field {\n    poseidon2_hash_with_separator(\n        [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n        key_type_domain_separator,\n    )\n}\n\npub fn compute_l2_to_l1_message_hash(\n    message: Scoped<L2ToL1Message>,\n    rollup_version_id: Field,\n    chain_id: Field,\n) -> Field {\n    let contract_address_bytes: [u8; 32] = message.contract_address.to_field().to_be_bytes();\n    let recipient_bytes: [u8; 20] = message.inner.recipient.to_be_bytes();\n    let content_bytes: [u8; 32] = message.inner.content.to_be_bytes();\n    let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n    let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n    let mut bytes: [u8; 148] = std::mem::zeroed();\n    for i in 0..32 {\n        bytes[i] = contract_address_bytes[i];\n        bytes[i + 32] = rollup_version_id_bytes[i];\n        // 64 - 84 are for recipient.\n        bytes[i + 84] = chain_id_bytes[i];\n        bytes[i + 116] = content_bytes[i];\n    }\n\n    for i in 0..20 {\n        bytes[64 + i] = recipient_bytes[i];\n    }\n\n    sha256_to_field(bytes)\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n    // Concatenate two fields into 32 x 2 = 64 bytes\n    let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n    let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n    let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n    sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n    poseidon::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 = [separator.to_field()].concat(inputs);\n    poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n    let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n    sponge.squeeze()\n}\n\n// This function is  unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n    inputs: BoundedVec<Field, N>,\n    separator: T,\n) -> 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.get(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 subarray_hash_matches_fixed() {\n    let mut values_to_hash = [3; 17];\n    let mut padded = values_to_hash.concat([0; 11]);\n    let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n    // Hash the entire values_to_hash.\n    let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(values_to_hash, values_to_hash.len());\n\n    assert_eq(subarray_hash, fixed_len_hash);\n}\n\n#[test]\nfn subarray_hash_matches_variable() {\n    let mut values_to_hash = [3; 17];\n    let mut padded = values_to_hash.concat([0; 11]);\n    let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n    // Hash up to values_to_hash.len() fields of the padded array.\n    let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(padded, values_to_hash.len());\n\n    assert_eq(subarray_hash, variable_len_hash);\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 unique_siloed_note_hash_matches_typescript() {\n    let inner_note_hash = 1;\n    let contract_address = AztecAddress::from_field(2);\n    let first_nullifier = 3;\n    let note_index_in_tx = 4;\n\n    let siloed_note_hash = compute_siloed_note_hash(contract_address, inner_note_hash);\n    let siloed_note_hash_from_ts =\n        0x1986a4bea3eddb1fff917d629a13e10f63f514f401bdd61838c6b475db949169;\n    assert_eq(siloed_note_hash, siloed_note_hash_from_ts);\n\n    let nonce: Field = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n    let note_hash_nonce_from_ts =\n        0x28e7799791bf066a57bb51fdd0fbcaf3f0926414314c7db515ea343f44f5d58b;\n    assert_eq(nonce, note_hash_nonce_from_ts);\n\n    let unique_siloed_note_hash_from_nonce = compute_unique_note_hash(nonce, siloed_note_hash);\n    let unique_siloed_note_hash = compute_note_nonce_and_unique_note_hash(\n        siloed_note_hash,\n        first_nullifier,\n        note_index_in_tx,\n    );\n    assert_eq(unique_siloed_note_hash_from_nonce, unique_siloed_note_hash);\n\n    let unique_siloed_note_hash_from_ts =\n        0x29949aef207b715303b24639737c17fbfeb375c1d965ecfa85c7e4f0febb7d16;\n    assert_eq(unique_siloed_note_hash, unique_siloed_note_hash_from_ts);\n}\n\n#[test]\nfn siloed_nullifier_matches_typescript() {\n    let contract_address = AztecAddress::from_field(123);\n    let nullifier = 456;\n\n    let res = compute_siloed_nullifier(contract_address, nullifier);\n\n    let siloed_nullifier_from_ts =\n        0x169b50336c1f29afdb8a03d955a81e485f5ac7d5f0b8065673d1e407e5877813;\n\n    assert_eq(res, siloed_nullifier_from_ts);\n}\n\n#[test]\nfn siloed_private_log_first_field_matches_typescript() {\n    let contract_address = AztecAddress::from_field(123);\n    let field = 456;\n    let res = compute_siloed_private_log_first_field(contract_address, field);\n\n    let siloed_private_log_first_field_from_ts =\n        0x29480984f7b9257fded523d50addbcfc8d1d33adcf2db73ef3390a8fd5cdffaa;\n\n    assert_eq(res, siloed_private_log_first_field_from_ts);\n}\n\n#[test]\nfn empty_l2_to_l1_message_hash_matches_typescript() {\n    // All zeroes\n    let res = compute_l2_to_l1_message_hash(\n        L2ToL1Message { recipient: EthAddress::zero(), content: 0 }.scope(AztecAddress::from_field(\n            0,\n        )),\n        0,\n        0,\n    );\n\n    let empty_l2_to_l1_msg_hash_from_ts =\n        0x003b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992;\n\n    assert_eq(res, empty_l2_to_l1_msg_hash_from_ts);\n}\n\n#[test]\nfn l2_to_l1_message_hash_matches_typescript() {\n    let message = L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n        AztecAddress::from_field(3),\n    );\n    let version = 4;\n    let chainId = 5;\n\n    let hash = compute_l2_to_l1_message_hash(message, version, chainId);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let l2_to_l1_message_hash_from_ts =\n        0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n    assert_eq(hash, l2_to_l1_message_hash_from_ts);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n    let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n    let separator = 42;\n\n    // Hash using bounded vec version\n    let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n    // Hash using regular version\n    let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n    // Results should match\n    assert_eq(bounded_result, regular_result);\n}\n"
    },
    "373": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/logging.nr",
      "source": "// Log levels matching the JS logger:\n\n// global SILENT_LOG_LEVEL: u8 = 0;\nglobal FATAL_LOG_LEVEL: u8 = 1;\nglobal ERROR_LOG_LEVEL: u8 = 2;\nglobal WARN_LOG_LEVEL: u8 = 3;\nglobal INFO_LOG_LEVEL: u8 = 4;\nglobal VERBOSE_LOG_LEVEL: u8 = 5;\nglobal DEBUG_LOG_LEVEL: u8 = 6;\nglobal TRACE_LOG_LEVEL: u8 = 7;\n\n// --- Per-level log functions (no format args) ---\n\npub fn fatal_log<let N: u32>(msg: str<N>) {\n    fatal_log_format(msg, []);\n}\n\npub fn error_log<let N: u32>(msg: str<N>) {\n    error_log_format(msg, []);\n}\n\npub fn warn_log<let N: u32>(msg: str<N>) {\n    warn_log_format(msg, []);\n}\n\npub fn info_log<let N: u32>(msg: str<N>) {\n    info_log_format(msg, []);\n}\n\npub fn verbose_log<let N: u32>(msg: str<N>) {\n    verbose_log_format(msg, []);\n}\n\npub fn debug_log<let N: u32>(msg: str<N>) {\n    debug_log_format(msg, []);\n}\n\npub fn trace_log<let N: u32>(msg: str<N>) {\n    trace_log_format(msg, []);\n}\n\n// --- Per-level log functions (with format args) ---\n\npub fn fatal_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(FATAL_LOG_LEVEL, msg, args);\n}\n\npub fn error_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(ERROR_LOG_LEVEL, msg, args);\n}\n\npub fn warn_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(WARN_LOG_LEVEL, msg, args);\n}\n\npub fn info_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(INFO_LOG_LEVEL, msg, args);\n}\n\npub fn verbose_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(VERBOSE_LOG_LEVEL, msg, args);\n}\n\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(DEBUG_LOG_LEVEL, msg, args);\n}\n\npub fn trace_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(TRACE_LOG_LEVEL, msg, args);\n}\n\nfn log_format<let M: u32, let N: u32>(log_level: u8, 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 { log_oracle_wrapper(log_level, msg, args) };\n}\n\nunconstrained fn log_oracle_wrapper<let M: u32, let N: u32>(\n    log_level: u8,\n    msg: str<M>,\n    args: [Field; N],\n) {\n    log_oracle(log_level, msg, N, args);\n}\n\n// While the length parameter might seem unnecessary given that we have N, we keep it around because at the AVM\n// bytecode level we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally\n// take that route. The AVM transpiler maps this oracle to the DEBUGLOG opcode, which reads the fields size from memory.\n#[oracle(aztec_utl_log)]\nunconstrained fn log_oracle<let M: u32, let N: u32>(\n    log_level: u8,\n    msg: str<M>,\n    length: u32,\n    args: [Field; N],\n) {}\n"
    },
    "375": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/indexed_tree/low_leaf.nr",
      "source": "use crate::merkle_tree::leaf_preimage::IndexedTreeLeafPreimage;\n\n/// Check if the key is in range of the low leaf.\n///\n/// Returns:\n/// - is_valid: `true` if the key is in range of the low leaf, `false` otherwise.\n/// - is_greater_than_low: `true` if the key is greater than the low leaf's key, `false` otherwise.\n/// - is_less_than_next: `true` if the key is less than the low leaf's next key, `false` otherwise.\npub fn is_valid_low_leaf<LeafPreimage, Value>(\n    key: Field,\n    low_leaf_preimage: LeafPreimage,\n) -> (bool, bool, bool)\nwhere\n    LeafPreimage: IndexedTreeLeafPreimage<Value>,\n{\n    let low_key = low_leaf_preimage.get_key();\n    let next_key = low_leaf_preimage.get_next_key();\n\n    let is_greater_than_low = low_key.lt(key);\n    let is_less_than_next = key.lt(next_key) | low_leaf_preimage.points_to_infinity();\n    let is_valid = is_greater_than_low & is_less_than_next;\n\n    (is_valid, is_greater_than_low, is_less_than_next)\n}\n\nmod tests {\n    use crate::merkle_tree::test_utils::TestLeafPreimage;\n    use super::is_valid_low_leaf;\n\n    #[test]\n    fn valid_low_leaf() {\n        let key = 12;\n        let leaf = TestLeafPreimage { value: 11, next_value: 13 };\n        assert_eq(is_valid_low_leaf(key, leaf), (true, true, true));\n    }\n\n    #[test]\n    fn empty_low_leaf() {\n        // An all-zero low leaf should be valid. It could be used as the first dummy leaf in a tree.\n        // It's not possible to prove against an empty leaf at an uninitialized index.\n        // The membership check will fail because the leaf value hash(0, 0) is not 0.\n        let key = 12;\n        let leaf = TestLeafPreimage { value: 0, next_value: 0 };\n        assert_eq(is_valid_low_leaf(key, leaf), (true, true, true));\n    }\n\n    #[test]\n    fn invalid_low_leaf_larger_than_key() {\n        let key = 12;\n        let leaf = TestLeafPreimage { value: 13, next_value: 15 };\n        assert_eq(is_valid_low_leaf(key, leaf), (false, false, true));\n    }\n\n    #[test]\n    fn invalid_low_leaf_equal_to_key() {\n        let key = 12;\n        let leaf = TestLeafPreimage { value: 12, next_value: 15 };\n        assert_eq(is_valid_low_leaf(key, leaf), (false, false, true));\n    }\n\n    #[test]\n    fn invalid_low_leaf_next_key_smaller_than_key() {\n        let key = 12;\n        let leaf = TestLeafPreimage { value: 9, next_value: 11 };\n        assert_eq(is_valid_low_leaf(key, leaf), (false, true, false));\n    }\n\n    #[test]\n    fn invalid_low_leaf_next_key_equal_to_key() {\n        // Key exactly equals next_key - should be invalid (key must be strictly less than next)\n        let key = 15;\n        let leaf = TestLeafPreimage { value: 10, next_value: 15 };\n        assert_eq(is_valid_low_leaf(key, leaf), (false, true, false));\n    }\n\n    #[test]\n    fn valid_low_leaf_key_one_more_than_low() {\n        // Minimum valid key: exactly one more than low_key\n        let key = 11;\n        let leaf = TestLeafPreimage { value: 10, next_value: 20 };\n        assert_eq(is_valid_low_leaf(key, leaf), (true, true, true));\n    }\n\n    #[test]\n    fn valid_low_leaf_key_one_less_than_next() {\n        // Maximum valid key: exactly one less than next_key\n        let key = 19;\n        let leaf = TestLeafPreimage { value: 10, next_value: 20 };\n        assert_eq(is_valid_low_leaf(key, leaf), (true, true, true));\n    }\n\n    #[test]\n    fn invalid_key_zero_cannot_be_in_range() {\n        // Key 0 can never be \"greater than\" any non-negative low_key\n        // This is important for indexed tree security - 0 is the sentinel\n        let key = 0;\n        let leaf = TestLeafPreimage { value: 0, next_value: 100 };\n        // is_greater_than_low = 0.lt(0) = false\n        // Even though 0 < 100, the key is not greater than low_key\n        assert_eq(is_valid_low_leaf(key, leaf), (false, false, true));\n    }\n\n    #[test]\n    fn valid_max_leaf_points_to_infinity() {\n        // A max leaf (points to infinity) is valid for any key greater than its key\n        // next_value: 0 means points_to_infinity() returns true\n        let key = 100;\n        let leaf = TestLeafPreimage { value: 50, next_value: 0 };\n        assert_eq(is_valid_low_leaf(key, leaf), (true, true, true));\n    }\n\n    #[test]\n    fn invalid_max_leaf_key_less_than_low() {\n        // Even if leaf points to infinity, key must still be greater than low_key\n        let key = 30;\n        let leaf = TestLeafPreimage { value: 50, next_value: 0 };\n        // is_greater_than_low = 50.lt(30) = false\n        // is_less_than_next = 30.lt(0) | true = true (points to infinity)\n        // is_valid = false & true = false\n        assert_eq(is_valid_low_leaf(key, leaf), (false, false, true));\n    }\n\n    #[test]\n    fn invalid_max_leaf_key_equal_to_low() {\n        // Key equals low_key on a max leaf - should be invalid\n        let key = 50;\n        let leaf = TestLeafPreimage { value: 50, next_value: 0 };\n        assert_eq(is_valid_low_leaf(key, leaf), (false, false, true));\n    }\n}\n"
    },
    "378": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/membership.nr",
      "source": "use crate::{\n    merkle_tree::{\n        indexed_tree::low_leaf::is_valid_low_leaf,\n        leaf_preimage::IndexedTreeLeafPreimage,\n        root::{root_from_sibling_path, root_from_sibling_path_with_hasher},\n    },\n    traits::{Deserialize, Empty, Serialize},\n};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct MembershipWitness<let N: u32> {\n    pub leaf_index: Field,\n    pub sibling_path: [Field; N],\n}\n\nimpl<let N: u32> Empty for MembershipWitness<N> {\n    fn empty() -> Self {\n        MembershipWitness { leaf_index: 0, sibling_path: [0; N] }\n    }\n}\n\n/// Check whether a leaf exists in the tree with the given `root`.\n/// `membership_witness` is a hint to prove that the `leaf` exists in the tree with the given `root`.\n///\n/// Returns:\n/// - bool: `true` if the leaf exists in the tree, `false` otherwise.\npub fn check_membership<let TREE_HEIGHT: u32>(\n    leaf: Field,\n    membership_witness: MembershipWitness<TREE_HEIGHT>,\n    root: Field,\n) -> bool {\n    let calculated_root = root_from_sibling_path(\n        leaf,\n        membership_witness.leaf_index,\n        membership_witness.sibling_path,\n    );\n    calculated_root == root\n}\n\n/// Check whether a leaf exists in the tree with the given `root`.\n/// Same as `check_membership` but uses a custom hasher.\n/// `membership_witness` is a hint to prove that the `leaf` exists in the tree with the given `root`.\n///\n/// Returns:\n/// - bool: `true` if the leaf exists in the tree, `false` otherwise.\npub fn check_membership_with_hasher<let TREE_HEIGHT: u32>(\n    leaf: Field,\n    membership_witness: MembershipWitness<TREE_HEIGHT>,\n    root: Field,\n    hasher: fn(Field, Field) -> Field,\n) -> bool {\n    let calculated_root = root_from_sibling_path_with_hasher(\n        leaf,\n        membership_witness.leaf_index,\n        membership_witness.sibling_path,\n        hasher,\n    );\n    calculated_root == root\n}\n\n/// Check a key's non-existence in the indexed tree with the given `tree_root`.\n/// `low_leaf_preimage` is the preimage for the low leaf of the key. The key should be larger than the low leaf's key,\n/// and smaller than the low leaf's next key.\n/// `low_leaf_membership_witness` is a hint to prove that the low leaf exists in the tree with the given `tree_root`.\n///\n/// Returns:\n/// - non_existence: `true` if the key does not exist in the tree, `false` otherwise.\n/// - is_valid_low_leaf: `true` if the key is in range of the low leaf, `false` otherwise.\n/// - low_leaf_exists: `true` if the low leaf exists in the tree, `false` otherwise.\npub fn check_non_membership<let TREE_HEIGHT: u32, LEAF_PREIMAGE, VALUE>(\n    key: Field,\n    low_leaf_preimage: LEAF_PREIMAGE,\n    low_leaf_membership_witness: MembershipWitness<TREE_HEIGHT>,\n    tree_root: Field,\n) -> (bool, bool, bool)\nwhere\n    LEAF_PREIMAGE: IndexedTreeLeafPreimage<VALUE>,\n{\n    let (is_valid_low_leaf_to_key, _, _) = is_valid_low_leaf(key, low_leaf_preimage);\n\n    let low_leaf_exists = check_membership(\n        low_leaf_preimage.as_leaf(),\n        low_leaf_membership_witness,\n        tree_root,\n    );\n\n    let non_existence = is_valid_low_leaf_to_key & low_leaf_exists;\n\n    (non_existence, is_valid_low_leaf_to_key, low_leaf_exists)\n}\n\n/// Check either membership or non-membership depending on the value of `exists`:\n/// - If `exists` == true, `key` is in the tree. `leaf_preimage` is for the key itself.\n/// - If `exists` == false, `key` is not in the tree. `leaf_preimage` is for the low leaf of the key.\n/// `membership_witness` is the hint to prove that the `leaf_preimage` exists in the tree with the given `tree_root`.\n///\n/// Returns:\n/// - is_valid: `true` if the membership (`exists == true`) or non-membership (`exists == false`) check succeeds,\n///   `false` otherwise.\n/// - is_expected_leaf: `true` if the leaf preimage is the expected matching leaf (`exists == true`) or low leaf\n///   (`exists == false`) for the key, `false` otherwise.\n/// - is_leaf_in_tree: `true` if the leaf preimage exists in the tree, `false` otherwise.\npub fn conditionally_check_membership<let TREE_HEIGHT: u32, LEAF_PREIMAGE, VALUE>(\n    key: Field,\n    exists: bool,\n    leaf_preimage: LEAF_PREIMAGE,\n    membership_witness: MembershipWitness<TREE_HEIGHT>,\n    tree_root: Field,\n) -> (bool, bool, bool)\nwhere\n    LEAF_PREIMAGE: IndexedTreeLeafPreimage<VALUE>,\n{\n    let is_matching_leaf = key == leaf_preimage.get_key();\n    let (is_low_leaf, _, _) = is_valid_low_leaf(key, leaf_preimage);\n    let is_expected_leaf = if exists {\n        is_matching_leaf\n    } else {\n        is_low_leaf\n    };\n\n    let is_leaf_in_tree = check_membership(leaf_preimage.as_leaf(), membership_witness, tree_root);\n\n    let is_valid = is_expected_leaf & is_leaf_in_tree;\n\n    (is_valid, is_expected_leaf, is_leaf_in_tree)\n}\n\nmod tests {\n    use crate::merkle_tree::{\n        leaf_preimage::LeafPreimage,\n        test_utils::{SingleSubtreeMerkleTree, TestLeafPreimage},\n    };\n    use super::{\n        check_membership, check_non_membership, conditionally_check_membership, MembershipWitness,\n    };\n\n    global leaf_preimages: [TestLeafPreimage; 4] = [\n        TestLeafPreimage { value: 20, next_value: 30 },\n        TestLeafPreimage { value: 40, next_value: 0 },\n        TestLeafPreimage { value: 10, next_value: 20 },\n        TestLeafPreimage { value: 30, next_value: 40 },\n    ];\n\n    fn build_tree() -> SingleSubtreeMerkleTree<4, 2, 3> {\n        SingleSubtreeMerkleTree::new(leaf_preimages.map(|leaf_preimage: TestLeafPreimage| {\n            leaf_preimage.as_leaf()\n        }))\n    }\n\n    fn check_membership_at_index(leaf_index: Field, leaf: Field) -> bool {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n\n        check_membership(\n            leaf,\n            MembershipWitness { leaf_index, sibling_path: tree.get_sibling_path(leaf_index) },\n            tree_root,\n        )\n    }\n\n    fn check_non_membership_at_index(low_leaf_index: Field, key: Field) -> (bool, bool, bool) {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n        let leaf_preimage = if low_leaf_index.lt(leaf_preimages.len() as Field) {\n            leaf_preimages[low_leaf_index as u32]\n        } else {\n            TestLeafPreimage { value: 0, next_value: 0 }\n        };\n\n        check_non_membership(\n            key,\n            leaf_preimage,\n            MembershipWitness {\n                leaf_index: low_leaf_index,\n                sibling_path: tree.get_sibling_path(low_leaf_index),\n            },\n            tree_root,\n        )\n    }\n\n    fn conditionally_check_membership_at_index(\n        exists: bool,\n        low_leaf_index: Field,\n        key: Field,\n    ) -> (bool, bool, bool) {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n        let leaf_preimage = if low_leaf_index.lt(leaf_preimages.len() as Field) {\n            leaf_preimages[low_leaf_index as u32]\n        } else {\n            TestLeafPreimage { value: 0, next_value: 0 }\n        };\n\n        conditionally_check_membership(\n            key,\n            exists,\n            leaf_preimage,\n            MembershipWitness {\n                leaf_index: low_leaf_index,\n                sibling_path: tree.get_sibling_path(low_leaf_index),\n            },\n            tree_root,\n        )\n    }\n\n    #[test]\n    fn test_check_membership() {\n        assert_eq(check_membership_at_index(0, leaf_preimages[0].as_leaf()), true);\n        assert_eq(check_membership_at_index(2, leaf_preimages[2].as_leaf()), true);\n    }\n\n    #[test]\n    fn test_check_membership_false_wrong_leaf() {\n        assert_eq(check_membership_at_index(0, leaf_preimages[1].as_leaf()), false);\n        assert_eq(check_membership_at_index(2, leaf_preimages[0].as_leaf()), false);\n    }\n\n    #[test]\n    fn test_check_membership_false_wrong_root() {\n        let tree = build_tree();\n        let tree_root = 56;\n\n        let res = check_membership(\n            leaf_preimages[0].as_leaf(),\n            MembershipWitness { leaf_index: 0, sibling_path: tree.get_sibling_path(0) },\n            tree_root,\n        );\n        assert_eq(res, false);\n    }\n\n    #[test]\n    fn test_check_non_membership() {\n        assert_eq(check_non_membership_at_index(0, 25), (true, true, true));\n    }\n\n    #[test]\n    fn test_check_non_membership_key_greater_than_max_leaf_in_tree() {\n        assert_eq(check_non_membership_at_index(1, 45), (true, true, true));\n    }\n\n    #[test]\n    fn test_check_non_membership_failed_low_leaf_larger_than_key() {\n        assert_eq(check_non_membership_at_index(3, 25), (false, false, true));\n    }\n\n    #[test]\n    fn test_check_non_membership_failed_next_key_smaller_than_key() {\n        assert_eq(check_non_membership_at_index(2, 25), (false, false, true));\n    }\n\n    #[test]\n    fn test_check_non_membership_low_leaf_not_exist() {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n\n        let fake_leaf = TestLeafPreimage { value: 50, next_value: 60 };\n        assert_eq(\n            check_non_membership(\n                55,\n                fake_leaf,\n                MembershipWitness { leaf_index: 1, sibling_path: tree.get_sibling_path(1) },\n                tree_root,\n            ),\n            (false, true, false),\n        );\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_exists() {\n        assert_eq(\n            conditionally_check_membership_at_index(true, 1, leaf_preimages[1].get_key()),\n            (true, true, true),\n        );\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_not_exists() {\n        assert_eq(\n            conditionally_check_membership_at_index(false, 1, leaf_preimages[1].get_key() + 1),\n            (true, true, true),\n        );\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_exists_value_mismatch() {\n        assert_eq(\n            conditionally_check_membership_at_index(true, 1, leaf_preimages[1].get_key() + 1),\n            (false, false, true),\n        );\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_failed_not_exists_wrong_low_leaf() {\n        assert_eq(conditionally_check_membership_at_index(false, 3, 25), (false, false, true));\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_failed_not_exists_wrong_next_key() {\n        assert_eq(conditionally_check_membership_at_index(false, 2, 25), (false, false, true));\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_failed_exists_invalid_leaf() {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n        let fake_leaf = TestLeafPreimage { value: 50, next_value: 60 };\n        let exists = true;\n        assert_eq(\n            conditionally_check_membership(\n                50,\n                exists,\n                fake_leaf,\n                MembershipWitness { leaf_index: 1, sibling_path: tree.get_sibling_path(1) },\n                tree_root,\n            ),\n            (false, true, false),\n        );\n    }\n\n    #[test]\n    fn test_conditionally_check_membership_failed_not_exists_invalid_leaf() {\n        let tree = build_tree();\n        let tree_root = tree.get_root();\n        let fake_leaf = TestLeafPreimage { value: 50, next_value: 60 };\n        let exists = false;\n        assert_eq(\n            conditionally_check_membership(\n                55,\n                exists,\n                fake_leaf,\n                MembershipWitness { leaf_index: 1, sibling_path: tree.get_sibling_path(1) },\n                tree_root,\n            ),\n            (false, true, false),\n        );\n    }\n}\n"
    },
    "379": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr",
      "source": "use crate::{\n    hash::{accumulate_sha256, poseidon2_hash},\n    traits::Empty,\n    utils::math::is_power_of_2_u32,\n};\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n    poseidon2_hash([left, right])\n}\n\npub fn sha_merkle_hash(left: Field, right: Field) -> Field {\n    accumulate_sha256(left, right)\n}\n\n#[derive(Eq)]\npub struct MerkleTree<let N: u32> {\n    pub leaves: [Field; N],\n    pub nodes: [Field; N - 1],\n}\n\nimpl<let N: u32> Empty for MerkleTree<N> {\n    fn empty() -> Self {\n        MerkleTree { leaves: [0; N], nodes: [0; N - 1] }\n    }\n}\n\nimpl<let N: u32> MerkleTree<N> {\n    pub fn new(leaves: [Field; N]) -> Self {\n        let nodes = compute_merkle_tree_nodes(leaves, merkle_hash);\n        MerkleTree { leaves, nodes }\n    }\n\n    pub fn new_sha(leaves: [Field; N]) -> Self {\n        let nodes = compute_merkle_tree_nodes(leaves, sha_merkle_hash);\n        MerkleTree { leaves, nodes }\n    }\n\n    pub fn get_root(self) -> Field {\n        self.nodes[N - 2]\n    }\n\n    pub fn get_sibling_path<let K: u32>(self, leaf_index: u32) -> [Field; K] {\n        assert_eq(2.pow_32(K as Field), N as Field, \"Invalid path length\");\n\n        let mut path = [0; K];\n        let mut current_index = leaf_index;\n        let mut subtree_width = N;\n\n        let mut current_sibling_index = sibling_index(current_index);\n\n        path[0] = self.leaves[current_sibling_index];\n\n        let mut subtree_offset: u32 = 0;\n\n        for i in 1..K {\n            current_index = current_index / 2;\n            subtree_width = subtree_width / 2;\n\n            current_sibling_index = sibling_index(current_index);\n\n            path[i] = self.nodes[subtree_offset + current_sibling_index];\n\n            subtree_offset += subtree_width;\n        }\n\n        path\n    }\n}\n\npub fn sibling_index(index: u32) -> u32 {\n    if index % 2 == 0 {\n        index + 1\n    } else {\n        index - 1\n    }\n}\n\npub fn compute_merkle_tree_nodes<let N: u32>(\n    leaves: [Field; N],\n    hasher: fn(Field, Field) -> Field,\n) -> [Field; N - 1] {\n    // Note: `N` must be a power of 2.\n    std::static_assert(is_power_of_2_u32(N), \"N must be a power of 2\");\n    std::static_assert(N != 1, \"2 must divide N\");\n\n    let mut nodes = [0; N - 1];\n\n    let total_nodes = N - 1;\n    let half_size = N / 2;\n\n    // Hash base layer.\n    for i in 0..half_size {\n        nodes[i] = hasher(leaves[2 * i], leaves[2 * i + 1]);\n    }\n\n    // Hash the other layers.\n    for i in 0..(total_nodes - half_size) {\n        nodes[half_size + i] = hasher(nodes[2 * i], nodes[2 * i + 1]);\n    }\n\n    nodes\n}\n"
    },
    "381": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr",
      "source": "use crate::merkle_tree::merkle_tree::{compute_merkle_tree_nodes, merkle_hash, sha_merkle_hash};\n\n/// Calculate the Merkle tree root from the sibling path and leaf, using the default merkle hash.\npub fn root_from_sibling_path<let N: u32>(\n    leaf: Field,\n    leaf_index: Field,\n    sibling_path: [Field; N],\n) -> Field {\n    root_from_sibling_path_with_hasher(leaf, leaf_index, sibling_path, merkle_hash)\n}\n\n/// Calculate the Merkle tree root from the sibling path and leaf, using a custom hasher.\n///\n/// The leaf is hashed with its sibling, the result is then hashed with the next sibling in the path. and so on.\n/// The last hash is the root.\npub fn root_from_sibling_path_with_hasher<let N: u32>(\n    leaf: Field,\n    leaf_index: Field,\n    sibling_path: [Field; N],\n    hasher: fn(Field, Field) -> Field,\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 = hasher(hash_left, hash_right);\n    }\n    node\n}\n\npub fn compute_tree_root<let N: u32>(leaves: [Field; N]) -> Field {\n    compute_tree_root_with_hasher(leaves, merkle_hash)\n}\n\npub fn compute_sha_tree_root<let N: u32>(leaves: [Field; N]) -> Field {\n    compute_tree_root_with_hasher(leaves, sha_merkle_hash)\n}\n\nfn compute_tree_root_with_hasher<let N: u32>(\n    leaves: [Field; N],\n    hasher: fn(Field, Field) -> Field,\n) -> Field {\n    compute_merkle_tree_nodes(leaves, hasher)[N - 2]\n}\n\npub fn compute_empty_tree_root<let TreeHeight: u32>() -> Field {\n    compute_empty_tree_root_with_hasher::<TreeHeight>(merkle_hash)\n}\n\npub fn compute_empty_sha_tree_root<let TreeHeight: u32>() -> Field {\n    compute_empty_tree_root_with_hasher::<TreeHeight>(sha_merkle_hash)\n}\n\npub fn compute_empty_tree_root_with_hasher<let TreeHeight: u32>(\n    hasher: fn(Field, Field) -> Field,\n) -> Field {\n    let mut hashes = [0; TreeHeight + 1];\n    for i in 1..TreeHeight + 1 {\n        hashes[i] = hasher(hashes[i - 1], hashes[i - 1]);\n    }\n    hashes[TreeHeight]\n}\n\n#[test]\nfn test_merkle_roots_match_typescript() {\n    // The following hardcoded values are generated from yarn-project/foundation/src/trees/balanced_merkle_tree_root.test.ts\n\n    let root = compute_tree_root([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);\n    let expected_tree_root_from_ts =\n        0x1528946361c480e8dc1e9ae3f8c31c997625fa1ddeddc7db5ad0dce3ac58fc4c;\n    assert_eq(root, expected_tree_root_from_ts);\n\n    let empty_root = compute_tree_root([0; 16]);\n    let expected_empty_root_from_ts =\n        0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e;\n    assert_eq(empty_root, expected_empty_root_from_ts);\n\n    let sha_root = compute_sha_tree_root([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);\n    let expected_sha_root_from_ts =\n        0x00b007869b8a5e2a9b3b580a318e702cea04b2f5438f2e26743f545e4d1ecbdb;\n    assert_eq(sha_root, expected_sha_root_from_ts);\n}\n\n#[test]\nfn test_empty_tree_root() {\n    assert_eq(compute_empty_tree_root::<0>(), 0);\n\n    assert_eq(\n        compute_empty_tree_root::<1>(),\n        0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1,\n    );\n\n    assert_eq(\n        compute_empty_tree_root::<2>(),\n        0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290,\n    );\n\n    assert_eq(\n        compute_empty_tree_root::<6>(),\n        0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76,\n    );\n\n    assert_eq(\n        compute_empty_tree_root::<10>(),\n        0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686,\n    );\n}\n"
    },
    "389": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/meta/mod.nr",
      "source": "pub use serde::serialization::{derive_deserialize, derive_serialize};\n\npub mod utils;\n\n/// Generates the generic parameter declarations for a struct's trait implementation.\n///\n/// This function takes a struct type definition and generates the generic parameter declarations\n/// that go after the `impl` keyword. For example, given a struct with generics `N: u32` and `T`,\n/// it generates `<let N: u32, T>`.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate generic declarations for\n///\n/// # Returns\n/// A quoted code block containing the generic parameter declarations, or an empty quote if the struct\n/// has no generic parameters\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Container<T, let N: u32> {\n///     items: [T; N],\n///     count: u32\n/// }\n/// ```\n///\n/// This function generates:\n/// ```\n/// <let N: u32, T>\n/// ```\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n    let generics = s.generics();\n\n    if generics.len() > 0 {\n        let generics_declarations_items = generics\n            .map(|(name, maybe_integer_typ)| {\n                // The second item in the generics tuple is an Option of an integer type that is Some only if\n                // the generic is numeric.\n                if maybe_integer_typ.is_some() {\n                    // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n                    let integer_type = maybe_integer_typ.unwrap();\n                    quote {let $name: $integer_type}\n                } else {\n                    // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n                    quote {$name}\n                }\n            })\n            .join(quote {,});\n        quote {<$generics_declarations_items>}\n    } else {\n        // The struct doesn't have any generics defined, so we just return an empty quote.\n        quote {}\n    }\n}\n\n/// Generates the `where` clause for a trait implementation that constrains non-numeric generic type parameters.\n///\n/// This function takes a struct type definition and a trait name, and generates a `where` clause that\n/// requires all non-numeric generic type parameters to implement the specified trait.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the where clause for\n/// - `trait_name`: The name of the trait that non-numeric generic parameters must implement\n///\n/// # Returns\n/// A quoted code block containing the where clause, or an empty quote if the struct has no non-numeric\n/// generic parameters\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Container<T, let N: u32> {\n///     items: [T; N],\n///     count: u32\n/// }\n/// ```\n///\n/// And trait name \"Serialize\", this function generates:\n/// ```\n/// where T: Serialize\n/// ```\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n    let generics = s.generics();\n\n    // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n    // numeric.\n    let non_numeric_generics =\n        generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n    if non_numeric_generics.len() > 0 {\n        let non_numeric_generics_declarations =\n            non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n        quote {where $non_numeric_generics_declarations}\n    } else {\n        // There are no non-numeric generics, so we return an empty quote.\n        quote {}\n    }\n}\n\n/// Generates a [`Packable`](crate::traits::Packable) trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Packable` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n///     x: AztecAddress,\n///     y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Packable for MyStruct {\n///     let N: u32 = 2;\n///\n///     fn pack(self) -> [Field; 2] {\n///         let mut result: [Field; 2] = [0_Field; 2];\n///         let mut offset: u32 = 0_u32;\n///         let packed_member: [Field; 1] = self.x.pack();\n///         let packed_member_len: u32 = <Field as Packable>::N;\n///         for i in 0_u32..packed_member_len {\n///             {\n///                 result[i + offset] = packed_member[i];\n///             }\n///         }\n///         offset = offset + packed_member_len;\n///         let packed_member: [Field; 1] = self.y.pack();\n///         let packed_member_len: u32 = <Field as Packable>::N;\n///         for i in 0_u32..packed_member_len {\n///             {\n///                 result[i + offset] = packed_member[i];\n///             }\n///         }\n///         offset = offset + packed_member_len;\n///         result\n///     }\n///\n///     fn unpack(packed: [Field; 2]) -> Self {\n///         let mut offset: u32 = 0_u32;\n///         let mut member_fields: [Field; 1] = [0_Field; 1];\n///         for i in 0_u32..<AztecAddress as Packable>::N {\n///             member_fields[i] = packed[i + offset];\n///         }\n///         let x: AztecAddress = <AztecAddress as Packable>::unpack(member_fields);\n///         offset = offset + <AztecAddress as Packable>::N;\n///         let mut member_fields: [Field; 1] = [0_Field; 1];\n///         for i in 0_u32..<Field as Packable>::N {\n///             member_fields[i] = packed[i + offset];\n///         }\n///         let y: Field = <Field as Packable>::unpack(member_fields);\n///         offset = offset + <Field as Packable>::N;\n///         Self { x: x, y: y }\n///     }\n/// }\n/// ```\npub comptime fn derive_packable(s: TypeDefinition) -> Quoted {\n    let typ = s.as_type();\n    let nested_struct = typ.as_data_type().unwrap();\n    let params = nested_struct.0.fields(nested_struct.1);\n\n    // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n    // for the `Packable` trait.\n    let generics_declarations = get_generics_declarations(s);\n    let where_packable_clause = get_where_trait_clause(s, quote {Packable});\n\n    // The following will give us:\n    // <type_of_struct_member_1 as Packable>::N + <type_of_struct_member_2 as Packable>::N + ...\n    // (or 0 if the struct has no members)\n    let right_hand_side_of_definition_of_n = if params.len() > 0 {\n        params\n            .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n            <$param_type as $crate::traits::Packable>::N\n        }\n            })\n            .join(quote {+})\n    } else {\n        quote {0}\n    };\n\n    // For structs containing a single member, we can enhance performance by directly returning the packed member,\n    // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n    // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n    // expected to be optimized away.\n    let pack_function_body = if params.len() > 1 {\n        // For multiple struct members, generate packing code that:\n        // 1. Packs each member\n        // 2. Copies the packed fields into the result array at the correct offset\n        // 3. Updates the offset for the next member\n        let packing_of_struct_members = params\n            .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n                    let packed_member = $crate::traits::Packable::pack(self.$param_name);\n                    let packed_member_len = <$param_type as $crate::traits::Packable>::N;\n                    for i in 0..packed_member_len {\n                        result[i + offset] = packed_member[i];\n                    }\n                    offset += packed_member_len;\n                }\n            })\n            .join(quote {});\n\n        quote {\n            let mut result = [0; Self::N];\n            let mut offset = 0;\n\n            $packing_of_struct_members\n\n            result\n        }\n    } else if params.len() == 1 {\n        let param_name = params[0].0;\n        quote {\n            $crate::traits::Packable::pack(self.$param_name)\n        }\n    } else {\n        quote {\n            [0; Self::N]\n        }\n    };\n\n    // For structs containing a single member, we can enhance performance by directly unpacking the input array,\n    // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n    // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n    // expected to be optimized away.\n    let unpack_function_body = if params.len() > 1 {\n        // For multiple struct members, generate unpacking code that:\n        // 1. Unpacks each member\n        // 2. Copies packed fields into member array at correct offset\n        // 3. Updates offset for next member\n        let unpacking_of_struct_members = params\n            .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n                    let mut member_fields = [0; <$param_type as $crate::traits::Packable>::N];\n                    for i in 0..<$param_type as $crate::traits::Packable>::N {\n                        member_fields[i] = packed[i + offset];\n                    }\n                    let $param_name = <$param_type as $crate::traits::Packable>::unpack(member_fields);\n                    offset += <$param_type as $crate::traits::Packable>::N;\n                }\n            })\n            .join(quote {});\n\n        // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n        let struct_members = params\n            .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n            .join(quote {,});\n\n        quote {\n            let mut offset = 0;\n            $unpacking_of_struct_members\n            Self { $struct_members }\n        }\n    } else if params.len() == 1 {\n        let param_name = params[0].0;\n        quote {\n            Self { $param_name: $crate::traits::Packable::unpack(packed) }\n        }\n    } else {\n        quote {\n            Self {}\n        }\n    };\n\n    quote {\n        impl$generics_declarations $crate::traits::Packable for $typ\n            $where_packable_clause\n        {\n            let N: u32 = $right_hand_side_of_definition_of_n;\n\n            #[inline_always]\n            fn pack(self) -> [Field; Self::N] {\n                $pack_function_body\n            }\n\n            #[inline_always]\n            fn unpack(packed: [Field; Self::N]) -> Self {\n                $unpack_function_body\n            }\n        }\n    }\n}\n\nmod test {\n    use crate::traits::{Deserialize, Packable, Serialize};\n\n    #[derive(Deserialize, Eq, Packable, Serialize)]\n    pub struct Empty {}\n\n    #[derive(Deserialize, Eq, Packable, Serialize)]\n    pub struct Smol {\n        a: Field,\n        b: Field,\n    }\n\n    #[derive(Deserialize, Eq, Serialize)]\n    pub struct HasArray {\n        a: [Field; 2],\n        b: bool,\n    }\n\n    #[derive(Deserialize, Eq, Serialize)]\n    pub struct Fancier {\n        a: Smol,\n        b: [Field; 2],\n        c: [u8; 3],\n        d: str<16>,\n    }\n\n    #[derive(Deserialize, Eq, Packable, Serialize)]\n    pub struct HasArrayWithGenerics<T, let N: u32> {\n        pub fields: [T; N],\n        pub length: u32,\n    }\n\n    #[test]\n    fn packable_on_empty() {\n        let original = Empty {};\n        let packed = original.pack();\n        assert_eq(packed, [], \"Packed does not match empty array\");\n        let unpacked = Empty::unpack(packed);\n        assert_eq(unpacked, original, \"Unpacked does not match original\");\n    }\n\n    #[test]\n    fn packable_on_smol() {\n        let smol = Smol { a: 1, b: 2 };\n        let serialized = smol.serialize();\n        assert(serialized == [1, 2], serialized);\n\n        // None of the struct members implements the `Packable` trait so the packed and serialized data should be the same\n        let packed = smol.pack();\n        assert_eq(packed, serialized, \"Packed does not match serialized\");\n    }\n\n    #[test]\n    fn packable_on_contains_array_with_generics() {\n        let struct_with_array_of_generics = HasArrayWithGenerics { fields: [1, 2, 3], length: 3 };\n        let packed = struct_with_array_of_generics.pack();\n        assert(packed == [1, 2, 3, 3], packed);\n\n        let unpacked = HasArrayWithGenerics::unpack(packed);\n        assert(unpacked == struct_with_array_of_generics);\n    }\n\n}\n"
    },
    "390": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/meta/utils.nr",
      "source": "/// Generates serialization code for a list of parameters and the total length of the serialized array\n///\n/// # Parameters\n/// - `params`: A list of (name, type) tuples to serialize\n/// - `use_self_prefix`: If true, parameters are accessed as `self.$param_name` (for struct members).\n///                      If false, parameters are accessed directly as `$param_name` (for function parameters).\n///\n/// # Returns\n/// A tuple containing:\n/// - Quoted code that serializes the parameters into an array named `serialized_params`\n/// - Quoted code that evaluates to the total length of the serialized array\n/// - Quoted code containing the name of the serialized array\npub comptime fn derive_serialization_quotes(\n    params: [(Quoted, Type)],\n    use_self_prefix: bool,\n) -> (Quoted, Quoted, Quoted) {\n    let prefix_quote = if use_self_prefix {\n        quote { self. }\n    } else {\n        quote {}\n    };\n\n    let params_len_quote = get_params_len_quote(params);\n    let serialized_params_name = quote { serialized_params };\n\n    let body = if params.len() == 0 {\n        quote {\n            let $serialized_params_name: [Field; 0] = [];\n        }\n    } else if params.len() == 1 {\n        // When we have only a single parameter on the input, we can enhance performance by directly returning\n        // the serialized member, bypassing the need for loop-based array construction. While this optimization yields\n        // significant benefits in Brillig where the loops are expected to not be optimized, it is not relevant in ACIR\n        // where the loops are expected to be optimized away.\n\n        let param_name = params[0].0;\n        quote {\n            let $serialized_params_name = $crate::traits::Serialize::serialize($prefix_quote$param_name);\n        }\n    } else {\n        // For multiple struct members, generate serialization code that:\n        // 1. Serializes each member\n        // 2. Copies the serialized fields into the serialize array at the correct offset\n        // 3. Updates the offset for the next member\n        let serialization_of_struct_members = params\n            .map(|(param_name, param_type): (Quoted, Type)| {\n                quote {\n                let serialized_member = $crate::traits::Serialize::serialize($prefix_quote$param_name);\n                let serialized_member_len = <$param_type as $crate::traits::Serialize>::N;\n                for i in 0..serialized_member_len {\n                    $serialized_params_name[i + offset] = serialized_member[i];\n                }\n                offset += serialized_member_len;\n            }\n            })\n            .join(quote {});\n\n        quote {\n            let mut $serialized_params_name = [0; $params_len_quote];\n            let mut offset = 0;\n\n            $serialization_of_struct_members\n        }\n    };\n\n    (body, params_len_quote, serialized_params_name)\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n///              to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\npub comptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n    if params.len() == 0 {\n        quote { 0 }\n    } else {\n        let params_quote_without_parentheses = params\n            .map(|(_, param_type): (Quoted, Type)| {\n                quote {\n                    <$param_type as $crate::traits::Serialize>::N\n                }\n            })\n            .join(quote {+});\n        quote { ($params_quote_without_parentheses) }\n    }\n}\n"
    },
    "391": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/point.nr",
      "source": "pub use std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{hash::poseidon2_hash, traits::{Deserialize, Empty, Hash, Packable, Serialize}};\n\npub global POINT_LENGTH: u32 = 3;\n\nimpl Hash for Point {\n    fn hash(self) -> Field {\n        poseidon2_hash(self.serialize())\n    }\n}\n\nimpl Empty for Point {\n    /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n    /// empty/unpopulated value in an array of points).\n    fn empty() -> Self {\n        Point { x: 0, y: 0, is_infinite: false }\n    }\n}\n\npub fn validate_on_curve(p: Point) {\n    // y^2 == x^3 - 17\n    let x = p.x;\n    let y = p.y;\n    if p.is_infinite {\n        // Assert the canonical representation of infinity\n        assert_eq(x, 0, \"Point at infinity should have canonical representation (0 0)\");\n        assert_eq(y, 0, \"Point at infinity should have canonical representation (0 0)\");\n    } else {\n        assert_eq(y * y, x * x * x - 17, \"Point not on curve\");\n    }\n}\n\n// TODO(#11356): use compact representation here.\nimpl Packable for Point {\n    let N: u32 = POINT_LENGTH;\n\n    fn pack(self) -> [Field; Self::N] {\n        self.serialize()\n    }\n\n    fn unpack(packed: [Field; Self::N]) -> Self {\n        Self::deserialize(packed)\n    }\n}\n\nmod tests {\n    use super::validate_on_curve;\n    use std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\n    #[test]\n    unconstrained fn test_validate_on_curve_generator() {\n        // The generator point should be on the curve\n        let generator = Point::generator();\n        validate_on_curve(generator);\n    }\n\n    #[test]\n    unconstrained fn test_validate_on_curve_infinity() {\n        // Canonical infinite point (x=0, y=0) should pass\n        let infinity = Point { x: 0, y: 0, is_infinite: true };\n        validate_on_curve(infinity);\n    }\n\n    #[test(should_fail_with = \"Point not on curve\")]\n    unconstrained fn test_validate_on_curve_invalid_point() {\n        // A point not on the curve should fail\n        let invalid = Point { x: 1, y: 1, is_infinite: false };\n        validate_on_curve(invalid);\n    }\n\n    #[test(should_fail_with = \"Point at infinity should have canonical representation (0 0)\")]\n    unconstrained fn test_validate_on_curve_infinity_non_canonical_x() {\n        // Infinite point with non-zero x should fail\n        let invalid_infinity = Point { x: 1, y: 0, is_infinite: true };\n        validate_on_curve(invalid_infinity);\n    }\n\n    #[test(should_fail_with = \"Point at infinity should have canonical representation (0 0)\")]\n    unconstrained fn test_validate_on_curve_infinity_non_canonical_y() {\n        // Infinite point with non-zero y should fail\n        let invalid_infinity = Point { x: 0, y: 1, is_infinite: true };\n        validate_on_curve(invalid_infinity);\n    }\n}\n"
    },
    "392": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
      "source": "use crate::constants::TWO_POW_64;\nuse crate::traits::{Deserialize, Serialize};\nuse std::meta::derive;\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\n#[derive(Deserialize, Eq, Serialize)]\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        sponge.squeeze()\n    }\n}\n"
    },
    "399": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
      "source": "use crate::{\n    address::public_keys_hash::PublicKeysHash,\n    constants::{\n        DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n        DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, DOM_SEP__PUBLIC_KEYS_HASH,\n    },\n    hash::poseidon2_hash_with_separator,\n    point::validate_on_curve,\n    traits::{Deserialize, Hash, Serialize},\n};\n\nuse std::{default::Default, meta::derive};\nuse std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\npub trait ToPoint {\n    fn to_point(self) -> Point;\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct NpkM {\n    pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n    fn to_point(self) -> Point {\n        self.inner\n    }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n    fn hash(self) -> Field {\n        self.inner.hash()\n    }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct IvpkM {\n    pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n    fn to_point(self) -> Point {\n        self.inner\n    }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct OvpkM {\n    pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n    fn hash(self) -> Field {\n        self.inner.hash()\n    }\n}\n\nimpl ToPoint for OvpkM {\n    fn to_point(self) -> Point {\n        self.inner\n    }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct TpkM {\n    pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n    fn to_point(self) -> Point {\n        self.inner\n    }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct PublicKeys {\n    pub npk_m: NpkM,\n    pub ivpk_m: IvpkM,\n    pub ovpk_m: OvpkM,\n    pub tpk_m: TpkM,\n}\n\nimpl Default for PublicKeys {\n    fn default() -> Self {\n        PublicKeys {\n            npk_m: NpkM {\n                inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n            },\n            ivpk_m: IvpkM {\n                inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n            },\n            ovpk_m: OvpkM {\n                inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n            },\n            tpk_m: TpkM {\n                inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n            },\n        }\n    }\n}\n\nimpl PublicKeys {\n    pub fn hash(self) -> PublicKeysHash {\n        PublicKeysHash::from_field(poseidon2_hash_with_separator(\n            self.serialize(),\n            DOM_SEP__PUBLIC_KEYS_HASH as Field,\n        ))\n    }\n\n    pub fn validate_on_curve(self) {\n        validate_on_curve(self.npk_m.inner);\n        validate_on_curve(self.ivpk_m.inner);\n        validate_on_curve(self.ovpk_m.inner);\n        validate_on_curve(self.tpk_m.inner);\n    }\n}\n\npub struct AddressPoint {\n    pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n    fn to_point(self) -> Point {\n        self.inner\n    }\n}\n\nmod test {\n    use crate::{\n        point::POINT_LENGTH,\n        public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n        traits::{Deserialize, Serialize},\n    };\n    use std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\n    #[test]\n    unconstrained fn compute_public_keys_hash() {\n        let keys = PublicKeys {\n            npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n            ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n            ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n            tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n        };\n\n        let actual = keys.hash();\n\n        // The following value was generated by `public_keys.test.ts`.\n        let expected_public_keys_hash =\n            0x056998309f6c119e4d753e404f94fef859dddfa530a9379634ceb0854b29bf7a;\n\n        assert(actual.to_field() == expected_public_keys_hash);\n    }\n\n    #[test]\n    unconstrained fn compute_default_hash() {\n        let keys = PublicKeys::default();\n\n        let actual = keys.hash();\n\n        // The following value was generated by `public_keys.test.ts`.\n        let test_data_default_hash =\n            0x023547e676dba19784188825b901a0e70d8ad978300d21d6185a54281b734da0;\n\n        assert(actual.to_field() == test_data_default_hash);\n    }\n\n    #[test]\n    unconstrained fn serde() {\n        let keys = PublicKeys {\n            npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n            ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n            ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n            tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n        };\n\n        // We use the PUBLIC_KEYS_LENGTH constant to ensure that there is a match between the derived trait\n        let serialized: [Field; POINT_LENGTH * 4] = keys.serialize();\n        let deserialized = PublicKeys::deserialize(serialized);\n\n        assert_eq(keys, deserialized);\n    }\n}\n"
    },
    "411": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/traits/to_field.nr",
      "source": "use crate::utils::field::field_from_bytes;\n\npub trait ToField {\n    fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self\n    }\n}\n\nimpl ToField for bool {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u1 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u8 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u16 {\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u32 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u64 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u128 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl<let N: u32> ToField for str<N> {\n    #[inline_always]\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"
    },
    "412": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/type_packing.nr",
      "source": "use crate::traits::Packable;\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 for bool {\n    let N: u32 = BOOL_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> bool {\n        (fields[0] as u1) != 0\n    }\n}\n\nimpl Packable for u8 {\n    let N: u32 = U8_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u8\n    }\n}\n\nimpl Packable for u16 {\n    let N: u32 = U16_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u16\n    }\n}\n\nimpl Packable for u32 {\n    let N: u32 = U32_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u32\n    }\n}\n\nimpl Packable for u64 {\n    let N: u32 = U64_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u64\n    }\n}\n\nimpl Packable for u128 {\n    let N: u32 = U128_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u128\n    }\n}\n\nimpl Packable for Field {\n    let N: u32 = FIELD_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0]\n    }\n}\n\nimpl Packable for i8 {\n    let N: u32 = I8_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as u8 as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u8 as i8\n    }\n}\n\nimpl Packable for i16 {\n    let N: u32 = I16_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as u16 as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u16 as i16\n    }\n}\n\nimpl Packable for i32 {\n    let N: u32 = I32_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as u32 as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u32 as i32\n    }\n}\n\nimpl Packable for i64 {\n    let N: u32 = I64_PACKED_LEN;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        [self as u64 as Field]\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        fields[0] as u64 as i64\n    }\n}\n\nimpl<T, let M: u32> Packable for [T; M]\nwhere\n    T: Packable,\n{\n    let N: u32 = M * <T as Packable>::N;\n\n    #[inline_always]\n    fn pack(self) -> [Field; Self::N] {\n        let mut result: [Field; Self::N] = std::mem::zeroed();\n        for i in 0..M {\n            let serialized = self[i].pack();\n            for j in 0..<T as Packable>::N {\n                result[i * <T as Packable>::N + j] = serialized[j];\n            }\n        }\n        result\n    }\n\n    #[inline_always]\n    fn unpack(fields: [Field; Self::N]) -> Self {\n        let mut reader = crate::utils::reader::Reader::new(fields);\n        let mut result: [T; M] = std::mem::zeroed();\n        reader.read_struct_array::<T, <T as Packable>::N, M>(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"
    },
    "419": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr",
      "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// TODO: write doc-comments and tests for these magic constants.\n\nglobal KNOWN_NON_RESIDUE: Field = 5; // This is a non-residue in Noir's native Field.\nglobal C1: u32 = 28;\nglobal C3: Field = 40770029410420498293352137776570907027550720424234931066070132305055;\nglobal C5: Field = 19103219067921713944291392827692070036145651957329286315305642004821462161904;\n\n// @dev: only use this for _huge_ exponents y, when writing a constrained function.\n// If you're only exponentiating by a small value, first consider writing-out the multiplications by hand.\n// Only after you've measured the gates of that approach, consider using the native Field::pow_32 function.\n// Only if your exponent is larger than 32 bits, resort to using this function.\npub fn pow(x: Field, y: Field) -> Field {\n    let mut r = 1 as Field;\n    let b: [u1; 254] = y.to_le_bits();\n\n    for i in 0..254 {\n        r *= r;\n        r *= (b[254 - 1 - i] as Field) * x + (1 - b[254 - 1 - i] as Field);\n    }\n\n    r\n}\n\n/// Returns Option::some(sqrt) if there is a square root, and Option::none() if there isn't.\npub fn sqrt(x: Field) -> Option<Field> {\n    // Safety: if the hint returns the square root of x, then we simply square it\n    // check the result equals x. If x is not square, we return a value that\n    // enables us to prove that fact (see the `else` clause below).\n    let (is_sq, maybe_sqrt) = unsafe { __sqrt(x) };\n\n    if is_sq {\n        let sqrt = maybe_sqrt;\n        validate_sqrt_hint(x, sqrt);\n        Option::some(sqrt)\n    } else {\n        let not_sqrt_hint = maybe_sqrt;\n        validate_not_sqrt_hint(x, not_sqrt_hint);\n        Option::none()\n    }\n}\n\n// Boolean indicating whether Field element is a square, i.e. whether there exists a y in Field s.t. x = y*y.\nunconstrained fn is_square(x: Field) -> bool {\n    let v = pow(x, -1 / 2);\n    v * (v - 1) == 0\n}\n\n// Tonelli-Shanks algorithm for computing the square root of a Field element.\n// Requires C1 = max{c: 2^c divides (p-1)}, where p is the order of Field\n// as well as C3 = (C2 - 1)/2, where C2 = (p-1)/(2^c1),\n// and C5 = ZETA^C2, where ZETA is a non-square element of Field.\n// These are pre-computed above as globals.\nunconstrained fn tonelli_shanks_sqrt(x: Field) -> Field {\n    let mut z = pow(x, C3);\n    let mut t = z * z * x;\n    z *= x;\n    let mut b = t;\n    let mut c = C5;\n\n    for i in 0..(C1 - 1) {\n        for _j in 1..(C1 - i - 1) {\n            b *= b;\n        }\n\n        z *= if b == 1 { 1 } else { c };\n\n        c *= c;\n\n        t *= if b == 1 { 1 } else { c };\n\n        b = t;\n    }\n\n    z\n}\n\n// NB: this doesn't return an option, because in the case of there _not_ being a square root, we still want to return a field element that allows us to then assert in the _constrained_ sqrt function that there is no sqrt.\nunconstrained fn __sqrt(x: Field) -> (bool, Field) {\n    let is_sq = is_square(x);\n    if is_sq {\n        let sqrt = tonelli_shanks_sqrt(x);\n        (true, sqrt)\n    } else {\n        // Demonstrate that x is not a square (a.k.a. a \"quadratic non-residue\").\n        // Facts:\n        // The Legendre symbol (\"LS\") of x, is x^((p-1)/2) (mod p).\n        // - If x is a square, LS(x) = 1\n        // - If x is not a square, LS(x) = -1\n        // - If x = 0, LS(x) = 0.\n        //\n        // Hence:\n        // sq * sq = sq // 1 * 1 = 1\n        // non-sq * non-sq = sq // -1 * -1 = 1\n        // sq * non-sq = non-sq // -1 * 1 = -1\n        //\n        // See: https://en.wikipedia.org/wiki/Legendre_symbol\n        let demo_x_not_square = x * KNOWN_NON_RESIDUE;\n        let not_sqrt = tonelli_shanks_sqrt(demo_x_not_square);\n        (false, not_sqrt)\n    }\n}\n\nfn validate_sqrt_hint(x: Field, hint: Field) {\n    assert(hint * hint == x, f\"The claimed_sqrt {hint} is not the sqrt of x {x}\");\n}\n\nfn validate_not_sqrt_hint(x: Field, hint: Field) {\n    // We need this assertion, because x = 0 would pass the other assertions in this\n    // function, and we don't want people to be able to prove that 0 is not square!\n    assert(x != 0, \"0 has a square root; you cannot claim it is not square\");\n    // Demonstrate that x is not a square (a.k.a. a \"quadratic non-residue\").\n    //\n    // Facts:\n    // The Legendre symbol (\"LS\") of x, is x^((p-1)/2) (mod p).\n    // - If x is a square, LS(x) = 1\n    // - If x is not a square, LS(x) = -1\n    // - If x = 0, LS(x) = 0.\n    //\n    // Hence:\n    // 1. sq * sq = sq // 1 * 1 = 1\n    // 2. non-sq * non-sq = sq // -1 * -1 = 1\n    // 3. sq * non-sq = non-sq // -1 * 1 = -1\n    //\n    // See: https://en.wikipedia.org/wiki/Legendre_symbol\n    //\n    // We want to demonstrate that this below multiplication falls under bullet-point (2):\n    let demo_x_not_square = x * KNOWN_NON_RESIDUE;\n    // I.e. we want to demonstrate that `demo_x_not_square` has Legendre symbol 1\n    // (i.e. that it is a square), so we prove that it is square below.\n    // Why do we want to prove that it has LS 1?\n    // Well, since it was computed with a known-non-residue, its squareness implies we're\n    // in case 2 (something multiplied by a known-non-residue yielding a result which\n    // has a LS of 1), which implies that x must be a non-square. The unconstrained\n    // function gave us the sqrt of demo_x_not_square, so all we need to do is\n    // assert its squareness:\n    assert(\n        hint * hint == demo_x_not_square,\n        f\"The hint {hint} does not demonstrate that {x} is not a square\",\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] = field2.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\n#[test]\nunconstrained fn sqrt_valid_test() {\n    let x = 16; // examples: 16, 9, 25, 81\n    let result = sqrt(x);\n    assert(result.is_some());\n    assert_eq(result.unwrap() * result.unwrap(), x);\n}\n\n#[test]\nunconstrained fn sqrt_invalid_test() {\n    let x = KNOWN_NON_RESIDUE; // has no square root in the field\n    let result = sqrt(x);\n    assert(result.is_none());\n}\n\n#[test]\nunconstrained fn sqrt_zero_test() {\n    let result = sqrt(0);\n    assert(result.is_some());\n    assert_eq(result.unwrap(), 0);\n}\n\n#[test]\nunconstrained fn sqrt_one_test() {\n    let result = sqrt(1);\n    assert(result.is_some());\n    assert_eq(result.unwrap() * result.unwrap(), 1);\n}\n\n#[test]\nunconstrained fn field_from_bytes_empty_test() {\n    let empty: [u8; 0] = [];\n    let result = field_from_bytes(empty, true);\n    assert_eq(result, 0);\n\n    let result_le = field_from_bytes(empty, false);\n    assert_eq(result_le, 0);\n}\n\n#[test]\nunconstrained fn field_from_bytes_little_endian_test() {\n    // Test little-endian conversion: [0x01, 0x02] should be 0x0201 = 513\n    let bytes = [0x01, 0x02];\n    let result_le = field_from_bytes(bytes, false);\n    assert_eq(result_le, 0x0201);\n\n    // Compare with big-endian: [0x01, 0x02] should be 0x0102 = 258\n    let result_be = field_from_bytes(bytes, true);\n    assert_eq(result_be, 0x0102);\n}\n\n#[test]\nunconstrained fn pow_test() {\n    assert_eq(pow(2, 0), 1);\n    assert_eq(pow(2, 1), 2);\n    assert_eq(pow(2, 10), 1024);\n    assert_eq(pow(3, 5), 243);\n    assert_eq(pow(0, 5), 0);\n    assert_eq(pow(1, 100), 1);\n}\n\n#[test]\nunconstrained fn min_test() {\n    assert_eq(min(5, 10), 5);\n    assert_eq(min(10, 5), 5);\n    assert_eq(min(7, 7), 7);\n    assert_eq(min(0, 1), 0);\n}\n\n#[test]\nunconstrained fn full_field_comparison_test() {\n    assert(full_field_less_than(5, 10));\n    assert(!full_field_less_than(10, 5));\n    assert(!full_field_less_than(5, 5));\n\n    assert(full_field_greater_than(10, 5));\n    assert(!full_field_greater_than(5, 10));\n    assert(!full_field_greater_than(5, 5));\n}\n\n#[test]\nunconstrained fn sqrt_has_two_roots_test() {\n    // Every square has two roots: r and -r (i.e., p - r)\n    // sqrt(16) can return 4 or -4\n    let x = 16;\n    let result = sqrt(x).unwrap();\n    assert(result * result == x);\n    // The other root is -result\n    let other_root = 0 - result;\n    assert(other_root * other_root == x);\n    // Verify they are different (unless x = 0)\n    assert(result != other_root);\n\n    // Same for 9: roots are 3 and -3\n    let y = 9;\n    let result_y = sqrt(y).unwrap();\n    assert(result_y * result_y == y);\n    let other_root_y = 0 - result_y;\n    assert(other_root_y * other_root_y == y);\n    assert(result_y != other_root_y);\n}\n\n#[test]\nunconstrained fn sqrt_negative_one_test() {\n    let x = 0 - 1;\n    let result = sqrt(x);\n    assert(result.unwrap() == 0x30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f703636);\n}\n\n#[test]\nunconstrained fn validate_sqrt_hint_valid_test() {\n    // 4 is a valid sqrt of 16\n    validate_sqrt_hint(16, 4);\n    // -4 is also a valid sqrt of 16\n    validate_sqrt_hint(16, 0 - 4);\n    // 0 is a valid sqrt of 0\n    validate_sqrt_hint(0, 0);\n    // 1 is a valid sqrt of 1\n    validate_sqrt_hint(1, 1);\n    // -1 is also a valid sqrt of 1\n    validate_sqrt_hint(1, 0 - 1);\n}\n\n#[test(should_fail_with = \"is not the sqrt of x\")]\nunconstrained fn validate_sqrt_hint_invalid_test() {\n    // 5 is not a valid sqrt of 16\n    validate_sqrt_hint(16, 5);\n}\n\n#[test]\nunconstrained fn validate_not_sqrt_hint_valid_test() {\n    // 5 (KNOWN_NON_RESIDUE) is not a square.\n    let x = KNOWN_NON_RESIDUE;\n    let hint = tonelli_shanks_sqrt(x * KNOWN_NON_RESIDUE);\n    validate_not_sqrt_hint(x, hint);\n}\n\n#[test(should_fail_with = \"0 has a square root\")]\nunconstrained fn validate_not_sqrt_hint_zero_test() {\n    // 0 has a square root, so we cannot claim it is not square\n    validate_not_sqrt_hint(0, 0);\n}\n\n#[test(should_fail_with = \"does not demonstrate that\")]\nunconstrained fn validate_not_sqrt_hint_wrong_hint_test() {\n    // Provide a wrong hint for a non-square\n    let x = KNOWN_NON_RESIDUE;\n    validate_not_sqrt_hint(x, 123);\n}\n"
    },
    "425": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/reader.nr",
      "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_u64(&mut self) -> u64 {\n        self.read() as u64\n    }\n\n    pub fn read_bool(&mut self) -> bool {\n        self.read() != 0\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 peek_offset(&mut self, offset: u32) -> Field {\n        self.data[self.offset + offset]\n    }\n\n    pub fn advance_offset(&mut self, offset: u32) {\n        self.offset += offset;\n    }\n\n    pub fn finish(self) {\n        assert_eq(self.offset, self.data.len(), \"Reader did not read all data\");\n    }\n}\n"
    },
    "426": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/serialization.nr",
      "source": "use crate::{reader::Reader, writer::Writer};\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/// # Associated Constants\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize for str<N> {\n///     let N: u32 = N;\n///\n///     fn serialize(self) -> [Field; Self::N] {\n///         let mut writer: Writer<Self::N> = Writer::new();\n///         self.stream_serialize(&mut writer);\n///         writer.finish()\n///     }\n///\n///     fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n///         let bytes = self.as_bytes();\n///         for i in 0..bytes.len() {\n///             writer.write(bytes[i] as Field);\n///         }\n///     }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize {\n    let N: u32;\n\n    fn serialize(self) -> [Field; Self::N];\n\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);\n}\n\n/// Generates a `Serialize` trait implementation for a struct type.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A quoted code block containing the trait implementation\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Log<N> {\n///     fields: [Field; N],\n///     length: u32\n/// }\n/// ```\n///\n/// This function generates code equivalent to:\n/// ```\n/// impl<let N: u32> Serialize for Log<N> {\n///     let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;\n///\n///     fn serialize(self) -> [Field; Self::N] {\n///         let mut writer: Writer<Self::N> = Writer::new();\n///         self.stream_serialize(&mut writer);\n///         writer.finish()\n///     }\n///\n///     #[inline_always]\n///     fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n///         Serialize::stream_serialize(self.fields, writer);\n///         Serialize::stream_serialize(self.length, writer);\n///     }\n/// }\n/// ```\npub comptime fn derive_serialize(s: TypeDefinition) -> Quoted {\n    let typ = s.as_type();\n    let nested_struct = typ.as_data_type().unwrap();\n\n    // We care only about the name and type so we drop the last item of the tuple\n    let params = nested_struct.0.fields(nested_struct.1).map(|(name, typ, _)| (name, typ));\n\n    // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n    // for the `Serialize` trait.\n    let generics_declarations = get_generics_declarations(s);\n    let where_serialize_clause = get_where_trait_clause(s, quote {Serialize});\n\n    let params_len_quote = get_params_len_quote(params);\n\n    let function_body = params\n        .map(|(name, _typ): (Quoted, Type)| {\n            quote {\n                $crate::serialization::Serialize::stream_serialize(self.$name, writer);\n            }\n        })\n        .join(quote {});\n\n    quote {\n        impl$generics_declarations $crate::serialization::Serialize for $typ\n            $where_serialize_clause\n        {\n            let N: u32 = $params_len_quote;\n\n\n            fn serialize(self) -> [Field; Self::N] {\n                let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n                $crate::serialization::Serialize::stream_serialize(self, &mut writer);\n                writer.finish()\n            }\n\n\n            #[inline_always]\n             fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n                $function_body\n            }\n        }\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/// # Associated Constants\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let M: u32> Deserialize for str<M> {\n///     let N: u32 = M;\n///\n///     fn deserialize(fields: [Field; Self::N]) -> Self {\n///         let mut reader = Reader::new(fields);\n///         let result = Self::stream_deserialize(&mut reader);\n///         reader.finish();\n///         result\n///     }\n///\n///     fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n///         let mut bytes = [0 as u8; M];\n///         for i in 0..M {\n///             bytes[i] = reader.read() as u8;\n///         }\n///         str::<M>::from(bytes)\n///     }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize {\n    let N: u32;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self;\n\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;\n}\n\n/// Generates a `Deserialize` trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Deserialize` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n///     x: AztecAddress,\n///     y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Deserialize for MyStruct {\n///     let N: u32 = <AztecAddress as Deserialize>::N + <Field as Deserialize>::N;\n///\n///     fn deserialize(fields: [Field; Self::N]) -> Self {\n///         let mut reader = Reader::new(fields);\n///         let result = Self::stream_deserialize(&mut reader);\n///         reader.finish();\n///         result\n///     }\n///\n///     #[inline_always]\n///     fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n///         let x = <AztecAddress as Deserialize>::stream_deserialize(reader);\n///         let y = <Field as Deserialize>::stream_deserialize(reader);\n///         Self { x, y }\n///     }\n/// }\n/// ```\npub comptime fn derive_deserialize(s: TypeDefinition) -> Quoted {\n    let typ = s.as_type();\n    let nested_struct = typ.as_data_type().unwrap();\n    let params = nested_struct.0.fields(nested_struct.1);\n\n    // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n    // for the `Deserialize` trait.\n    let generics_declarations = get_generics_declarations(s);\n    let where_deserialize_clause = get_where_trait_clause(s, quote {Deserialize});\n\n    // The following will give us:\n    // <type_of_struct_member_1 as Deserialize>::N + <type_of_struct_member_2 as Deserialize>::N + ...\n    // (or 0 if the struct has no members)\n    let right_hand_side_of_definition_of_n = if params.len() > 0 {\n        params\n            .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n            <$param_type as $crate::serialization::Deserialize>::N\n        }\n            })\n            .join(quote {+})\n    } else {\n        quote {0}\n    };\n\n    // For structs containing a single member, we can enhance performance by directly deserializing the input array,\n    // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n    // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n    // expected to be optimized away.\n    let function_body = if params.len() > 1 {\n        // This generates deserialization code for each struct member and concatenates them together.\n        let deserialization_of_struct_members = params\n            .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n                    let $param_name = <$param_type as Deserialize>::stream_deserialize(reader);\n                }\n            })\n            .join(quote {});\n\n        // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n        // This will give us e.g. `a, b, c` for a struct with three fields named `a`, `b`, and `c`.\n        let struct_members = params\n            .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n            .join(quote {,});\n\n        quote {\n            $deserialization_of_struct_members\n\n            Self { $struct_members }\n        }\n    } else if params.len() == 1 {\n        let param_name = params[0].0;\n        quote {\n            Self { $param_name: $crate::serialization::Deserialize::stream_deserialize(reader) }\n        }\n    } else {\n        quote {\n            Self {}\n        }\n    };\n\n    quote {\n        impl$generics_declarations $crate::serialization::Deserialize for $typ\n            $where_deserialize_clause\n        {\n            let N: u32 = $right_hand_side_of_definition_of_n;\n\n            fn deserialize(fields: [Field; Self::N]) -> Self {\n                let mut reader = $crate::reader::Reader::new(fields);\n                let result = Self::stream_deserialize(&mut reader);\n                reader.finish();\n                result\n            }\n\n            #[inline_always]\n            fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n                $function_body\n            }\n        }\n    }\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n///              to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\ncomptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n    if params.len() == 0 {\n        quote { 0 }\n    } else {\n        let params_quote_without_parentheses = params\n            .map(|(_, param_type): (Quoted, Type)| {\n                quote {\n                    <$param_type as $crate::serialization::Serialize>::N\n                }\n            })\n            .join(quote {+});\n        quote { ($params_quote_without_parentheses) }\n    }\n}\n\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n    let generics = s.generics();\n\n    if generics.len() > 0 {\n        let generics_declarations_items = generics\n            .map(|(name, maybe_integer_typ)| {\n                // The second item in the generics tuple is an Option of an integer type that is Some only if\n                // the generic is numeric.\n                if maybe_integer_typ.is_some() {\n                    // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n                    let integer_type = maybe_integer_typ.unwrap();\n                    quote {let $name: $integer_type}\n                } else {\n                    // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n                    quote {$name}\n                }\n            })\n            .join(quote {,});\n        quote {<$generics_declarations_items>}\n    } else {\n        // The struct doesn't have any generics defined, so we just return an empty quote.\n        quote {}\n    }\n}\n\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n    let generics = s.generics();\n\n    // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n    // numeric.\n    let non_numeric_generics =\n        generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n    if non_numeric_generics.len() > 0 {\n        let non_numeric_generics_declarations =\n            non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n        quote {where $non_numeric_generics_declarations}\n    } else {\n        // There are no non-numeric generics, so we return an empty quote.\n        quote {}\n    }\n}\n"
    },
    "428": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/type_impls.nr",
      "source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\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 = 1;\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 for bool {\n    let N: u32 = BOOL_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for bool {\n    let N: u32 = BOOL_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n        reader.read() != 0\n    }\n}\n\nimpl Serialize for u1 {\n    let N: u32 = U1_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u1 {\n    let N: u32 = U1_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u1\n    }\n}\n\nimpl Serialize for u8 {\n    let N: u32 = U8_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u8 {\n    let N: u32 = U8_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u8\n    }\n}\n\nimpl Serialize for u16 {\n    let N: u32 = U16_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u16 {\n    let N: u32 = U16_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u16\n    }\n}\n\nimpl Serialize for u32 {\n    let N: u32 = U32_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u32 {\n    let N: u32 = U32_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u32\n    }\n}\n\nimpl Serialize for u64 {\n    let N: u32 = U64_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u64 {\n    let N: u32 = U64_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u64\n    }\n}\n\nimpl Serialize for u128 {\n    let N: u32 = U128_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u128 {\n    let N: u32 = U128_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u128\n    }\n}\n\nimpl Serialize for Field {\n    let N: u32 = FIELD_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self);\n    }\n}\n\nimpl Deserialize for Field {\n    let N: u32 = FIELD_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read()\n    }\n}\n\nimpl Serialize for i8 {\n    let N: u32 = I8_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u8 as Field);\n    }\n}\n\nimpl Deserialize for i8 {\n    let N: u32 = I8_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u8 as i8\n    }\n}\n\nimpl Serialize for i16 {\n    let N: u32 = I16_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u16 as Field);\n    }\n}\n\nimpl Deserialize for i16 {\n    let N: u32 = I16_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u16 as i16\n    }\n}\n\nimpl Serialize for i32 {\n    let N: u32 = I32_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u32 as Field);\n    }\n}\n\nimpl Deserialize for i32 {\n    let N: u32 = I32_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u32 as i32\n    }\n}\n\nimpl Serialize for i64 {\n    let N: u32 = I64_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u64 as Field);\n    }\n}\n\nimpl Deserialize for i64 {\n    let N: u32 = I64_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u64 as i64\n    }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N * M;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        for i in 0..M {\n            self[i].stream_serialize(writer);\n        }\n    }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N * M;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let mut result: [T; M] = std::mem::zeroed();\n        for i in 0..M {\n            result[i] = T::stream_deserialize(reader);\n        }\n        result\n    }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N + 1;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write_bool(self.is_some());\n        if self.is_some() {\n            self.unwrap_unchecked().stream_serialize(writer);\n        } else {\n            writer.advance_offset(<T as Serialize>::N);\n        }\n    }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N + 1;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        if reader.read_bool() {\n            Option::some(<T as Deserialize>::stream_deserialize(reader))\n        } else {\n            reader.advance_offset(<T as Deserialize>::N);\n            Option::none()\n        }\n    }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n    let N: u32 = SCALAR_SIZE;\n\n    fn serialize(self) -> [Field; SCALAR_SIZE] {\n        [self.lo, self.hi]\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self.lo);\n        writer.write(self.hi);\n    }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n    let N: u32 = SCALAR_SIZE;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        Self { lo: fields[0], hi: fields[1] }\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        Self { lo: reader.read(), hi: reader.read() }\n    }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n    let N: u32 = POINT_SIZE;\n\n    fn serialize(self) -> [Field; Self::N] {\n        [self.x, self.y, self.is_infinite as Field]\n    }\n\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self.x);\n        writer.write(self.y);\n        writer.write(self.is_infinite as Field);\n    }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n    let N: u32 = POINT_SIZE;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n    }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n    let N: u32 = M;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n        str::<Self::N>::from(u8_arr)\n    }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n    let N: u32 = M;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.as_bytes().stream_serialize(writer);\n    }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N * M + 1;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n        let payload_len = Self::N - 1;\n\n        // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n        // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n        let len = reader.peek_offset(payload_len) as u32;\n\n        for i in 0..M {\n            if i < len {\n                new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n            }\n        }\n\n        // +1 for the length of the BoundedVec\n        reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n        new_bounded_vec\n    }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n    let N: u32 = 0;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n        ()\n    }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.storage().stream_serialize(writer);\n        // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n        // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n        writer.write_u32(self.len() as u32);\n    }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n    let mut slice = @[];\n    for i in 0..length {\n        slice = slice.push_back(f(i));\n    }\n    slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n    // `T0`, `T1`, `T2`\n    let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n    // `result0`, `result1`, `result2`\n    let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n    // `T0, T1, T2`\n    let field_generics = type_names.join(quote [,]);\n\n    // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n    let full_size_serialize = type_names\n        .map(|type_name| quote {\n        <$type_name as Serialize>::N\n    })\n        .join(quote [+]);\n\n    // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n    let full_size_deserialize = type_names\n        .map(|type_name| quote {\n        <$type_name as Deserialize>::N\n    })\n        .join(quote [+]);\n\n    // `T0: Serialize, T1: Serialize, T2: Serialize,`\n    let serialize_constraints = type_names\n        .map(|field_name| quote {\n        $field_name: Serialize,\n    })\n        .join(quote []);\n\n    // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n    let deserialize_constraints = type_names\n        .map(|field_name| quote {\n        $field_name: Deserialize,\n    })\n        .join(quote []);\n\n    // Statements to serialize each field\n    let serialized_fields = type_names\n        .mapi(|i, _type_name| quote {\n            $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n    })\n        .join(quote []);\n\n    // Statements to deserialize each field\n    let deserialized_fields = type_names\n        .mapi(|i, type_name| {\n            let result_name = result_names[i];\n            quote {\n            let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n        }\n        })\n        .join(quote []);\n    let deserialize_results = result_names.join(quote [,]);\n\n    quote {\n        impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n            let N: u32 = $full_size_serialize;\n\n            fn serialize(self) -> [Field; Self::N] {\n                let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n                self.stream_serialize(&mut writer);\n                writer.finish()\n            }\n\n            #[inline_always]\n            fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n                $serialized_fields\n            }\n        }\n\n        impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n            let N: u32 = $full_size_deserialize;\n\n            fn deserialize(fields: [Field; Self::N]) -> Self {\n                let mut reader = $crate::reader::Reader::new(fields);\n                let result = Self::stream_deserialize(&mut reader);\n                reader.finish();\n                result\n            }\n    \n            #[inline_always]\n            fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n                $deserialized_fields\n                ($deserialize_results)\n            }\n        }\n    }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n    T1: Serialize,\n{\n    let N: u32 = <T1 as Serialize>::N;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.0.stream_serialize(writer);\n    }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n    T1: Deserialize,\n{\n    let N: u32 = <T1 as Deserialize>::N;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = crate::reader::Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        (<T1 as Deserialize>::stream_deserialize(reader),)\n    }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n    use crate::serialization::{Deserialize, Serialize};\n}\n\n#[test]\nunconstrained fn bounded_vec_serialization() {\n    // Test empty BoundedVec\n    let empty_vec: BoundedVec<Field, 3> = BoundedVec::from_array([]);\n    let serialized = empty_vec.serialize();\n    let deserialized = BoundedVec::<Field, 3>::deserialize(serialized);\n    assert_eq(empty_vec, deserialized);\n    assert_eq(deserialized.len(), 0);\n\n    // Test partially filled BoundedVec\n    let partial_vec: BoundedVec<[u32; 2], 3> = BoundedVec::from_array([[1, 2]]);\n    let serialized = partial_vec.serialize();\n    let deserialized = BoundedVec::<[u32; 2], 3>::deserialize(serialized);\n    assert_eq(partial_vec, deserialized);\n    assert_eq(deserialized.len(), 1);\n    assert_eq(deserialized.get(0), [1, 2]);\n\n    // Test full BoundedVec\n    let full_vec: BoundedVec<[u32; 2], 3> = BoundedVec::from_array([[1, 2], [3, 4], [5, 6]]);\n    let serialized = full_vec.serialize();\n    let deserialized = BoundedVec::<[u32; 2], 3>::deserialize(serialized);\n    assert_eq(full_vec, deserialized);\n    assert_eq(deserialized.len(), 3);\n    assert_eq(deserialized.get(0), [1, 2]);\n    assert_eq(deserialized.get(1), [3, 4]);\n    assert_eq(deserialized.get(2), [5, 6]);\n}\n"
    },
    "429": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/writer.nr",
      "source": "pub struct Writer<let N: u32> {\n    data: [Field; N],\n    offset: u32,\n}\n\nimpl<let N: u32> Writer<N> {\n    pub fn new() -> Self {\n        Self { data: [0; N], offset: 0 }\n    }\n\n    pub fn write(&mut self, value: Field) {\n        self.data[self.offset] = value;\n        self.offset += 1;\n    }\n\n    pub fn write_u32(&mut self, value: u32) {\n        self.write(value as Field);\n    }\n\n    pub fn write_u64(&mut self, value: u64) {\n        self.write(value as Field);\n    }\n\n    pub fn write_bool(&mut self, value: bool) {\n        self.write(value as Field);\n    }\n\n    pub fn write_array<let K: u32>(&mut self, value: [Field; K]) {\n        for i in 0..K {\n            self.data[i + self.offset] = value[i];\n        }\n        self.offset += K;\n    }\n\n    pub fn write_struct<T, let K: u32>(&mut self, value: T, serialize: fn(T) -> [Field; K]) {\n        self.write_array(serialize(value));\n    }\n\n    pub fn write_struct_array<T, let K: u32, let C: u32>(\n        &mut self,\n        value: [T; C],\n        serialize: fn(T) -> [Field; K],\n    ) {\n        for i in 0..C {\n            self.write_struct(value[i], serialize);\n        }\n    }\n\n    pub fn advance_offset(&mut self, offset: u32) {\n        self.offset += offset;\n    }\n\n    pub fn finish(self) -> [Field; N] {\n        assert_eq(self.offset, self.data.len(), \"Writer did not write all data\");\n        self.data\n    }\n}\n"
    },
    "442": {
      "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/uint-note/src/uint_note.nr",
      "source": "use aztec::{\n    context::{PrivateContext, PublicContext},\n    history::nullifier::assert_nullifier_existed_by,\n    keys::getters::{get_nhk_app, get_public_keys, try_get_public_keys},\n    macros::notes::custom_note,\n    messages::{\n        logs::partial_note::encode_partial_note_private_message,\n        message_delivery::{do_private_message_delivery, MessageDelivery},\n    },\n    note::{note_interface::{NoteHash, NoteType}, utils::compute_note_nullifier},\n    oracle::random::random,\n    protocol::{\n        address::AztecAddress,\n        constants::{\n            DOM_SEP__NOTE_COMPLETION_LOG_TAG, DOM_SEP__NOTE_HASH, DOM_SEP__PARTIAL_NOTE_VALIDITY_COMMITMENT,\n            PRIVATE_LOG_CIPHERTEXT_LEN,\n        },\n        hash::{compute_log_tag, compute_siloed_nullifier, poseidon2_hash_with_separator},\n        traits::{Deserialize, FromField, Hash, Packable, Serialize, ToField},\n    },\n};\n\n// UintNote supports partial notes, i.e. the ability to create an incomplete note in private, hiding certain values\n// (the owner and randomness), and then completing the note in public with the ones missing (the storage slot and\n// amount). Partial notes are being actively developed and are not currently fully supported via macros, and so we\n// rely on the #[custom_note] macro to implement it manually, resulting in some boilerplate. This is expected to be\n// unnecessary once macro support is expanded.\n\n/// A private note representing a numeric value associated to an account (e.g. a token balance).\n// docs:start:uint_note_def\n#[derive(Deserialize, Eq, Serialize, Packable)]\n#[custom_note]\npub struct UintNote {\n    /// The number stored in the note.\n    pub value: u128,\n}\n// docs:end:uint_note_def\n\nimpl NoteHash for UintNote {\n    // docs:start:compute_note_hash\n    fn compute_note_hash(self, owner: AztecAddress, storage_slot: Field, randomness: Field) -> Field {\n        // Partial notes can be implemented by having the note hash be either the result of multiscalar multiplication\n        // (MSM), or two rounds of poseidon. MSM results in more constraints and is only required when multiple\n        // variants of partial notes are supported. Because UintNote has just one variant (where the value is public),\n        // we use poseidon instead.\n\n        // We must compute the same note hash as would be produced by a partial note created and completed with the\n        // same values, so that notes all behave the same way regardless of how they were created. To achieve this, we\n        // perform both steps of the partial note computation.\n\n        // First we create the partial note from a commitment to the private content.\n        let partial_note = PartialUintNote { commitment: compute_partial_commitment(owner, randomness) };\n\n        // Then compute the completion note hash. In a real partial note this step would be performed in public.\n        partial_note.compute_complete_note_hash(storage_slot, self.value)\n    }\n    // docs:end:compute_note_hash\n\n    // The nullifiers are nothing special - this is just the canonical implementation that would be injected by the\n    // #[note] macro.\n\n    fn compute_nullifier(\n        self,\n        context: &mut PrivateContext,\n        owner: AztecAddress,\n        note_hash_for_nullification: Field,\n    ) -> Field {\n        let owner_npk_m = get_public_keys(owner).npk_m;\n        let owner_npk_m_hash = owner_npk_m.hash();\n        let secret = context.request_nhk_app(owner_npk_m_hash);\n        compute_note_nullifier(note_hash_for_nullification, [secret])\n    }\n\n    unconstrained fn compute_nullifier_unconstrained(\n        self,\n        owner: AztecAddress,\n        note_hash_for_nullification: Field,\n    ) -> Option<Field> {\n        try_get_public_keys(owner).map(|public_keys| {\n            let owner_npk_m = public_keys.npk_m;\n            let owner_npk_m_hash = owner_npk_m.hash();\n            let secret = get_nhk_app(owner_npk_m_hash);\n            compute_note_nullifier(note_hash_for_nullification, [secret])\n        })\n    }\n}\n\nimpl UintNote {\n    /// Creates a partial note that will hide the owner but not the value or storage slot, since the note will be\n    /// later completed in public. This is a powerful technique for scenarios in which the value cannot be known in\n    /// private (e.g. because it depends on some public state, such as a DEX).\n    ///\n    /// This function inserts a partial note validity commitment into the nullifier tree to be later on able to verify\n    /// that the partial note and completer are legitimate. See function docs of `compute_validity_commitment` for more\n    /// details.\n    ///\n    /// Each partial note should only be used once, since otherwise multiple notes would be linked together and known\n    /// to belong to the same owner.\n    ///\n    /// As part of the partial note creation process, a log will be sent to `recipient` so that they can discover the\n    /// note. `recipient` will typically be the same as `owner`.\n    pub fn partial(\n        owner: AztecAddress,\n        context: &mut PrivateContext,\n        recipient: AztecAddress,\n        completer: AztecAddress,\n    ) -> PartialUintNote {\n        // Safety: We use the randomness to preserve the privacy of the note recipient by preventing brute-forcing, so\n        // a malicious sender could use non-random values to make the note less private. But they already know the full\n        // note pre-image anyway, and so the recipient already trusts them to not disclose this information. We can\n        // therefore assume that the sender will cooperate in the random value generation.\n        let randomness = unsafe { random() };\n\n        // We create a commitment to the private data, which we then use to construct the log we send to the recipient.\n        let commitment = compute_partial_commitment(owner, randomness);\n\n        // Our partial note log encoding scheme includes a field with the tag of the public completion log, and we use\n        // the commitment as the tag. This is good for multiple reasons:\n        //  - the commitment is uniquely tied to this partial note\n        //  - the commitment is already public information, so we're not revealing anything else\n        //  - we don't need to create any additional information, private or public, for the tag\n        //  - other contracts cannot impersonate us and emit logs with the same tag due to public log siloing\n        let private_log_content = UintPartialNotePrivateLogContent {};\n\n        do_private_message_delivery(\n            context,\n            || encode_partial_note_private_message(private_log_content, owner, randomness, commitment),\n            Option::none(),\n            recipient,\n            MessageDelivery.ONCHAIN_UNCONSTRAINED,\n        );\n\n        let partial_note = PartialUintNote { commitment };\n\n        // Now we compute the validity commitment and push it to the nullifier tree. It can be safely pushed to the\n        // nullifier tree since it uses its own separator, making collisions with actual note nullifiers practically\n        // impossible.\n        let validity_commitment = partial_note.compute_validity_commitment(completer);\n        context.push_nullifier(validity_commitment);\n\n        partial_note\n    }\n}\n\n/// Computes a commitment to the private content of a partial UintNote, i.e. the fields that will remain private. All\n/// other note fields will be made public.\n// docs:start:compute_partial_commitment\nfn compute_partial_commitment(owner: AztecAddress, randomness: Field) -> Field {\n    poseidon2_hash_with_separator([owner.to_field(), randomness], DOM_SEP__NOTE_HASH)\n}\n// docs:end:compute_partial_commitment\n\n#[derive(Packable)]\n// This note does not have any non-metadata (i.e. storage slot, owner, randomness) private content, as the only field\n// (value) will be public in the partial note.\nstruct UintPartialNotePrivateLogContent {}\n\nimpl NoteType for UintPartialNotePrivateLogContent {\n    fn get_id() -> Field {\n        UintNote::get_id()\n    }\n}\n\n/// A partial instance of a UintNote. This value represents a private commitment to the owner and randomness, but the\n/// storage slot and value fields have not yet been set. A partial note can be completed in public with the `complete`\n/// function (revealing the storage slot and value to the public), resulting in a UintNote that can be used like any\n/// other one (except of course that its value is known).\n// docs:start:partial_uint_note_def\n#[derive(Packable, Serialize, Deserialize, Eq)]\npub struct PartialUintNote {\n    commitment: Field,\n}\n// docs:end:partial_uint_note_def\n\nglobal NOTE_COMPLETION_PAYLOAD_LENGTH: u32 = 2;\n\nimpl PartialUintNote {\n    /// Completes the partial note, creating a new note that can be used like any other UintNote.\n    pub fn complete(self, context: PublicContext, completer: AztecAddress, storage_slot: Field, value: u128) {\n        // A note with a value of zero is valid, but we cannot currently complete a partial note with such a value\n        // because this will result in the completion log having its last field set to 0. Public logs currently do not\n        // track their length, and so trailing zeros are simply trimmed. This results in the completion log missing its\n        // last field (the value), and note discovery failing. TODO(#11636): remove this\n        assert(value != 0, \"Cannot complete a PartialUintNote with a value of 0\");\n\n        // We verify that the partial note we're completing is valid (i.e. completer is correct, it uses the correct\n        // state variable's storage slot, and it is internally consistent).\n        let validity_commitment = self.compute_validity_commitment(completer);\n        // Safety: we're using the existence of the nullifier as proof of the contract having validated the partial\n        // note's preimage, which is safe.\n        assert(\n            context.nullifier_exists_unsafe(validity_commitment, context.this_address()),\n            \"Invalid partial note or completer\",\n        );\n\n        // We need to do two things:\n        //  - emit a public log containing the public fields (the storage slot and value). The contract will later find\n        // it by searching for the domain-separated commitment as the tag.\n        //  - insert the completion note hash (i.e. the hash of the note) into the note hash tree. This is typically\n        // only done in private to hide the preimage of the hash that is inserted, but completed partial notes are\n        // inserted in public as the public values are provided and the note hash computed.\n        let log_tag = compute_log_tag(self.commitment, DOM_SEP__NOTE_COMPLETION_LOG_TAG);\n        context.emit_public_log_unsafe(log_tag, [storage_slot, value.to_field()]);\n        context.push_note_hash(self.compute_complete_note_hash(storage_slot, value));\n    }\n\n    /// Completes the partial note, creating a new note that can be used like any other UintNote. Same as `complete`\n    /// function but works from private context.\n    pub fn complete_from_private(\n        self,\n        context: &mut PrivateContext,\n        completer: AztecAddress,\n        storage_slot: Field,\n        value: u128,\n    ) {\n        // We verify that the partial note we're completing is valid (i.e. completer is correct, it uses the correct\n        // state variable's storage slot, and it is internally consistent).\n        let validity_commitment = self.compute_validity_commitment(completer);\n        // `assert_nullifier_existed_by` function expects the nullifier to be siloed (hashed with the address of the\n        // contract that emitted the nullifier) as it checks the value directly against the nullifier tree and all the\n        // nullifiers in the tree are siloed by the protocol.\n        let siloed_validity_commitment = compute_siloed_nullifier(context.this_address(), validity_commitment);\n        assert_nullifier_existed_by(\n            context.get_anchor_block_header(),\n            siloed_validity_commitment,\n        );\n\n        // We need to do two things:\n        //  - emit an unencrypted log containing the public fields (the storage slot and value) via the private log\n        // channel. The contract will later find it by searching for the domain-separated commitment as the tag.\n        //  - insert the completion note hash (i.e. the hash of the note) into the note hash tree. This is typically\n        // only done in private to hide the preimage of the hash that is inserted, but completed partial notes are\n        // inserted in public as the public values are provided and the note hash computed.\n        let log_tag = compute_log_tag(self.commitment, DOM_SEP__NOTE_COMPLETION_LOG_TAG);\n        let padded_payload = self.compute_note_completion_payload_padded_for_private_log(storage_slot, value);\n        context.emit_private_log_unsafe(log_tag, padded_payload, NOTE_COMPLETION_PAYLOAD_LENGTH);\n        context.push_note_hash(self.compute_complete_note_hash(storage_slot, value));\n    }\n\n    /// Computes a validity commitment for this partial note. The commitment cryptographically binds the note's private\n    /// data with the designated completer address. When the note is later completed in public execution, we can load\n    /// this commitment from the nullifier tree and verify that both the partial note (e.g. that the storage slot\n    /// corresponds to the correct owner, and that we're using the correct state variable) and completer are\n    /// legitimate.\n    pub fn compute_validity_commitment(self, completer: AztecAddress) -> Field {\n        poseidon2_hash_with_separator(\n            [self.commitment, completer.to_field()],\n            DOM_SEP__PARTIAL_NOTE_VALIDITY_COMMITMENT,\n        )\n    }\n\n    fn compute_note_completion_payload_padded_for_private_log(\n        _self: Self,\n        storage_slot: Field,\n        value: u128,\n    ) -> [Field; PRIVATE_LOG_CIPHERTEXT_LEN] {\n        let payload = [storage_slot, value.to_field()];\n        payload.concat([0; PRIVATE_LOG_CIPHERTEXT_LEN - NOTE_COMPLETION_PAYLOAD_LENGTH])\n    }\n\n    // docs:start:compute_complete_note_hash\n    fn compute_complete_note_hash(self, storage_slot: Field, value: u128) -> Field {\n        // Here we finalize the note hash by including the (public) storage slot and value into the partial note\n        // commitment. Note that we use the same separator as we used for the first round of poseidon - this is not\n        // an issue.\n        poseidon2_hash_with_separator(\n            [self.commitment, storage_slot, value.to_field()],\n            DOM_SEP__NOTE_HASH,\n        )\n    }\n    // docs:end:compute_complete_note_hash\n}\n\nimpl ToField for PartialUintNote {\n    fn to_field(self) -> Field {\n        self.commitment\n    }\n}\n\nimpl FromField for PartialUintNote {\n    fn from_field(field: Field) -> Self {\n        Self { commitment: field }\n    }\n}\n\nmod test {\n    use super::{compute_partial_commitment, PartialUintNote, UintNote};\n    use aztec::{note::note_interface::NoteHash, protocol::{address::AztecAddress, traits::FromField}};\n\n    global value: u128 = 17;\n    global randomness: Field = 42;\n    global owner: AztecAddress = AztecAddress::from_field(50);\n    global storage_slot: Field = 13;\n\n    #[test]\n    fn note_hash_matches_completed_partial_note_hash() {\n        // Tests that a UintNote has the same note hash as a PartialUintNote created and then completed with the same\n        // private values. This requires for the same hash function to be used in both flows, with the fields in the\n        // same order.\n        let note = UintNote { value };\n        let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n\n        let partial_note = PartialUintNote { commitment: compute_partial_commitment(owner, randomness) };\n        let completed_partial_note_hash = partial_note.compute_complete_note_hash(storage_slot, value);\n\n        assert_eq(note_hash, completed_partial_note_hash);\n    }\n}\n"
    },
    "447": {
      "path": "/home/runner/work/aztec-standards/aztec-standards/src/vault_contract/src/main.nr",
      "source": "pub mod test;\n\nuse aztec::macros::aztec;\n\n#[aztec]\npub contract Vault {\n    use aztec::{\n        authwit::auth::{\n            assert_current_call_valid_authwit, assert_current_call_valid_authwit_public,\n        },\n        context::PrivateContext,\n        macros::{functions::{external, initializer, internal, only_self, view}, storage::storage},\n        protocol::address::AztecAddress,\n        state_vars::PublicImmutable,\n    };\n    use token_contract::Token;\n\n    // Rounding direction that the vault uses to calculate shares and assets\n    global ROUND_DOWN: bool = false;\n    global ROUND_UP: bool = true;\n\n    // Maximum value for a u128 (2**128 - 1)\n    global MAX_U128_VALUE: u128 = 340282366920938463463374607431768211455;\n\n    /// @param admin The address with permission to set the shares token (one-time setup)\n    /// @param asset The underlying asset token address\n    /// @param shares The shares token address (minter must be this vault)\n    /// @param vault_offset The offset used to prevent inflation attacks\n    #[storage]\n    struct Storage<Context> {\n        admin: PublicImmutable<AztecAddress, Context>,\n        asset: PublicImmutable<AztecAddress, Context>,\n        shares: PublicImmutable<AztecAddress, Context>,\n        vault_offset: PublicImmutable<u128, Context>,\n    }\n\n    /// @notice Initializes the vault with asset, offset, and configuration\n    /// @dev The admin must call set_shares() after deploying the shares token with this vault as minter.\n    ///      The vault address can be precomputed before shares exists since shares is not a constructor arg.\n    ///      This 2-step deployment exists because contract instance publishing is private-only, so a public\n    ///      factory cannot deploy and wire both contracts atomically. Once public instance registration is\n    ///      supported, this can be simplified to a single-step deployment.\n    ///      See: https://github.com/AztecProtocol/aztec-packages/issues/20771\n    /// @param admin The address with permission to set the shares token (one-time setup)\n    /// @param asset The underlying asset token address\n    /// @param vault_offset The offset used to prevent inflation attacks (typically 1)\n    #[external(\"public\")]\n    #[initializer]\n    fn constructor(admin: AztecAddress, asset: AztecAddress, vault_offset: u128) {\n        assert(vault_offset > 0, \"vault_offset must be greater than 0\");\n        self.storage.admin.initialize(admin);\n        self.storage.asset.initialize(asset);\n        self.storage.vault_offset.initialize(vault_offset);\n    }\n\n    /// @notice Sets the shares token address (one-time, admin-only, immutable after set)\n    /// @dev Must be called after deploying the shares token with this vault as minter.\n    ///      PublicImmutable.initialize() ensures this can only ever be set once -- any subsequent\n    ///      call will revert. All vault operations read shares via PublicImmutable.read() which\n    ///      reverts if shares has not been initialized, so the vault is inoperable until this is called.\n    /// @param shares The shares token address (minter must be this vault)\n    #[external(\"public\")]\n    fn set_shares_token(shares: AztecAddress) {\n        let admin = self.storage.admin.read();\n        assert(self.msg_sender().eq(admin), \"caller is not admin\");\n        self.storage.shares.initialize(shares);\n    }\n\n    /// @notice Sets the shares token and makes an initial deposit for inflation-attack protection\n    /// @dev Must be called after deploying the shares token with this vault as minter.\n    ///      PublicImmutable.initialize() ensures this can only ever be set once -- any subsequent\n    ///      call will revert. All vault operations read shares via PublicImmutable.read() which\n    ///      reverts if shares has not been initialized, so the vault is inoperable until this is called.\n    /// @param shares The shares token address (minter must be this vault)\n    /// @param initial_deposit The initial deposit amount of the asset\n    /// @param depositor The address of the initial depositor of the assets\n    /// @param nonce The nonce used for authwitness for the transfer of the initial deposit\n    #[external(\"public\")]\n    fn set_shares_token_with_initial_deposit(\n        shares: AztecAddress,\n        initial_deposit: u128,\n        depositor: AztecAddress,\n        nonce: Field,\n    ) {\n        let admin = self.storage.admin.read();\n        assert(self.msg_sender().eq(admin), \"caller is not admin\");\n        self.storage.shares.initialize(shares);\n\n        // Caller deposits assets, shares are minted to this contract and are permanently locked.\n        let from = depositor;\n        let to = self.address;\n\n        // Assets could be donated to the vault's precomputed address before deployment, but such assets are\n        // ignored at this point to ensure the asset<>share conversion is 1:1 for the initial deposit.\n        let total_assets: u128 = 0;\n        let total_supply: u128 = 0;\n        let vault_offset = self.storage.vault_offset.read();\n\n        // Calculate shares to mint for the initial deposit.\n        let deposit_shares = _convert_to_shares(\n            initial_deposit,\n            total_assets,\n            total_supply,\n            vault_offset,\n            ROUND_DOWN,\n        );\n\n        // Transfer the assets from the sender to the vault\n        let asset_token = self.storage.asset.read();\n        self.call(Token::at(asset_token).transfer_public_to_public(from, to, initial_deposit, nonce));\n\n        // Mint shares to this contract address (permanently locked)\n        self.call(Token::at(shares).mint_to_public(to, deposit_shares));\n    }\n\n    /** ==========================================================\n     * ========================= DEPOSIT =========================\n     * ======================================================== */\n\n    // ## Note on ARC-403 assets\n    // ARC-403 defines a single authorization hook (`authorize_private` / `authorize_public`) that fires\n    // on the source side BEFORE a transfer - there is no recipient-side hook.\n    // Users can therefore use the hook to reenter the vault when the asset token calls `authorize` before\n    // moving balances in deposit, withdraw, issue, and redeem functions.\n    //\n    // To keep the contract safe, reentrancy should not happen at half-updated states:\n    //  - Assets should be transferred into the vault BEFORE minting shares. Reentrancy would only happen before any\n    //    balance is updated.\n    //  - Assets should be transferred out of the vault AFTER burning shares. Reentrancy would only happen after all\n    //    balances are updated.\n\n    /// @notice Deposits the underlying asset from a public balance and receives shares to a public balance\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    fn deposit_public_to_public(from: AztecAddress, to: AztecAddress, assets: u128, nonce: Field) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        self.internal._validate_from_public(from);\n\n        // Calculate shares to mint\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n        assert(shares > 0, \"Zero shares, insufficient assets\");\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_public_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n\n        // Mint shares to the recipient\n        self.call(Token::at(shares_token).mint_to_public(to, shares));\n    }\n\n    /// @notice Deposits the underlying asset from a public balance and receives shares to a private balance\n    /// @dev The shares are calculated based on the ratio (total_supply + offset) / (total_assets + 1) minus any acceptable slippage.\n    ///      The ratio can only decrease or remain the same as time goes by. Any asset excess is kept by the contract as yield.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param shares The amount of shares that should be minted to the recipient\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn deposit_public_to_private(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        shares: u128,\n        nonce: Field,\n    ) {\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Validate in public that `assets` is sufficient for the requested shares\n        // Order matters: enqueue settlement first so asset transfer executes before shares total_supply increase\n        self.enqueue_self.settle_deposit_public_to_private_internal(from, assets, shares, nonce);\n\n        // Mint shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, shares));\n    }\n\n    /// @notice Deposits the underlying asset from a private balance and receives shares to a private balance\n    /// @dev The shares are calculated based on the ratio (total_supply + offset) / (total_assets + 1) minus any acceptable slippage.\n    ///      The ratio can only decrease or remain the same as time goes by. Any asset excess is kept by the contract as yield.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param shares The amount of shares that should be minted to the recipient\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn deposit_private_to_private(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_private_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n\n        // Mint shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, shares));\n\n        // Validate in public that `assets` is sufficient for the requested shares\n        self.enqueue_self.settle_deposit_private_to_private_internal(assets, shares);\n    }\n\n    /// @notice Deposits the underlying asset from a private balance and receives shares to a public balance\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn deposit_private_to_public(from: AztecAddress, to: AztecAddress, assets: u128, nonce: Field) {\n        let asset_token = self.storage.asset.read();\n        _validate_from_private::<4>(self.context, from);\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_private_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n\n        // Calculate and mint shares to the recipient in public\n        self.enqueue_self.settle_deposit_private_to_public_internal(to, assets);\n    }\n\n    /// @notice Deposits the underlying asset from a public balance and receives shares to a private balance\n    /// @dev min_shares is the amount of shares that will be minted immediately in private.\n    ///      Any additional shares the recipient is entitled to, will be minted through a commitment once the call is executed publicly.\n    ///      This additional amount can only be known at public execution.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param min_shares The amount of shares that should be minted to the recipient in private\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn deposit_public_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        min_shares: u128,\n        nonce: Field,\n    ) {\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the shares token that allows to mint outstanding shares to the recipient in public\n        let partial_note =\n            self.call(Token::at(shares_token).initialize_transfer_commitment(to, self.address));\n\n        // Mint any outstanding shares without revealing the recipient and updates the shares total supply\n        // Reverts if min_shares is greater than allowed\n        // Order matters: enqueue settlement first so asset transfer executes before shares total_supply increase\n        self.enqueue_self.settle_deposit_public_to_private_exact_internal(\n            from,\n            partial_note,\n            assets,\n            min_shares,\n            nonce,\n        );\n\n        // Mint min_shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, min_shares));\n    }\n\n    /// @notice Deposits the underlying asset from a private balance and receives shares to a private balance\n    /// @dev min_shares is the amount of shares that will be minted immediately in private.\n    ///      Any additional shares the recipient is entitled to, will be minted through a commitment once the call is executed publicly.\n    ///      This additional amount can only be known at public execution.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to deposit\n    /// @param min_shares The amount of shares that should be minted to the recipient in private\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn deposit_private_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        min_shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the shares token that allows to mint outstanding shares to the recipient in public\n        let partial_note =\n            self.call(Token::at(shares_token).initialize_transfer_commitment(to, self.address));\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_private_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n\n        // Mint min_shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, min_shares));\n\n        // Mint any outstanding shares without revealing the recipient and updates the shares total supply\n        // Reverts if min_shares is greater than allowed\n        self.enqueue_self.settle_deposit_private_to_private_exact_internal(\n            partial_note,\n            assets,\n            min_shares,\n        );\n    }\n\n    /** ==========================================================\n     * ========================== ISSUE ==========================\n     * ======================================================== */\n\n    /// @notice Issues exactly the requested shares to a public balance and receives the underlying asset from a public balance\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to issue\n    /// @param max_assets The maximum amount of assets that should be deposited\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    fn issue_public_to_public(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        max_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        self.internal._validate_from_public(from);\n\n        // Calculate assets required\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let assets = _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_public_to_public(\n            from,\n            self.address,\n            max_assets,\n            nonce,\n        ));\n\n        // Mint shares to the recipient\n        self.call(Token::at(shares_token).mint_to_public(to, shares));\n\n        // Refund\n        let change = max_assets - assets; // Reverts with underflow if invalid\n        if change > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_public(\n                self.address,\n                from,\n                change,\n                0,\n            ));\n        }\n    }\n\n    /// @notice Issues exactly the requested shares to a private balance and receives the underlying asset from a public balance\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to issue\n    /// @param max_assets The maximum amount of assets that should be deposited\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn issue_public_to_private(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        max_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Order matters: enqueue asset transfer first so it executes before shares total_supply increase,\n        // neutralizing ARC-403 reentrancy.\n        self.enqueue(Token::at(asset_token).transfer_public_to_public(\n            from,\n            self.address,\n            max_assets,\n            nonce,\n        ));\n\n        // Mint shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, shares));\n\n        // Settle: compute actual assets needed and refund any excess\n        self.enqueue_self.settle_issue_public_to_private_internal(from, shares, max_assets);\n    }\n\n    /// @notice Issues exactly the requested shares to a public balance and receives the underlying asset from a private balance\n    /// @dev Any excess assets the sender has transferred in private, will be returned to the sender through a commitment once the call is executed publicly.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to issue\n    /// @param max_assets The maximum amount of assets that should be deposited\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn issue_private_to_public_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        max_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the asset token that allows to refund excess assets to the sender in public\n        let asset_commitment =\n            self.call(Token::at(asset_token).initialize_transfer_commitment(from, self.address));\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take max_assets from the sender\n        self.call(Token::at(asset_token).transfer_private_to_public(\n            from,\n            self.address,\n            max_assets,\n            nonce,\n        ));\n\n        // Validate max_assets in public and refund any excess to the sender with a commitment\n        self.enqueue_self.settle_issue_private_to_public_exact_internal(\n            asset_commitment,\n            shares,\n            max_assets,\n            to,\n        );\n    }\n\n    /// @notice Issues exactly the requested shares to a private balance and receives the underlying asset from a private balance\n    /// @dev Any excess assets the sender has transferred in private, will be returned to the sender through a commitment once the call is executed publicly.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to issue\n    /// @param max_assets The maximum amount of assets that should be deposited\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn issue_private_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        max_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the asset token that allows to refund excess assets to the sender in public\n        let asset_commitment =\n            self.call(Token::at(asset_token).initialize_transfer_commitment(from, self.address));\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take max_assets from the sender\n        self.call(Token::at(asset_token).transfer_private_to_public(\n            from,\n            self.address,\n            max_assets,\n            nonce,\n        ));\n\n        // Mint shares to the recipient's private balance\n        self.call(Token::at(shares_token).mint_to_private(to, shares));\n\n        // Validate max_assets in public and refunds any excess to the sender with a commitment\n        self.enqueue_self.settle_issue_private_to_private_exact_internal(\n            asset_commitment,\n            shares,\n            max_assets,\n        );\n    }\n\n    /** ==========================================================\n     * ======================== WITHDRAW =========================\n     * ======================================================== */\n\n    /// @notice Withdraws an amount of the underlying asset from a public balance to a public balance\n    /// @dev User must provide a public authwit on the shares token authorizing this vault to burn shares\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to withdraw\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    fn withdraw_public_to_public(from: AztecAddress, to: AztecAddress, assets: u128, nonce: Field) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        self.internal._validate_from_public(from);\n\n        // Calculate shares to burn\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let shares = _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        // Order matters: burn before transferring to neutralize ARC-403 reentrancy.\n        // Burn the sender's shares on the shares token\n        self.call(Token::at(shares_token).burn_public(from, shares, nonce));\n\n        // Transfer the assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_public(self.address, to, assets, 0));\n    }\n\n    /// @notice Withdraws an amount of the underlying asset from a public balance to a private balance\n    /// @dev User must provide a public authwit on the shares token authorizing this vault to burn shares\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to withdraw\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn withdraw_public_to_private(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        _validate_from_private::<4>(self.context, from);\n\n        // Order matters: burn after calculating shares in public to neutralize ARC-403 reentrancy.\n        // Calculate and burn the sender's shares\n        self.enqueue_self.settle_withdraw_public_to_private_internal(from, assets, nonce);\n\n        // Transfer the assets to the recipient in private\n        self.call(Token::at(asset_token).transfer_public_to_private(self.address, to, assets, 0));\n    }\n\n    /// @notice Withdraws an amount of the underlying asset from a private balance to a private balance\n    /// @dev The shares are calculated with (total_supply + offset) / (total_assets + 1).\n    ///      User must provide a private authwit on the shares token authorizing this vault to burn shares.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets to withdraw\n    /// @param shares The amount of shares to burn\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn withdraw_private_to_private(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Burn shares from the sender's private balance on the shares token\n        self.call(Token::at(shares_token).burn_private(from, shares, nonce));\n\n        // Order matters: transfer after burning to neutralize ARC-403 reentrancy.\n        // Validate that the shares-assets ratio is correct\n        self.enqueue_self.settle_withdraw_private_to_private_internal(assets, shares);\n\n        // Transfer the assets to the recipient in private\n        self.call(Token::at(asset_token).transfer_public_to_private(self.address, to, assets, 0));\n    }\n\n    /// @notice Withdraws an amount of the underlying asset from a private balance to a public balance\n    /// @dev max_shares is the amount of shares that will be burnt immediately in private.\n    ///      Any excess shares the sender has transferred in private, will be returned to the sender through a commitment once the call is executed publicly.\n    ///      User must provide a private authwit on the shares token authorizing this vault to burn shares.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of underlying asset to withdraw\n    /// @param max_shares The maximum amount of shares to burn\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn withdraw_private_to_public_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        max_shares: u128,\n        nonce: Field,\n    ) {\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the shares token that allows to refund excess shares to the sender in public\n        let partial_note =\n            self.call(Token::at(shares_token).initialize_transfer_commitment(from, self.address));\n\n        // Burn max_shares from the sender's private balance on the shares token\n        self.call(Token::at(shares_token).burn_private(from, max_shares, nonce));\n\n        // Burn the correct amount of shares\n        // Any excess amount of shares is sent back to the sender via commitment\n        // Reverts if the amount of shares required is greater than max_shares\n        self.enqueue_self.settle_withdraw_private_to_public_exact_internal(\n            partial_note,\n            assets,\n            max_shares,\n            to,\n        );\n    }\n\n    /// @notice Withdraws an amount of the underlying asset from a private balance to a private balance\n    /// @dev max_shares is the amount of shares that will be burnt immediately in private.\n    ///      Any excess shares the sender has transferred in private, will be returned to the sender through a commitment once the call is executed publicly.\n    ///      User must provide a private authwit on the shares token authorizing this vault to burn shares.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param assets The amount of underlying asset to withdraw\n    /// @param max_shares The maximum amount of shares to burn\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn withdraw_private_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        assets: u128,\n        max_shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the shares token that allows to refund excess shares to the sender in public\n        let partial_note =\n            self.call(Token::at(shares_token).initialize_transfer_commitment(from, self.address));\n\n        // Burn max_shares from the sender's private balance on the shares token\n        self.call(Token::at(shares_token).burn_private(from, max_shares, nonce));\n\n        // Order matters: transfer after burning to neutralize ARC-403 reentrancy.\n        // Burn the correct amount of shares\n        // Any excess amount of shares is sent back to the sender via commitment\n        // Reverts if the amount of shares required is greater than max_shares\n        self.enqueue_self.settle_withdraw_private_to_private_exact_internal(\n            partial_note,\n            assets,\n            max_shares,\n        );\n\n        // Transfer the assets to the recipient in private\n        self.call(Token::at(asset_token).transfer_public_to_private(self.address, to, assets, 0));\n    }\n\n    /** ==========================================================\n     * ========================= REDEEM ==========================\n     * ======================================================== */\n\n    /// @notice Redeems an amount of the shares from a public balance to a public balance\n    /// @dev User must provide a public authwit on the shares token authorizing this vault to burn shares\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to redeem\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    fn redeem_public_to_public(from: AztecAddress, to: AztecAddress, shares: u128, nonce: Field) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        self.internal._validate_from_public(from);\n\n        // Calculate assets to redeem\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let assets =\n            _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        // Order matters: burn before transferring to neutralize ARC-403 reentrancy.\n        // Burn the sender's shares on the shares token\n        self.call(Token::at(shares_token).burn_public(from, shares, nonce));\n\n        // Transfer the assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_public(self.address, to, assets, 0));\n    }\n\n    /// @notice Redeems an amount of the shares from a private balance to a public balance\n    /// @dev User must provide a private authwit on the shares token authorizing this vault to burn shares\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to redeem\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn redeem_private_to_public(from: AztecAddress, to: AztecAddress, shares: u128, nonce: Field) {\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<4>(self.context, from);\n\n        // Burn shares from the sender's private balance on the shares token\n        self.call(Token::at(shares_token).burn_private(from, shares, nonce));\n\n        // Burn shares and redeem public assets\n        self.enqueue_self.settle_redeem_private_to_public_internal(to, shares);\n    }\n\n    /// @notice Redeems an amount of the shares from a private balance to a private balance\n    /// @dev min_assets is the amount of assets that will be transferred to the recipient immediately in private.\n    ///      Any outstanding assets the recipient is entitled to, will be sent through a commitment once the call is executed publicly.\n    ///      User must provide a private authwit on the shares token authorizing this vault to burn shares.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to burn\n    /// @param min_assets The minimum amount of assets to withdraw, immediately in private\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn redeem_private_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        min_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the asset token that allows to transfer outstanding assets to the recipient in public\n        let asset_commitment =\n            self.call(Token::at(asset_token).initialize_transfer_commitment(to, self.address));\n\n        // Burn shares from the sender's private balance on the shares token\n        self.call(Token::at(shares_token).burn_private(from, shares, nonce));\n\n        // Order matters: transfer after burning to neutralize ARC-403 reentrancy.\n        // Transfers any outstanding assets without revealing the recipient\n        // Reverts if min_assets is greater than allowed\n        self.enqueue_self.settle_redeem_private_to_private_exact_internal(\n            asset_commitment,\n            shares,\n            min_assets,\n        );\n\n        // Transfer min_assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_private(self.address, to, min_assets, 0));\n    }\n\n    /// @notice Redeems an amount of the shares from a public balance to a private balance\n    /// @dev min_assets is the amount of assets that will be transferred to the recipient immediately in private.\n    ///      Any outstanding assets the recipient is entitled to, will be sent through a commitment once the call is executed publicly.\n    ///      User must provide a public authwit on the shares token authorizing this vault to burn shares.\n    /// @param from The address of the sender\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares to redeem\n    /// @param min_assets The minimum amount of assets to withdraw, immediately in private\n    /// @param nonce The nonce used for authwitness\n    #[external(\"private\")]\n    fn redeem_public_to_private_exact(\n        from: AztecAddress,\n        to: AztecAddress,\n        shares: u128,\n        min_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        _validate_from_private::<5>(self.context, from);\n\n        // Initialize commitment on the asset token that allows to transfer outstanding assets to the recipient in public\n        let asset_commitment =\n            self.call(Token::at(asset_token).initialize_transfer_commitment(to, self.address));\n\n        // Order matters: transfer after burning to neutralize ARC-403 reentrancy.\n        // Burns shares and transfers any outstanding assets without revealing the recipient\n        // Reverts if min_assets is greater than allowed\n        self.enqueue_self.settle_redeem_public_to_private_exact_internal(\n            from,\n            asset_commitment,\n            shares,\n            min_assets,\n            nonce,\n        );\n\n        // Transfer min_assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_private(self.address, to, min_assets, 0));\n    }\n\n    /** ==========================================================\n     * ======================= VAULT VIEW ========================\n     * ======================================================== */\n\n    /// @notice Returns the admin address\n    /// @return The address of the admin\n    #[external(\"public\")]\n    #[view]\n    fn admin() -> AztecAddress {\n        self.storage.admin.read()\n    }\n\n    /// @notice Returns the underlying asset address\n    /// @return The address of the underlying asset\n    #[external(\"public\")]\n    #[view]\n    fn asset() -> AztecAddress {\n        self.storage.asset.read()\n    }\n\n    /// @notice Returns the shares token address\n    /// @return The address of the shares token\n    #[external(\"public\")]\n    #[view]\n    fn shares() -> AztecAddress {\n        self.storage.shares.read()\n    }\n\n    /// @notice Returns the total amount of underlying assets held by the vault\n    /// @return The total amount of assets held by the vault\n    #[external(\"public\")]\n    #[view]\n    fn total_assets() -> u128 {\n        self.internal._total_assets()\n    }\n\n    /// @notice Converts an amount of assets to shares using the current exchange rate\n    /// @param assets The amount of assets to convert\n    /// @return The equivalent amount of shares\n    #[external(\"public\")]\n    #[view]\n    fn convert_to_shares(assets: u128) -> u128 {\n        _convert_to_shares(\n            assets,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_DOWN,\n        )\n    }\n\n    /// @notice Converts an amount of shares to assets using the current exchange rate\n    /// @param shares The amount of shares to convert\n    /// @return The equivalent amount of assets\n    #[external(\"public\")]\n    #[view]\n    fn convert_to_assets(shares: u128) -> u128 {\n        _convert_to_assets(\n            shares,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_DOWN,\n        )\n    }\n\n    /// @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call.\n    /// @param _receiver The address of the receiver\n    /// @return The maximum amount of assets that can be deposited\n    #[external(\"public\")]\n    #[view]\n    fn max_deposit(_receiver: AztecAddress) -> u128 {\n        MAX_U128_VALUE\n    }\n\n    /// @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions.\n    /// @param assets The amount of assets to deposit\n    /// @return The amount of shares that would be minted\n    #[external(\"public\")]\n    #[view]\n    fn preview_deposit(assets: u128) -> u128 {\n        _convert_to_shares(\n            assets,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_DOWN,\n        )\n    }\n\n    /// @dev Returns the maximum amount of the Vault shares that can be issued for the receiver, through a mint call.\n    /// @param _receiver The address of the receiver\n    /// @return The maximum amount of shares that can be issued\n    #[external(\"public\")]\n    #[view]\n    fn max_issue(_receiver: AztecAddress) -> u128 {\n        MAX_U128_VALUE\n    }\n\n    /// @dev Allows an on-chain or off-chain user to simulate the effects of their issue at the current block, given current on-chain conditions.\n    /// @param shares The amount of shares to issue\n    /// @return The amount of assets required to issue the shares\n    #[external(\"public\")]\n    #[view]\n    fn preview_issue(shares: u128) -> u128 {\n        _convert_to_assets(\n            shares,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_UP,\n        )\n    }\n\n    /// @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call.\n    /// @notice This does NOT include private balance - private holders must track their own balance.\n    /// @param owner The address of the owner\n    /// @return The maximum amount of assets that can be withdrawn\n    #[external(\"public\")]\n    #[view]\n    fn max_withdraw(owner: AztecAddress) -> u128 {\n        let shares_token = self.storage.shares.read();\n        let owner_shares = self.view(Token::at(shares_token).balance_of_public(owner));\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        _convert_to_assets(\n            owner_shares,\n            total_assets,\n            total_supply,\n            vault_offset,\n            ROUND_DOWN,\n        )\n    }\n\n    /// @dev Allows an on-chain or off-chain user to simulate the effects of their withdraw at the current block, given current on-chain conditions.\n    /// @param assets The amount of assets to withdraw\n    /// @return The amount of shares that would be withdrawn\n    #[external(\"public\")]\n    #[view]\n    fn preview_withdraw(assets: u128) -> u128 {\n        _convert_to_shares(\n            assets,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_UP,\n        )\n    }\n\n    /// @dev Returns the maximum amount of the Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call.\n    /// @notice This does NOT include private balance - private holders must track their own balance.\n    /// @param owner The address of the owner\n    /// @return The maximum amount of shares that can be redeemed\n    #[external(\"public\")]\n    #[view]\n    fn max_redeem(owner: AztecAddress) -> u128 {\n        let shares_token = self.storage.shares.read();\n        self.view(Token::at(shares_token).balance_of_public(owner))\n    }\n\n    /// @dev Allows an on-chain or off-chain user to simulate the effects of their redeem at the current block, given current on-chain conditions.\n    /// @param shares The amount of shares to redeem\n    /// @return The amount of assets that would be redeemed\n    #[external(\"public\")]\n    #[view]\n    fn preview_redeem(shares: u128) -> u128 {\n        _convert_to_assets(\n            shares,\n            self.internal._total_assets(),\n            self.internal._total_supply_of_shares(),\n            self.storage.vault_offset.read(),\n            ROUND_DOWN,\n        )\n    }\n\n    /// @notice Returns the vault offset\n    /// @return The offset value\n    #[external(\"public\")]\n    #[view]\n    fn get_vault_offset() -> u128 {\n        self.storage.vault_offset.read()\n    }\n\n    /** ==========================================================\n     * ==================== VAULT INTERNALS ======================\n     * ======================================================== */\n\n    // Settlement functions adjust for pre-applied state changes.\n    // In the separated model, private cross-contract calls (e.g. shares.mint_to_private, shares.burn_private)\n    // enqueue public state changes that execute BEFORE the vault's settlement functions.\n    // Settlement must reconstruct the pre-operation state by adding/subtracting the known amounts.\n\n    /// @notice Burns shares held in public for a given amount of assets\n    /// @param from The address of the sender\n    /// @param assets The amount of assets to burn shares for\n    /// @param nonce The nonce used for authwitness on the shares token\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_withdraw_public_to_private_internal(from: AztecAddress, assets: u128, nonce: Field) {\n        let shares_token = self.storage.shares.read();\n        // No pre-applied state changes to shares (public burn happens here)\n        // Asset balance NOT yet decreased (transfer_public_to_private enqueue runs after this)\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let shares = _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        // Burn shares from user's public balance on shares token (requires authwit)\n        self.call(Token::at(shares_token).burn_public(from, shares, nonce));\n    }\n\n    /// @notice Validates that the requested shares amount is valid for the given assets\n    /// @param assets The amount of assets being withdrawn\n    /// @param shares The amount of shares being burned\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_withdraw_private_to_private_internal(assets: u128, shares: u128) {\n        // Pre-applied: shares.decrease_total_supply(shares)\n        // Asset balance NOT yet decreased (transfer_public_to_private enqueue runs after this)\n        let total_assets = self.internal._total_assets();\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_supply = total_supply_post + shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let min_shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        assert(min_shares <= shares, \"Insufficient shares burnt\");\n    }\n\n    /// @notice Withdraws assets to a public balance for a given amount of shares\n    /// @param to The address of the recipient\n    /// @param shares The amount of shares being redeemed\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_redeem_private_to_public_internal(to: AztecAddress, shares: u128) {\n        let asset_token = self.storage.asset.read();\n        // Pre-applied: shares.decrease_total_supply(shares) from burn_private\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_supply = total_supply_post + shares;\n        let total_assets = self.internal._total_assets();\n        let vault_offset = self.storage.vault_offset.read();\n        let assets =\n            _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        // Transfer the assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_public(self.address, to, assets, 0));\n    }\n\n    /// @notice Mints shares to a public balance for a given amount of assets\n    /// @param to The address of the recipient\n    /// @param assets The amount of assets being deposited\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_deposit_private_to_public_internal(to: AztecAddress, assets: u128) {\n        let shares_token = self.storage.shares.read();\n        // Pre-applied: asset.increase_public_balance(self, assets) from transfer_private_to_public\n        // No pre-applied changes to shares total_supply (public mint happens here)\n        let total_assets_post = self.internal._total_assets();\n        let total_assets = total_assets_post - assets;\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n        assert(shares > 0, \"Zero shares, insufficient assets\");\n\n        // Mint shares to the recipient on the shares token\n        self.call(Token::at(shares_token).mint_to_public(to, shares));\n    }\n\n    /// @notice Validates that the requested shares amount is valid for the deposited assets\n    /// @param from The address of the sender\n    /// @param assets The amount of assets being deposited\n    /// @param shares The amount of shares being issued\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_deposit_public_to_private_internal(\n        from: AztecAddress,\n        assets: u128,\n        shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        // No pre-applied state changes: shares.increase_total_supply(shares) enqueues after this\n        let total_supply = self.internal._total_supply_of_shares();\n        let total_assets = self.internal._total_assets(); // Assets not transferred yet\n        let vault_offset = self.storage.vault_offset.read();\n        let max_shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        assert(shares <= max_shares, \"Too many shares requested\");\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_public_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n    }\n\n    /// @notice Validates that the requested shares amount is valid for the deposited assets\n    /// @param assets The amount of assets being deposited\n    /// @param shares The amount of shares being issued\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_deposit_private_to_private_internal(assets: u128, shares: u128) {\n        // Pre-applied: asset.increase_public_balance(self, assets), shares.increase_total_supply(shares)\n        let total_assets_post = self.internal._total_assets();\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = total_assets_post - assets;\n        let total_supply = total_supply_post - shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let max_shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        assert(shares <= max_shares, \"Too many shares requested\");\n    }\n\n    /// @notice Decreases shares total supply and refunds excess shares via commitment\n    /// @param commitment The partial note representing the commitment (privacy entrance)\n    /// @param assets The amount of assets being withdrawn\n    /// @param max_shares The maximum amount of shares that should be redeemed\n    /// @param to The address of the recipient\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_withdraw_private_to_public_exact_internal(\n        commitment: Field,\n        assets: u128,\n        max_shares: u128,\n        to: AztecAddress,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        // Pre-applied: shares.decrease_total_supply(max_shares) from burn_private\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_supply = total_supply_post + max_shares;\n        let total_assets = self.internal._total_assets(); // Assets not transferred yet\n        let vault_offset = self.storage.vault_offset.read();\n        let shares = _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        let surplus = max_shares - shares; // Reverts with underflow if invalid\n        if surplus > 0 {\n            // Mint surplus back to the sender via commitment on shares token\n            self.call(Token::at(shares_token).mint_to_commitment(commitment, surplus));\n        }\n\n        // Transfer the assets to the recipient\n        self.call(Token::at(asset_token).transfer_public_to_public(self.address, to, assets, 0));\n    }\n\n    /// @notice Decreases shares total supply and refunds excess shares via commitment\n    /// @param commitment The partial note representing the commitment (privacy entrance)\n    /// @param assets The amount of assets being withdrawn\n    /// @param max_shares The maximum amount of shares that should be redeemed\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_withdraw_private_to_private_exact_internal(\n        commitment: Field,\n        assets: u128,\n        max_shares: u128,\n    ) {\n        let shares_token = self.storage.shares.read();\n        // Pre-applied: shares.decrease_total_supply(max_shares)\n        // Asset balance NOT yet decreased (transfer_public_to_private enqueue runs after this)\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = self.internal._total_assets();\n        let total_supply = total_supply_post + max_shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let shares = _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        let surplus = max_shares - shares; // Reverts with underflow if invalid\n        if surplus > 0 {\n            // Mint surplus back to the sender via commitment on shares token\n            self.call(Token::at(shares_token).mint_to_commitment(commitment, surplus));\n        }\n    }\n\n    /// @notice Increases shares total supply and issues outstanding shares via commitment\n    /// @param commitment The partial note representing the commitment (privacy entrance)\n    /// @param assets The amount of assets being deposited\n    /// @param min_shares The minimum amount of shares that should be issued\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_deposit_private_to_private_exact_internal(\n        commitment: Field,\n        assets: u128,\n        min_shares: u128,\n    ) {\n        let shares_token = self.storage.shares.read();\n        // Pre-applied: asset.increase_public_balance(self, assets), shares.increase_total_supply(min_shares)\n        let total_assets_post = self.internal._total_assets();\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = total_assets_post - assets;\n        let total_supply = total_supply_post - min_shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let max_shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        let outstanding_shares = max_shares - min_shares; // Reverts with underflow if invalid\n        if outstanding_shares > 0 {\n            // Mint outstanding shares via commitment on shares token\n            self.call(Token::at(shares_token).mint_to_commitment(commitment, outstanding_shares));\n        }\n    }\n\n    /// @notice Increases shares total supply and issues outstanding shares via commitment\n    /// @param from The address of the sender\n    /// @param commitment The partial note representing the commitment (privacy entrance)\n    /// @param assets The amount of assets being deposited\n    /// @param min_shares The minimum amount of shares that should be issued\n    /// @param nonce The nonce used for authwitness\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_deposit_public_to_private_exact_internal(\n        from: AztecAddress,\n        commitment: Field,\n        assets: u128,\n        min_shares: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        // No pre-applied state changes: shares.increase_total_supply(min_shares) enqueues after this\n        // Assets not transferred yet\n        let total_supply = self.internal._total_supply_of_shares();\n        let total_assets = self.internal._total_assets();\n        let vault_offset = self.storage.vault_offset.read();\n        let max_shares =\n            _convert_to_shares(assets, total_assets, total_supply, vault_offset, ROUND_DOWN);\n        let outstanding_shares = max_shares - min_shares; // Reverts with underflow if invalid\n\n        // Order matters: transfer before minting to neutralize ARC-403 reentrancy.\n        // Take the assets from the sender\n        self.call(Token::at(asset_token).transfer_public_to_public(\n            from,\n            self.address,\n            assets,\n            nonce,\n        ));\n\n        if outstanding_shares > 0 {\n            // Mint outstanding shares via commitment on shares token\n            self.call(Token::at(shares_token).mint_to_commitment(commitment, outstanding_shares));\n        }\n    }\n\n    /// @notice Refunds excess assets to the sender via commitment while validating the shares amount requested\n    /// @param asset_commitment The partial note representing the commitment (privacy entrance)\n    /// @param shares The amount of shares being issued\n    /// @param max_assets The maximum amount of assets that should be deposited\n    /// @param to The address of the recipient\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_issue_private_to_public_exact_internal(\n        asset_commitment: Field,\n        shares: u128,\n        max_assets: u128,\n        to: AztecAddress,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        // Pre-applied: asset.increase_public_balance(self, max_assets) from transfer_private_to_public\n        // No pre-applied changes to shares total_supply (public mint happens here)\n        let total_assets_post = self.internal._total_assets();\n        let total_assets = total_assets_post - max_assets;\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let assets = _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        let change = max_assets - assets; // Reverts with underflow if invalid\n        if change > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_commitment(\n                self.address,\n                asset_commitment,\n                change,\n                0,\n            ));\n        }\n\n        // Mint shares to the recipient on the shares token (after refund to prevent inflated total_assets via ARC-403 reentrancy)\n        self.call(Token::at(shares_token).mint_to_public(to, shares));\n    }\n\n    /// @notice Refunds excess assets to the sender via commitment while validating the shares amount requested\n    /// @param asset_commitment The partial note representing the commitment (privacy entrance)\n    /// @param shares The amount of shares being issued\n    /// @param max_assets The maximum amount of assets that should be deposited\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_issue_private_to_private_exact_internal(\n        asset_commitment: Field,\n        shares: u128,\n        max_assets: u128,\n    ) {\n        let asset_token = self.storage.asset.read();\n        // Pre-applied: asset.increase_public_balance(self, max_assets), shares.increase_total_supply(shares)\n        let total_assets_post = self.internal._total_assets();\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = total_assets_post - max_assets;\n        let total_supply = total_supply_post - shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let assets = _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        let change = max_assets - assets; // Reverts with underflow if invalid\n        if change > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_commitment(\n                self.address,\n                asset_commitment,\n                change,\n                0,\n            ));\n        }\n    }\n\n    /// @notice Validates share redemption rate and withdraws any outstanding assets via commitment\n    /// @param asset_commitment The partial note representing the commitment (privacy entrance)\n    /// @param shares The amount of shares being redeemed\n    /// @param min_assets The minimum amount of assets that should be withdrawn\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_redeem_private_to_private_exact_internal(\n        asset_commitment: Field,\n        shares: u128,\n        min_assets: u128,\n    ) {\n        let asset_token = self.storage.asset.read();\n        // Pre-applied: shares.decrease_total_supply(shares)\n        // Asset balance NOT yet decreased (transfer_public_to_private enqueue runs after this)\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = self.internal._total_assets();\n        let total_supply = total_supply_post + shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let assets =\n            _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        let outstanding_assets = assets - min_assets; // Reverts with underflow if invalid\n        if outstanding_assets > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_commitment(\n                self.address,\n                asset_commitment,\n                outstanding_assets,\n                0,\n            ));\n        }\n    }\n\n    /// @notice Validates share redemption rate and withdraws any outstanding assets via commitment\n    /// @param from The address of the sender\n    /// @param asset_commitment The partial note representing the commitment (privacy entrance)\n    /// @param shares The amount of shares being redeemed\n    /// @param min_assets The minimum amount of assets that should be withdrawn\n    /// @param nonce The nonce used for authwitness on the shares token\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_redeem_public_to_private_exact_internal(\n        from: AztecAddress,\n        asset_commitment: Field,\n        shares: u128,\n        min_assets: u128,\n        nonce: Field,\n    ) {\n        let asset_token = self.storage.asset.read();\n        let shares_token = self.storage.shares.read();\n        // No pre-applied changes to shares total_supply (public burn happens here)\n        // Asset balance NOT yet decreased (transfer_public_to_private enqueue runs after this)\n        let total_assets = self.internal._total_assets();\n        let total_supply = self.internal._total_supply_of_shares();\n        let vault_offset = self.storage.vault_offset.read();\n        let assets =\n            _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_DOWN);\n\n        // Burn the sender's shares on the shares token (requires authwit)\n        self.call(Token::at(shares_token).burn_public(from, shares, nonce));\n\n        let outstanding_assets = assets - min_assets; // Reverts with underflow if invalid\n        if outstanding_assets > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_commitment(\n                self.address,\n                asset_commitment,\n                outstanding_assets,\n                0,\n            ));\n        }\n    }\n\n    /// @notice Validates issuance rate and refunds excess assets being deposited from a public balance\n    /// @param from The address of the sender\n    /// @param shares The amount of shares being issued\n    /// @param max_assets The maximum amount of assets that should be deposited\n    #[external(\"public\")]\n    #[only_self]\n    fn settle_issue_public_to_private_internal(from: AztecAddress, shares: u128, max_assets: u128) {\n        let asset_token = self.storage.asset.read();\n        // Pre-applied: asset.transfer_public_to_public(from, self, max_assets), shares.increase_total_supply(shares)\n        let total_assets_post = self.internal._total_assets();\n        let total_supply_post = self.internal._total_supply_of_shares();\n        let total_assets = total_assets_post - max_assets;\n        let total_supply = total_supply_post - shares;\n        let vault_offset = self.storage.vault_offset.read();\n        let assets = _convert_to_assets(shares, total_assets, total_supply, vault_offset, ROUND_UP);\n\n        let change = max_assets - assets; // Reverts with underflow if invalid\n        if change > 0 {\n            self.call(Token::at(asset_token).transfer_public_to_public(\n                self.address,\n                from,\n                change,\n                0,\n            ));\n        }\n    }\n\n    /** ==========================================================\n     * ================== VAULT LIBRARIES ========================\n     * ======================================================== */\n\n    /// @notice Returns the total amount of underlying assets held by the vault\n    /// @return The total amount of assets held by the vault\n    #[internal(\"public\")]\n    fn _total_assets() -> u128 {\n        let asset_token = self.storage.asset.read();\n        self.view(Token::at(asset_token).balance_of_public(self.address))\n    }\n\n    /// @notice Returns the total supply of shares\n    /// @return The total supply of shares\n    #[internal(\"public\")]\n    fn _total_supply_of_shares() -> u128 {\n        let shares_token = self.storage.shares.read();\n        self.view(Token::at(shares_token).total_supply())\n    }\n\n    /// @notice Converts an amount of assets to shares using the given exchange rate parameters\n    /// @param assets The amount of assets to convert\n    /// @param total_assets The total amount of assets in the vault\n    /// @param total_supply The total supply of shares\n    /// @param vault_offset The vault offset\n    /// @param rounding The rounding direction (ROUND_UP or ROUND_DOWN)\n    /// @return The equivalent amount of shares\n    // TODO: The multiplication `assets * (total_supply + vault_offset)` can overflow u128 for large values.\n    #[contract_library_method]\n    fn _convert_to_shares(\n        assets: u128,\n        total_assets: u128,\n        total_supply: u128,\n        vault_offset: u128,\n        rounding: bool,\n    ) -> u128 {\n        let mul_term = assets * (total_supply + vault_offset);\n        let denominator = total_assets + 1;\n        let mut shares = mul_term / denominator;\n        if (rounding == ROUND_UP) & (mul_term % denominator > 0) {\n            shares = shares + 1;\n        }\n        shares\n    }\n\n    /// @notice Converts an amount of shares to assets using the given exchange rate parameters\n    /// @param shares The amount of shares to convert\n    /// @param total_assets The total amount of assets in the vault\n    /// @param total_supply The total supply of shares\n    /// @param vault_offset The vault offset\n    /// @param rounding The rounding direction (ROUND_UP or ROUND_DOWN)\n    /// @return The equivalent amount of assets\n    // TODO: The multiplication `shares * (total_assets + 1)` can overflow u128 for large values.\n    #[contract_library_method]\n    fn _convert_to_assets(\n        shares: u128,\n        total_assets: u128,\n        total_supply: u128,\n        vault_offset: u128,\n        rounding: bool,\n    ) -> u128 {\n        let mul_term = shares * (total_assets + 1);\n        let denominator = total_supply + vault_offset;\n        let mut assets = mul_term / denominator;\n        if (rounding == ROUND_UP) & (mul_term % denominator > 0) {\n            assets = assets + 1;\n        }\n        assets\n    }\n\n    /** ==========================================================\n     * ================= AUTH LIBRARIES =========================\n     * ======================================================== */\n\n    /// @notice Validates that the caller possesses authwit from the `from` address or the caller is the `from` address\n    #[contract_library_method]\n    fn _validate_from_private<let N: u32>(context: &mut PrivateContext, from: AztecAddress) {\n        if (!from.eq(context.maybe_msg_sender().unwrap())) {\n            assert_current_call_valid_authwit::<N>(context, from);\n        }\n    }\n\n    /// @notice Validates that the caller possesses authwit from the `from` address or the caller is the `from` address\n    #[internal(\"public\")]\n    fn _validate_from_public(from: AztecAddress) {\n        if (!from.eq(self.msg_sender())) {\n            assert_current_call_valid_authwit_public(self.context, from);\n        }\n    }\n}\n"
    }
  },
  "functions": [
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9640296564857848209": {
            "error_kind": "string",
            "string": "Function admin can only be called statically"
          }
        },
        "parameters": [],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "inner",
                "type": {
                  "kind": "field"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAQQAJwICBAAfCgABAAIARCUAAABCLQIBRCcCAgREJwIDBAE7DgADAAImJQAAAnseAgABAB4CAAIAHgIAAwApAgAEAMcy+XcnAgUAACsCAAYAAAAAAAAAAAIAAAAAAAAAAC0IAQcnAggEBQAIAQgBJwMHBAEAIgcCCC0KCAktDgQJACIJAgktDgMJACIJAgktDgUJACIJAgktDgYJLQsHAwAiAwIDLQ4DBy0IAQMnAgQEBQAIAQQBJwMDBAEAIgcCBAAiAwIFPw8ABAAFJwIEBAEAKgMEBi0LBgUeAgADACkCAAYAA21SfysCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgYKACIKAgotDgMKACIKAgotDgUKACIKAgotDgcKLQsIAwAiAwIDLQ4DCC0IAQMnAgUEBQAIAQUBJwMDBAEAIggCBQAiAwIJPw8ABQAJACoDBAgtCwgFMwoABQADJwIFAQEkAgADAAABoSUAAAKhHgIAAwkkAgADAAABsyUAAAKzHgIAAwAsAgAIABpcQrH5jEPZrXwF2EUtRlAV/lQSbBFNTZ6jMBKZ1nlrLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBgsAIgsCCy0OAwsAIgsCCy0OCAsAIgsCCy0OBwstCwkDACIDAgMtDgMJLQgBAycCBgQFAAgBBgEnAwMEAQAiCQIGACIDAgc/DwAGAAcAKgMEBy0LBwYzCgAGAAMkAgADAAACZCUAAALFHgIAAwAnAgQAAS8qAAQAAwAFLQoFASYoAAAEBHhFDAAABAMkAAADAAACoCoBAAEF2sX11rRKMm08BAIBJioBAAEFBmE7PQudvTM8BAIBJioBAAEFhck2pjXFQZE8BAIBJioBAAEFcjEMljOspz88BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVjdbts8DH0XX+dCIilK6qsMRZG26RAgSIus+YAPRd59ZCzKcQYJWZ3dxMd0fEwekdTP1/C6eT7+fNru395/DQ8/vobnw3a32/582r2/rD+373uxfg1Of6IfHnA1RB4e4mpIcue9XOXWy30O49U7VwB4A/YI7RGahcxC1ZILCGggFcBgIBYQ7ROxeOGTEiYFZCAXkIUQnII4AnBgwCzeLN4sYBYQN0ACBkQDZiH9DymQt1AtgQuIZlG9RmCPsllysaDzBoKBXIAnA6kAQAPlE4hgwAhV3hEYocqLMoqo8o4gFcBmYbNEs0SzqKpICnIBqiqyArXIEJCjAlTMEYiHJBqSikniBmkmjEAcI3md1NUgnyBV7AxUsRFwAdksuViC8waCgVyAKjaCVIAqNoLyiaCKjcAIzY1ARqiKhSBAFRtBKoDNwmaJZolmUcUCK8gFqGIhKVBLXg2s6XcGqhgHBWJhkY5VMY6n02qwgnz6PGw2Wo8XFSp1+7E+bPafw8P+uNuthv/Wu+P5T78+1vvz9XN9kKcyCJv9q1yF8G272yg6raa3XftVkKwsbwNCqAQecUbhOxSOXDQOR+ArSeIZB3Q4YjKGTJMT+fY4OLExxJSacVCbAolMCiSepLhyItxBCf6HSpDLlg8kjbOpRGpTBKdVfKYIjqcoPMzDyHeQwrulWnQDcReBUDMQ30nNSGBexEAdDmxz5KnKMhJUDox+ztFJz+wIjUOGuM3RSVAMYBmeY2WABHOGXnoyGQVwcN/iwBQnN1z6HkdGXzk4tzk6OUox26hQQrhIsL9woxabwHYovRylqmgghmZ+AdyjBeO/rDbMVCO5nEuuI+lkqCw0qxzeeUfNSDqjEnItN3by8VapQFxespCWlyzkpSWLvS7qUx1Yn/l7HFDnRlkyY5sDFpdbz41by62fYZMe3gHEVoZhj4S8pbpscsLiauF2tfTkwBjriuWiVK6neuy4IZuRXDupaANNOXJP01Tl8C5+Z9kyj4WbsfQoYqr1JpgnEqI4XwX25ntMlmNRkmzKMZzHQr35PqpaY+HHi3XHHxx0h55OYWlP74bCNT1yvCiWP0KJd2jqlJY3dcrLm3pwy5t68EubeoDlTb3LcWNTD7S4qffcuLWp9zPsxqYe4vKmfmv3IOfb5dLdcXCoO45OyXEnSz3XLPXMF2Mbac7Ry1JgX/MUGLG5ne2NrpzQUZ1fcmjvifEeG2ta2gv7saSUp1guJu1rN3pbhjBNUuHakUe5Xb9sD7OD2pOSHbbr592m3L4d9y8XTz///7AndtD7cXh/2bweDxtlmk57vfz+8LKjkXPcRzk09XorS1g5xH086ed/Aw==",
      "is_unconstrained": true,
      "name": "admin"
    },
    {
      "abi": {
        "error_types": {
          "12938323047425881034": {
            "error_kind": "string",
            "string": "Function asset can only be called statically"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "inner",
                "type": {
                  "kind": "field"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAQQAJwICBAAfCgABAAIARCUAAABCLQIBRCcCAgREJwIDBAE7DgADAAImJQAAAnseAgABAB4CAAIAHgIAAwApAgAEAMcy+XcnAgUAACsCAAYAAAAAAAAAAAIAAAAAAAAAAC0IAQcnAggEBQAIAQgBJwMHBAEAIgcCCC0KCAktDgQJACIJAgktDgMJACIJAgktDgUJACIJAgktDgYJLQsHAwAiAwIDLQ4DBy0IAQMnAgQEBQAIAQQBJwMDBAEAIgcCBAAiAwIFPw8ABAAFJwIEBAEAKgMEBi0LBgUeAgADACkCAAYAA21SfysCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgYKACIKAgotDgMKACIKAgotDgUKACIKAgotDgcKLQsIAwAiAwIDLQ4DCC0IAQMnAgUEBQAIAQUBJwMDBAEAIggCBQAiAwIJPw8ABQAJACoDBAgtCwgFMwoABQADJwIFAQEkAgADAAABoSUAAAKhHgIAAwkkAgADAAABsyUAAAKzHgIAAwAsAgAIABIhgrkzO03evej2xHwRTaXM3284FyA5abYAG4RT4jUnLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBgsAIgsCCy0OAwsAIgsCCy0OCAsAIgsCCy0OBwstCwkDACIDAgMtDgMJLQgBAycCBgQFAAgBBgEnAwMEAQAiCQIGACIDAgc/DwAGAAcAKgMEBy0LBwYzCgAGAAMkAgADAAACZCUAAALFHgIAAwAnAgQAAy8qAAQAAwAFLQoFASYoAAAEBHhFDAAABAMkAAADAAACoCoBAAEF2sX11rRKMm08BAIBJioBAAEFBmE7PQudvTM8BAIBJioBAAEFs44oQu8Rs8o8BAIBJioBAAEFcjEMljOspz88BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVjdbts8DH0XX+dCIilK6qsMRZG26RAgSIus+YAPRd59ZCwqdgYJWZ3dxMd0fEwekdTP1/C6eT7+fNru395/DQ8/vobnw3a32/582r2/rD+373uxfg1Of6IfHnA1RB4e4mpIcue9XOXWy30O49U7VwB4A/YI7RGahcxC1ZILCGggFcBgIBYQ7ROxeOGTEiYFZCAXkIUQnII4AnBgwCzeLN4sYBYQN0ACBkQDZiH9DymQt1AtgQuIZlG9RmCPsllysaDzBoKBXIAnA6kAQAPlE4hgwAhV3hEYocqLMoqo8o4gFcBmYbNEs0SzqKpICnIBqiqyArXIEJCjAlTMEYiHJBqSikniBmkmjEAcI3md1NUgnyBV7AxUsRFwAdksuViC8waCgVyAKjaCVIAqNoLyiaCKjcAIzY1ARqiKhSBAFRtBKoDNwmaJZolmUcUCK8gFqGIhKVBLXg2s6XcGqhgHBWJhkY5VMY6n02qwgnz6PGw2Wo+TCpW6/VgfNvvP4WF/3O1Ww3/r3fH8p18f6/35+rk+yFMZhM3+Va5C+LbdbRSdVpe3XftVkKwsbwNCqAQecUbhOxSOXDQOR+ArSeIZB3Q4YjKGTBcn8u1xcGJjiCk146A2BRKZFEh8keLKiXAHJfgfKkEuWz6QNM6mEqlNEZxW8ZkiOL5E4WEeRr6DFN4t1aIbiJsEQs1AfCc1I4F5EQN1OLDNkS9VlpGgcmD0c45OemZHaBwyxG2OToJiAMvwHCsDJJgz9NKTySiAg/sWB6Z4ccOl73Fk9JWDc5ujk6MUs40KJYRJgv2FG7XYBLZD6eUoVUUDMTTzC+AeLRj/ZbVhphrJdC65jqSTobLQrHJ45x01I+mMSsi13NjJx1ulAnF5yUJaXrKQl5Ys9rqoT3VgfebvcUCdG2XJjG0OWFxuPTduLbd+hl308A4gtjIMeyTkLdVlkxMWVwu3q6UnB8ZYVyyTUrme6rHjhmxGcu2kog005cg9TVOVw7v4nWXLPBZuxtKjSI5reiQ3SVOiOF8F9uZ7edXme0myS47hPBbqzfdR1RoLP07WHX9w0B16OoWlPb0bCtf0yHFSLH+EEu/Q1Cktb+qUlzf14JY39eCXNvUAy5t6l+PGph5ocVPvuXFrU+9n2I1NPcTlTf3W7kHOt8ulu+PgUHccnZLjTpZ6rlnqmSdjG2nO0ctSYF/zFBixuZ3tja6c0FGdX3Jo74nxHhtrWtoL+7GklC+xTCbtazd6W4ZQRwbDtSOPcrt+2R5mB7UnJTts18+7Tbl9O+5fJk8///+wJ3bQ+3F4f9m8Hg8bZbqc9nr5/eFlRyPnuI9yaOr1Vpawcoj7eNLP/wY=",
      "is_unconstrained": true,
      "name": "asset"
    },
    {
      "abi": {
        "error_types": {
          "14415304921900233953": {
            "error_kind": "string",
            "string": "Initializer address is not the contract deployer"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "3424173660575720123": {
            "error_kind": "string",
            "string": "vault_offset must be greater than 0"
          },
          "9967937311635654895": {
            "error_kind": "string",
            "string": "Initialization hash does not match"
          }
        },
        "parameters": [
          {
            "name": "admin",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "asset",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "vault_offset",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_initializer"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "constructor"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "17575855721250604774": {
            "error_kind": "string",
            "string": "Function convert_to_assets can only be called statically"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "convert_to_assets"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "354807202822353": {
            "error_kind": "string",
            "string": "Function convert_to_shares can only be called statically"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBIJwAABEglAAAASicCAgQBJwIDBAAfCgACAAMARhwARkYGLQhGASUAAABeLQIBRycCAgRHJwIDBAE7DgADAAInAEMBAScARAQDKQAARQT/////JiUAAAbBHgIAAgAeAgADAB4CAAQAKQIABQDHMvl3JwIGAAArAgAHAAAAAAAAAAACAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4FCgAiCgIKLQ4ECgAiCgIKLQ4GCgAiCgIKLQ4HCi0LCAQAIgQCBC0OBAgtCAEEJwIFBAUACAEFAScDBAQBACIIAgUAIgQCBj8PAAUABicCBQQBACoEBQctCwcGHgIABAApAgAHAANtUn8rAgAIAAAAAAAAAAADAAAAAAAAAAAtCAEJJwIKBAUACAEKAScDCQQBACIJAgotCgoLLQ4HCwAiCwILLQ4ECwAiCwILLQ4GCwAiCwILLQ4ICy0LCQQAIgQCBC0OBAktCAEEJwIGBAUACAEGAScDBAQBACIJAgYAIgQCCj8PAAYACgAqBAUJLQsJBjMKAAYABCQCAAQAAAG4JQAABuceAgAECSQCAAQAAAHKJQAABvkeAgAEAB4CAAYAHgIACQAsAgAKABIhgrkzO03evej2xHwRTaXM3284FyA5abYAG4RT4jUnLQgBCycCDAQFAAgBDAEnAwsEAQAiCwIMLQoMDS0OBw0AIg0CDS0OCQ0AIg0CDS0OCg0AIg0CDS0OCA0tCwsJACIJAgktDgkLLQgBCScCCgQFAAgBCgEnAwkEAQAiCwIKACIJAgw/DwAKAAwAKgkFCy0LCwozCgAKAAkkAgAJAAAChSUAAAcLHgIACQAnAgoAAy8qAAoACQALKQIACQD/eUnyLQgBCicCDAQDAAgBDAEnAwoEAQAiCgIMLQoMDS0OCQ0AIg0CDS0OBg0nAgYEAgAiCgIJOgOgAEUARQALAAYACSACAAYhAgAJJwIKBAAtCAEMACIMAg8tCw8PLQoPDicCEAQDACoMEA0iOgAJAAoADS0KCQ4nAwwEAQAiDAIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgsGIgsCCyQCAAYAAAN9IwAAA1AtCwwCACICAgItDgIMACIMAgQtCwQELQoEAycCBgQDACoMBgI8DgMCIwAAA30KKgsFAiQCAAIAAAOTJwIDBAA8BgMBACIMRAMtCwMCHAoCBAYcCgQDABwKAwIGHgIAAwAeAgAEAB4CAAYALAIACQAi6AqrEV/3+TOscuwt1elSqCJpHw/Z4fMwbfpTeuvzYi0IAQsnAgwEBQAIAQwBJwMLBAEAIgsCDC0KDA0tDgcNACINAg0tDgYNACINAg0tDgkNACINAg0tDggNLQsLBgAiBgIGLQ4GCy0IAQYnAgkEBQAIAQkBJwMGBAEAIgsCCQAiBgIMPw8ACQAMACoGBQstCwsJMwoACQAGJAIABgAABGYlAAAHCx4CAAYAJwIJAAUvKgAJAAYACykCAAYAjdOC7C0IAQknAgwEAgAIAQwBJwMJBAEAIgkCDC0KDA0tDgYNACIJAgY6A6AARQBFAAsABQAGIAIABiECAAktCAEMACIMAg8tCw8PLQoPDicCEAQDACoMEA0iOgAJAAoADS0KCQ4nAwwEAQAiDAIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgsGIgsCCyQCAAYAAAVLIwAABR4tCwwDACIDAgMtDgMMACIMAgYtCwYGLQoGBCcCCQQDACoMCQM8DgQDIwAABUsKKgsFAyQCAAMAAAVhJwIEBAA8BgQBACIMRAQtCwQDHAoDBgYcCgYEABwKBAMGHgIABAAsAgAGABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBwsAIgsCCy0OBAsAIgsCCy0OBgsAIgsCCy0OCAstCwkEACIEAgQtDgQJLQgBBCcCBgQFAAgBBgEnAwQEAQAiCQIGACIEAgc/DwAGAAcAKgQFBy0LBwYzCgAGAAQkAgAEAAAGKiUAAAcLHgIABAAnAgUABy8qAAUABAAGHAoGBQYcCgUEABwKBAUGACoDBQQOKgMEBiQCAAYAAAZiJQAABx0EKgEEAycCBgYACioGBAUkAgAFAAAGkAYqAwQICioIAQckAgAHAAAGkCUAAAcvJwIBBgEAKgIBBA4qAgQFJAIABQAABqwlAAAHHQYqAwQBBioDBAUEKgUEBgIqAwYCJigAAAQEeEgMAAAEAyQAAAMAAAbmKgEAAQXaxfXWtEoybTwEAgEmKgEAAQUGYTs9C529MzwEAgEmKgEAAQUAAUKx/Um40TwEAgEmKgEAAQVyMQyWM6ynPzwEAgEmKgEAAQXQB+v0y8ZnkDwEAgEmKgEAAQUFBBuZIK9gTDwEAgEm",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tZtdbhs5DIDv4uc8iPqhxF5lURRpmy4CBGmRTRZYFLn7khpRGrsYWvVMX5LPtIdDURRFjuyfp68Pn9/+/vT4/O37P6cPf/08fX55fHp6/PvT0/cv96+P359Z+vPk5A/R6UO4O4GLpw9Z/vNrAAZgAYjEB4XSIFKDpG8lfQtVgirJKsm5QQEFbEBOISm0W3gXFURhYQCvkBt4VuidQGoQnIJKokqiSpJKEpvhecgeQUElWT4TBfiqIJISFwguKVAD0LdAJV4lXiUhKOQG0StggwQKegt0CqpQ3Fshq0Jxb+CZDOLeBbABqYSaJDpQUIl4NUSB3EC8GlBAJDwFUZxZQZwZnQBLIt89SiQswIZFuUoiIclnxNSUGMRU9HenBE4hKlADrxKvkqCSUBqIxxbIDcRjC2AD1FtgUlCF3YysCosojALYQDy2QJOgAwWVgErEY8gDRO8V5DPsKAwi4RBF8dgCbE+WqyT8MgqkBuKxwj7E7BWwgczpAiohlVCTZOcUogI1ANEcBEoDr5Igl7PNWSwsWUAuJwFqIJO7QGmAXgEbZFBQSdEPk15OTVKcV8gNABTa5cWrxKtEFnWFKHrYmSV5hdxAljCBADaQJbxAVKAGRSViIQWBsgDJLFcQwxbgaSKeOPJOQS7PAtQgqCRI+nIcWyTeBIdCNbPy7SiJTDIXySw2So3AyUQqDikMKayk1LHm6Yalo0SgYu4YYSB2TOMW3UTGcYua3SVnMuaOEq6KQ1qGtAwpDan4GnzdalwYWD8rOxJAlUZBCQZFsTeIBggiDb4idqwelzQFy/7UMHeU4FUc0jykeUjrXtVQvB5IsO5XFX01XTIfo1wWxXQvUQMxVUwdJXIU48DSMYSBQ5rGZWkowyHFoUyyXMM8lOWhrAxpGdI6LRVDjbMYK8aB1LHGWcwVS8caZw2xY42zhkO6jELcF5ZRLFg6LqYvKE6VfQRCjaiGoiyJq+vmptildYPjqqSiSCUts/1hYO4oWURxSHFIcUglzSmmjsUNjAOpI40b17CvmJwf2I1MAAPrLWqBVSdgwRo7DYc0DGkY0jikNYxkD2JMA2uhJU6tWyVkCeW0FG0L1kJuKfKqlCqWjtXrss1A3SQVh7QOSDYbRuzoh7SOYsE6ihIrUsc4pHFI62QtWCer4ZDWGVqwzpDsc4ypIw0pdWmuS7phLTpRsGajUgtZKB39In1/vztpbf3p9eXhQUrrVbHNJfiP+5eH59fTh+e3p6e707/3T2/1Q//8uH+u/1/vX/hdnoiH56/8nxV+e3x6EHq/G1e77Uu56E3tah986gp4QZ6pAEOFiy6rDscVYFdS8EyHN3TkohooDiNofhwoDl80cBGxOY64rSLEqK7gvDNccWFEOsAT+Ac9ER1pPEQobtMTZVtFcrI3VRWcY8YoeKc4U0EHuALcXl+YA3GrgcTNgYARmjl6tSJzZtzWEbZ10FhlXO75riNkONdhhCc5qRIWHTzF2zqMAA3Ja4RT7hp88ecarPDEqCo8dyM36QglDzNcuU0HBeg6kLZ1GDEaM+msxBL8KsB+w4y+2Bi3h2LFaOweTVw/bMaX90ek4PAnV1uQDqeNZL2XXI7EiFDuXro7pH2JmyMxZiVRX27o+OZbS8Xn/UvWl/1L1tPeJRusLAqlTywQ3qbD972RW4+wrcPvXm6WGbPLzY6w4Q9uen3eirBgKYmgoc71f9q9WnB7tVjuCDn3imW1VC63+mCYwU8iqWdS9o3fdAdZPi3dHdyM31K2nI8FN8diqSiFtAgMhfwIU27czqtAI0whx5FKQ1jNy/lYYrDiNOWxalf+COc+jfGAnB7T3pxuDYWf3+rUcn2M20PJuyvrWI7wBv1Jb2DCXg0yJ9gMsWR0TDkUTWOZ89hIY+Gi1TDClLIsyGVvyavS9hcd4QCnprjXqeZQsGcgyqt8/MtQ8IC6IeX9dUMq++uGRPvrBnR76waE/XWDqWOybsCwu26wzJitG+wIm6wbEPfXDbPZgx9Zbi8XS0fE1JtaY8mhteljj1J+gLaa2xzPdGQrSvn4tMepx9V2e+HUbM0uUIi9hKG0mcbyES1U3t1C2WMphcZYVpvlpRlmm99nJqTbdzoMY6fLfnOny0ZGxZi1IsNYNnf+bCTUgkFVFMxjWvKFP8xITX6EKh/zbjm1GKGKLnR/8PnXSMq/Y0avcfk5M27uUcWbD2x7jPHhxnaQmYaUhN2QkjeDrFj7PmJfL7h+4vpbhlAvp+Rp+vbEmE9MY+yPfvFmQ1xcGbK5+otVo5Ze9Xty7jZDsvM9RrLbNoSsrBqh55AYjURkLbuMqqPk1cq9WHZkdlKjK8yrMjfSvArqD3Bh/ajwQoU9kB4eZX0ycDkQI5+m0ospPsNaDcSXcx1opg/q6WOVgS51mP0tdR3MGTdTMpX9/S3R/v6Wq/JDjghg75ZrDWa2wwUXdre44OIhDkl/0iGYyPddO62z8mWcgcv7u1xwZX+bC+6Qw6j9p1H2aCY7XbAOpKZbXbCOpGZ7XTDPpGbPtaxDqemDLfMgZu5kC/L+ftdWMtnwwhEHU5Yhsy3vlVCb7HnBOp2abXqns4nV9dpKJtteMA8QJvtesI6ophtfsA6ppjtf8Ec8WwW/++HqleFMNr8QYH/3e2ULRD+2wLz9nBdC2N3+Qoi7+18wj6tmG2AI5rEqqiXskrTRAV8zZK4FBuvMarYHvmLKZBMM0e3vgq+YMtkGQ/T7++Brpsw1wmCeXU12wrYps60wRNzfC9trcK4Zhlh2d8O2jrl2+MpYpvphsB4fzzbEYB37HNMR0+qrRH77ISVYR1jTnUpKB3Qq1iHD/FZsnWNNbsXmaGY7lURHdCrWSdZ0p2KdAE13KugP6FSs46zZ7+DFAzoVU8lsp2KdZ01/hS4e0KnYoTbbqZhHWrOdymw2MTsVU8lsp2KdaU13KtaZ1nynkuMRnUo+4gvWkHd/xfrKcGY7FevR9Gyncm1+3Gp+Ytk0xTrdgvHVKSBYfXMK/PxmXHplwZtxou3N2DrgQiyuH7RhCe5WNZnWauBmaxINNasu4TfVUJ8kZh9vVjMOZZHKhTUf+eX9l8eXs19sv4u6l8f7z08P7eW3t+cvq3df//uh7+gvvn+8fP/y8PXt5UE0jZ99y6+8/gr81Cl4/1F+0iYvuYQPIX98l9v/Dw==",
      "is_unconstrained": true,
      "name": "convert_to_shares"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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3VUyeXeVTN5dJZN3V8nk3VUyeXeVTN5dVSjjVibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrhK6fJHJu6tk8u4qmby7SibvrpLJu6tKZNzK5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXSWTd1fJ5N1VMnl3lUzeXXWfjFuZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q9bJuJXJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7Sibvrtoi41Ym766SyburZPLuKpm8u0om766Syburtsm4lcm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7q2Ty7iqZvLtKJu+uksm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtrZsi4lUmna2bKuJXJkmvKZMk1ZbLkmjJZck2ZLLmmTJZcUyZLrimTJdeUyZJrymTJNWWy5JoyWXJNmSy5pkyWXFMmS64pkyXXlMmSa8pkyTVlsuSaMllyTZksuaZMllxTJkuuKZMl15TJkmvKZMk1ZbLkmjJZck2ZLLmmTJZcUyZLrtlZxq1MllxTJkuuKZMl15TJkmvKZMk1ZbLkmjJZck2ZLLmmTJZcUyZLrimTJdeUyZJrymTJNY+WcdtDxq1M/ltTJv+tKZP/1pTJf2vK5L81ZfLfmjL5b02Z/LemTP5bUyb/rSmT/9aUyX9ryuS/NWXy35oy+W9Nmfy35jAZtzL5b02Z/LemTP5bUyb/rSmT/9aUyX9ryuS/NWXy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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "deposit_private_to_private",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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mJXJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrvm6jFmZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d81vZczK5N01ZfLumjJ5d02ZvLumTN5dUybvrvmzjFmZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8nk3bVk8u5aMnl3LZm8u5ZM3l1LJu+uJZN315LJu2vJ5N21ZPLuWjJ5dy2ZvLuWTN5dSybvriWTd9eSybtr1ZYxK5NO16orY1YmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl15LJkmvJZMm1ZLLkWjJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5lkyWXEsmS64lkyXXksmSa8lkybVksuRaMllyLZksuVYnGbMyWXItmSy5lkyWXEsmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl1zpMxmx3GbMy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWkNkzMrkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1iqWMSuT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31qk/LcD8sYUFU/qV5hfMid+5Wpr1O577Nlhr7336dip875duu63/wEHHnTwIYd2O6x7j569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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "deposit_private_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "deposit_private_to_public",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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9gAe2AN5YA/igT2YB/YQHthDeWAH8sDy/NKIQOVqNnk+HRSDeWCH8MAO5YEdxgM7nAd2BA/sSB7YDB7YUTywo3lgD+eBHcMDO5YHdhwPLE/eXcGTd1dM4IHlybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u6KQB5Yn767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuigoeWJ68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsr7uaB5cm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K5g+nufJuyt48u4Knry7gifvruDJuyte4YHlybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In7674kgeWJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K37ggeXJuyt48u4Knry7gifvruDJuyt48u4Knry7gifvruDJuyt48u4Knry7gifvruDJu6vz5N3VefLu6jx5d3WevLs6T95dnSfvrs6Td1fnybur8+Td1Xny7uo8eXd1nry7Ok/eXZ0n767Ok3dX58m7qzfhgeVJp6s344HlyZKr82TJ1Xmy5Oo8WXJ1niy5Ok+WXJ0nS67OkyVX58mSq/NkydV5suTqPFlydZ4suTpPllydJ0uuzpMlV+fJkqvzZMnVebLk6jxZcnWeLLk6T5ZcnSdLrs6TJVfn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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "deposit_public_to_private",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "deposit_public_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "13257043288428800530": {
            "error_kind": "string",
            "string": "Zero shares, insufficient assets"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "26387131971136782": {
            "error_kind": "string",
            "string": "Invalid response from registry"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "deposit_public_to_public"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "5840832052917126499": {
            "error_kind": "string",
            "string": "Function get_vault_offset can only be called statically"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAQQAJwICBAAfCgABAAIARCUAAABCLQIBRCcCAgREJwIDBAE7DgADAAImJQAAAooeAgABAB4CAAIAHgIAAwApAgAEAMcy+XcnAgUAACsCAAYAAAAAAAAAAAIAAAAAAAAAAC0IAQcnAggEBQAIAQgBJwMHBAEAIgcCCC0KCAktDgQJACIJAgktDgMJACIJAgktDgUJACIJAgktDgYJLQsHAwAiAwIDLQ4DBy0IAQMnAgQEBQAIAQQBJwMDBAEAIgcCBAAiAwIFPw8ABAAFJwIEBAEAKgMEBi0LBgUeAgADACkCAAYAA21SfysCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgYKACIKAgotDgMKACIKAgotDgUKACIKAgotDgcKLQsIAwAiAwIDLQ4DCC0IAQMnAgUEBQAIAQUBJwMDBAEAIggCBQAiAwIJPw8ABQAJACoDBAgtCwgFMwoABQADJwIFAQEkAgADAAABoSUAAAKwHgIAAwkkAgADAAABsyUAAALCHgIAAwAsAgAIABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBgsAIgsCCy0OAwsAIgsCCy0OCAsAIgsCCy0OBwstCwkDACIDAgMtDgMJLQgBAycCBgQFAAgBBgEnAwMEAQAiCQIGACIDAgc/DwAGAAcAKgMEBy0LBwYzCgAGAAMkAgADAAACZCUAAALUHgIAAwAnAgQABy8qAAQAAwAFHAoFBAYcCgQDABwKAwQGLQoEASYoAAAEBHhFDAAABAMkAAADAAACryoBAAEF2sX11rRKMm08BAIBJioBAAEFBmE7PQudvTM8BAIBJioBAAEFUQ7NzlrXRWM8BAIBJioBAAEFcjEMljOspz88BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVhbbuM6DN2Lv/MhPvTqVgZFkbbpIECQFpnkAhdF9j5kLMpOBxIydeYnPqbjY/KIpB6fw+vm+fTzabt/e/81PPz4HJ4P291u+/Np9/6yPm7f92L9HJz+RBgeaDXEMDzE1ZDkDkCucgtyn/14BecKQDBgj8gekVnYLFwtuQBPBlIBAQ3EAqJ9IhYvIClhUsAGcgFZCNEpiCNAhwbMAmYBs6BZUNxACRiJDJiF9T+sQN4itfhQQDSL6jUCe5TNkouFHBjwBnIBwAZSAUgGyieI0IARqrwjMEKVl2QUSeUdQSogmCWYJZolmkVVJVaQC1BVKShQiwwBOy5AxRyBeMiiIauYLG6wZsIIxDGW11ld9fIJVsUuQBUbQSggmyUXi3dgwBvIBahiI0gFqGIjKJ/wqtgIjNDc8GyEqpj3AlSxEaQCglmCWaJZollUMR8U5AJUMZ8UqCWvhqDpdwGqWPAKxBJEuqCKXYAqFvQ/qtgF8MVyPq8Gq9Wn42Gz0VKdFa+U9Mf6sNkfh4f9abdbDf+td6fLn359rPeX63F9kKcyPpv9q1yF8G272yg6r6a3XftVlIQtbyOhrwRAdEUBHQrHLhqHY4RKksIVB3Y4YjKGzJMT+fY4QgrGEFNqxsFtCmI2KYjDJMUXJ/wdlAj/UAl22fKBpac2lUhtCu+0wC8U3oUpCsDrMPIdpAC3VItuIG4WCDcDgU5qRkbzInrucFCbI09VlomxclCEa45OembHZBwyxG2OToKSR8vwHCsDJrxm6KVnYKPA4N23OCjFyQ2XvseRCSqHtNImRydHOWYbFU6EswT7CzdqsQlsh9LLUa6Keg7YzC/Ee7Rg+pfVRplrJPO55GsknQyVNWiVAxw4bkbSGRWfa7kFJx9vlQrG5SWLaXnJYl5astTropDqwEIO3+PAOjfKapraHLi43Hpu3Fpu/Qyb9ACHGFsZRj0SBkt12f/4xdUS2tXSk4NirCuWWal8neqp44bsU3LtpKINNuXIPU1TlQNc/M6y5TqW0Iylt/KRvYm5IZgmQZjj9SqwN99TshyLkmRTjtF1LNyb76OqNRZ+nK07/uDgO/R09kt7ejeUUNMjx1mx/BFKvENT57S8qXNe3tS9W97UPSxt6h6XN/Uux41N3fPipt5z49am3s+wG5u6j8ub+q3dgx20y6W74wi+7jg6JRc6WQqhZimEMBvbyNccvSzFADVPMRA1t7O90ZXDO67zS/btPTHdY2PNS3thP5aU8hTLbNL+6kZvy+DryJDvOdIfGTcbGU5NRzoNVY5X7cgEMkyDK4d/5/Oj3K5ftoerw+Szkh226+fdpty+nfYvs6fH/z/siR1GfxzeXzavp8NGmaYTaZDfHyC7M0B+lINd0FvZ0sl0/3jWz/8G",
      "is_unconstrained": true,
      "name": "get_vault_offset"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "H4sIAAAAAAAA/+1dB3hUVdPOLdt3Q+8gKCKgogJiV6QLShFUbBgjBIyGBEJCsxFBsaBAwF6wAKKIomJvYC87YlcUxd4LNsTKP6HtTbJl7s0Mg/8Hz/f8/3X3ZM55z3lPm7nvrFU++6pV++bk5E4uyRueU1ick19YkldcmFswLicnf9y40rycMcX543NL8nJKirY+5k3MHV4Ctc5Ynd21bGn3gtzhZ3Yvmti7tHB4j9yCgrIFg7sN6NOrvOy2ofklhXnjxpmtCIUsg1CoDsVSvcMJhRrGpxBKNSKVak5pVQtKoZ0ohVpSCrUitXxnUqldSKVak0rtSml8W5Kpdlhqcffi/IKC/FEVBeZmzZo1Z9asZ1plpf9nlN3Rbdy4vOKSE/OKi+bMml3+TKt9Rgwo/rjjTe0fGtTrgbKy44e16/zVEZMeHjO7x8e/zVmLfwJWBrNvdfj0TC9mZ6c069/ykKQnlg0qGpeXP6KosNOgvOLRpSW5JflFheVzt/YMNnfrc5utT7s5vp89F6xysOaAhQ9XVG75nPLMXdiWUAZrIPXBlRlNZblvYDtSA+eQGniVRAPbkxo4l9TAqwkN9MKiKx3PVzmer3Y8X4EEugasa8G6DqzrK/dDOQHjriSENxBmdeYVA+20ct/CeqQW3pjBkHH0FFILbzy88qJmzC5bOCS/cFRB3qY1JVNrKX2VtdHm6DEFeWDNoy2ZlKbPMyo3vb5w029yv9rPnkNqBtqmNfjmzNTwVv/Ns1wuOjTL89AybdGbRyp1M6nULR5GidDCzVgIqGljScJyq8i44IjPo50Y5hPqrzQLTZez0Mhcweqs2olZuCDxuDDxeFvicVHi8fbE4x2Jx8WJxzsTj0sSj3clHu9OPC5NPN6TeLw38Xhf4nEZ3yq3mFbsLlqxe2jFlnk6tN6fHvI5p3022YvZB1Katbc8eDpu3O94XuB4XuR4fgCPGw+C9RBYD4P1iPtjF5KUVOpBUk88KnTwetTx/JDj+WHH8yPYE4+B9ThYT4D1pJdxXJ6y9VaNWu8cx9scz485npdj61eA9RRYT4P1jJfWP5u+7/camt3Pi9nnUpqN1ahTnnU83+54vsPx/Bx2yvNgvQDWi2C95IXci0mlnif1xMsS1x5c4kmlXiA1MS7TxCWkUi+SmghCS8TLjue44xkczy8hn14BayVYr4L1mpeeuItU6hVST7wuM1h3k0qtJDXxDZkmLiWVepXUxDeF+PS64/kNx/ObjufXkE9vgfU2WO+A9a6XnriHVOotUk+skhmse0ml3iY18T2ZJt5HKvUOqYnvC/FpleP5Pcfz+47nd5FPq8H6AKwPwVrjpSeWkUqtJvXER0I98ZHj+QPH84eO5zXYEx+D9QlYn4L1mZdzy+fpW3/G1f3AU+s/dzx/7HheUeUw9wVYX4L1FVhfV75+Wq6dQF9kHofyxM3um8Tjtx68/zSafUEagm+qlzq5Sim09a3bC7xdnujBJPiq1uC2u79x5XP7ju8i/V2SoaB1ctXqqtaPtkm2vs/Ym1kkJN9jJMoDlG9JpWhQfqgOpeofkaD8kDT0dlf/0oKS/CHDcwtyi/Fx7pyyRT2KCseV5BaWEMhQvay5st4ppf75w4Z3aBvr9VPjunOndn3msvO7tt3Thd0sZ7O/cTx/66Zxc8D6Eay1YP2UBPbSXqNPyxsxIm9Ej9Li8XndRoxA4Il6fnQ8r3U8/+QsdKfjeYnTPeSykT+D9QtYv1aPXmSihkFaBH52e1ChbUq/pTf7/Ue7jPe0Kf229dlI4Seq2JLWgfU7WOvB+qNmcQnD1Qr5p0xUAgfpz1kuow3EUforfe3W6MHneRqlv5KO0roqo/Q3WP+A9S9YGyqPkq/c7U62jkBiuYG3s9i2RrvqKaWchP8GymjbBlMbjVaVx8s/u9Ixpe7O5z/c+eD+Hz7+1bpnzq7Tf0F8TdEBjVodmP9AVrNpQz7p0tbRcabHtzYy/QVaFpkwtpUZHt+Esa3KE8a2wfaB7Qc7kHrCEAZAcioE+aZC0MtUsA3SOIaY2hiqMhUCq7Mau+tem3vp8nEb9HMbDHAbDHIbDHEbDHMbjHAbjHIbjHEbzOY2WIvbYG1ug3W4DdblNliP22B9boMNuA025DbYiNtgY26DTRTO12ldX1X+WY4TSFjqTWCbsuZ6MJt65d3q3vJyprTDjudIiuconipjYGeDXQvs2l5an2GJ6jfs5p+9mM28UNmeOqVO0oN23SoH7Xpg1we7AdgNKx/vgquzGu043mUwuON4V3ODO453NTe443hXc4M7jnc1N/g/eLzDHTSzySsTZ7ZGicfGiccmicemicdmZQu6FRfnTlqd1Q7s5mC3AHsnsFuC3QrsncHeBezWYO8KdhuwdwO7LdhYrD3Yu4O9B9h7gt0B7L3A3hvsfcDuCHYnsDuDvS/YXcDeD+z9wT4A7APBPgjsg8E+BOxDwT4M7K5gHw52N7C7g93DY7Q586mnHqlvG5Ns9SQMas1EG5QqHAfzXkKiDbsn2qY1uLeEaKOi/t5uRRu01w9skgKJSIg+8oTo44oQR0gRog/apjW4rwghsP6+s9z2dqhcYI11a7KxqwHsR73N9SUMM8Xd3s+o4StGFICJV4zsIxOPR9G0SXZfbCWtKf1cLhn0+mmRkn6koevvoZWZ6z4SDdOoM4BQP4U6A6q8qUNr51Hkdg5kaufAJO0kjBICJLUze3DNWVf91baK+gfS6h8iwqfG2AQS67MHk0oNcbt6y76qR5kFjnV5ENVsfybSDsq4S1d/U6+CM4NonDnG7eFqbnnGIahoAGliH81Iq2OY+vvoqq8dJgNcFRoVcAWUeh2z3mm5psukPRruVzRw/LQ1xyw5t/6t7b+s1fiH0kPG/7G6CGcIlmrRuf91KwafsfSyg2r16RR+45w3Ljyj89szLz5/91+mDJ3kb13OB3hw1Ywf7nf+eq52/iGJx2M4Z5P7pQ2nyRDaFnQsU2cf62mrxHYeQ2vncUztPM7rVnksbdk5TmqrPI5W/1ARPtUjb5XHkUoN3c62ymNdbZVDt/VWOdTjVjmUxpnjNbfK4xlpdTxTfx8vuVWeQNoqh5K2Si7AJ1TdKu1ygdOm7Kw8cVvPyhM9zsoTabPyBLez8gra3ZxU6iTavZBx7p7ANConJZu7mQGfTJpvQxjnLhfgk7f1MXdY4vEU4vlhi4OJ4IoilcrsBvPiAq5o5RzOVpJK5Yhgwe0oh3ayPpWJh6d6ugGcQm5nLlM7cz3dAHIQIG3dPlnkBoD159LqHyZ1A8ih3QBOJpWitHJb3gBOdXXWOI1qNoeJtKd5OWsgZ06jceYUmRtADmliD2ek1SlM/T3c2w2ABngE6RQxjHSK4AI8ouanCHdhsrzE40jO2eR+acNpkkfbgkYxdfYoT1sltnMkrZ2nM7XzdK9b5SjasnOq1FZ5Oq3+XBE+NSZvlaeSSuVuZ1vlKFdbZf623irzPW6V+TTOnKa5VZ7BSKvTmPr7DMmt8kzSVplL2iq5AJ9Zc2cZZeETnZUF23pWFniclQW0WTlcxllGI+lo2r2Qce4OZxqV0d6cZYWk+TaMce5yAS70lHuH+I5tU5KtIrfbuftXKotcrQVjpF6pLELbtAaPFXmlEusfuw1eqWzKv5jXczWAxdRXKscShpkyi4qNbetxHpd4LCFeQsZiK2lNKa75JSRF/bRXKotJQ1cqclXBsSylUWc80wI83tPVt4TczglM7Zzg6epbigBpB5aRIldfrH8Crf5RInxCL3Ep7eo7klRqlNvVW/jqO97VujyRaraUibQTvRyykTMTaZw53SVniFffUtLEnsRIKy7/2CRvV18a4Mmk4/Mo0vGZC/DkmnuJm7ra+c9KPJ7NOZvcL204Tc6ibUHnMHX2OZ62Smzn2bR2nsvUznO9bpXn0JadM6S2ynNp9Z8pwqem5K2S5vQ7czvbKs9xtVWet623yvM8bpXn0ThToLlVTmGkVQFTf0+R3CrLSFvlmaStkgtwWc29xJQ7l+isPH9bz8rzPc7K82mzcrSMl5hG0qm0eyHj3B3NNCpTvXmJp5Hm2yjGucsFeNq2PuZekHi8kHh+2OJgIriiSKWKRVzAFa2cw9lKUqnpIlguQMO0k/VFTDy8yNMN4EJyOy9maufFnm4A0xEgbd0eI3IDwPovptU/1kP9WRnHCW8A02k3gDGkUpRWbssbwEWuzhqXUM1OZyLtJV7OGsiZS2icKXZ71qDdAKaTJvaljLQqZurvS73dAGiAZ5BOEWNJpwguwDO2tTDjssTj5Zyzyf3ShtPkMtoWNJOps2d62iqxnZfT2jmLqZ2zvG6VM2nLTonUVkkLMWfLOF/rkbfKElKp0u1sq5zpaqucva23ytket8rZNM6M19wqOWnFFSQvl9wq55C2ylLSVskFeE7NnWWUO5forJy7rWflXI+zci5tVk5wOytpzjIaSUm2iAdY2tzlenHkCm/OsitJ820s49zlAnxl1blbX8JZ5phoV0m9r4gX8qtoDb5a5H1FrP9q1+8ruu/tZq56+xqp3m6GtmkNvlakt7H+a91mYKVZvhot024V19X8tJ78tnAdLVXsdFKp60hYrne7X9C8171JpW4QoWgOoqIN5I2eFtPMPz3R2PHcxPHc1PHjEw/MBXse2DeBfTPYt3jJGNyMVGoeqSduFeqJWx3PNzmeb3Y834I9MR/sBWAvBPu2yutkgzlu10lXOdgzryTt3BQ2Zzszli8C+3aw7wB7Mdh3gr0E7LvAvhvspWDfA/a9YN8H9jKw7wf7AbAfBPshsB8G+xGwHwX7MbAfB/sJsJ8EeznYK8B+CuynwX4G7GfBfg7s58F+AewXwX4J7JfBjoMNYL8C9kq+X+VbRCt2O63YHbRii2nF7qQVW0Irdhet2N20Yktpxe6hFbuXVuw+WrFltGL304o9QCv2IK3YQ7RiD9OKPUIr9iit2GO0Yo/Tij1BK/YkrdhyWrEVtGJP0Yo9TSv2DK3Ys7Riz9GKPU8r9gKt2Iu0Yi/Rir1MKxanFQNasVdoxVZW+SWL1VntaVsu6YixKEOpHzds2IC7SeZS/+BmkrnUH7iXZC71E24lmUt9jDtJ5lK4Sd+VuVQZ7iOZS2GvLs1Y6l8sdU/GUn9jqXszllqPpe7LWGotllqWsdRHWOr+jKWWY6kHMpaagqUezFiqgoUPZSr1b0WphzOV+rui1COZSq2vKPVoplJrK0o9lqnURxWlHs9UanlFqScylZpSUerJTKU2ztrlGUr9sLHUigylvttY6qkMpb7aWOrpDKU+2ljqmQylXt1Y6tkMpZZuLPVchlJjNpZ6Pn2p8k3RtBfSl5q9qdSL6UvN3FTqpfSlLt1U6uX0paZuKhVPX2rcplKQvtSQTaVeSV+q3qZSK0X8L81xi6D5uGeI+F/mk+u/jCPyVb0D5pO20VdJfvEZpFJCQJqTgLxGG2uZEaH5h15PadbcataLV+RVx/NrKX6v9XX0irwB9ptgvwX22x7mUws8TNH4fLnIfELfxxu0+mfK0PAN0hi/Q5opl5NKCQFpQQLyLm2s2UbEC/HfcTy/m4b4q8B+D+z3wV7tgfg74f2ARrxZIsRHj98qWv2zZfiyisSXD0iUnkUqJQRkJxKQD2ljzTYiXoj/geP5wzTEXwP2R2B/DPYnHojfEq+8NOKVixAf/dxraPXPkeHLGhJfPiVRmvaGkRCQliQgn9HGmm1EvBD/U8fzZ2mI/znYX4D9JdhfeSB+K/Ti0Ig3V4T4GN35nFb/FTJ8+ZzEl69JlCbVKAWkFQnIN7SxZhsRL8T/2vH8TRrifwv2d2B/D/YPHoi/MzomacS7UoT4GNP8llb/VTJ8+ZbElx9JlL6SVEoIyM4kIGtpY802Il6I/6PjeW0a4qPr/WewfwH7Vw/E3wV97TTiXS1CfIzk/0Sr/xoZvvxE4stvJEpfTSolBGQXEpB1tLFmGxEvxP/N8bwuDfF/B3s92Bif+tMD8Vtj+IhGvGtFiH83tp9W/3UyfPmdxJe/SJS+llRKCEhrEpC/aWPNNiJeiP+X4/nvNMTHwO2/YG8An5fwwK4YEaUR73oR4i/F9tPqv0GGL/9QKvcZJEpfTyolBGRXEhCTNtZsI+KB+D7D8WymJr7PAp8NPh/4/B6I3waD/DTi3ShC/Huw/bT654nwxWeR+BIgUfpGUikZIHYbEpAgbazZRsQL8QOO52Aa4ofAFwZfBHxRD8TfDex7acS7SYT492L7afXfLEP8EIkvMRKlbyKVkgFi70YCkk0ba7YR8UL8mOM5Ow3xa4GvNvjqgK+uB+K3Bfs+GvFuESH+fdh+Wv23yhC/FokvpPT+2beQSskAsduSgNSnjTXbiHghfj3Hc/00xG8AvobgawS+xh6I3w7sZTTizRch/jJsP63+BTLEb0DiSxMSpeeTSskAsduRgDSljTXbiHghvkO/5WuahvjNwNccfC3At5MH4rcH+34a8RaKEP9+bD+t/ttkiN+MxJeWJEovJJWSAWK3JwFpRRtrthHxQvyWjudWaYi/M/h2AV9r8O3qgfi7g/0AjXiLRIj/ALafVv/tMsQnxX18bUiUXkQqJQPE3p0EZDfaWLONiBfit3E875aG+G3B1w587cG3uwfi7wH2gzTi3SFC/Aex/bT6F8sQn3Y03oNE6TtIpWSA2HuQgOxJG2u2EfFC/D0cz3umIX4H8O0Fvr3Bt48H4u8J9kM04t0pQvyHsP20+pfIEL8DiS8dSZS+k1RKBohNorSvE22s2UbEC/E7Op47pSF+Z/DtC74u4NvPA/E7gP0wjXh3iRD/YWw/rf67ZYjfmcSX/UmUvotUSgaITZvBB9DGmm1EvBB/f8fzAWmIfyD4DgLfweA7xAPx9wL7ERrxlooQ/xFsP63+e2SIfyCJL4eSKL2UVEoGiL0XCchhtLFmGxEvxD/U8XxYGuJ3Bd/h4OsGvu4eiL832I/SiHevCPEfxfbT6r9PhvhdSXzpQaL0vaRSMkDsvUlAetLGmm1EvBC/h+O5Zxri9wJfb/D1Ad8RHoi/D9iP0Yi3TIT4j2H7afXfL0P8XiS+9CVRehmplAwQex8SkH60sWYbES/E7+t47peG+EeC7yjw9QffAA/E7wj24zTiPSBC/Mex/bT6H5Qh/pEkvgwkUfoBUikZIHZHEpBBtLFmGxEvxB/oeB6UhvhHg28w+IaA7xgPxO8E9hM04j0kQvwnsP20+h+WIf7RJL4cS6L0Q6RSMkBskr/GdxxtrNlGxAvxj3U8H5eG+EPBdzz4TgDfiR6I3xnsJ2nEe0SE+E9i+2n1PypD/KEkvpxEovQjpFIyQGyae+pk2lizjYgX4p/keD45DfGHge8U8OWA71QPxN8X7OU04j0mQvzl2H5a/Y/LEH8YiS+5JEo/RiolA8TelwTkNNpYs42IF+LnOp5PS0P84eAbAb488I30QPwuYK+gEe8JEeKvwPbT6n9ShvjDSXwZRaL0E6RSMkDsLiQgp9PGmm1EvBB/lOP59DTEzwffGeA7E3wFHoi/H9hP0Yi3XIT4T2H7afWvkCF+Pokvo0mUXk4qJQPE3o8EpJA21mwj4oX4ox3PhWmIXwS+MeAbC75iD8TfH+ynacR7SoT4T2P7afU/LUP8IhJfxpEo/RSplAwQe38SkBLaWLONiBfij3M8l6Qhfin4xoNvAvgmeiD+AWA/QyPeMyLEfwbbT6v/WRnik34j3jeJROlnSKVkgNiklxF8k2ljzTYiXog/yfE8OQ3xzwLf2eA7B3zneiD+gWA/SyPecyLEfxbbT6v/eRnin0Xiy3kkSj9HKiUDxKa9ezGFNtZsI+KF+Oc5nqekIX4Z+M4H31TwTfNA/IPAfo5GvBdEiP8ctp9W/4syxC8j8eUCEqVfIJWSAWIfRAJyIW2s2UbEC/EvcDxfmIb408F3EfguBt8lHoh/MNjP04j3kgjxn8f20+p/WYb4pF/49NF+ov4lUikZIPbBJCC0vOIvsY2IF+Jf6niekYb4l4HvcvDNBN8sD8Q/BOwXaMSLuxwvGvFfwPbT6gcRvvguI/GF9ONz2XFSKRkg9iEkILR0sHG2EfFC/NmO5/I0xJ8DPvy/V4DvSg/EPxTsF2nEe0WE+C9i+2n1r5Qh/hwSX64iUfoVUikZIPahJCC05ICvsI2IF+Jf5Xi+Og3xrwHfteC7DnzXeyD+YWC/RCPeqyLEfwnbT6v/NRniX0Piyw0kStN+jkUGiE16095HSxX1KtuIeCH+DY7nG9MQfx74bgLfzeC7xQPxu4L9Mo14r4sQ/2VsP63+N2SIT/otYN+tJEq/TiolA8SmCQtoiUNeZxsRL8R3/ECyb34a4i8A30Lw3Qa+RR6IfzjYcRrx3hQhfhzbT6v/LRniLyDx5XYSpd8klZIBYh9OAkKTkb/JNiJeiH+74/mONMRfDL47wbcEfHd5IH43sIFGvLdFiA/Yflr978gQfzGJL3eTKP02qZQMELsbCQhNVPg224h4If7djuelaYh/D/juBd994FvmgfjdwX6FRrx3RYj/CrafVv8qGeLfQ+LL/SRKv0sqJQPE7k4CQpOYvMs2Il6If7/j+YE0xH8QfA+B72HwPeKB+D3AXkkj3nsixF+J7afV/74M8R8k8eVREqXfI5WSAWL3IAGhvXD8HtuIeCH+o47nx9IQ/3HwPQG+J8G3vHJ/UVy2URI53L5BXk6ac73B7ksqeAPYN87KjMXDtG+CrSBNOx/lTcTF3YvzCwryR1WM79z6s8sWDskvHFWQt+lnYzM2hlLFRpujxxTkge+pObMy/w6l4b5PfCvQNq3BT0uMSUX9T3v5hc2Mll2Mttv30khzDXGRSj3rcljLSTtMDA2T+v8ZLCjT/2HiyFaaR37HPMI/3uWr8OI6Ob//0fnO4u86vPX14EW75LesterjX/YZ/eeQyd/+cppjhjznfoYQZ+pzLolP+91o3/OZ4XnZSKzED604f3nieUeJ5biNYEQVY0voZX+58gBgKM3NALhb9QxXa16cNqLV+2jB4G4D+vRyxAR9caP6BM5kGGxaan1gaiO0qjwSgdVZjd11r02Yba4M+rgN+rkNBrgNBrkNhrgNhrkNRrgNRrkNxrgNZnMbrMVtsDa3wTrcButyG6zHbbA+t8EG3AYbchtsxG2wMbfBJtwGDTcGMx8ofI4TyCteTyCZr/uvpLjiO5+jeE5DV9Gr4HsNfK97OWNmDkj6Pf2YX52kZ8w3qpwx3wTfW+B7G3zvVD7ZBFdnNdpxsslgcMfJpuYGd5xsam5wx8mm5gZ3nGxqbvB/8GSDO2hmk1cmjivvJh5XJR7fSzy+n3hcXbagW3Fx7qTVWe3A9wH4PgTfGvB9BL6PwfcJ+D4F32fg+xx8X4DvS/B9Bb6vwfcN+L4F33fg+x58P4DvR/CtBd9P4PsZfL+A71fw/Qa+deD7HXzrwfcH+P4E31/g+xt8/4DvX/BtAH8W+A3wm+C3wG97cNjR3kYmvXzjW0Wx5accFGoWCaBUkTiT+v1CkQC/D23TGhyQiARU1B9w64neSIiMpn2kl5iIhAjKEyLoihAhKUIE0TatwWERQmD9YdcBhFC5wBrr1uQqVwMYId7m/GHCMBM8zf6IUbnPrNkCAMsTAKOJxxjtDQl/GFtJ417E5ZJBr7+cVj9p6LI9tDJz3VE0TKMO5RRPoU6t+BQP7YyR21mbqZ21k7STMEoIkPZezsc1Z93JVawaG+uvTav/Ewk++VZhE0isz/6YVOoTt6u3XZ7WVVe1x9xurLVcrct1qGazmUhbJ+MubVS1u5EzdWic+dTt4SrZK1hJJg1pYtdlpNWnTP1dt8oikRRwVWhUwBU/PF2vY9Y7Ldd0mbRHw/2KBo6ftuaYJefWv7X9l7Ua/1B6yPg/VhfhDMFSLTr3v27F4DOWXnZQrT6dwm+c88aFZ3R+e+bF5+/+y5Shk/yty/kA10PANdz533S189dPPDbgnE3utyCcJvVpW1BDps5u6GmrxHbSfl3a34ipnY28bpUNacvO51JbZSNa/V+IbJVvkrfKz0mlvtjOtsqGrrbKxtt6q2zscatsTOPMl5pbZRNGWn3J1N9NJLfKpqSt8gvSVskFuGnVrdIuFzhtys7KZtt6VjbzOCuJPyv/ldtZeQXtbk4q1Zx2L2Scu18xjUrzZHM3M+AWpPn2CePc5QLcYlsfc3dKPLYknvO2OJgIrihSqcxuMC8u4IpWzuFsJalUKxEsO6Fh2sl6ZyYe7uzpBtCS3M5dmNq5i6cbQCsESFu3vxW5AWD9u9Dq/07qBtCKdgP4llSK0spteQPY2dVZozXVbCsm0rb2ctZAzrSmceZ7mRtAK9LE3pWRVt8z9feu3m4ANMBtSKeI70inCC7AbWp+inAXJtst8diWcza534JwmuxG24LaMXV2O09bJbazLa2d7Zna2d7rVtmOtuz8KLVVtqfVv1YqrkTcKn8klVq7nW2V7Vxtlbtv661yd49b5e40zvykuVXuwUirn5j6ew/JrXJP0la5lrRVcgHes+bOMsqdS3RWdtjWs7KDx1nZgTYrf5ZxltFIuhftXsg4d39mGpW9vDnL9ibNt+8Y5y4X4L2rAuZ8x/Z9Uuft43Y7d/9K5T6u1oKOUq9U7oO2aQ3uJPJKJdbfaRu8Uvk++2JOccg6BrAz9ZXKToRhpsyizsa29Tjvm3jsQryEdMJW0rjXueaXkBT1016pJP3Isn8/kavvvmiYRp39mRbg/T1dfbuQ23kAUzsP8HT13Q8B0g4sv4lcfbH+A2j1r5PyEu9Hu/r+Riq1zu3qLXz13d/Vunwg1ex+TKQ90MshGzlzII0zv8tcfUk/veo/iJFWvzP190Herr40wAeTjs/rSMdnLsAH19xL/L6rnf+QxOOhnLPJ/RaE0+QQ2hZ0GFNnH+Zpq8R2HkprZ1emdnb1ulUeRlt2/pDaKrvS6v9TZKt8n7xV/kEq9ed2tlUe5mqrPHxbb5WHe9wqD6dx5i/NrbIbI63+YurvbpJbZXfSVvknaavkAty95l5iyp1LdFb22NazsofHWdmDNiv/lvES00jak3YvZJy7fzONSk9vXuJepPm2jnHucgHuta2Pub0Tj32I57wtDiaCK4pUKrMbzIsLuKKVczhbSSp1hAiW3miYdrLuy8TDvp5uAH3I7ezH1M5+nm4ARyBA2rq9QeQGgPX3I9VfK0vqBnAE7QawgVKK1MpteQPo6+qscSTV7BFMpD3Sy1kDOXMkjTOG27MG7QZwBGliH8VIK4Opv4/ydgOgAe5POUXUyqKcItgA99/WwowBiceBnLPJ/RaE02QAbQsaxNTZgzxtldjOgbR2Hs3UzqO9bpWDaMuOJbVVHk2r3xbZKt+kbpW1LFIpezvbKge52ioHb+utcrDHrXIwjTM+za1yCCOtfEz9PURyqzyGtFXapK2SC/AxNXeWUe5corPy2G09K4/1OCuPpc1Kv9tZSXOW0Uh6HO1eyDh3/Uyjcpw3Z9lQ0nzLYpy7XICHVp279SWcZY6JdrzUr4Phhfx42hQ+QeJ9xYr6T3D9vqL73l7tqrdPlOrt1Wib1tsnifQ21n+SyG+B+U9Ay7Rbxck1P60nvy2cPIe2FZFKnUzCMsztfkHzXgdIpU4R8fi2QlS0gczxtJhm/uGMVY7n9xzP7zt+fOKBueA/Ffy54D8N/MO9ZAxeTaLBqaSeGCHTE/4Rjudcx/Npjufh2BO4ZI0E/yjwn155nWwwx+06SfkZ6HSXwir/2rkpbM52ZCz354P/DPCfCf4C8I8GfyH4i8A/BvxjwV8MfgReAv5S8I8H/wTwTwT/JPBPBv9Z4D8b/OeA/1zwnwf+KeAvA//54J8K/mngvwD8F4J/OvgvAv/F4L8E/JeCfwb4LwP/5eCfCf5ZbD9I58+nFTuDVuxMWrECWrHRtGKFtGJFtGJjaMXG0ooV04qNoxUroRUrpRUbTys2gVZsIq3YJFqxybRiZ9GKnU0rdg6t2Lm0YufRik2hFSujFTufVmwqrdg0WrELaMUupBWbTit2Ea3YxbRil9CKXUorNoNW7DJasctpxWbSis2q8ksWq7Pa07Zc0hEjP0OpHzds2IC7SeZS/+BmkrnUH7iXZC71E24lmUt9jDtJ5lIrcCPJXAp38zGZS+HBbWzGUv9iqeKMpf7GUuMyllqPpUoyllqLpUozlvoIS43PWGo5lpqQsdQULDUxY6mKg+6kTKX+rSg1OVOpvytKnZWp1PqKUmdnKrW2otQ5mUp9VFHq3EyllleUOi9TqSkVpaZkKrXxYlCWodQPG0udn6HUdxtLTc1Q6quNpaZlKPXRxlIXZCj16sZSF2YotXRjqekZSo3ZWOqi9KXKN0XTLk5favamUpekLzVzU6lL05e6dFOpGelLTd1U6rL0pcZtKnV5+lJDNpWamb5UvU2lRPwvvg9wi6D5uJuJ+F/yyPU354h8VesAfx5pGyXdgms1I5WSAeL7gASknDbWbCPixX0x2/FcnuIXUF9H98Uc8OP/vQL8V3og/od46qERr4UI8dFJMYdW/04yxKe9anoVidItSKVkgPg+JAG5mjbWbCPihfhXOZ6vTkP8a8B/LfivA//1Hoi/Bg/yNOK1FCE+uuauodXfSob415D4cgOJ0i1JpWSA+NaQgNxIG2u2EfFC/BsczzemIf488N8E/pvBf4sH4n+Ed1Ma8XYWIT46pOfR6t9FhvjzSHy5lUTpnUmlZID4PiIBmU8ba7YR8UL8Wx3P89MQfwH4F4L/NvAv8kB8dKSMphGvtQjxMQyzgFb/rjLEX0Diy+0kSrcmlZIB4vuYBOQO2lizjYgX4t/ueL4jDfEXg/9O8C8B/10eiP8JehBpxGsjQnwMPi6m1b+bDPEXk/hyN4nSbUilZID4PiEBWUoba7YR8UL8ux3PS9MQ/x7w3wv++8C/zAPxP0WnOI14bUWIjyH3e2j1t5Mh/j0kvtxPonRbUikZIL5PSUAeoI0124h4If79jucH0hD/QfA/BP6Hwf+IB+J/hnEeGvHaixB/DLafVv/uMsR/kMSXR0mUJsUhhYD4PiMBeYw21mwj4oX4jzqeH0tD/MfB/wT4nwT/cg/E/xxDlzTi7SFC/LHYflr9e8oQ/3ESX1aQKE1KHS4ExPc5CchTtLFmGxEvxF/heH4qDfGfBv8z4H8W/M95IP4XGI2nEa+DCPGLsf20+veSIf7TJL48T6J0B1IpGSC+L0hAXqCNNduIeCH+847nF9IQ/0XwvwT+l8Ef90D8L8E/jka8vUWIj9hepNW/jwzxXyTxBUiU3ptUSgaI70sSkFdoY802Il6ID47nV9IQfyX4XwX/a+B/3QPxvwJ/CY14HUWIX4Ltp9XfSYb4K0l8eYNE6Y6kUjJAfF+RgLxJG2u2EfFC/Dccz2+mIf5b4H8b/O+A/10PxP8a/KU04nUWIX4ptp9W/74yxH+LxJdVJEp3JpWSAeL7mgTkPdpYs42IF+I7RFf+99IQ/33wrwb/B+D/0APxvwH/eBrxuogQfzy2n1b/fjLEp/1ayhoSpbuQSskA8X1DAvIRbazZRsQL8dc4nj9KQ3wMvmIYCh3yn3kg/rfgn0Aj3v4ixJ+A7afVf4AM8WkBT9Kvptfan1RKBojvWxKQL2hjzTYiXoj/ueP5izTEx/spntTxzPKNB+J/B/6JNOIdKEL8idh+Wv0HyRCfdick/U5arQNJpWSA+L4jAfmONtZsI+KF+N86nr9LQ/zvwf8D+H8E/1oPxMc/nkQj3sEixJ+E7afVf4gM8b8n8eUnEqUPJpWSAeKjAfmZNtZsI+KF+D85nn9OQ/xfwP8r+H8D/zoPxMcpM5lGvENFiD8Z20+r/zAZ4v9C4svvJEofSiolA8T3AwnIetpYs42IF+L/7nhen4b4f4D/T/D/Bf6/PRAfN4qzaMTrKkL8s7D9tPoPlyH+HyS+/EOidFdSKRkgvh9JQP6ljTXbiHgh/j+O53/TEH8DBLIgYEDA9ED8teA/m0a8biLEPxvbT6u/uwzxN1AqD9BS8pF+x0YIiG8tCYhNG2u2EfFA/IDleLZTEz/gg4AfAgEIBD0Q/yfwn0MjXg8R4p+D7afV31OELwEfiS8hEqV7kErJAPH9RAISpo0124h4IX7I8RxOQ/wIBKIQiEEg2wPxfwb/uTTi9RIh/rnYflr9vWWIHyHxpRaJ0r1IpWSA+EjX1kBt2lizjYgX4tdyPNdOQ/w6EKgLgXoQqO+B+HgzPo9GvD4ixD8P20+r/wgZ4tch8aUBidJ9SKVkgPhIt/RAQ9pYs42IF+I3cDw3TEP8RhBoDIEmEGjqgfjoD5pCI15fEeJPwfbT6u8nQ/xGJL7QEof0JZWSAeL7lQSkOW2s2UbEC/GbOZ6bpyF+CwjsBIGWEGjlgfjoBS2jEe9IEeKXYftp9R8lQ3xSJo0ATUZ+JKmUDBDfbyQgu9DGmm1EvBB/Z8fzLmmI3xoCu0KgDQR280D8deA/n0a8/iLEPx/bT6t/gAzxSbrqAE1U2J9USgaIbx0JSDvaWLONiBfit3U8t0tD/PYQ2B0Ce0BgTw/E/x38U2nEGyhC/KnYflr9g2SIT1LZBWgSk4GkUjJAfL+TgOxFG2u2EfFC/A6O573SEH9vCOwDgY4Q6OSB+OvBP41GvKNFiD8N20+rf7AM8UmaiwDtheOjSaVkgPhIMdnAvrSxZhsRL8Tv7HjeNw3xu0BgPwjsD4EDPBAfw74X0Ig3RIT4F2D7afUfI0N80hu4AdrrZ7TflpMB4iOFoAMH0caabUS8EP9Ax/NBaYh/MAQOgcChEDjMA/H/BP+FNOIdK0L8C7H9tPqPkyE+6X2sAO1lhGNJpWSA+P4kATmcNtZsI+KF+F0dz4enIX43CHSHQA8I9PRA/L/AP51GvKEixJ+O7afVf7wM8UnR+QAtNDWUVEoGiO8vEpDetLFmGxEvxO/leO6dhvh9IHAEBPpCoJ8H4v8N/otoxDtBhPgXYftp9Z8oQ3xSrCZAc1SeQColA8T3NwnIUbSxZhsRL8Q/0vF8VBri94fAAAgMhMAgD8T/B/wX04h3kgjxL8b20+o/WYb4JM9dgHZtPYlUSgaI7x8SkMG0sWYbES/EP9rxPDgN8YdA4BgIHAuB4zwQ/1/wX0Ij3jAR4l+C7afVf4oM8Un3uADtEDOMVEoGiI/0wnHgeNpYs42IF+IPdTwfn4b4J0DgRAicBIGTPRB/A/gvpREvR4T4l2L7afWfKkN80q4eoFE6h1RKBoiP9n71KbSxZhsRL8Qf5ng+JQ3xcyBwKgRyIXCae+L7kXszaMTLFSH+DGw/rf7TZIhPGuPAcBKlc0mlZID4s0hARtDGmm1EvBB/uON5RBri50FgJARGQeB0D8Sv+DkvGvGGixD/Mmw/rf4RMsQn/QZWIJ9Eadr0kAHiN0hAzqCNNduIeCF+vuP5jDTEPxMCBRAYDYFCD8Q3wX85jXh5IsS/HNtPq3+kDPHPJPGliETpPFIpGSB+kwRkDG2s2UbEC/GLHM9j0hB/LASKIYCFSjwQ3wL/TBrxRokQfya2n1b/6TLEH0viSymJ0qNIpWSA+C0SkPG0sWYbES/EL3U8j09D/AkQmAiBSRCY7IH4Nvhn0YiXL0L8Wdh+Wv1nyBB/AokvZ5EoTTsQyQDxk9S0gbNpY802Il6If5bj+ew0xD8HAudC4DwITKncX5SfNI2SyHGOy6EqJ825APjDpIKngD9nVmYsHnxa72ErSNMuUEbogsXdi/MLCvJHVYzv3PqzyxYOyS8cVZA3ZxbpV3IpVWy0OXpMAV7rzp8zK/MvHxvu+yRQhrZpDZ4qMSYV9U+V+U1n+mhPc7s2kX4+ODCVVOoCl8NaTtlhfCvRMKn/p2FBmf5/hTiyNZpHWZmLOGbRhTKzCEfxwnLSHLqQVGq6wEzDNk6fTa09Q6FtOmYXiY3ZRbT+uEhoNCi/PJ1FaCHph9wCF8vvaBe72tEukdrRLkbbtAZfKrKjYf2XiqyogelomfR75YHppFKXkkrNcDlKs2hL4aWkUjNcDhHtWhe4LH3dsY5X3+dlTtMCR4HLha4QlzmeL9/6bCY+tR7ACwR6XfD+ORsC5ZV7bg5lQKxrSMM2k9QPc4T6YY7jeZbjebbjuRx7Av93BQSuhMBVlZe+8BVulz7KiLoyaXIbxJFjNxmYy22S8AO0s6iNmyHDLsvJqLlpLupXQ+AaCFwLgesqsytSXragW3Fx7qTZat2MjdvGHV2pB6JXsLMiYTDD1vv8xL6NBDrLpUkfMEKqsFieOFhdn3i8QXauLBjcbUCfXuWO+XB9Kw/Hmhn4d7QzwwzStnIjE5gbW1Wmbcz1ifgGyol482IAgXnb08o2L83KdhMEbobALRC41b0fsGK0b5hDOndiRTLnaLQ8L9NJbVGbTpfTetrD8XN+erN931870tPBZ/7W5zbJNylrOQ7fAggshMBtEFhUmd/Zrvm9YBvvIp6G+kbOteV2prXl9lY1nKGJATaqDO8dEFgMgTshsKTy8Nbacu4oZ9t1aYYM/uPLHSTiUfwLNTqYgB1m3MdvbrjhN4GO2GqStj5fiocT6tS6fRb30FqZDTqOOnclHu+mDTdlbt5VZd9vWO52VDKsZRs2bFhPZYVRBfLSxOM9fJDvaeXBF5BpySxfu7HUUtLCeg+hyzzstEsFdhWD7Oi5V6D2NuTa7/MS1kpXuuLuRN0ol0lt51fTwN8vVf8NtPofEImpAXnwH5TCfz2t/oco9ffPG11UPKlvYX7JnNLVWYfjhEHWInc2VnQ/diLiQFN4A/lP/G/hJjyuveFB6qR6mNCpizY1YuCY8tI5pA2CuqkRKuc7D7pFkUU9sEXYTAUekbkcPkrY06W6h1A52dRjMt3zeEazplz3PM5n6gmZ7nkyo1lLrnue5DO1XHORqMuHY4XMMD+V0axPbpif4jP1tOIw+97gw/GMzDA/m9FsQG6Yn+Uz9ZxM9zyf+Wgl1z3P85l6QaZ7XsxoNiTXPS/ymXpJpntezmg2LNc9L/OZist0T+YQZUSue4DP1Csy3bMyo9moXPes5DP1qkz3vJbRbEyue17jM/W6TPdkPnpky3UP47nnTZnueSuj2Vpy3fMWn6m3ZbrnnYxma8t1zzt8pt6V6Z5VGc3WkeueVXym3pPpnvczmq0r1z3v85laLdM9H2Q0W0+uez7gM/WhTPesyWi2vlz3rOEz9ZFM93yc0WwDue75mM/UJzLd82lGsw3luudTPlOfyXTP5xnNNpLrns/5TH0h0z1fZjTbWK57vuQz9ZVM93yd0WwTue75ms/UNzLd821Gs03luudbPlPfyXTP9xnNNpPrnu/5TP0g0z0/ZjTbXK57fuQztVame37KaLaFXPf8xGfqZ5nu+SWj2Z3kuucXPlO/ynTPbxnNtpTrnt/4TK2T6Z7fM5ptJdc9v/OZWi/TPX9kNLuzXPf8wWfqT5nu+Suj2V3kuucvPlN/y3TPPxnNtpbrnn/4TP0r0z0bMprdVa57NrCZCmaJdE8w88uMbcS6h1A52ZQp0z2Z9Ry7yXWPxWfKlukeX0azbeW6x8dnyi/TPYGMZtvJdU+Az1RQpntCGc22l+ueEJ+psEz3ZH7Ve3e57uF7zzwYlemeWEaze8h1T4zPVLZM99TKaHZPue6pxWeqtkz31MlotoNc99ThM1VXpnvqZTS7l1z31OMzVV+mexpkNLu3XPc04DPVUKZ7GmU0u49c9zTiM9VYpnuaZDTbUa57mvCZairTPc0ymu0k1z3N+Ew1l+meFhnNdpbrnhZ8pnaS6Z6WGc3uK9c9LflMtZLpnp0zmu0i1z0785naRaZ7Wmc0u59c97TmM7WrTPdkzqmzv1z3tOEztZtM97TNaPYAue5py2eqnUz3tM9o9kC57mnPZ2p3me7ZI6PZg+S6Zw8+U3vKdE+HjGYPluueDnym9pLpnr0zmj1Ernv25jO1j0z3dMxo9lC57unIZ6qTTPd0zmj2MLnu6cxnal+Z7umS0WxXue7pwmdqP0r3OLIajd+Y1egRCDwGgScgsBwCKyDwNASegcBzEHgBAi9BIA6BVyDwKgReh8CbEHgbAu9C4D0IrIbAhxD4CAKfQOAzCHwBga8g8A0EvoPADxBYC4GfIfArBNZBYD0E/oTA3xD4F8PcGMrFcCWG5DDshKEVDB+gixzdwOjqRHceuqzQLYOuB7xe4xUSr0l4FcDjLh7p8NiCWzNuP7jE4jKCUwXpgJC9ZjWqSBlEIsf+mU05yDGeNasRoXJy1hBKGMstDnLljPGmAxRxMCYgCh6oiYMvU1DwIE0cfCl9ggdrzo+6fDgO0RwPvtw7wUMVcTDm3gkepjkefElygl01cfBlswkeromDL+1MsJsmDr78MMHumjj4ErkEe2ji4Mu4EuypiYMvNUqwlyYOxv2jtyYOvmQjwT6aOPiyggSP0MTBl74j2FcTB1+ejWA/TRx8CTGCR2ri4MtcETxKEwdfiolgf00cfLkgggM0cfAlbQgO1MTBl10hOEgTB18ahODRmjj48hUEB2vi4EssEByiiYMvA0DwGE0cfFL94LGaOPg09cHjNHHwid+DQzVx8KnUg8dr4uCTkwdP0MTBp/sOnqiJg0+gHTxJEwejkvpkRRyckudhmjgYtcmnaOJgFBHnaOJgVPueqomDUZabq4mD8X2G0zRxMApdh2viYFSkjtDEwSgdzdPEwajxHKmJg1GMOUoTB6Nq8nRNHIzyxnxNHIw6xDM0cTAKBs/UxMGo7CvQxMEowRutiYNRK1eoiYNR1FakiYNRfTZGEwejTGysJg5GPVexJg5G4dU4TRyMCqkSTRyMUqZSTRyMmqPxmjgYxUETCDic4qAJFeKg4AEQPBCCB0HwYAgeAsFDIXgYBLtCEL/qBsHuEOwBwZ4Q7AXB3hDsA8EjINgXgv0geCQEj4JgfwgOwNA9Rr0xYIyxVgxTYoQPg2MYV8KQDEYzMBCAPnR0P6PnFp2e6C9EVxt6qdDBg74RdCvgjRwvs3gPxCsU3j7w4I5nXjwu4kkLDym4v+PWiLsKLsi4luEygDMIyYfjhpC9i4OC+5dTxEETM5vyIkiblN7szQ03/Obg3ARezdFEPs5NcjV3JrDOHU7N0WRFHJyao7M0cTBqjs7WxMGoOTpHc37U5cNxruZ4MGqOzlPEwak5mqI5HoyaozJNHIyao/M1cTBqjqZq4mDUHE3TxMGoObpAEwej5uhCTRyMmqPpmjgY94+LNHEwao4u1sTBqDm6RBMHo+boUk0cjJqjGZo4GDVHl2niYNQcXa6Jg1FzNFMTB6PmaJYmDkbN0WxNHIyao3JNHIyaozmaOBg1R3M1cTBqjq7QxMGoObpSEwej5ugqTRyMmqOrNXEwao6u0cTBqDm6VhMHo+boOk0cjJqj6zVxMGqObtDEwag5ulERB6fmaJ4mDkbN0U2aOBg1Rzdr4mDUHN2iiYNRc3SrJg7G9xnma+Jg1Bwt0MTBqDlaqImDUXN0myYORs3RIk0cjJqj2zVxMGqO7tDEwag5WqyJg1FzdKcmDkbN0RJNHIyao7s0cTBqju7WxMGoOVqqiYNRc3SPJg5GzdG9mjgYNUf3aeJg1Bwt08TBqDm6XxMHo+boAU0cjJqjBzVxMGqOHtLEwag5epiAw6k5mrhRczQZgmdB8GwIngPBcyF4HgSnQLAMgudDcCoEp0HwAgheCMHpELwIghdD8BIIXgrBGRC8DIKXQ3AmBGdh6B6j3hgwxlgrhikxwofBMYwrYUgGoxkYCEAfOrqf0XOLTk/0F6KrDb1U6OBB3wi6FfBGjpdZvAfiFQpvH3hwxzMvHhfxpIWHFNzfcWvEXQUXZFzLcBnAGYTkw3FDyDXQHE0sp4iDHslsykGOibzioEe4yGG5ovhEVopzSoMeVcTBKQ16TBMHozTocU0cjNKgJzTnR10+HE9qjgejNGi5Ig5OadAKzfFglAY9pYmDURr0tCYORmnQM5o4GKVBz2riYJQGPaeJg1Ea9LwmDkZp0AuaOBj3jxc1cTBKg17SxMEoDXpZEwejNCiuiYNRGgSaOBilQa9o4mCUBq3UxMEoDXpVEwejNOg1TRyM0qDXNXEwSoPe0MTBKA16UxMHozToLU0cjNKgtzVxMEqD3tHEwSgNelcTB6M0aJUmDkZp0HuaOBilQe9r4mCUBq3WxMEoDfpAEwejNOhDTRyM0qA1ijg4pUEfaeJglAZ9rImDURr0iSYORmnQp5o4GKVBn2niYHyf4XNNHIzSoC80cTBKg77UxMEoDfpKEwejNOhrTRyM0qBvNHEwSoO+1cTBKA36ThMHozToe00cjNKgHzRxMEqDftTEwSgNWquJg1Ea9JMmDkZp0M+aOBilQb9o4mCUBv2qiYNRGvSbJg5GadA6TRyM0qDfNXEwSoPWa+JglAb9oYmDURr0JwGHUxo0aaM06FEIPgbBxyH4BASfhOByCK6A4FMQfBqCz0DwWQg+B8HnIfgCBF+E4EsQfBmCcQgCBF+B4EoIvgrB1zB0j1FvDBhjrBXDlBjhw+AYxpUwJIPRDAwEoA8d3c/ouUWnJ/oL0dWGXip08KBvBN0KeCPHyyzeA/EKhbcPPLjjmRePi3jSwkMK7u+4NeKuggsyrmW4DOAMQvLhuCHkGkiDHimnSIMyxxGc0qBJvNIgviBGwF2+h0msJOcUB/2tiINTHPSPJg5GcdC/mjgYxUEbNOdHXTZToSzN8eATB4UMRRyM4qCQqTkefOKgkKWJg08cFLI1cfCJg0I+TRx84qCQXxMHnzgoFNDEwScOCgU1cfCJg0IhTRyM+0dYEwefOCgU0cTBJw4KRTVx8ImDQjFNHHzioFC2Jg4+cVColiYOPnFQqLYmDj5xUKiOJg4+cVCoriYOPnFQqJ4mDj5xUKi+Jg4+cVCogSYOPnFQqKEmDj5xUKiRJg4+cVCosSYOPnFQqIkmDj5xUKipJg4+cVComSYOPnFQqLkmDj5xUKiFJg6+uFpoJ00cfOKgUEtNHHzioFArRRyM4qDQzpo4+MRBoV00cfCJg0KtNXHwiYNCu2ri4BMHhdpo4uB7nyG0myYOPnFQqK0mDj5xUKidJg4+cVCovSYOPnFQaHdNHHzioNAemjj4xEGhPTVx8ImDQh00cfCJg0J7aeLgEweF9tbEwScOCu2jiYNPHBTqqImDTxwU6qSJg08cFOqsiYNPHBTaVxMHnzgo1EUTB584KLSfJg4+cVBof00cfOKg0AGaOPjEQaEDNXHwiYNCB2ni4BMHhQ4m4HCKgyZvFAf9DcF/IPgvBDdAKAtCFe8zQ8iCkA0hH4T8EApAKAihEITCEIpAKAqhGISyIVQLQrUhVAdCdTF0j1FvDBhjrBXDlBjhw+AYxpUwJIPRDAwEoA8d3c/ouUWnJ/oL0dWGXip08KBvBN0KeCPHyyzeA/EKhbcPPLjjmRePi3jSwkMK7u+4NeKuggsyrmW4DOAMQvLhuCHkGoiD/ioniINCh2Q25SDHZFZxEKFysv/d3Y9ETmYlOaM4KHSoIg5GcVDoME0cfOKgUFdNHHzioNDhmvOjLh+ObprjwSgO6q6Ig1Mc1ENzPBjFQT01cTCKg3pp4mAUB/XWxMEoDuqjiYNRHHSEJg5GcVBfTRyM4qB+mjgY948jNXEwioOO0sTBKA7qr4mDURw0QBMHozhooCYORnHQIE0cjOKgozVxMIqDBmviYBQHDdHEwSgOOkYTB6M46FhNHIzioOM0cTCKg4Zq4mAUBx2viYNRHHSCJg5GcdCJmjgYxUEnaeJgFAedrImDURw0TBMHozjoFE0cjOKgHE0cjOKgUzVxMIqDchVxcIqDTtPEwSgOGq6Jg1EcNEITB6M4KE8TB6M4aKQmDsb3GUZp4mAUB52uiYNRHJSviYNRHHSGJg5GcdCZmjgYxUEFmjgYxUGjNXEwioMKNXEwioOKNHEwioPGaOJgFAeN1cTBKA4q1sTBKA4ap4mDURxUoomDURxUqomDURw0XhMHozhogiYORnHQRE0cjOKgSZo4GMVBkzVxMIqDztLEwSgOOpuAwykOOqtCHBQ6FEKHQagrhPC5G4S6Q6gHhHpCqBeEekOoD4SOgFBfCPWD0JEQOgpC/SE0AEIDITQIQkdDaDCEhmDoHqPeGDDGWCuGKTHCh8ExjCthSAajGRgIQB86up/Rc4tOT/QXoqsNvVTo4EHfCLoV8EaOl1m8B+IVCm8feHDHMy8eF/GkhYcU3N9xa8RdBRdkXMtwGcAZhOTDcUPI3sVBoUPKKeKgczKbqlR5+RxC3T6AwKWUgoEZELh9Nqmh57pi8Vm8KqZz+FgsgYOs0mD0+p2niINTxTRFEwejiqlMEwejiul8zflRlw/HVM3xYFQxTVPEwaliukBzPBhVTBdq4mBUMU3XxMGoYrpIEwejiuliTRyMKqZLNHEwqpgu1cTBqGKaoYmDcf+4TBMHo4rpck0cjCqmmZo4GFVMszRxMKqYZmviYFQxlWviYFQxzdHEwahimquJg1HFdIUmDkYV05WaOBhVTFdp4mBUMV2tiYNRxXSNJg5GFdO1mjgYVUzXaeJgVDFdr4mDUcV0gyYORhXTjZo4GFVM8zRxMKqYbtLEwahiulkTB6OK6RZNHIwqplsVcXCqmOZr4mBUMS3QxMGoYlqoiYNRxXSbJg5GFdMiTRyM7zPcromDUcV0hyYORhXTYk0cjCqmOzVxMKqYlmjiYFQx3aWJg1HFdLcmDkYV01JNHIwqpns0cTCqmO7VxMGoYrpPEwejimmZJg5GFdP9mjgYVUwPaOJgVDE9qImDUcX0kCYORhXTw5o4GFVMj2jiYFQxPaqJg1HF9JgmDkYV0+OaOBhVTE8QcDhVTGdvVDGdB6EpECqD0PkQmgqhaRC6AEIXQmg6hC6C0MUQugRCl0JoBoQug9DlEJoJoVkQmg2hcgjNgdBcCF2BoXuMemPAGGOtGKbECB8GxzCuhCEZjGZgIAB96Oh+Rs8tOj3RX4iuNvRSoYMHfSPoVsAbOV5m8R6IVyi8feDBHc+8eFzEkxYeUnB/x60RdxVckHEtw2UAZxCSD8cNIddAxXROOUUclFl/4PyJo7N5xUF84ocA5XLqvhMDd5E6cTmhE5d2L8gdfmb3oom9SwuH98gtKChbMLjbgD69ystuG5pfUpg3bhzaaVW2uHtxfkFB/qiKEnNjs8sWDskvHFWQR+0Gwt12dtmCbsXFuZOQ4itIo5mk6csGFY3Lyx9RVNhpUF7x6NKS3JL8osLyuQko1iwHrBWJZzvieH4dJ9dTEHoaQs9A6Fkvw3M3aXiecsuN2SSzz6U069tqtmZd12brk+Hozuew256H0AsQehFCL1Vu+RxCt7Ujzc3nSX3wstuupTSwPamBL5AaGCc00MMghV52PMcdzy86nl/CgQIIvQKhlRB6tfLUrl2+eRrOpU1ttnsYW4CvHZchyk/Zu1sGQwRVxCza2ldp0KJXuGyIHXaDLUN77m73fJFAR7g1uZzbJCFUW15hcfSYgjwIvZZ4fN3r9lV9532tys7bsNztzptBrbFhw4Y/qCNtVIH8RuLxTT7Ib7ZyvzIjzPSrbvnajRx5g7Q2v0noMg/7MkG64vpIS9bBMsZV31LEwakTf1sTB6NO/B1NHIw68Xc150ddPhyrNMeDUSf+niIOTp34+5rjwagTX62Jg1En/oEmDkad+IeaOBh14ms0cTDqxD/SxMGoE/9YEwejTvwTTRyM+8enmjgYdeKfaeJg1Il/romDUSf+hSYORp34l5o4GHXiX2niYNSJf62Jg1En/o0mDkad+LeaOBh14t9p4mDUiX+viYNRJ/6DJg5GnfiPmjgYdeJrNXEw6sR/0sTBqBP/WRMHo078F00cjDrxXzVxMOrEf9PEwagTX6eJg1En/rsmDkad+HpNHIw68T8UcXDqxP/UxMGoE/9LEwejTvxvTRyMOvF/NHEw6sT/1cTB+D7DBk0cfDrxcJYmDj6deNjQxMGnEw+bmjj4dOJhSxMHn048bGvi4NOJh32aOPh04mG/Jg4+nXg4oImDTyceDmri4NOJh0OaOPh04uGwJg4+nXg4oomDTycejmri4NOJh2OaOPh04uFsTRx8OvFwLU0cfDrxcG1NHHw68XAdTRx8OvFwXU0cfDrxcD1NHHw68XB9Ag6nTjxetlEo/haE3obQOxB6F0KrIPQehN6H0GoIfQChDyG0BkIfQehjCH0CoU8h9BmEPofQFxD6EkJfQehrCH0DoW8xdo9hb4wYY7AV45QY4sPoGAaWMCaD4QyMBKATHf3P6LpFryc6DNHXhm4q9PCgcwT9Cnglx9ssXgTxDoXXDzy546EXz4t41MJTCm7wuDfitoIrMi5muA7gFEL24cAhZq9C8WBGSc8mVU048wUx6GBHvIxVKR5mu566c3oQYZDVD3zetHBDTSCM8qBwI1UgfPqgcGNVIHwCoXAT1TlSlw9IU9UR4ZMIhZtpAmHUCIWbq44In0go3EIVCJ9KKLyTKhA+mVC4pSoQPp1QuJUqED6hUHhnVSB8SqHwLqpA+KRC4daqQBj3kV1VgfCJhcJtVIHwqYXCu6kC4ZMLhduqAuHTC4XbqQLhEwyF26sC4VMMhXdXBcInGQrvoQqETzMU3lMVCJ9oKNxBFQifaii8lyoQPtlQeG9VIHy6ofA+qkD4hEPhjqpA+JRD4U6qQPikQ+HOqkD4tEPhfVWB8ImHwl1UgfCph8L7qQLhkw+F91cFwqcfCh+gCoRPQBQ+UBUIn4IofJAmEEYJUfhgVSB8GqLwIapA+ERE4UNVgfCpiMKHqQLhkxGFu6oCYXzz4XBVIIxCom6qQBiVRN1VgTBKiXqoAmHUEvVUBcIoJuqlCoRRTdRbFQijnKiPKhBGPdERqkAYBUV9VYEwKor6qQJhlBQdqQqEUVN0lCoQRlFRf1UgjKqiAapAGGVFA1WBMOqKBqkCYRQWHa0KhFFZNFgVCKO0aIgqEEZt0TGqQBjFRccSgFQSF51fIS4KN4RwIwg3hnATCDeFcDMIN4dwCwjvBOGWEG4F4Z0hvAuEW0N4Vwi3gfBuEG4L4XYQbg/h3SG8B4T3xBg/RscxrowRWYxlYhQQ42cYecKYDUY7ME6AHnb0TaNXF/2h6ElEHxx6r9Dvgx4T9DXgLR3vt3gzxDsV3kbwHI8nYDw74qkLzyu40+MeibsLrsu4ouFagLMI+Ycjh5i9/wpluEE5RVx0XGZTTnqczysuOo6NHrY7LTkRCLl2RifbUE0gnPKi41WBMMqLTlAFwigvOlF1jtTlA3KS6ogwyotO1gTCKS8apjoijPKiU1SBMMqLclSBMMqLTlUFwigvylUFwigvOk0VCKO8aLgqEEZ50QhVIIz7SJ4qEEZ50UhVIIzyolGqQBjlRaerAmGUF+WrAmGUF52hCoRRXnSmKhBGeVGBKhBGedFoVSCM8qJCVSCM8qIiVSCM8qIxqkAY5UVjVYEwyouKVYEwyovGqQJhlBeVqAJhlBeVqgJhlBeNVwXCKC+aoAqEUV40URUIo7xokioQRnnRZFUgjPKiszSBcMqLzlYFwigvOkcVCKO86FxVIIzyovNUgTDKi6aoAmF886FMFQijvOh8VSCM8qKpqkAY5UXTVIEwyosuUAXCKC+6UBUIo7xouioQRnnRRapAGOVFF6sCYZQXXaIKhFFedKkqEEZ50QxVIIzyostUgTDKiy5XBcIoL5qpCoRRXjRLFQijvGi2KhBGeVG5KhBGedEcVSCM8qK5qkAY5UVXqAJhlBddSQBSSV40daO8aCiEj4fwCRA+EcInQfhkCA+D8CkQzoHwqRDOhfBpEB4O4REQzoPwSAiPgvDpEM6H8BkQPhPCBRAejTF+jI5jXBkjshjLxCggxs8w8oQxG4x2YJwAPezom0avLvpD0ZOIPjj0XqHfBz0m6GvAWzreb/FmiHcqvI3gOR5PwHh2xFMXnldwp8c9EncXXJdxRcO1AGcR8g9HDjHXQF50XDlFXnRVZlOVK59NMnt1erN3t3u+yMm6qbyqpav4WHe1u+kzlXX6cKqWrtEEwqlaulYVCKNq6TpVIIyqpetV50hdPiA3qI4Io2rpRk0gnKqleaojwqhaukkVCKNq6WZVIIyqpVtUgTCqlm5VBcKoWpqvCoRRtbRAFQijammhKhDGfeQ2VSCMqqVFqkAYVUu3qwJhVC3doQqEUbW0WBUIo2rpTlUgjKqlJapAGFVLd6kCYVQt3a0KhFG1tFQVCKNq6R5VIIyqpXtVgTCqlu5TBcKoWlqmCoRRtXS/KhBG1dIDqkAYVUsPqgJhVC09pAqEUbX0sCoQRtXSI6pAGFVLj6oCYVQtPaYKhFG19LgmEE7V0hOqQBhVS0+qAmFULS1XBcKoWlqhCoRRtfSUKhDGNx+eVgXCqFp6RhUIo2rpWVUgjKql51SBMKqWnlcFwqhaekEVCKNq6UVVIIyqpZdUgTCqll5WBcKoWoqrAmFULYEqEEbV0iuqQBhVSytVgTCqll5VBcKoWnpNFQijaul1VSCMqqU3VIEwqpbeVAXCqFp6SxUIo2rpbVUgjKqld1SBMKqW3iUAqaRamrZRtXQNhK+F8HUQvh7CN0D4RgjPg/BNEL4ZwrdA+FYIz4fwAggvhPBtEF4E4dshfAeEF0P4TggvgfBdEL4bY/wYHce4MkZkMZaJUUCMn2HkCWM2GO3AOAF62NE3jV5d9IeiJxF9cOi9Qr8PekzQ14C3dLzf4s0Q71R4G8FzPJ6A8eyIpy48r+BOj3sk7i64LuOKhmsBziLkH44cYq6Baumqcoq8KPPrW5V+FGkar7yI7eUxyx3Lp7GynFNc9J4mEE5x0fuqQBjFRatVgTCKiz5QnSN1+YB8qDoijOKiNZpAOMVFH6mOCKO46GNVIIziok9UgTCKiz5VBcIoLvpMFQijuOhzVSCM4qIvVIEwiou+VAXCuI98pQqEUVz0tSoQRnHRN6pAGMVF36oCYRQXfacKhFFc9L0qEEZx0Q+qQBjFRT+qAmEUF61VBcIoLvpJFQijuOhnVSCM4qJfVIEwiot+VQXCKC76TRUIo7honSoQRnHR76pAGMVF61WBMIqL/lAFwigu+lMVCKO46C9VIIzior9VgTCKi/5RBcIoLvpXEwinuGiDKhA+cVEkSxUIn7goYqgC4RMXRUxVIHzioojqmw+M4qKIrQqET1wU8akC4RMXRfyqQPjERZGAKhA+cVEkqAqET1wUCakC4RMXRcKqQPjERZGIKhA+cVEkqgqET1wUiakC4RMXRbJVgfCJiyK1VIHwiYsitVWB8ImLInVUgfCJiyJ1VYHwiYsi9VSB8ImLIvVVgfCJiyINVIHwiYsiDVWB8ImLIo1UgfCJiyKNVYHwiYsihIN0ZXHRBRvFRe9B+H0Ir4bwBxD+EMJrIPwRhD+G8CcQ/hTCn0H4cwh/AeEvIfwVhL+G8DcQ/hbC30H4ewj/AOEfIbwWY/wYHce4MkZkMZaJUUCMn2HkCWM2GO3AOAF62NE3jV5d9IeiJxF9cOi9Qr8PekzQ14C3dLzf4s0Q71R4G8FzPJ6A8eyIpy48r+BOj3sk7i64LuOKhmsBziLkH44cYq6BuGhVOUFcFGma2ZSTHhewiosItVPpEXIpj7+AleeM8qJIM00gjPKiSHNVIHzyokgLVSB88qLITqpzpC4fkJaqI8InL4q00gTCKC+K7Kw6InzyosguqkD45EWR1qpA+ORFkV1VgfDJiyJtVIHwyYsiu6kC4ZMXRdqqAuGTF0XaqQJh3EfaqwLhkxdFdlcFwicviuyhCoRPXhTZUxUIn7wo0kEVCJ+8KLKXKhA+eVFkb1UgfPKiyD6qQPjkRZGOqkD45EWRTqpA+ORFkc6qQPjkRZF9VYHwyYsiXVSB8MmLIvupAuGTF0X2VwXCJy+KHKAKhE9eFDlQFQifvChykCoQPnlR5GBVIHzyosghqkD45EWRQ1WB8MmLIoepAuGTF0W6agJhlBdFDlcFwigv6qYKhFFe1F0VCKO8qIcqEEZ5UU9VIIxvPvRSBcIoL+qtCoRRXtRHFQijvOgIVSCM8qK+qkAY5UX9VIEwyouOVAXCKC86ShUIo7yovyoQRnnRAFUgjPKigapAGOVFg1SBMMqLjlYFwigvGqwKhFFeNEQVCKO86BhVIIzyomNVgTDKi45TBcIoLxqqCoRRXnS8KhBGedEJqkAY5UUnEoBUkhddWCEvijSDSHOItIDIThBpCZFWENkZIrtApDVEdoVIG4jsBpG2EGkHkfYQ2R0ie0BkT4h0gMheENkbIvtApCPG+DE6jnFljMhiLBOjgBg/w8gTxmww2oFxAvSwo28avbroD0VPIvrg0HuFfh/0mKCvAW/peL/FmyHeqfA2gud4PAHj2RFPXXhewZ0e90jcXXBdxhUN1wKcRcg/HDnE7F1eFGlaTpEXnZTZlJMeF/LKi05io0fodXc8v5CV55zyopM1gXDKi4apAmGUF52iCoRRXpSjOkfq8gE5VXVEGOVFuZpAOOVFp6mOCKO8aLgqEEZ50QhVIIzyojxVIIzyopGqQBjlRaNUgTDKi05XBcIoL8pXBcK4j5yhCoRRXnSmKhBGeVGBKhBGedFoVSCM8qJCVSCM8qIiVSCM8qIxqkAY5UVjVYEwyouKVYEwyovGqQJhlBeVqAJhlBeVqgJhlBeNVwXCKC+aoAqEUV40URUIo7xokioQRnnRZFUgjPKis1SBMMqLzlYFwigvOkcVCKO86FxVIIzyovNUgTDKi6ZoAuGUF5WpAmGUF52vCoRRXjRVFQijvGiaKhBGedEFqkAY33y4UBUIo7xouioQRnnRRapAGOVFF6sCYZQXXaIKhFFedKkqEEZ50QxVIIzyostUgTDKiy5XBcIoL5qpCoRRXjRLFQijvGi2KhBGeVG5KhBGedEcVSCM8qK5qkAY5UVXqAJhlBddqQqEUV50lSoQRnnR1apAGOVF16gCYZQXXasKhFFedB0BSCV50fSN8qKTITIMIqdAJAcip0IkFyKnQWQ4REZAJA8iIyEyCiKnQyQfImdA5EyIFEBkNEQKIVIEkTEQGQuRYozxY3Qc48oYkcVYJkYBMX6GkSeM2WC0A+ME6GFH3zR6ddEfip5E9MGh9wr9PugxQV8D3tLxfos3Q7xT4W0Ez/F4AsazI5668LyCOz3ukbi74LqMKxquBTiLkH84coi5BvKik8op8qLrM5ty0mM6r7zoejZ6hJa74/l0Vp5zyotu0ATCKS+6URUIo7xonioQRnnRTapzpC4fkJtVR4RRXnSLJhBOedGtqiPCKC+arwqEUV60QBUIo7xooSoQRnnRbapAGOVFi1SBMMqLblcFwigvukMVCOM+slgVCKO86E5VIIzyoiWqQBjlRXepAmGUF92tCoRRXrRUFQijvOgeVSCM8qJ7VYEwyovuUwXCKC9apgqEUV50vyoQRnnRA6pAGOVFD6oCYZQXPaQKhFFe9LAqEEZ50SOqQBjlRY+qAmGUFz2mCoRRXvS4KhBGedETqkAY5UVPqgJhlBepxhA55UUrNIFwyoueUgXCKC96WhUIo7zoGVUgjPKiZ1WBMMqLnlMFwvjmw/OqQBjlRS+oAmGUF72oCoRRXvSSKhBGedHLqkAY5UVxVSCM8iJQBcIoL3pFFQijvGilKhBGedGrqkAY5UWvqQJhlBe9rgqEUV70hioQRnnRm6pAGOVFb6kCYZQXva0KhFFe9I4qEEZ50buqQBjlRatUgTDKi95TBcIoL3pfFQijvGg1AUgledFFG+VFN0DkRojMg8hNELkZIrdA5FaIzIfIAogshMhtEFkEkdshcgdEFkPkTogsgchdELkbIkshcg9E7oXIfRjjx+g4xpUxIouxTIwCYvwMI08Ys8FoB8YJ0MOOvmn06qI/FD2J6IND7xX6fdBjgr4GvKXj/RZvhninwtsInuPxBIxnRzx14XkFd3rcI3F3wXUZVzRcC3AWIf9w5BBzDeRF15dT5EWZXxaqJC+6iFdexPeqUohygnXfi4EZpF78MKMps2xp94Lc4Wd2L5rYu7RweI/cgoKyBYO7DejTq7zstqH5JYV548ahnVYe2hh6jdTGNYSRprRxTauyxd2L8wsK8kdVlJhbZ3bZwiH5haMK8qhDRTijzy5b0K24OHfSLBLdKncaWyOSdMeyQUXj8vJHFBV2GpRXPLq0JLckv6iwfG6ie6xZW5932/rU1vH98rkQ+QgiH0PkE4h8Wrkra5Vvhl1OQ7Eb1/QhnJJdDnLko8wmiYNbqYuiV7hsiO8VN9gytGf9+m5NBDrCrck13CYJcbTyCoujxxTkQeSzxOPntCGkrCufVVlXGpa77ZYMq/CGDRvWU0faqAL5i8Tjl3yQv6yy3M+hwUy/3Jev3VjqC9Km8CWhy6otrpnNfuHu0HkR66GTU+v7lSYQTq3v16pAGLW+36gCYdT6fqs6R+ryAflOdUQYtb7fawLh1Pr+oDoijFrfH1WBMGp916oCYdT6/qQKhFHr+7MqEEat7y+qQBi1vr+qAmHU+v6mCoRxH1mnCoRR6/u7KhBGre96VSCMWt8/VIEwan3/VAXCqPX9SxUIo9b3b1UgjFrff1SBMGp9/1UFwqj13aAKhE/rG81SBcKn9Y0aqkD4tL5RUxUIn9Y3aqkC4dP6Rm1VIHxa36hPFQif1jfqVwXCp/WNBlSB8Gl9o0FVIHxa32hIFQif1jcaVgXCp/WNRlSB8Gl9o1FNIIxa32hMFQif1jearQqET+sbraUKhE/rG62tCoRP6xutowqE782HaF1VIHxa32g9VSB8Wt9ofVUgfFrfaANVIHxa32hDVSB8Wt9oI1UgfFrfaGNVIHxa32gTVSB8Wt9oU1UgfFrfaDNVIHxa32hzVSB8Wt9oC1UgfFrf6E6qQPi0vtGWqkD4tL7RVqpA+LS+0Z1VgfBpfaO7qALh0/pGW6sC4dP6RndVBcKn9Y22UQXCp/WN7qYKhE/rG6Xo0SppfS/dqPX9CiJfQ+QbiHwLke8g8j1EfoDIjxBZC5GfIPIzRH6ByK8Q+Q0i6yDyO0TWQ+QPiPwJkb8g8jdE/oHIvxjjx+g4xpUxIouxTIwCYvwMI08Ys8FoB8YJ0MOOvmn06qI/FD2J6IND7xX6fdBjgr4GvKXj/RZvhninwtsInuPxBIxnRzx14XkFd3rcI3F3wXUZVzRcC3AWIf9w5BCzV61vMKMkaJMqJ9rOHT0uZdX6UmqnmTIkYJCFE4wutvaaQBjFRdHdVYHwiYuie6gC4RMXRfdUnSN1+YB0UB0RPnFRdC9NIIzioujeqiPCJy6K7qMKhE9cFO2oCoRPXBTtpAqET1wU7awKhE9cFN1XFQifuCjaRRUIn7goup8qEMZ9ZH9VIHziougBqkD4xEXRA1WB8ImLogepAuETF0UPVgXCJy6KHqIKhE9cFD1UFQifuCh6mCoQPnFRtKsqED5xUfRwVSCM4qJuqkAYxUXdVYEwiot6qAJhFBf1VAXCKC7qpQqEUVzUWxUIo7iojyoQRnHREapAGMVFfVWBMIqL+qkCYRQXHakKhFFcdJQqEEZxUX9NIJziogGqQBjFRQNVgTCKiwapAmEUFx2tCoRRXDRYFQjjmw9DVIEwiouOUQXCKC46VhUIo7joOFUgjOKioapAGMVFx6sCYRQXnaAKhFFcdKIqEEZx0UmqQBjFRSerAmEUFw1TBcIoLjpFFQijuChHFQijuOhUVSCM4qJcVSCM4qLTVIEwiouGqwJhFBeNUAXCKC7KUwXCKC4aqQqEUVw0ShUIo7jodAKQSuKiGRXiomh7iO4O0T0guidEO0B0L4juDdF9INoRop0g2hmi+0K0C0T3g+j+ED0AogdC9CCIHgzRQyB6KEQPg2hXjPFjdBzjyhiRxVgmRgExfoaRJ4zZYLQD4wToYUffNHp10R+KnkT0waH3Cv0+6DFBXwPe0vF+izdDvFPhbQTP8XgCxrMjnrrwvII7Pe6RuLvguowrGq4FOIuQfzhyiNn7DwlG25VTxEX5mU056TGDV1yUz0YPn8tfWZ/BynNOedEZmkA45UVnqgJhlBcVqAJhlBeNVp0jdfmAFKqOCKO8qEgTCKe8aIzqiDDKi8aqAmGUFxWrAmGUF41TBcIoLypRBcIoLypVBcIoLxqvCoRRXjRBFQjjPjJRFQijvGiSKhBGedFkVSCM8qKzVIEwyovOVgXCKC86RxUIo7zoXFUgjPKi81SBMMqLpqgCYZQXlakCYZQXna8KhFFeNFUVCKO8aJoqEEZ50QWqQBjlRReqAmGUF01XBcIoL7pIFQijvOhiVSCM8qJLVIEwyosuVQXCKC+aoQqEUV50mSoQRnnR5ZpAOOVFM1WBMMqLZqkCYZQXzVYFwigvKlcFwigvmqMKhPHNh7mqQBjlRVeoAmGUF12pCoRRXnSVKhBGedHVqkAY5UXXqAJhlBddqwqEUV50nSoQRnnR9apAGOVFN6gCYZQX3agKhFFeNE8VCKO86CZVIIzyoptVgTDKi25RBcIoL7pVFQijvGi+KhBGedECVSCM8qKFqkAY5UW3qQJhlBctUgXCKC+6nQCkkrzoso3yojMgeiZECyA6GqKFEC2C6BiIjoVoMUTHQbQEoqUQHQ/RCRCdCNFJEJ0M0bMgejZEz4HouRA9D6JTMMaP0XGMK2NEFmOZGAXE+BlGnjBmg9EOjBOghx190+jVRX8oehLRB4feK/T7oMcEfQ14S8f7Ld4M8U6FtxE8x+MJGM+OeOrC8wru9LhH4u6C6zKuaLgW4CxC/uHIIeYayIvyyynyojsym6pc+WyS2cXpza5f362Jk3WX8aqW7uBj3WJ30+cy1unDqVq6UxMIp2ppiSoQRtXSXapAGFVLd6vOkbp8QJaqjgijaukeTSCcqqV7VUeEUbV0nyoQRtXSMlUgjKql+1WBMKqWHlAFwqhaelAVCKNq6SFVIIyqpYdVgTDuI4+oAmFULT2qCoRRtfSYKhBG1dLjqkAYVUtPqAJhVC09qQqEUbW0XBUIo2pphSoQRtXSU6pAGFVLT6sCYVQtPaMKhFG19KwqEEbV0nOqQBhVS8+rAmFULb2gCoRRtfSiKhBG1dJLqkAYVUsvqwJhVC3FVYEwqpZAFQijaukVVSCMqqWVqkAYVUuvagLhVC29pgqEUbX0uioQRtXSG6pAGFVLb6oCYVQtvaUKhPHNh7dVgTCqlt5RBcKoWnpXFQijammVKhBG1dJ7qkAYVUvvqwJhVC2tVgXCqFr6QBUIo2rpQ1UgjKqlNapAGFVLH6kCYVQtfawKhFG19IkqEEbV0qeqQBhVS5+pAmFULX2uCoRRtfSFKhBG1dKXqkAYVUtfqQJhVC19rQqEUbX0jSoQRtUSIa5aWbV0+UbV0p0QXQLRuyB6N0SXQvQeiN4L0fsgugyi90P0AYg+CNGHIPowRB+B6KMQfQyij0P0CYg+CdHlEF0B0acwxo/RcYwrY0QWY5kYBcT4GUaeMGaD0Q6ME6CHHX3T6NVFfyh6EtEHh94r9PugxwR9DXhLx/st3gzxToW3ETzH4wkYz4546sLzCu70uEfi7oLrMq5ouBbgLEL+4cgh5hqolu4op8iLvstsykmPy3nlRd9x0cNyx/LLWVnOKS76XhMIp7joB1UgjOKiH1WBMIqL1qrOkbp8QH5SHRFGcdHPmkA4xUW/qI4Io7joV1UgjOKi31SBMIqL1qkCYRQX/a4KhFFctF4VCKO46A9VIIzioj9VgTDuI3+pAmEUF/2tCoRRXPSPKhBGcdG/qkAYxUUbVIHwiYtiWapA+MRFMUMVCJ+4KGaqAuETF8VU3UGM4qKYrQqET1wU86kC4RMXxfyqQPjERbGAKhA+cVEsqAqET1wUC6kC4RMXxcKqQPjERbGIKhA+cVEsqgqET1wUi6kC4RMXxbJVgfCJi2K1VIHwiYtitVWB8ImLYnU0gTCKi2J1VYHwiYti9VSB8ImLYvVVgfCJi2INVIHwiYtiDVWB8L35EGukCoRPXBRrrAqET1wUa6IKhE9cFGuqCoRPXBRrpgqET1wUa64KhE9cFGuhCoRPXBTbSRUIn7go1lIVCJ+4KNZKFQifuCi2syoQPnFRbBdVIHziolhrVSB84qLYrqpA+MRFsTaqQPjERbHdVIHwiYtibVWB8ImLYu1UgfCJi2LtVYHwiYtiu6sC4RMXxfZQBcInLortSQBSSVw0c6O46HuI/gDRHyG6FqI/QfRniP4C0V8h+htE10H0d4iuh+gfEP0Ton9B9G+I/gPRfyG6AWJZEKt43wJiFsb4MTqOcWWMyGIsE6OAGD/DyBPGbDDagXEC9LCjbxq9uugPRU8i+uDQe4V+H/SYoK8Bb+l4v8WbId6p8DaC53g8AePZEU9deF7BnR73SNxdcF3GFQ3XApxFyD8cOcRcA3HRd+UEcVEs8yJWSVw0k1VcFONbQiMu5fEzWXnOKC+K7aUJhFFeFNtbFQifvCi2jyoQPnlRrKPqHKnLB6ST6ojwyYtinTWBMMqLYvuqjgifvCjWRRUIn7wotp8qED55UWx/VSB88qLYAapA+ORFsQNVgfDJi2IHqQLhkxfFDlYFwriPHKIKhE9eFDtUFQifvCh2mCoQPnlRrKsqED55UexwVSCM8qJuqkAY5UXdVYEwyot6qAJhlBf1VAXCKC/qpQqEUV7UWxUIo7yojyoQRnnREapAGOVFfVWBMMqL+qkCYZQXHakKhFFedJQqEEZ5UX9VIIzyogGqQBjlRQNVgTDKiwapAmGUFx2tCoRRXjRYEwinvGiIKhBGedExqkAY5UXHqgJhlBcdpwqEUV40VBUI45sPx6sCYZQXnaAKhFFedKIqEEZ50UmqQBjlRSerAmGUFw1TBcIoLzpFFQijvChHFQijvOhUVSCM8qJcVSCM8qLTVIEwyouGqwJhlBeNUAXCKC/KUwXCKC8aqQqEUV40ShUIo7zodFUgjPKifFUgjPKiM1SBMMqLzlQFwigvKlAFwigvGk0AUkleNKtCXhTbC2J7Q2wfiHWEWCeIdYbYvhDrArH9ILY/xA6A2IEQOwhiB0PsEIgdCrHDINYVYviH3SDWHWI9INYTY/wYHce4MkZkMZaJUUCMn2HkCWM2GO3AOAF62NE3jV5d9IeiJxF9cOi9Qr8PekzQ14C3dLzf4s0Q71R4G8FzPJ6A8eyIpy48r+BOj3sk7i64LuOKhmsBziLkH44cYvYuL4p1KKfIiwozm3LSYxavvKiQjR4Rlz/IN4uV55zyoiJNIJzyojGqQBjlRWNVgTDKi4pV50hdPiDjVEeEUV5UogmEU15UqjoijPKi8apAGOVFE1SBMMqLJqoCYZQXTVIFwigvmqwKhFFedJYqEEZ50dmqQBj3kXNUgTDKi85VBcIoLzpPFQijvGiKKhBGeVGZKhBGedH5qkAY5UVTVYEwyoumqQJhlBddoAqEUV50oSoQRnnRdFUgjPKii1SBMMqLLlYFwigvukQVCKO86FJVIIzyohmqQBjlRZepAmGUF12uCoRRXjRTFQijvGiWKhBGedFsVSCM8qJyVSCM8qI5mkA45UVzVYEwyouuUAXCKC+6UhUIo7zoKlUgjPKiq1WBML75cI0qEEZ50bWqQBjlRdepAmGUF12vCoRRXnSDKhBGedGNqkAY5UXzVIEwyotuUgXCKC+6WRUIo7zoFlUgjPKiW1WBMMqL5qsCYZQXLVAFwigvWqgKhFFedJsqEEZ50SJVIIzyottVgTDKi+5QBcIoL1qsCoRRXnSnKhBGedESVSCM8qK7CEAqyYtmb5QXFUFsDMTGQqwYYuMgVgKxUoiNh9gEiE2E2CSITYbYWRA7G2LnQOxciJ0HsSkQK4PY+RCbCrFpELsAY/wYHce4MkZkMZaJUUCMn2HkCWM2GO3AOAF62NE3jV5d9IeiJxF9cOi9Qr8PekzQ14C3dLzf4s0Q71R4G8FzPJ6A8eyIpy48r+BOj3sk7i64LuOKhmsBziLkH44cYq6BvKiwnCIvujuzKSc9ZvPKi+5mo0dkjTuez2blOae8aKkmEE550T2qQBjlRfeqAmGUF92nOkfq8gFZpjoijPKi+zWBcMqLHlAdEUZ50YOqQBjlRQ+pAmGUFz2sCoRRXvSIKhBGedGjqkAY5UWPqQJhlBc9rgqEcR95QhUIo7zoSVUgjPKi5apAGOVFK1SBMMqLnlIFwigveloVCKO86BlVIIzyomdVgTDKi55TBcIoL3peFQijvOgFVSCM8qIXVYEwyoteUgXCKC96WRUIo7worgqEUV4EqkAY5UWvqAJhlBetVAXCKC96VRUIo7zoNVUgjPKi11WBMMqL3lAFwigvelMTCKe86C1VIIzyordVgTDKi95RBcIoL3pXFQijvGiVKhDGNx/eUwXCKC96XxUIo7xotSoQRnnRB6pAGOVFH6oCYZQXqb6vxSkv+kgVCKO86GNVIIzyok9UgTDKiz5VBcIoL/pMFQijvOhzVSCM8qIvVIEwyou+VAXCKC/6ShUIo7zoa1UgjPKib1SBMMqLvlUFwigv+k4VCKO86HtVIIzyoh9UgTDKiwhRvMryovKN8qKlELsHYvdC7D6ILYPY/RB7AGIPQuwhiD0MsUcg9ijEHoPY4xB7AmJPQmw5xFZA7CmIPQ2xZyD2LMSewxg/RscxrowRWYxlYhQQ42cYecKYDUY7ME6AHnb0TaNXF/2h6ElEHxx6r9Dvgx4T9DXgLR3vt3gzxDsV3kbwHI8nYDw74qkLzyu40+MeibsLrsu4ouFagLMI+Ycjh5hrIC+6u5wiL1qb2ZSTHuW88qK1bPSIUE6w7nsx8iGpF38i9OLS7gW5w8/sXjSxd2nh8B65BQVlCwZ3G9CnV3nZbUPzSwrzxo1DO628tPEzUht/Zmrjz63KFncvzi8oyB9VUWJundllC4fkF44qyKMOFeGMPrtsQbfi4txJs0h0q9xpbI2objZzL2eIbM+fvug6L2Z/TW+2e9P1TyQZvGWDisbl5Y8oKuw0KK94dGlJbkl+UWH5XMdg/uJ4/jXxHFrheH5uLsR+g9g6iP0OsfWVWz+H0NdtSUvBb6R++MPtqFEa2I7UwHWkBv5JaKCXgfrD8fyn4/l3x/N6HKi/IPY3xP6B2L+VZ2nd8s0zam7GGVVBJuIsCq3gWsDZ7mntCAPgbr2KESLxXtYp2jb+M4l2G5gW9w1VFvd6s/U6q1JDDNcN2UDZZdDm6DEFeZCdRWsToQ+zq4zz7DmE1lq3gjWftBVkE4L3lbuuvtuuo1Th6DrTPfdJfZKN/zNpDbYyd5y3+q1Zbnu7YfnW3q6oJeN4bh35jO3JwGhjY1u2jvSszIXLE2NoJx59fDPBphXztao2OLRum0PrtvTTqnztxsG2SZPPRxgC90SzKqon1U9rpV9kOlYYpi1RhJdAPCyRN4B1C63+oIf6M1ul4w9J9L+LLSJcg0VrVjntwEFal4NyK1Yk8RjlW7EitGLRKvf0uZx9RlquIiQiREWWKzQcmUOqP4tUioYl5mFSkSZ1hLSNbMSSuRQNS7bLBaqcNC4BJA+pYBCXKNpKUkuiobEN2FZSQ0O4ltEaWlvE/WfNo9HcnY+9nNXHzpjaKLuOJhDG1EbZdVWB8KU2yq6nCoQvtVF2fdU5UpcPSAPVEeFLbZTdUBMIY2qj7EaqI8KX2ii7sSoQvtRG2U1UgfClNspuqgqEL7VRdjNVIHypjbKbqwLhS22U3UIVCF9qo+ydVIEw7iMtVYHwpTbKbqUKhC+1UfbOqkD4Uhtl76IKhC+1UXZrVSB8qY2yd1UFwpfaKLuNKhC+1EbZu6kC4UttlN1WFQhfaqPsdqpA+FIbZbdXBcKX2ih7d1UgfKmNsvdQBcKX2ih7T1UgfKmNsjuoAuFLbZS9lyoQvtRG2XurAuFLbZS9jyoQvtRG2R1VgfClNsrupAqEL7VRdmdVIHypjbL3VQXCl9oou4smEMbURtn7qQLhS22Uvb8qEL7URtkHqALhS22UfaAqEL7URtkHqQJhfPPhYFUgfKmNsg9RBcKX2ij7UFUgfKmNsg9TBcKX2ii7qyoQvtRG2YerAuFLbZTdTRUIX2qj7O6qQPhSG2X3UAXCl9oou6cqEL7URtm9VIHwpTbK7q0KhC+1UXYfVSB8qY2yj1AFwpfaKLuvKhC+1EbZ/VSB8KU2yj5SFQhfaqPso1SB8KU2yu6vCoQvtVH2AFUgfKmNsgeqAuFLbZQ9iACkmnglkyyFolfaXaJig1DxHhIVm4SK95So2CJU3MFLxZmM7lVOkUpf47ZqCmv3luhIm1DxPhIV+wgVd5So2E+ouJNExQFCxZ0lKg4SKt5XouIQoeIuEhWHCRXvJ1FxhFDx/hIVRwkVHyBRcYxQ8YESFWcTKj5IouJahIoPlqi4NqHiQyQqrkOo+FCJiusSKj5MouJ6hIq7SlRcn1Dx4RIVNyBU3E2i4oaEirtLVNyIUHEPiYobEyruKVFxE0LFvSQqbkqouLdExc0IFfeRqLg5oeIjJCpuQai4r0TFOxEq7idRcUtCxUdKVNyKUPFREhXvTKi4v0TFuxAqHiBRcWtCxQPdVky5dA+SMHq0hGdiMMkzcaPE6OxKaN4QCczHUDBT8lJWS6lDsArZMVLCo2zIrkVhxbESzcwOu2hmbUozj5OYEUMljB4vYfQECaMnShg9ScLoyRJGh0kYPUXCaI6E0VMljOZKGD1NwuhwCaMjJIzmSRgdKWF0lITR0yWM5ksYPUPC6JkSRgskjI6WMFooYbRIwugYCaNjJYwWSxgdJ2G0RMJoqYTR8RJGJ0gYnShhdJKE0ckSRs+SMHq2hNFzJIyeK2H0PAmj8SkiVstErJ4vYnWqiNVpIlYvELF6oYjV6RI+D2sd2FmkBO9/Y0GKnyl+Ecm59reEjyt+ManuG1zWTUnWbWD3kIbxEg+VZzIKtg12kJIpPH4ppYfsileddur+8sNL1g3u9+eoAT/7xoQfPOmYSbVPu2b/tpd9/F6t61u89B7WKDKGM0gtNGTGMEgaw8skxtD3AvjipDG8nNJDvhewVOzsHs+vfG3RPtNuff2lIYuLwlPqnNc+f83lN9Yb99fhpfWj87BGkTGcSRrDkMgY+uKkMZwlskjPFrFaLmJ1jojVuSJWrxCxeqWI1atErF4tYlXk7dv4tSJWrxOxer2I1RtErN4oYnWeiNWbRKzeLGL1FhGrt4pYnS9idYGI1YUiVm8TsbpIxOrtIlbvELG6WMTqnSJWl4hYvUvE6t0iVpeKWL1HxOq9IlbvE7G6TMTq/SJWHxCx+qCI1YfS391+3LDhXw9WHxZp6yMiVh8VsfqYiNXHRaw+IWL1SRGry0WsrhCx+pSI1adFrD4jYvVZEavPiVh9XsTqCyJWXxSx+pKI1ZdFrMZFrIKI1VdErK4UsfqqiNXXRKy+LmL1DRGrb4pYfUvE6tsiVt8RsfquiNVVIlbfE7H6vojV1SJWPxCx+qGI1TUiVj8SsfqxiNVPRKx+KmL1MxGrn4tY/ULE6pciVr8Ssfq1iNVvRKx+K2L1OxGr34tY/UHE6o8iVteKWP1JxOrPIlZ/EbH6q4jV30SsrhOx+ruI1fUiVv8QsfqniNW/RKz+LWL1HxGr/4pY3SBhFYwsGbOGjFlTxqwlY9aWMeuTMeuXMRuQMRuUMev2ZUnSi5pghClvambXkak8Qqq8rkzlUVLl9WQqj5Eqry9TeTap8gYyldciVd5QpvLapMobyVReh1R5Y5nK65IqbyJTeT1S5U1lKq9PqryZTOUNSJU3l6m8IanyFjKVNyJVvpNM5Y1JlbeUqbwJqfJWMpU3JVW+s0zlzUiV7yJTeXNS5a1lKm9BqnxXmcp3IlXeRqbylqTKd5OpvBWp8rYyle9MqrydTOW7kCpvL1N5a1Llu8tUviup8j1kKm9DqnxPmcp3I1XeQabytqTK95KpvB2p8r1lKm9Pqnwfmcp3J1XeUabyPUiVd5KpfE9S5Z1lKu9AqnxfmcpJP5yR3UWm8r1Jle8nU/k+pMr3l6m8I6nyA2Qq70Sq/ECZyjuTKj9IpvJ9SZUfLFN5F1Llh8hUvh+p8kNlKt+fVPlhMpUfQKq8q0zlB5IqP1ym8oNIlXeTqfxgUuXdZSo/hFR5D5nKDyVV3lOm8sNIlfeSqbwrqfLeMpUfTqq8j0zl3UiVHyFTeXdS5X1lKu9BqryfTOU9SZUfKVN5L1LlR8lU3ptUeX+ZyvuQKh8gU/kRpMoHylTel1T5IJnK+1Eqj/3kpXKOn7IEmZ/zoFUt8oMeFqlqoUk2gDTaf8lUPpBU+c9uK6e9fjJIxuzRMmYHy5gdImP2GBmzx8qYPU7G7FAZs8fLmD1BxuyJMmZPkjF7sozZYTJmT5ExmyNj9lQZs7kyZk+TMTtcxuwIGbN5MmZHypgdJWP2dBmz+TJmz5Axe6aM2QIZs6NlzBbKmC2SMTtGxuxYGbPFMmbHyZgtkTFbKmN2vIzZCTJmJ8qYnSRjdrKM2bNkzJ4tY/YcGbPnypg9T8bsFBmzZTJmz5cxO1XG7DQZsxfImL1Qxux0GbMXyZi9WMbsJTJmL5UxO0PG7GUyZi+XMTtTxuwsGbOzZcyWy5idI2N2rozZK2TMXilj9ioZs1fLmL1Gxuy1MmavkzF7vYzZG2TM3ihjdp6M2ZtkzN4sY/YWGbO3ypidL2N2gYzZhTJmb5Mxu0jG7O0yZu+QMbtYxuydMmaXyJi9S8bs3TJml8qYvUfG7L0yZu+TMbtMxuz9MmYfkDH7oIzZh2TMPixj9hEZs4/KmH1MxuzjMmafkDH7pIzZ5TJmV8iYfUrG7NMyZp+RMfusjNnnZMw+L2P2BRmzL8qYfUnG7MsyZuMyZkHG7CsyZlfKmH1VxuxrMmZflzH7hozZN2XMviVj9m0Zs+/ImH1XxuwqGbPvyZh9X8bsahmzH8iY/VDG7BoZsx/JmP1YxuwnMmY/lTH7mYzZz2XMfiFj9ksZs1/JmP1axuw3Mma/zSyU8mL2O5nWfi9j9gcZsz/KmF0rY/YnGbM/y5j9RcbsrzJmf5Mxu07G7O8yZtfLmP1DxuyfMmb/kjH7t4zZf2TM/itjVubXFUyZX1cwZX5dwZT5dQVT5tcVTJlfVzBlfl3BlPl1BVPm1xVMmV9XMEMyZsMyZiMyZqMyZmMyZrNlzNaSMVvbpdnZcwjJHgIzILCAVn8dGVh1pWDdSKu/ngys+jJmG8iYbShjtpGM2cYyZpvImG0qY7aZjNnmMmZbyJjdScZsSxmzrWTM7ixjdhcZs61lzO4qY7aNjNndZMy2lTHbTsZsexmzu8uY3UPG7J4yZjvImN1LxuzeMmb3kTHbUcZsJxmznWXM7itjtouM2f1kzO4vY/YAGbMHypg9SMbswTJmD5Exe6iM2cNkzHaVMSuT8NwkZWEOyEi/ze4yZnvImO0pY7aXjNneMmb7yJg9QsZsXxmz/WTMHilj9igZs/1lzA6QMTtQxqxM3l1TJu+uOVjGrEzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3zWIZszJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02h4ItM3l1TJu+uKZN315TJu2vK5N01y2XMyuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXvFfGrEzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3zddlzMrk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a34rY1Ym764pk3fXlMm7a8rk3TVl8u6aMnl3zZ9lzMrk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dSybvriWTd9eSybtryeTdtWTy7loyeXctmby7lkzeXUsm764lk3fXksm7a8nk3bVk8u5aMnl3LZm8u5ZM3l2rtoxZmXS6Vl0ZszJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5lkyWXEsmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl15LJkmvJZMm1ZLLkWjJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtTrJmJXJkmvJZMm1ZLLkWjJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy51uEyZrvJmJXJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//WGixjVib/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3VrGMWZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1iLlv+2fN7qoeFLfwvySOfErV1sjd99jzw577b1Px06d9+2y3/4HHHjQwYcceljXw7t179GzV+8+R/Ttd+RR/QcMHHT04CHHHHvc0ONPOPGkk4edknNq7mnDR+SNHHV6/hlnFowuLBoztnhcSen4CRMnTT7r7HPOPS8+JV4WPz8+NT4tfkH8wvj0+EXxi+OXxC+Nz4hfFr88PjM+Kz47Xh6fE58bvyJ+Zfyq+NXxa+LXxq+LXx+/IX5jfF78pvjN8Vvit8bnxxfEF8Zviy+K3x6/I744fmd8Sfyu+N3xpfF74vfG74svi98ffyD+YPyh+MPxR+KPxh+LPx5/Iv5kfHl8Rfyp+NPxZ+LPxp+LPx9/If5i/KX4y/F4HOKvxFfGX42/Fn89/kb8zfhb8bfj78Tfja+Kvxd/P746/kH8w/ia+Efxj+OfxD+Nfxb/PP5F/Mv4V/Gv49/Ev41/F/8+/kP8x/ja+E/xn+O/xH+N/xZfF/89vj7+R/zP+F/xv+P/xP+NbwAjCwwDDBMMCwwbDB8YfjACYATBCIERBiMCRhSMGBjZYNQCozYYdcCoC0Y9MOqD0QCMhmA0AqMxGE3AaApGMzCag9ECjJ3AaAlGKzB2BmMXMFqDsSsYbcDYDYy2YLQDoz0Yu4OxBxh7gtEBjL3A2BuMfcDoCEYnMDqDsS8YXcDYD4z9wTgAjAPBOAiMg8E4BIxDwTgMjK5gHA5GNzC6g9EDjJ5g9AKjNxh9wDgCjL5g9APjSDCOAqM/GAPAGAjGIDCOBmMwGEPAOAaMY8E4DoyhYBwPxglgnAjGSWCcDMYwME4BIweMU8HIBeM0MIaDMQKMPDBGgjEKjNPByAfjDDDOBKMAjNFgFIJRBMYYMMaCUQzGODBKwCgFYzwYE8CYCMYkMCaDcRYYZ4NxDhjngnEeGFPAKAPjfDCmgjENjAvAuBCM6WBcBMbFYFwCxqVgzADjMjAuB2MmGLPAmA1GORhzwJgLxhVgXAnGVWBcDcY1YFwLxnVgXA/GDWDcCMY8MG4C42YwbgHjVjDmg7EAjIVg3AbGIjBuB+MOMBaDcScYS8C4C4y7wVgKxj1g3AvGfWAsA+N+MB4A40EwHgLjYTAeAeNRMB4D43EwngDjSTCWg7ECjKfAeBqMZ8B4FoznwHgejBfAeBGMl8B4GYw4GADGK2CsBONVMF4D43Uw3gDjTTDeAuNtMN4B410wVoHxHhjvg7EajA/A+BCMNWB8BMbHYHwCxqdgfAbG52B8AcaXYHwFxtdgfAPGt2B8B8b3YPwAxo9grAXjJzB+BuMXMH4F4zcw1oHxOxjrwfgDjD/B+AuMv8H4B4x/wdgAZhaYBpgmmBaYNpg+MP1gBsAMghkCMwxmBMwomDEws8GsBWZtMOuAWRfMemDWB7MBmA3BbARmYzCbgNkUzGZgNgezBZg7gdkSzFZg7gzmLmC2BnNXMNuAuRuYbcFsB2Z7MHcHcw8w9wSzA5h7gbk3mPuA2RHMTmB2BnNfMLuAuR+Y+4N5AJgHgnkQmAeDeQiYh4J5GJhdwTwczG5gdgezB5g9wewFZm8w+4B5BJh9wewH5pFgHgVmfzAHgDkQzEFgHg3mYDCHgHkMmMeCeRyYQ8E8HswTwDwRzJPAPBnMYWCeAmYOmKeCmQvmaWAOB3MEmHlgjgRzFJing5kP5hlgnglmAZijwSwEswjMMWCOBbMYzHFgloBZCuZ4MCeAORHMSWBOBvMsMM8G8xwwzwXzPDCngFkG5vlgTgVzGpgXgHkhmNPBvAjMi8G8BMxLwZwB5mVgXg7mTDBngTkbzHIw54A5F8wrwLwSzKvAvBrMa8C8FszrwLwezBvAvBHMeWDeBObNYN4C5q1gzgdzAZgLwbwNzEVg3g7mHWAuBvNOMJeAeReYd4O5FMx7wLwXzPvAXAbm/WA+AOaDYD4E5sNgPgLmo2A+BubjYD4B5pNgLgdzBZhPgfk0mM+A+SyYz4H5PJgvgPkimC+B+TKYcTABzFfAXAnmq2C+BubrYL4B5ptgvgXm22C+A+a7YK4C8z0w3wdzNZgfgPkhmGvA/AjMj8H8BMxPwfwMzM/B/ALML8H8CsyvwfwGzG/B/A7M78H8AcwfwVwL5k9g/gzmL2D+CuZvYK4D83cw14P5B5h/gvkXmH+D+Q+Y/4K5AawssHBLNsGywLLB8oHlBysAVhCsEFhhsCJgRcGKgZUNVi2waoNVB6y6YNUDqz5YDcBqCFYjsBqD1QSspmA1A6s5WC3A2gmslmC1AmtnsHYBqzVYu4LVBqzdwGoLVjuw2oO1O1h7gLUnWB3A2gusvcHaB6yOYHUCqzNY+4LVBaz9wNofrAPAOhCsg8A6GKxDwDoUrMPA6grW4WB1A6s7WD3A6glWL7B6g9UHrCPA6ovRfYzEY9QcI9wYjcbIMUZ5MSKL0VOMdGJUEiOIGO3DyBxG0TDihdEpjCRh1AcjNBhNwcgHRikwooDef/TUo1cdPeDorUbPMnqB0WOL3lX0hKLXEj2M6A1Ezx162dAjht4r9DShVwg9OOhtQc8IejHQ44DeAbzJ460bb8h4m8WbJ94S8UaHty+8KeGtBm8geFvAkz2ewvHEjKdbPIniqRFPeHgaw5PTHYPzSkqLC3vmluSuzto9yzAt2+cPBEPhSDSWXat2nbr16jdo2Khxk6bNmrfYqWWrnXdpvWub3dq2az9r1uqs0vKy+d2G5xc3LV/5auDbX19+btSsWZs/al79o77lK5dEXu/++LzgKVs+OrL6R4PLV154x/1TO039cNyWj46vbuvE8pXFHaNXdr7ztq5bPjq1eqnx1c1PrP5RfEqSz85P8tkFST6bnuSzmUk+m53ksyuTfHZ1ks+uT/LZjUk+W5jks0VJPluc5LMlST67P8lnDyb57LEknz2R5LMXknz2UpLPXk/y2ZtJPnsnyWerknz2cZLPPk3y2VdJPvsmyWc/JPlsbZLP1if57M8kn/2T5LMN1T/DQ3SyD0PJPsxO9mHtZB/2KV/ZbN0xRa0/veKbrR+adcpXfhyZefvvpT98n/iwbvnK6xbPbH5S5++/SHzYpHzle5H3d+5+24TuiQ9xPbigQafJ3c9b8ELiw+bVpyyeYqpPWjyhJGmnuX+yD7sm+7Bbsg97Jvuwd7IPByT7cFCyD49N9uHQZB+elOzDYck+zEv24ahkH56R7MOCZB+WJPtwfLIPz0r24TnJPpye7MOLk304O9mHc5J9eGWyD69O9uFNyT68JdmHtyX78PZkHy5J9uHdyT58MNmHDyf78LFkHz6R7MPnkn34QrIPIdmHK5N8aPmTTG1rZZKpbb2aZGpb7ySZ2ta7Saa29WOSWWz9XL7y9Pe+zol/OP62xIe/lK+8eOCAnh0uXm0nPlyf5M/trPKV93XZ86DY8btN2fqhv1WSkv7WSSry753kz4P9kvx58KhkHw5IYjN4XBKb4bFJ/jw8LtmHpUlshs9NVvKq8pWLGywf1rP1hpNXZw0vu6PXxDHFeePG5RcVzpmV+TeZBrn9g9Pd/kGu2z8Y5/YP8tz+QSu3fzB8++ulQrd/MGr769YR4k0qEa9h+PbXpBHiA1ckzlbXTRrp9g9KxTHIUyP//8HATRAHXSK+ersGPWbHtrtdbLvyy/2Zbv9gL/Fu7Su+trba/qZovvh8aPX/oEmu58NE8ZXvf/JEtqf4SJeKk09+f2jt9g9OEt9FC8T/wPURzvUBK2fHaUail3Y4ESh/MMztH2StzmpUvqpd7sb3wHKGF40ek1uSf1pBXk5Rce5w/H/j84orTOVMKM4dMyaveHVWw7IFPYoKx5XMKVvYM784b3iJWXZb38KSvFF5xbce27lT5lfIqv694ervp/Ss+vdZ7urvWTa/R25BwezIVjuLBucVIOjxee5akpVV3YLp1sKdFW0ZgQHhHkVjJm2F1NPZJofxTS2P1bjlPRlaPn9ISdGY2eUpWlpljHos6J2fV5BZ19Zw4aYQ+WaktcsW9y4qzssfVVjxn1esaps7uSRveE5pSUHOJsL22MrXgRvpetwmts6aNbtsyaZ3ELuNGFExG7Y2ZHbZwiH5o8cU5G1q0Zb6qrTXdtUbE3uWLe6eX5hb8cZjycAxV2yxYi06Cqs+5vTcwgorCb5urWRhv9LRY/qOLN/6Bw3KlvQtHLGppSknyX5p8g299+xvby/r12l02fxjcMLOLk/8/ZbZuhlx+apW+eNy8ibmDS8tqZjf+YU5xXk42TdN/jGn547LW53VRHmu967hXO+9mUfZNea7Ud2CxT7XTadxbLkDeM/Eg7PWslv7F42vNAe3FtuEvNbmEps/7uUsWtM+6VXjPjGqryLOPqi8GNSrshjstmkxGFM8Pid/XK8tRO5bOHgrjQdVsLjaSpCoautasLXVtxzbMXV5o3r55GOQqIFneenNtbw03nbLyxOj8iqOE4UluC6X4OoyriS3cHgePpTkFRfmFqzO2k95bTm2hmvLsZtp2fw/uLZkWjVapFk1Kn3T21lBpW/6VK9v8zdHJL6xK3/TN/GNr/I3/RLf+Ct/c2Tim0Dlb45KfBOs/E3/xDehyt8MSHwTrvzNwMQ3kcrfDEp8E638zdGJb2KVvxmc+Ca78jdDEt9UWbuPSXxTuzpj6tR47a7rzkLt6mt3HYexymv3PpXX7scT5zhcJnpsXiX6bl4kVqPtlGt2ym+slN/YKb/xpfzGn/KbQMpvgim/CaX8Jpzym0jKb6Ipv4ml/CY75Te1Un6TehTqVAxRpXM073859+PtrTzlfLD5r9McDKp+l255tqovmI4Pqi2Zjg+qLZqOD6otm44Pqi2cjg+qLZ2OD6otno4Pqi2fjg+qLaCOD6otoY4Pqi2ijg+qLaOODxwUr/JdbQfJeQ5vx3Id3rpsu8PbXSPyKjxBRePyck7HE9vqrJ2UD2t9anhY6/MfvgjW5IqX+rBWUxRJDhDuJkaWWf0A4VzpKh8gGm+5DycrmyDT/GM7djqgWlFnd25empdsmpMb/2PgmLmOArcOKT0txZpd3e22xa1Vr2PWOy3XdJm0R8P9igaOn7bmmCXn1r+1/Ze1Gv9Qesj4P1YXpa7PvrV/aUEKVN72D5tn3erDtW612Hbr1qKCki0r1p7/f1csy+08q+lMJaxY6c4ojhWrGmu3LlpJ17LenO6q3tvWXbVLmjm/sNfY0tyCcSmm9tYZlPiDFmXzKz5EH1g1DD53GJKcBLcSNPU50EhzDjSTLxRZt+IBufIa4Wjzpj5qV3m4HSWy0hx0A2kPyJs6qlW6GAme4gljnboSY2slqVdoaztbhdtus1U4M/8Tradtbkm6tXwZRi8KSwsK8kfm5xXnjMlDbIWj9CMWO5b9//Flv0qU4jFnkGLAFr4O2kTX1K4EK2loojy16yG1w6w8rYPjv7OAbcPYxQPDT88bfqZjecmbmD+uZNzqrMb/T+Khsf+H1+Ds/z+RzrpJ15AKb/mIorzEKtKrgpUS4c3M7svtLK7ZaNutDXeOKykqzh2Vl1OclztitZGjvCIMq+GKMGzrSbwaw5u4s9S4uoWm7CtCE6fxym9IHJ14qBSdr1xqSOLByYwqpY5LPCT1LG3+dmjioXIxLyehateNrYehajehrSHWag7/rSHWVJe8vtUveVtDrNWueFtDrNUc/VtDrNXc/FtDrNWc/FtDrNVc/FtDrNUc/FtDrNXc+1sHu5pzf2uItZprf+vQV/mmTiLEWuWbulu+ObbqN/USFKnyTf0EK6p802DLN8dX/abhlm9OqPpNoy3fnFj1m8Zbvjlp8xzevfIOeDLnDniy9A5Y7Y1Bd9ar7KBgdK3mBW7qoM/mHa5qEUfUqHaKIo4AUb0UReo5uJB8K62fWO2rdWszd8AbJd9DjareF8NZQ9Xd0tEwl2NaufJEFVurr4652vW+ubNpC5AkxXnJv01ZXfPq1TVPVJfOpMlv0uI3afOb9PGb9PObDPCbDPKbDPGbDPObjPCbjPKbjPGbbMpvsha/yWx+k3X4TdblN1mb32Q9fpMN+E02THlPMMibeqKiagc8iuTiz7rrPk5ysiOqNbJSXk2MGsepGrs/1/hSn2tspnONr/pg2ynPNX5n06oRwU84hPirV+dPwy0/4RCyw+QOkztM7jC5w+QOk/8lk9W+NZxbcM3lrDUNljes8YknyZnJ79YXVM1CoGYvvTRx9uiml17i81INb7By3CaZETvJy01BMDpssX1L2fyjinJHVPI1O0Zc8rwcznDobbTlIaVnO8kARt0NoM/9oTea+tAbYTr0RqtP20jKQ2/M2bRqkzZGWCVi1auLpVkl/nMmw2nXskiNHe2BJNx2++pQurf9Nk/Vh1L1jJliGQg6EVVfBsz4V1tMP1ptFTCdfZWi3kD1ETGdi3FVm5ZzlUy1pFW3GXKuZlVtVpLOpHnnG62maEilEI7lhFKjWHuWb2tkJHWo0eeiay1n11YjdMDZSSmM2mmNhtNxwHbR0JBzO61qs9JbpSnHy195vCo1JNV4WXLjZWYcLzvtVEiyANnpOqkSC1PUaCUbzNTLYXq5W+r91BbfT+3U+6nFtJ8mHZ2tfUU/Ozs6eFH3gtzhZ3Yvmli2bFDRuLz8EUWFnQblFY8uLcmtSIpQ7hxq23nEttNuRil3PzPDglCVQumlK6nH2/U7r67H20o93ibTeFvpx9v5qtcTlYTRvYuLRg8qPa0gf/iQTS8dzS67/Yi83DHdiotzJzlnjDG7bMGmD6u8w2XM9fDKaKOU3zROraSeWwOV78a+cdN5NKYl3gnwcJqIuqy3kog1pc3+pQVVD0Vb33dIddBMcZyKOpfs6sepWPzHrTvICalsZyfbLjOtRLWq/1G2s1lVe8Zx9K2Veo/NrrzHRpx/r3AmimTcY2PJbkXpzkSV5MqejKY9E8Vc2Iw6G5qKG3dt4d0msVJKC7Ek7MuOb9jatyenrCEFs2PpmZ0NhpmZ2rW8ULt29T+q5WxX1e53vi+UmtqxlMfH7JTUjmgeH7PdHh+zvdHQTCx+aZZTj8QOyxAbjLqZmR31xuwoGA1UFu3qzI6SFu1YykU7un0u2ulcWT2q8zqarotMpw36OdlMcy2KeDwmq7oZzW3iZvSwqri6FkWd16JY+muR6WK4g86ttiZutSSuqCaEbTyc9k3MFH8Uqf5HYWe1aZz0kWpfhp19mKrCzD7DZAtmBIwujgUz1ZITruGS01hqyTG9bW3BtIfLUAb/cuoQTzAR4qmZsGcYl7AHjJ7bULe8ibibP/YniJQUTGCh4/hQ9W/MalACYPTd3L1gHFmZqr5EVVtKHJ+ihOtIl538D0JV/8BK/EGlmsOJApU+T0n8zR9Hk3TPVluhat2DR5+hVQYgmPizLYSuWncwed3hquDCqSbcFoNV/8AxQ7eMyKBURHQb5t1Ctxry+rPgoF7m/TNaZuZ1DSva8pt5mbVxD1bk/Byz0WGVU6HiypmQX1KIM361MVFZJndRDWVyF23eATpVP3s1rnGMvonbdxUyyuQaV9qsd8jkdsjk/odkcptm6r6Vt6uTnDRLJZOrksJ2mJNmlb45xUmzSt/kEI7kgfSvQVVdHoLulodTq1sIubPQLuVBukp42nY2ssp5xVH5lsNz/3SvJ5FadlKNe6dDdRVipZg9swrx+GriQMdxe3tWITZ1u6u59ig0lVchNnWjQmzmbFq1G1QzwiU2ieixWRpnTzOCQ8G7SYvfpM1v0sdv0s9vMsBvMshvMsRvMsxvMsJvMspvMsZvsgm/yVr8JrP5TdbhN1mX32RtfpP1+E024De5Q4WY5t8OFWL+Dr3KDpM7TO4wucPkDpP/8yZ3qBA1VIiNnT26OUR9u1sVYmNnpyZVIR68xfadO1SIO1SIO1SI/wUV4lPsKsR1W0w/u0OFWC0AxPfy5ik7VIgOQ44mb6cqxFN2qBC9Hsp2qBD/AyrEQJrxdhljbu9+vIOpxzvANN5JNpGAY7xTqxA3KRB75pbkDt30OteV28GvsybVQQbbXcn0O6TJ1ZTtvPwARyOvP8CxXf1G6P+2lPKfrdtg8Q4pZYo9LuVBYYeUsqaKs9jWzi3l11LWzsztHVpK74fgHVrKdMxulZnZ3rWUrVVW7f+mltLDqr1DS7mpC3doKbdXLeVTLu5CjQn7uICWsvH2pKXs4Vgw5bWUzEvO9qClbOy0myJQtbm5gZQCPF/lvg8mClT6PJQYgOQiuCQCvK22AtUEeOHqAjx/4s+qCPBCiSJJ6w5WBRdMNUpbDFb9A8cuvFWAx/OjcxfxaVOH/f/Rpp62tZtHZNSmjv3f06aO2b61qfk7tKmZtKl3j6w4cecU4CTPKcFZvuOnohP/zB0/Fb3x3zb/qWjJX0j/H/zd5lVt8kbnl+TklpacXlScP3njvSQnd1xO0ciRw0/PzS/MyRs5EsuvzpqvPPX71nDq993MoDo1flnLV2NNJmHqOwMJVbThvRIPleTo+tLwLXO0Wv8Ybseq5q8FVltUjDQ+oJppVuNlgpFR/389MvrwpsjomOLxFZHRI3LHnT4IvxydOjVr0JcqNasv9S9xW1V/ibuqttfp7NgSsZRyJYWT9Y6jljT+izDDO2B0T0DAWYu3mGJqHvRI54qJ1tiLaLtwUAectaSJEGaz+zYXpfGAp21VttMDXn3DoQi9Bq9s1TJlSowkK1Mtd1Cj7lemWqlXpijT3KuVzHW1dWWqlrjD2clV3Va1nUNFD9nVTuNhr+3cUdlN+vhNGvwmg/wmLX6TIX6TEX6TYX6TMX6TSZZVw6tSlfElQw8LmM5Lhs4XMmuoVYm4EMj60rgfKO8JB9NGun2VjgzVxSVD0r6c7OZl8kBV798AVj1K2tcwU7O35sIX1w6nak2t5GCqObW4RUx+Z/M2Dd0pKadNihBeJS13dZrZ+ZsN56Z/Ty/dbyakfLV6YTLeG+kbZI3ccqucnsqukf41ZOfl67HEa6kVfp6Bm706vTY6dWbNSnEDMyKpbmCRLTdf+r0wmspZn9hq04at0777H6r2ZTDdqIUIoxZOQaRQ+nELj90ybpekDAQHaxgIjm6p4rKU2fF8rmLqmUYm/QuBobRxYDfykZCTyZ52k0riniS7ydlbuu7mtAt2OMMaSYdUKUsEZV2rme+5L5fvOX7htovQ1rCiaT2e7vDJl/dNFq+IHpuTjTnHZ295Q2JOhohz/Kb/tYBzfN72HG+OX72dhZvpUeBVrcblleScjn5b9OFuctzmFBXnDi/Iy5mAfzomr3h11l7KwaHeNQwO9d68OzT+D8aFaxps6VnjFhtu7ug+t/3p+o7uk7+j+9Le0VMd/4yUqWB9KVPB2puZ2SRd+DrjGwC71pglvaVDcskvFlt2vu3tzb/W2/N7f80rhyfbuZD+GpmDeOMqB/FmzSpP9QuLqTWP5al+e7Hyf/K8ltGb62jcYdu9lvHEcOx17O788bkleTkjSwuHb3wxIx9rKS7MLVidtbfyjntkDXfcIzeTs8H/29cxKpfqk3hIU+qIxIPDcbbdvNnRsPKi2jfl1tbP2aSaHqn61viAYlbfepxHqMrLZfvqt/XUpxmXTLPcn2YCqU8zfqbTTPrk+pX2gccT+0DFCjVo0wLVe/P6lMKdGDBTuRPNKzyow5kV81dQfmmXXqTSxK3pqcvN7yP70zk+K+ngq74aY6U601Ur6Tx0pnjPxkwFtsadYXrzvhnp0qLYXpMJ8BxNjuQ6muy17Y4m8wuwN///XPnrMbwGVtMdjnAASZfIwnEe2ISpvguBYLoAo0sYvdg8CdXvzmbKu7OV8e7cosZD3GvbvuXezo341qrZKko4gljy4luLHtJ0/T6pZaQ6fhip3yc1ZtOTzvy3XBdtt2fXRav/3Sv/qjaFRSX5IyflDC/OwzP1iJzC0oKC/JH5ecVb3O1jiosmTlrtSFirs/P2quHOu8UpGf1/uPPGanzK7bWtHK2bGly78uK6qlVidd1Exx6b2DhgCxkrXhqhLpo8k7kX12RusA0n838gaMYlpqx50Mz6HwyamYJBM2tH0KwGQbPebEGzPjuCZjuCZu6CZqb7oJkpsen2+S+eoP8Dmy6XjLnmm67vf3DTtQU3Xd+OTbcGm+4RbJtu3x2b7o5N192ma7vfdG2JTbfvf3DT3RwO6vD/xCm1Ixy0dfz0w0FZIuGg5ttBOCjLTTiobZpwkGsV4X87lJOVKpST9b8Yytlte97bW25n3t89d1xEHf92XER3XER3XER3XER3XER3XESr/ftPXkRX7Zk7blxecUnO+NyC/BE5Yzb+BNfGt5RzKjaGahvwjtcoqiPxuurveI2iymsUrROTfxMrj6sg5aafhdvSUzvepKBM66WbqsE+yckvHI89eU3VTmhQw3lbn4frWYn2bDVcdYUhJ72qmuV4S8dv3nOr1Vk9WYBVLdkINeWWkar2rFt75o+vNlKJebIV9paOKL83MXglRTnFuSPyJ67OqlO1YT63A1Dl7/01JIBrEU8GAgQSwCrLu4zkW0XV9oTctSdMPACGErWnotcdm+t1jLODYin+yq74XcFqp8w0xYeUnpZkkUl1CLTdnun8lc+xWYmmJT9NJl39QqlPssFAjQesyoxJjEz5I87lbqPJnLGlRSX5eYUlV1et1nVi2Cp/H2Fe+MIJwynG3kxHsJS0NJwEMwnFkxHMSMEKs+pgbM3dEf4/Tf39qhWuCQA=",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "issue_private_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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Gpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u6ZYBlYm766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLumnIZWJm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766Rybtr7pKBlcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a4RenpfJu2tk8u4amby7RibvrpHJu2tekYGVybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym7675SgZWJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a36QgZXJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2vL5N21ZfLu2jJ5d22ZvLu2TN5dWybvri2Td9eWybtry+TdtWXy7toyeXdtmby7tkzeXVsm764tk3fXlsm7azeUgZVJp2s3loGVyZJry2TJtWWy5NoyWXJtmSy5tkyWXFsmS64tkyXXlsmSa8tkybVlsuTaMllybZksubZMllxbJkuuLZMl15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdeWyZJry2TJtWWy5NoyWXJtmSy5tkyWXFsmS67dRwZWJkuuLZMl15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdeWyZJry2TJtWWy5Nr7ysD2k4GVyX9ry+S/tWXy39oy+W9tmfy3tkz+W1sm/60tk//Wlsl/a8vkv7Vl8t/aMvlvbZn8t7ZM/ltb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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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p+MqPI+rUNJxGd6AoXZcr3dciDdgIgy142rd41o8jwcbpuNivAFD7bhW6rgcb0AnrISh5gfvkSUdJsJMWAiFUAmN0AkrIdWUako1pZpSTammVFOqKdWUako1o5pRzahmVDOqGdWMakY1o5pRzanmVHOqOdWcak41p5pTzanmVKtUq1SrVKtUq1SrVKtUq1SrVKtUa1RrVGtUa1RrVGtUa1RrVGtUa1A7LucbMBFmwkIohEpohE5YCamWqJaolqiWqJaolqiWqJaolqiWqJaplqmWqZaplqmWqZaplqmWqZapVqhWqFaoVqhWqFaoVqhWqFaoxizJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizJLzos3j9vfzqs0ODzU7YAM8s6Qe8FBrBwy1dtwKfmRJh0KohEbohJUw1I574c9LONuhdmRJhzmeUHL828iSGvcUp+MyzgE1YDmgETphJWwB4zwcF3MOmAgz4aF23qEuoznHFZ01rpVPxyWdAzr/waF23MS+NcC0ESbCjK8dWdIh1RLV0qF2/u1xbMc98akSNsC8ESbCTFgIhVAJjZBqmWqZaoVqhWqFaoVqhWqFaoVqhWqFaoVqQjWhmlBNqCZUE6oJ1YRqQjWhmlJNqaZUU6op1ZRqSjWlmlJNqWZUM6oZ1YxqRjWjmlHNqGZUM6o51ZxqTjWnmlPNqeZUc6o51Zxq9VT7dzzj5/dffvrzrz///csf/hUP8vnnb38ZD+3Z//iP//+38X/+/Psvv/76y//+6W+///UvP//3P3//OR7wE//vy3Y84Gf/7x+Tfc0pHgCU+Ffta5b4q4y/kvpVS/xVwV9l+Zpb/JXgr4p8Lcdf6fdcxr+qX/PB5b0lf4w3uO9rc//1tdPsX9qXIeOP6WCtX/d1t/hGxTd0+7ovXf3X0aA/7guK+/cLvi97O6Th+/tW5r5IFd9v37crbYNzX+X4utcvg2VfHP66L/0Nlr3W2P/v0e50nKoQjnbr+IJsX+VQSZfzlr6KHX9X8J0WJ+m778h/+EX0iY49+f+O/7+fwYrT077Keej1yffbxzbFo6L+Dw==",
      "is_unconstrained": false,
      "name": "issue_private_to_public_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "issue_public_to_private",
      "verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAF8qZbtw7pDtqMZcw6ZXAtL4AAAAAAAAAAAAAAAAAAAAAAArMhEWxfvv1fot0DZmPigAAAAAAAAAAAAAAAAAAABzd+SprfUiESG7it4F99uENAAAAAAAAAAAAAAAAAAAAAAAKwxIeyPyyovp0BVp/sBkAAAAAAAAAAAAAAAAAAAAm1tkCWyesZhwAWx9EAMJbtAAAAAAAAAAAAAAAAAAAAAAAKcZ4gzzI5oouE3RFkvv1AAAAAAAAAAAAAAAAAAAAv4tmRN4hCuxPhBzMZ1XSDY4AAAAAAAAAAAAAAAAAAAAAACYqy/JY3Lq/ykIZ0F72qgAAAAAAAAAAAAAAAAAAAFtkIcHwD2GfyG3FPNx4s/0EAAAAAAAAAAAAAAAAAAAAAAAlJyTqb2x6WTotTTtbiPYAAAAAAAAAAAAAAAAAAACN4YK3RgohcIasoJsjgo7DYAAAAAAAAAAAAAAAAAAAAAAAH3l5j7xfHeQG2QOqqAIHAAAAAAAAAAAAAAAAAAAA+9dUuYaa/aqfgeKYKciO5lAAAAAAAAAAAAAAAAAAAAAAAC8pf+toDRqrx66p0xzvhwAAAAAAAAAAAAAAAAAAACJ49vazWq281I7zTidRfM8qAAAAAAAAAAAAAAAAAAAAAAAYV3vz9R3vvt6YZC96FUkAAAAAAAAAAAAAAAAAAACPmzMU7pF7FQFCfJdzZ9xXSwAAAAAAAAAAAAAAAAAAAAAAGtPSTjlRj2fT1Eb9PUQgAAAAAAAAAAAAAAAAAAAAxbJsnykyG9rM9yNEiVnpSM4AAAAAAAAAAAAAAAAAAAAAAAb/cJFM8HHVUV5rNXeN0QAAAAAAAAAAAAAAAAAAACm55FQtgF04OJ04Qe+Fx6uPAAAAAAAAAAAAAAAAAAAAAAAe0PvfjYDQ243AX1TfImQAAAAAAAAAAAAAAAAAAACcuje3Q0BjpLwjaUXuRQw65wAAAAAAAAAAAAAAAAAAAAAALd8qq49wX9gzeBjcoot4AAAAAAAAAAAAAAAAAAAA34RD4CY/7x6vQarrV/2yyVwAAAAAAAAAAAAAAAAAAAAAAAot+yK0pCzlx7efA+XTYQAAAAAAAAAAAAAAAAAAADKV5Skq5e58zJPucpMJ/0oEAAAAAAAAAAAAAAAAAAAAAAAlPhj9v98Uc9CgAq5ucpwAAAAAAAAAAAAAAAAAAABx5zYhN1wv1vbfLyCbbVTaYQAAAAAAAAAAAAAAAAAAAAAAFirzOUFp4ss0XzWfetIXAAAAAAAAAAAAAAAAAAAA2nMNAzJArrrdtiFD8Mw3d3YAAAAAAAAAAAAAAAAAAAAAABKRZzcRcvTTCBmsCocv4wAAAAAAAAAAAAAAAAAAAA8l6pxLGJFGiIYY+ZLzvc0xAAAAAAAAAAAAAAAAAAAAAAAfLlDjfhsHUcnH1Uhx8xwAAAAAAAAAAAAAAAAAAABDvRqwYYaNgwXHlNmZLuFmfQAAAAAAAAAAAAAAAAAAAAAAD8DJQtkTJaQjo97IS1O2AAAAAAAAAAAAAAAAAAAAlEDfgJnGX7aA28e4vFmqUysAAAAAAAAAAAAAAAAAAAAAAAFX5UnF4i/+IXXyKhdFngAAAAAAAAAAAAAAAAAAAGodbb+NPfc2iHqEluZ1VieAAAAAAAAAAAAAAAAAAAAAAAACI8HykrV5Esf8tb4nLXIAAAAAAAAAAAAAAAAAAAAX06+jjzSjizjW1KLIcvYbdAAAAAAAAAAAAAAAAAAAAAAAE+j5qIXKf/W5rV6MLvIfAAAAAAAAAAAAAAAAAAAAkBKA/LKVguW7/GPKvSxN4+8AAAAAAAAAAAAAAAAAAAAAABN5JJ/m/Ci5HLsJZ1qkWwAAAAAAAAAAAAAAAAAAAGQlMaQHuYiJotSVKgvERTwEAAAAAAAAAAAAAAAAAAAAAAAKKIqtqixlaeDFQxcWf8YAAAAAAAAAAAAAAAAAAABLkTNWU2YQjyxoQ4o4sfkuEQAAAAAAAAAAAAAAAAAAAAAALxJZgA+k+rT19gaBpdvWAAAAAAAAAAAAAAAAAAAAbDY8zffR/bfEryPCFDECbNYAAAAAAAAAAAAAAAAAAAAAABJb9Txn5NAbUzSHA0b+3QAAAAAAAAAAAAAAAAAAABqmUBlj6KFmzfJZeJvgmRWYAAAAAAAAAAAAAAAAAAAAAAASqEtWX3IbMuu0aRv8bqUAAAAAAAAAAAAAAAAAAABUfiMK2FxdbqAqKeDIKw2U8AAAAAAAAAAAAAAAAAAAAAAAFIah9ikk1UsyijjpNQCfAAAAAAAAAAAAAAAAAAAAnZaUJVkRARQ0QyJetiJLMOgAAAAAAAAAAAAAAAAAAAAAACYCPvYHOh+4/S8IWm9WwgAAAAAAAAAAAAAAAAAAACucbeZDC96Nb/f5xwk2KWmsAAAAAAAAAAAAAAAAAAAAAAABGz/SXhlzPbr0ph+wXMIAAAAAAAAAAAAAAAAAAABB7Q8ewFuGMVoPLUJFMwlvvwAAAAAAAAAAAAAAAAAAAAAAHsoivP+0SeG1xOl7eOjrAAAAAAAAAAAAAAAAAAAAhbF48n1FiLSiPLbb7XKl81MAAAAAAAAAAAAAAAAAAAAAABgWFLRB3JshO272oKnV2gAAAAAAAAAAAAAAAAAAAKSZErazZC1OJ0qUQnUfZDasAAAAAAAAAAAAAAAAAAAAAAAUbra6mbyvUhm9JJ+KGWYAAAAAAAAAAAAAAAAAAABqldI4G8Ou8yudJcLO4rKnTwAAAAAAAAAAAAAAAAAAAAAACLj6n/w6Xl3a0hRIT0+iAAAAAAAAAAAAAAAAAAAASfa+fsumMKw2q7KuaVhXVAIAAAAAAAAAAAAAAAAAAAAAAC0HRO7B/98HDH2XUesfNAAAAAAAAAAAAAAAAAAAAOGZFtfO2BCVPSofyDv1OBlZAAAAAAAAAAAAAAAAAAAAAAABkLOeH44bj+cn1MFMV9sAAAAAAAAAAAAAAAAAAAAoWZ4iKN4knAnN8Xa6r40F4AAAAAAAAAAAAAAAAAAAAAAACXQHJt3OAphIVGIQnXT2AAAAAAAAAAAAAAAAAAAA1Ub6UXAtsBOIGeZ1U0MW/ZgAAAAAAAAAAAAAAAAAAAAAAASfJPa1S97rUA9XVx58BQAAAAAAAAAAAAAAAAAAAFvf50rqYSiN2exzm4mgQmNLAAAAAAAAAAAAAAAAAAAAAAALlbrv9AHPwKi7COCYlsQAAAAAAAAAAAAAAAAAAADyW7WyTSPAdUjpF170wICc6wAAAAAAAAAAAAAAAAAAAAAADANzFOYKD1vHJpKVhap+AAAAAAAAAAAAAAAAAAAAZpNnA4/YESTEgGUXCmpdWHsAAAAAAAAAAAAAAAAAAAAAACOa4zVhfOLwuVjaZ7fDhAAAAAAAAAAAAAAAAAAAAIzlcsoIyVx7Sv6PoA3+xnd1AAAAAAAAAAAAAAAAAAAAAAApv5KoI1VKlX3ITZnslJAAAAAAAAAAAAAAAAAAAAAKFnArmJihn1XuozICxdTdyAAAAAAAAAAAAAAAAAAAAAAAFVvAaJ4D0ztHb4updm6EAAAAAAAAAAAAAAAAAAAAZegHhRv4xMEhA1ZdvbO2xEMAAAAAAAAAAAAAAAAAAAAAACl97IgjLV/XaaB0KczDBQAAAAAAAAAAAAAAAAAAAL2lUQJ4VGeAKKKfbY/+cFmYAAAAAAAAAAAAAAAAAAAAAAAh8nNsfd6B+h5pxYHjlL8AAAAAAAAAAAAAAAAAAAAHoCSXxV5CB032BA/tA61P3QAAAAAAAAAAAAAAAAAAAAAAEO5/S9Z1HdDaf4EkeWMVAAAAAAAAAAAAAAAAAAAAvemzKWZ9rW5arGPRzv8MyNEAAAAAAAAAAAAAAAAAAAAAABDwKzTwOFLabpcFBChA8gAAAAAAAAAAAAAAAAAAAJW12Le0pjsF32UrDRDvFG0mAAAAAAAAAAAAAAAAAAAAAAAJnjvVoKAKt/4YBAEFubMAAAAAAAAAAAAAAAAAAAAhKa86Y39aYioyRA+GDR4qfwAAAAAAAAAAAAAAAAAAAAAAABW40lFdduLM7Jnc0ZRZAAAAAAAAAAAAAAAAAAAAIiuIgQjcJdGqRQ4LS8ISw34AAAAAAAAAAAAAAAAAAAAAABuRdReSC609i8AclZUJKgAAAAAAAAAAAAAAAAAAAEghQcfr5CAAodWMy3Q4H20ZAAAAAAAAAAAAAAAAAAAAAAAwXomSsUju2yLm6ZIHeoQAAAAAAAAAAAAAAAAAAAB8hoR2GGgdwp2Kk2OrfEDhwwAAAAAAAAAAAAAAAAAAAAAAFkZaXMu1UM0sY71YEW/kAAAAAAAAAAAAAAAAAAAAQ5lzrBLXynltb+mMpA5sprcAAAAAAAAAAAAAAAAAAAAAAC4k1CD7+VCO0x3mkttHewAAAAAAAAAAAAAAAAAAACjt0afkbIQNnJQ/30VSHGTOAAAAAAAAAAAAAAAAAAAAAAAEPQY7Ewrfs3NCr0XQFVoAAAAAAAAAAAAAAAAAAACTMJUq50xXPRaG2ctKAHM4VAAAAAAAAAAAAAAAAAAAAAAAJhUixAiTMGRq/5ZzYZSUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhyEwBWnlG5+9psRnjf2ANjQAAAAAAAAAAAAAAAAAAAAAAGGtWDxb2NWR0aBehcYRSAAAAAAAAAAAAAAAAAAAA25emFEqflX/JE1ljJjRogPsAAAAAAAAAAAAAAAAAAAAAAAtsL9w1lzsdP7WDZ9rgxQAAAAAAAAAAAAAAAAAAAGvMegX/lalrKJQkxfczZw2WAAAAAAAAAAAAAAAAAAAAAAAAxDcm91tv2g3iLODg36sAAAAAAAAAAAAAAAAAAAAdCgnXF47JO614WPluZPC0jQAAAAAAAAAAAAAAAAAAAAAAL5tuC04sAZaN5cMkgqp9AAAAAAAAAAAAAAAAAAAAF6UyFPM7GtAJ5GGyaZJyGb4AAAAAAAAAAAAAAAAAAAAAABQQfUvkU8gEqOKRhpGbPgAAAAAAAAAAAAAAAAAAAJKHn2GoKCaTAlYbtX87FVfPAAAAAAAAAAAAAAAAAAAAAAAoRQUJTjXTtVikNALK2uI="
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "26387131971136782": {
            "error_kind": "string",
            "string": "Invalid response from registry"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "issue_public_to_public"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "18355088748931941725": {
            "error_kind": "string",
            "string": "Function max_deposit can only be called statically"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          }
        },
        "parameters": [
          {
            "name": "_receiver",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBGJwAABEYlAAAARScCAgQBJwIDBAAfCgACAAMARC0IRAElAAAAWy0CAUUnAgIERScCAwQBOw4AAwACKwAAQwb/////////////////////JiUAAAHRHgIAAgAeAgADAB4CAAQAKQIABQDHMvl3JwIGAAArAgAHAAAAAAAAAAACAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4FCgAiCgIKLQ4ECgAiCgIKLQ4GCgAiCgIKLQ4HCi0LCAQAIgQCBC0OBAgtCAEEJwIFBAUACAEFAScDBAQBACIIAgUAIgQCBj8PAAUABicCBQQBACoEBQctCwcGHgIABAApAgAHAANtUn8rAgAIAAAAAAAAAAADAAAAAAAAAAAtCAEJJwIKBAUACAEKAScDCQQBACIJAgotCgoLLQ4HCwAiCwILLQ4ECwAiCwILLQ4GCwAiCwILLQ4ICy0LCQQAIgQCBC0OBAktCAEEJwIGBAUACAEGAScDBAQBACIJAgYAIgQCBz8PAAYABwAqBAUHLQsHBjMKAAYABCcCBQEBJAIABAAAAbolAAAB9x4CAAQJJAIABAAAAcwlAAACCS0IQwEmKAAABAR4RgwAAAQDJAAAAwAAAfYqAQABBdrF9da0SjJtPAQCASYqAQABBQZhOz0Lnb0zPAQCASYqAQABBf66X/e824VdPAQCASY=",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVfbbqswEPwXnvOw3l3f8itVVaUprSIhEtHkSEdV/v2sU68JlWz1JO0LDGMYvMMsmI/upX8+vT3txtf9e7d++Oiep90w7N6ehv12c9ztR2E/Okib6Lo1rToDplv7tJdjYwQYIUxiEBTYDNhlYHXI6pBTxinjlfGsIGQQSIHPIKKCfAsEoyAJhgRiBoYViCCCAEQFPgNShpRhZVgZK9NAk0DIwCnj0jkswMtVlJhgPgEBKnAZGB0yyqAyqAyBAlYQM2BSEDKwegvrM3AqmOy9AK+CyV6iBEIGyd5PoExUJmaGgRSkaUilnFz9BOkcJwAT4xOIGSQzLyCZyZCAMCzT4JQENufzqtOsPR2nvk9RuwqfRPKwmfrx2K3H0zCsuj+b4XQ56f2wGS/742aSUdHuxxfZi+DrbugTOq/mq6F+KRLYfLXEwBYBQ7SQMA0JYPCqAYymiAS30MCGhg+qEHmeRPx+HS44VfAhVOvgugQxqxXEbrbiyyTsDzjhftEJCanmQdIJVSdCXcJCSulFwoKbqzC4LCP+gBUG7vWiWQhcFcLVQkwjmp5RZ+EtNzSorhHnLovEWDTIm6VGI54RmFRDHnFdoxFQeVlqwqMvChhwqdCKp2OVQGfhJg0Kfp4GhNs0Ipmi4WJdo5FR9lGfCgfCq4D9xzRKswmsl9LKKBdHLTus5gvxJ17B9JvdRpFLJdffkq+VNBJqAIodstwCrlbSeCo2lnZzIDevtQr6+1sWw/0ti/HelqXWW9SE8mBlyXibBpZvI2Kgugbe3W6taXy33doJm/0wIIvgWsKoJcJGo25kNXd3t7h6t7TsIO/LiuWqVb5+6qkxDYIYy5tUvMGqHbHlaSh2GPC3LFuWtbhlLY9yuNnupsWv2TmJTbvN89Dnw9fTuL0aPf496Ij+2h2m/bZ/OU19Upr/74xsH4JdRXhMP3VyIJ5EejynW/8D",
      "is_unconstrained": true,
      "name": "max_deposit"
    },
    {
      "abi": {
        "error_types": {
          "11625864663635132841": {
            "error_kind": "string",
            "string": "Function max_issue can only be called statically"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          }
        },
        "parameters": [
          {
            "name": "_receiver",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBGJwAABEYlAAAARScCAgQBJwIDBAAfCgACAAMARC0IRAElAAAAWy0CAUUnAgIERScCAwQBOw4AAwACKwAAQwb/////////////////////JiUAAAHRHgIAAgAeAgADAB4CAAQAKQIABQDHMvl3JwIGAAArAgAHAAAAAAAAAAACAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4FCgAiCgIKLQ4ECgAiCgIKLQ4GCgAiCgIKLQ4HCi0LCAQAIgQCBC0OBAgtCAEEJwIFBAUACAEFAScDBAQBACIIAgUAIgQCBj8PAAUABicCBQQBACoEBQctCwcGHgIABAApAgAHAANtUn8rAgAIAAAAAAAAAAADAAAAAAAAAAAtCAEJJwIKBAUACAEKAScDCQQBACIJAgotCgoLLQ4HCwAiCwILLQ4ECwAiCwILLQ4GCwAiCwILLQ4ICy0LCQQAIgQCBC0OBAktCAEEJwIGBAUACAEGAScDBAQBACIJAgYAIgQCBz8PAAYABwAqBAUHLQsHBjMKAAYABCcCBQEBJAIABAAAAbolAAAB9x4CAAQJJAIABAAAAcwlAAACCS0IQwEmKAAABAR4RgwAAAQDJAAAAwAAAfYqAQABBdrF9da0SjJtPAQCASYqAQABBQZhOz0Lnb0zPAQCASYqAQABBaFXXlCqvQGpPAQCASY=",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVfbbqswEPwXnvOw3l3f8itVVaUprSIhEtHkSEdV/v2sU68JlWz1JO0LDGMYvMMsmI/upX8+vT3txtf9e7d++Oiep90w7N6ehv12c9ztR2E/Okib6Lo1rToDplv7tJdjYwQYIUxiEBTYDNhlYHXI6pBTxinjlfGsIGQQSIHPIKKCfAsEoyAJhgRiBoYViCCCAEQFPgNShpRhZVgZK9NAk0DIwCnj0jkswMtVlJhgPgEBKnAZGB0yyqAyqAyBAlYQM2BSEDKwegvrM3AqmOy9AK+CyV6iBEIGyd5PoExUJmaGgRSkaUilnFz9BOkcJwAT4xOIGSQzLyCZyZCAMCzT4JQENufzqtOsPR2nvk9RuwqfRPKwmfrx2K3H0zCsuj+b4XQ56f2wGS/742aSUdHuxxfZi+DrbugTOq/mq6F+KRLYfLXEwBYBQ7SQMA0JYPCqAYymiAS30MCGhg+qEHmeRPx+HS44VfAhVOvgugQxqxXEbrbiyyTsDzjhftEJCanmQdIJVSdCXcJCSulFwoKbqzC4LCP+gBUG7vWiWQhcFcLVQkwjmp5RZ+EtNzSorhHnLovEWDTIm6VGI54RmFRDHnFdoxFQeVlqwqMvChhwqdCKp2OVQGfhJg0Kfp4GhNs0Ipmi4WJdo5FR9lGfCgfCq4D9xzRKswmsl9LKKBdHLTus5gvxJ17B9JvdRpFLJdffkq+VNBJqAIodstwCrlbSeCo2lnZzIDevtQr6+1sWw/0ti/HelqXWW9SE8mBlyXibBpZvI2Kgugbe3W6taXy33doJm/0wIIvgWsKoJcJGo25kNXd3t7h6t7TsIO/LiuWqVb5+6qkxDYIYy5tUvMGqHbHlaSh2GPC3LFuWtbhlLY9yuNnupsWv2TmJTbvN89Dnw9fTuL0aPf496Ij+2h2m/bZ/OU19Upr/74xsH4JdRXhMP3VyIJ5EejynW/8D",
      "is_unconstrained": true,
      "name": "max_issue"
    },
    {
      "abi": {
        "error_types": {
          "13687859235885718838": {
            "error_kind": "string",
            "string": "Function max_redeem can only be called statically"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "owner",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBHJwAABEclAAAARScCAgQBJwIDBAAfCgACAAMARS0IRQElAAAAVC0CAUYnAgIERicCAwQBOw4AAwACKQAAQwT/////JwBEBAMmJQAAA50eAgACAB4CAAMAHgIABAApAgAFAMcy+XcnAgYAACsCAAcAAAAAAAAAAAIAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgUKACIKAgotDgQKACIKAgotDgYKACIKAgotDgcKLQsIBAAiBAIELQ4ECC0IAQQnAgUEBQAIAQUBJwMEBAEAIggCBQAiBAIGPw8ABQAGJwIFBAEAKgQFBy0LBwYeAgAEACkCAAcAA21SfysCAAgAAAAAAAAAAAMAAAAAAAAAAC0IAQknAgoEBQAIAQoBJwMJBAEAIgkCCi0KCgstDgcLACILAgstDgQLACILAgstDgYLACILAgstDggLLQsJBAAiBAIELQ4ECS0IAQQnAgYEBQAIAQYBJwMEBAEAIgkCBgAiBAIKPw8ABgAKACoEBQktCwkGMwoABgAEJwIGAQEkAgAEAAABsyUAAAPDHgIABAkkAgAEAAABxSUAAAPVHgIABAAsAgAJACLoCqsRX/f5M6xy7C3V6VKoImkfD9nh8zBt+lN66/NiLQgBCicCCwQFAAgBCwEnAwoEAQAiCgILLQoLDC0OBwwAIgwCDC0OBAwAIgwCDC0OCQwAIgwCDC0OCAwtCwoEACIEAgQtDgQKLQgBBCcCBwQFAAgBBwEnAwQEAQAiCgIHACIEAgg/DwAHAAgAKgQFCC0LCAczCgAHAAQkAgAEAAACdiUAAAPnHgIABAAnAgYABS8qAAYABAAHKQIABAD/eUnyLQgBBicCCAQDAAgBCAEnAwYEAQAiBgIILQoICS0OBAkAIgkCCS0OAQknAgEEAgAiBgIEOgOgAEMAQwAHAAEABCACAAEhAgAEJwIGBAAtCAEIACIIAgstCwsLLQoLCicCDAQDACoIDAkiOgAEAAYACS0KBAonAwgEAQAiCAILLQ4KCwAiCwILLQ4KCycCDAQDACoKDAsACAELAS0KCgcGIgcCByQCAAEAAANuIwAAA0EtCwgBACIBAgEtDgEIACIIAgMtCwMDLQoDAicCBAQDACoIBAE8DgIBIwAAA24KKgcFASQCAAEAAAOEJwICBAA8BgIBACIIRAItCwIBHAoBAwYcCgMCABwKAgEGJigAAAQEeEcMAAAEAyQAAAMAAAPCKgEAAQXaxfXWtEoybTwEAgEmKgEAAQUGYTs9C529MzwEAgEmKgEAAQW99Qt0IoSdNjwEAgEmKgEAAQVyMQyWM6ynPzwEAgEm",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVnRbts6DP2XPPdBEilS6q8MQ5G26RAgSIusvcBF0X8faYuynUFCGmcvyQkdHZNHJCXLn5vn3ePHr4f98eX19+b+x+fm8bQ/HPa/Hg6vT9v3/etRrJ8bpx8pb+7hbpNxc8/yJb+8v9t4J7+9GLwHA6kAyAWgXUK7FM0SzUJmIS6AvQEqIDkD0YDdIpsbWQnT3Sa4YIAL8EIYnIJYQHAGzAJmAbOgWVDcCBJyiN6AWUj/gwpkFKiFsYBsFlVMATg0YBZvFm+WAAa4AAgGqAD0BsotIDoDRqjyDoCMUOUFmUdQeUdABSSzJLNks+RiQVUVUAEXoKoCKVCLTAGGUICKOQLxEEVDVDHRK0gFaCagDldXo95CFRtBHkFUxUZgFm8WbxZVbARcgCo2AipAFRtBuUVUxUZghOZGJCNUxWIUoIqNgApIZklmyWbJxUKqWCQFXIAqFpMCtWQBmn4DUMVIR6liJNKRKjYCcYyDgMgFkDdABbBZ2CzJLFoyI8gFDJU8AGWWqWQHBswSdDgp0OFJgQxPMpUMaCAVoGU+Ai5AK2UEVACZhe3PbMOTWZINz8FAGZ6cN2AWbxYt6gGARpEVcAEYDOgoCTkNjg0gGsgFEBowy+ChqJEGDxXoLI+ARpCdTFOKCqIBHS6KZc3VEQyWr6+7jXXXh/fTbqfNddZupQm/bU+74/vm/vhxONxt/tsePoY//X7bHofv9+1Jrkqsu+OzfAvhy/6wU/R1N4127aHS5mIZHSDESuABFhS+Q+GkBRiHw+ArSaIFR+hwaEaNDBknJ/LlcVAiY2CRthUHtikA0aQApEmKMyfiDZSgf6gEumz5gLJONpVIbQpps75QREdTFD4sw8g3kMK7tVp0A3GzQLAZiO+kJmMwLzhihwPaHHmqsgwYKocsvUuOTnpmh2AcMsVtjk6CQgyW4ZkrQ0hhydBLT0KjkC2Ou4oDEk9uuHQdRwZfOSi3OTo5ipxtVjBBmCXYN9yoxSawHUovR7EqGpFCM79CuEULhn9ZbZCxRjJfS84j6WSod67K4Z08UzQj6cxKzLXcZNNFzVIJvL5kQ1pfsiGvLVnodVGf6sT6TNdxhLo2hpCgzRFWl1vPjUvLrZ9hkx7ehcCtDIMeCXpLdY8xrq4WaldLTw5grjuWWamcL/XQcUOePXPtpKJNaMqRe5qmKod3fM22ZRkLNWPp7XwAuW59AGdNDJGXu8Deeg/JSFiSbMoxWMaCvfWeVa2x8Hm27/iLA2/Q0zGu7endUKimR+ZZsfwVCt+gqWNa39Qxr2/q0a1v6tGvbeoxrG/qXY4Lm3rE1U2958alTb2fYRc29cjrm/ql3QOdb5dL94mDYn3i6JQcdbLUU81STzSbW8YlRy9LA/map4EAmo+zvdn1GbCuLzm2n4nhFg/WuLYX9mNJKU+xzBbtczd6jwyxzgzEKx/x5XyX6kIXfWwudNRpqIRsJHKk2DzvoE4/TQRGkeTIsVLwUg7uJmoMU6ZGci1NuZOp5ADq2oCzteE7btT9h7x4oOYSxdA9TKspBik0p7bvSIpUHUnczDHuLftEtVxofhr2LUdyPfgQHNsTw72aQ6zHcnS1Iw5njjSLn3vnUSlWReSI9jpH2IWaI+zajqReU0VfWwhipw/1yo7JOORIOrbKLkEvlmnHzrNdLubLKXI9XPPzY5wzin4gNT3S/NT2PJDes36qe6ko3XnyIqQlB3fbR67tY9aBBo6f8nP7tD8tXoR+Kdlpv3087MrPl4/j0+zq+/9vdsVepL6dXp92zx+nnTJNb1O9fP7wciLmmX/qS1P9KZPjE/380tv/AQ==",
      "is_unconstrained": true,
      "name": "max_redeem"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "6701232297318336583": {
            "error_kind": "string",
            "string": "Function max_withdraw can only be called statically"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "owner",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBIJwAABEglAAAARScCAgQBJwIDBAAfCgACAAMARi0IRgElAAAAWS0CAUcnAgIERycCAwQBOw4AAwACJwBDAQEpAABEBP////8nAEUEAyYlAAAIWh4CAAIAHgIAAwAeAgAEACkCAAUAxzL5dycCBgAAKwIABwAAAAAAAAAAAgAAAAAAAAAALQgBCCcCCQQFAAgBCQEnAwgEAQAiCAIJLQoJCi0OBQoAIgoCCi0OBAoAIgoCCi0OBgoAIgoCCi0OBwotCwgEACIEAgQtDgQILQgBBCcCBQQFAAgBBQEnAwQEAQAiCAIFACIEAgY/DwAFAAYnAgUEAQAqBAUHLQsHBh4CAAQAKQIABwADbVJ/KwIACAAAAAAAAAAAAwAAAAAAAAAALQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBwsAIgsCCy0OBAsAIgsCCy0OBgsAIgsCCy0OCAstCwkEACIEAgQtDgQJLQgBBCcCBgQFAAgBBgEnAwQEAQAiCQIGACIEAgo/DwAGAAoAKgQFCS0LCQYzCgAGAAQkAgAEAAABsyUAAAiAHgIABAkkAgAEAAABxSUAAAiSHgIABAAsAgAGACLoCqsRX/f5M6xy7C3V6VKoImkfD9nh8zBt+lN66/NiLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBwsAIgsCCy0OBAsAIgsCCy0OBgsAIgsCCy0OCAstCwkEACIEAgQtDgQJLQgBBCcCCgQFAAgBCgEnAwQEAQAiCQIKACIEAgs/DwAKAAsAKgQFCi0LCgkzCgAJAAQkAgAEAAACdiUAAAikHgIABAAnAgkABS8qAAkABAAKKQIABAD/eUnyLQgBCycCDAQDAAgBDAEnAwsEAQAiCwIMLQoMDS0OBA0AIg0CDS0OAQ0nAgEEAgAiCwIMOgOgAEQARAAKAAEADCACAAohAgALJwIMBAAtCAEOACIOAhEtCxERLQoRECcCEgQDACoOEg8iOgALAAwADy0KCxAnAw4EAQAiDgIRLQ4QEQAiEQIRLQ4QEScCEgQDACoQEhEACAERAS0KEA0GIg0CDSQCAAoAAANuIwAAA0EtCw4CACICAgItDgIOACIOAgotCwoKLQoKAycCCwQDACoOCwI8DgMCIwAAA24KKg0FAiQCAAIAAAOEJwIDBAA8BgMBACIORQMtCwMCHAoCCgYcCgoDABwKAwIGHgIAAwAeAgAKAB4CAAsALAIADQASIYK5MztN3r3o9sR8EU2lzN9vOBcgOWm2ABuEU+I1Jy0IAQ4nAg8EBQAIAQ8BJwMOBAEAIg4CDy0KDxAtDgcQACIQAhAtDgsQACIQAhAtDg0QACIQAhAtDggQLQsOCwAiCwILLQ4LDi0IAQsnAg0EBQAIAQ0BJwMLBAEAIg4CDQAiCwIPPw8ADQAPACoLBQ4tCw4NMwoADQALJAIACwAABFclAAAIpB4CAAsAJwINAAMvKgANAAsADi0IAQsnAg0EAwAIAQ0BJwMLBAEAIgsCDS0KDQ8tDgQPACIPAg8tDgoPACILAgQ6A6AARABEAA4AAQAEIAIAASECAAQtCAELACILAg8tCw8PLQoPDicCEAQDACoLEA0iOgAEAAwADS0KBA4nAwsEAQAiCwIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgoGIgoCCiQCAAEAAAU8IwAABQ8tCwsBACIBAgEtDgELACILAgQtCwQELQoEAycCDQQDACoLDQE8DgMBIwAABTwKKgoFASQCAAEAAAVSJwIDBAA8BgMBACILRQMtCwMBHAoBBAYcCgQDABwKAwEGHgIAAwAeAgAEAB4CAAoALQgBCycCDQQFAAgBDQEnAwsEAQAiCwINLQoNDi0OBw4AIg4CDi0OCg4AIg4CDi0OBg4AIg4CDi0OCA4tCwsGACIGAgYtDgYLLQgBBicCCgQFAAgBCgEnAwYEAQAiCwIKACIGAg0/DwAKAA0AKgYFCy0LCwozCgAKAAYkAgAGAAAGACUAAAikHgIABgAvKgAJAAYACikCAAYAjdOC7C0IAQknAgsEAgAIAQsBJwMJBAEAIgkCCy0KCw0tDgYNACIJAgY6A6AARABEAAoABQAGIAIABiECAAktCAELACILAg8tCw8PLQoPDicCEAQDACoLEA0iOgAJAAwADS0KCQ4nAwsEAQAiCwIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgoGIgoCCiQCAAYAAAbgIwAABrMtCwsDACIDAgMtDgMLACILAgYtCwYGLQoGBCcCCQQDACoLCQM8DgQDIwAABuAKKgoFAyQCAAMAAAb2JwIEBAA8BgQBACILRQQtCwQDHAoDBgYcCgYEABwKBAMGHgIABAAsAgAGABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBwsAIgsCCy0OBAsAIgsCCy0OBgsAIgsCCy0OCAstCwkEACIEAgQtDgQJLQgBBCcCBgQFAAgBBgEnAwQEAQAiCQIGACIEAgc/DwAGAAcAKgQFBy0LBwYzCgAGAAQkAgAEAAAHvyUAAAikHgIABAAnAgUABy8qAAUABAAGHAoGBQYcCgUEABwKBAUGJwIEBgEAKgEEBg4qAQYHJAIABwAAB/wlAAAItgQqAgYBJwIHBgAKKgcGBCQCAAQAAAgqBioBBgkKKgkCCCQCAAgAAAgqJQAACMgAKgMFAg4qAwIEJAIABAAACEElAAAItgYqAQIDBioBAgUEKgUCBgIqAQYELQoDASYoAAAEBHhIDAAABAMkAAADAAAIfyoBAAEF2sX11rRKMm08BAIBJioBAAEFBmE7PQudvTM8BAIBJioBAAEFXP+PRQ8IyEc8BAIBJioBAAEFcjEMljOspz88BAIBJioBAAEF0Afr9MvGZ5A8BAIBJioBAAEFBQQbmSCvYEw8BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "max_withdraw"
    },
    {
      "abi": {
        "error_types": {
          "11476781779461000022": {
            "error_kind": "string",
            "string": "Function preview_deposit can only be called statically"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBIJwAABEglAAAASicCAgQBJwIDBAAfCgACAAMARhwARkYGLQhGASUAAABeLQIBRycCAgRHJwIDBAE7DgADAAInAEMBAScARAQDKQAARQT/////JiUAAAbBHgIAAgAeAgADAB4CAAQAKQIABQDHMvl3JwIGAAArAgAHAAAAAAAAAAACAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4FCgAiCgIKLQ4ECgAiCgIKLQ4GCgAiCgIKLQ4HCi0LCAQAIgQCBC0OBAgtCAEEJwIFBAUACAEFAScDBAQBACIIAgUAIgQCBj8PAAUABicCBQQBACoEBQctCwcGHgIABAApAgAHAANtUn8rAgAIAAAAAAAAAAADAAAAAAAAAAAtCAEJJwIKBAUACAEKAScDCQQBACIJAgotCgoLLQ4HCwAiCwILLQ4ECwAiCwILLQ4GCwAiCwILLQ4ICy0LCQQAIgQCBC0OBAktCAEEJwIGBAUACAEGAScDBAQBACIJAgYAIgQCCj8PAAYACgAqBAUJLQsJBjMKAAYABCQCAAQAAAG4JQAABuceAgAECSQCAAQAAAHKJQAABvkeAgAEAB4CAAYAHgIACQAsAgAKABIhgrkzO03evej2xHwRTaXM3284FyA5abYAG4RT4jUnLQgBCycCDAQFAAgBDAEnAwsEAQAiCwIMLQoMDS0OBw0AIg0CDS0OCQ0AIg0CDS0OCg0AIg0CDS0OCA0tCwsJACIJAgktDgkLLQgBCScCCgQFAAgBCgEnAwkEAQAiCwIKACIJAgw/DwAKAAwAKgkFCy0LCwozCgAKAAkkAgAJAAAChSUAAAcLHgIACQAnAgoAAy8qAAoACQALKQIACQD/eUnyLQgBCicCDAQDAAgBDAEnAwoEAQAiCgIMLQoMDS0OCQ0AIg0CDS0OBg0nAgYEAgAiCgIJOgOgAEUARQALAAYACSACAAYhAgAJJwIKBAAtCAEMACIMAg8tCw8PLQoPDicCEAQDACoMEA0iOgAJAAoADS0KCQ4nAwwEAQAiDAIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgsGIgsCCyQCAAYAAAN9IwAAA1AtCwwCACICAgItDgIMACIMAgQtCwQELQoEAycCBgQDACoMBgI8DgMCIwAAA30KKgsFAiQCAAIAAAOTJwIDBAA8BgMBACIMRAMtCwMCHAoCBAYcCgQDABwKAwIGHgIAAwAeAgAEAB4CAAYALAIACQAi6AqrEV/3+TOscuwt1elSqCJpHw/Z4fMwbfpTeuvzYi0IAQsnAgwEBQAIAQwBJwMLBAEAIgsCDC0KDA0tDgcNACINAg0tDgYNACINAg0tDgkNACINAg0tDggNLQsLBgAiBgIGLQ4GCy0IAQYnAgkEBQAIAQkBJwMGBAEAIgsCCQAiBgIMPw8ACQAMACoGBQstCwsJMwoACQAGJAIABgAABGYlAAAHCx4CAAYAJwIJAAUvKgAJAAYACykCAAYAjdOC7C0IAQknAgwEAgAIAQwBJwMJBAEAIgkCDC0KDA0tDgYNACIJAgY6A6AARQBFAAsABQAGIAIABiECAAktCAEMACIMAg8tCw8PLQoPDicCEAQDACoMEA0iOgAJAAoADS0KCQ4nAwwEAQAiDAIPLQ4ODwAiDwIPLQ4ODycCEAQDACoOEA8ACAEPAS0KDgsGIgsCCyQCAAYAAAVLIwAABR4tCwwDACIDAgMtDgMMACIMAgYtCwYGLQoGBCcCCQQDACoMCQM8DgQDIwAABUsKKgsFAyQCAAMAAAVhJwIEBAA8BgQBACIMRAQtCwQDHAoDBgYcCgYEABwKBAMGHgIABAAsAgAGABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBwsAIgsCCy0OBAsAIgsCCy0OBgsAIgsCCy0OCAstCwkEACIEAgQtDgQJLQgBBCcCBgQFAAgBBgEnAwQEAQAiCQIGACIEAgc/DwAGAAcAKgQFBy0LBwYzCgAGAAQkAgAEAAAGKiUAAAcLHgIABAAnAgUABy8qAAUABAAGHAoGBQYcCgUEABwKBAUGACoDBQQOKgMEBiQCAAYAAAZiJQAABx0EKgEEAycCBgYACioGBAUkAgAFAAAGkAYqAwQICioIAQckAgAHAAAGkCUAAAcvJwIBBgEAKgIBBA4qAgQFJAIABQAABqwlAAAHHQYqAwQBBioDBAUEKgUEBgIqAwYCJigAAAQEeEgMAAAEAyQAAAMAAAbmKgEAAQXaxfXWtEoybTwEAgEmKgEAAQUGYTs9C529MzwEAgEmKgEAAQWfRbg4yXLLVjwEAgEmKgEAAQVyMQyWM6ynPzwEAgEmKgEAAQXQB+v0y8ZnkDwEAgEmKgEAAQUFBBuZIK9gTDwEAgEm",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "preview_deposit"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "2882618126309823073": {
            "error_kind": "string",
            "string": "Function preview_issue can only be called statically"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "preview_issue"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8018008184173784433": {
            "error_kind": "string",
            "string": "Function preview_redeem can only be called statically"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "preview_redeem"
    },
    {
      "abi": {
        "error_types": {
          "14763784077041570654": {
            "error_kind": "string",
            "string": "Function preview_withdraw can only be called statically"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "preview_withdraw"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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mby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a74mY1Ym764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXXOdjFmZvLumTN5dUybvrimTd9eUybtryuTdNX+UMSuTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3LZm8u5ZM3l1LJu+uJZN315LJu2vJ5N21ZPLuWjJ5dy2ZvLuWTN5dSybvriWTd9eSybtryeTdtWTy7loyeXetujJmZdLpWvVlzMpkybVksuRaMllyLZksuZZMllxLJkuuJZMl15LJkmvJZMm1ZLLkWjJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5lkyWXEsmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl1+oqY1YmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl15LJkmvJZMm1ZLLkWofImO0pY1Ym/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5ba7iMWZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWsUyZmXy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W4uU/3Zw3vii4qkDC/NL5scvW2ON2WXX3TrvvseeXbp226v73vvsu9/+Bxx40ME9DunZq3efvv36Dxg46NDD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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "tZ3bjuzGkbXfRdf7ghmnzPSrGAND9mgGAgTZkO0f+GH43YdBZgaXeruyoovVN6q1W91rJasYH/NAZv3rh//+6c///N8//fzr//z17z/84Y//+uHPv/38yy8//++ffvnrX378x89//XX/6b9+2Pw/RX74Q1H797cfyvFP83/q/k/yf/Lm/5T9n3z9323/3TpFc1F20V3Q/nfHn9D+JxJ/InX8grTxC4coU9AUPIVMoVPYEHL8lTdYrybx/k87/rn/kOv+r+r/kt1PeP+b3U5kf93/r9j+auN1/63Ds43Xfr7qNl7LeKXxyuNVxquOVxuvw0+Hnw4/G342/Gz42fCz4WfDz4afDT8bfjb86vCrw68Ovzr86vCrw68Ovzr86vCrw68Nvzb82vBrw68Nvzb82vBrw68Nvzb8+vDrw68Pvz78+vDrw6/vfn4S9Tpedz8/l3o/X8u2TVGmoCl4CplCp7Ap6hRtiulcpnOZzmU6l+lcpnOZzmU6l+lcpnOZzjSdaTrTdKbpTNOZpjNNZ5rONJ1pOvN05unM05mnM09nns48nXk683Tm6SzTWaazTGeZzjKdZTrLdJbpLNNZprNOZ53OXhy6F2fxalBx4RHNhUzhEd2FTVGnaFP0IbwqTlGmoCl4CpliOtfpXKdznc51Ovv5bwft9t8xp52f8eZH4af8IfycNz8cP+lPsaebH5ef9ufvyBQ6hU1Rp5jOfvKbOi+3KdzZXNAU7lxdyPwdncKmqFO0Kaazn/x2kLhMQVPsznVzIVPoFDZFnaJN0Yfwk9+6i925Fhc0hTuzC5lCp7Ap6hRtCnf2Q/aT/xRu6Mfu53w9rh4yhRt6up/zp6hTtCl2w+ZN9XP+FGWK3bl5U2U6y3T2c/4UNkWdok3hzn4l9HP+FO7sR+EXklPwFDKFTmFT1Cl25yYu+hB+QTmFO/tH6UV0ZHkRnUKm0ClsijqFO/ub6UV0CC+i5u+qF9EpaAqeQqbQKWwKd/Y3wYvoFH0Iv8g0f+f9KnNk+WXmFDyFTKFT2BR1itnmNtvspdf98/LSOwVNwVPIFDqFTbE7d//cvfRcsBdaJxfuwy54CplCp7Ap6hRtin6SjY+rzCHKFDQFTyFT6BSOJu98Ne/M+CnT+9n52C+IZ+9jvw6e3Y9TeLdsk7MDcoo+hJ8xpyhT0BQ8hUyhU9gU09mms03nOp3rdK7TuU7nOp3rdK7TuU7nOp3rdG7TuU3nNp3bdG7TuU3nNp3bdG7TuU3nPp37dO7TuU/nPp37dO7TuU/nPp37dD66KkOVUBSKQ0koDXUE1NFjGeqIaKPPcqqyhSqhKBSHklAaykLVUJFRIoMigyKDIoMigyKDIoMigyKDIoMigyODI4MjgyODI4MjgyODI4MjgyNDIkMiQyJDIkMiQyJDIkMiQyJDIkMjQyNDI0MjQyNDI0MjQyNDI0MjwyLDIuOswdnT2U+L0dXZP/jR1xnK04qO3s5QNVQL1ac6Su9UJRSF4lASKjJaZLTIaJHRIuMosGKj87OfjqP3s5+Oo/tzqKP/s5+YowM0lLeFttEFGr8noTSUhaqhWijPoDJ6QkN5BtHoCw3lGcSjNzR+T0NZqBqqhYqMo6JIRqdoKAp1ZNjoFw2loSxUDdVC9amOiiLvEBwVRXV0lIY6MmZXaSgNZaFqqDbVUQvUR49nL93R5RnKW8BldHqGKqEolLeAaXR8htJQnsGz73M6a2QctXCooxZOVUJRqCNDRhdoqCNDRydoqBqqhepTHZe1U5VQR4aNvtBQEurImN2hM/eoslO1UH2qo8pOVUIdGW30ioY6MvroFw1loWqoFqpPdVzqTnXMnGyjezQUhzqmXGYP6cw9LninqqFaqD4UHxV6qhKKQnGoI2P2noayUDVUC9WnOir0VMdx0OhEDXX4zU7TjnBXNVQL1ac6p6EOVUJRqIMq3hc8qvFUGspC1VAtVJ/qqMay7T24fs2FHXNtx9zbCYRv50SYv9J45fEq41XHq//9cX7tr8enPF77+XrE+WsZrzReebzKeNXxauN1+PHw4+Enw88vnM5av2werzxeZbzqeLXxWsdrG6/9fHU0HK/DT4efDj8dfjr8dPjp8NPhp8PPhp8NPxt+Nvxs+Nnws+Fnw8+Gnxc9jZ4sjY4sjX4sjW4sjV4sjU4sjT4sjS4sjR4sjQ4sjf4rje4rjd4rjc6rX028rI9XHa82Xut4beO1n69eok55L0ZnvJfi8er/v42+5ynKFB7ZR8fzFD5Duo3O5inqFLuf0/foaR7Cz9NTlCloit3QgXV0Mk+hU9gUdYo2RR/Cz31n6tG7PAVNwVPIFDqFOxcvoGO22k/ccd52/+ExZ+1/Popn1M4oHTorh87CobNu9CwbPatGz6Kxs2bsLBk7K6adBdPOemmed0yKH9U7infU7ijdUbmjcP0PZE6580EB/U8HYf/phzWV5L/Z/tOf95jqdxjR9t3v7D+dawN/+sdvP/3kvwCLBfsSwt9+/O2nX//xwx9+/ecvv3z74f/9+Ms/j1/6+99+/PV4/cePv+3/dz+Nfvr1v/fX3fB/fv7lJ1f//nb99fb4T6uD9/jjWjX+fJ8hyxqYX2MOg7YJGFDWoPlsy2nQ20MDfmzANg+B69UCIf2dgTw2oHgP9t7JQ4NcCxo/NFi8B52mQT/O0f/8HtS7h7Bogfok0WFgVF86D9TmibRdBnsXP2uwj/Z6HRb7eI+u98Ha7zxK+cLTeR9L+hTf2QrdxxsPW7E4H4R4ntOyd87g8/h9O8ripORqfJ1U9NhD3+Bhi2PZ6ixw2ToeS3vxPSV5+J62xfm1SZyhm16g4E84xKeym9kDh/VxxPu5HweXR8dBizOUfant/EjsOrn2QfHvHWjRjG0ffs9mbPtA+OFnQrw6GIpDQWZ9qh1kVzukPm6Hrlxki5bsmh+7rNtSt6stbeGyoOg+5o43dh/wPH5XVp8vRclZe/z5rt+R0q53hPTV9xVdhB668OJoTMo8XW2n2mMP+loP4vnpktLDz2XpEOfHPoh/6LB9SSdrn1Ka78A+a4RVn2Zok+glGV5efw8vXuBvn9ubAN2n9K6PYZ+N+L1Hv39hk+3+RUnKGzzo/oVt6dF0dlmk1e0lj/SxLIpdr164mi6O5Q2lLvV2mS7PUrvOUpGHZ6n0VW/a5hWlE3yyXMvvPHTVH+7bPBTttD3oLKwdzMIBOqN5B9tKjQ5LaS85ZLo8y/dynzSMoQlcRL57LxdnZ98CXn3r22MPW3Wb5kfKHfjXfj9C0tXFvccIZZevetQSHo1e8thXR+JisMGA9VMeqlehQb1/zkPk8qBX22HhUdv9drzqYUIx/tXtRQ+Ndljb7rfjRQ9u9TrVt9feD+4co4wdqA89bHWtr13j2gbXpdI/0Yy+RTP640NZ9Xv6/FA6DPo+9nvq4vqqMUix8thh1YQaBMQR28cmSHrEhhhtv3836wKjdNzRe55c583D4/JaPnGClris7fJFcGzxmeweL4KjlCiUQi8W2z6Zfnm84Vhe9TgW+oaH1Bc99PpsFwX7xCMuLKVu94/lZY/WwqPbax50fbZU2qse2+XRbx/Lyx4wOYszEx89+nYfxsu+oGxXX/C1/mhmCm612FBidhaOYR+N/v59kPuD2K73B7Hd7g/aen2DR7s/iF16JAexK4/0TPNW7o9iV29qdhRbNr47jF2fp7lhbNn0/jj2uA7eG8g+sciMZJcWuaHsE4vMWHb9hiYHs2W1xJQdzR49nHvD2bJaZMqOZ5+Y5Aa0S5PsiHZtkhzSPjHJjWmftSQ1qM235GWT5LD2iUluXJtvyasm2ZHt2iQ5tC2rxZFkd+pJQ24Pbmv0yNpmD/tD6w8mOaB7UsC5Ed2TluSGdM8OJzWmyx/OyybJUd0Tk9yw7plJalyXP5zXTXIju7VJcmj3zCQ1tksfzusmydFdWa4jJXm07h9lxnfPLO4N8IqvV8/+xB4Ft+CkVzp7DBI71G6p6b/X+aH22l/4+0YTHk3ao78vqzUTi+6y4U1In3CoMV1Yy/aiw/wcKukL70KRqI2i2PXIL1mLzfNROt5Slm6D9XgXBKqzSPogtjiXyobQK+n74mqPe/vaBuPJwh/KezUD1LrFsKO90oodTxyQgR723o360IrFKaES3XSV9vh+kGLb/TH66mDY4qLoc9cP31Jb3c5R7GI33LHYPx4Lv2E4aPKG4aDp7eGgrWaktqtfvHF/0eR4cu00Kavxk7X7F7P00ay6K0sTuyalrJZXTaiFiWyvdPNJrrGg4D3OH0/4yss1JCnXGlK9TpOmn3ERue4KU7hju+VvFabo1Cq1vjicxdu6d5XsuiFrn7t8fDhLF7nG6k2h/D7nUgMEu4YzJf+myLVQuX/E+vhNaat3tsbFRivcJ1Y+zqK2xfxU47hgVXl42V1b9Jh3hLsgv7dYnGiValAR+qL64WNpK7L2a83Urisvy8dbfnXVFatx9a5g8bEZ9oarRKtvuEq0dvsq0fobrhJLk+xVopf7V4llQ7KAT5tA5X7OJDsr1fWL35LkrNSy8hpUHvY2P1beakWoUI/LlcBJ8r3JG+4+O2YD7tYebeVu7dFG92tvbZKsPdrk9om2bkiy9p6Y5DpXy0uNXatk8CzEx0sNbW21wlWvFa6OJ+v2waSvunnXxJbgSlv/+PTAdn9xmsobbo+mQu8wWfU3mUusUjHL4wHj+q3laAtJK4u39g2rf7R6HCoNk1Jvw2T1MFMaJkuTLEzo/q0p+aNZDPfWJlkipU0WvYG1SbI3QG9Yo3rSkFxvYAlH2+KRJtvHUY/hSO0NxUf9DcXH2+3iWz0VlS6+pUm2+JjvnyTLhmTrZm2Su5KvzzS+1h/2Gnp8pvEKrscOXuN9hXWQ8uGytX4KRaMH3OvDGfilx97xifVQXI/56CHLCYGr8rZHaylPWnHNk+INYt+1gr60FSUeL/flv9fez9L4DR7bbQ+OO8yI9fG5sXpOal+MjYUJgdsYP+UhHA9Vi7zDo77ooddAz+xVj3h6F/t3Lx/Lqx66xbFo2e578Kse11yvmjz0WD0xlavadSuux6FtUS3a7rZifVGIi+1+UZDHF4XlshXFNU4JTD5eFNYesdK/f6722GP5wGhc9KXZOzz6Q4/8m9oWb+rqEXPZrg07YGHzu4NZ3XJQ4il1K7rwWN3zq9H3MMXKf9nj4QmSnTYnWkybL7dhiU7DvppRHq4AUF1tgkJwnz1eGb4zoTd02FfLTekO++rpqWSHffXoVLrDvjTJdthrvd9hXzYk22Ffm2Sn3pbPOMd1yrbV6boqGwkPLdAFaR+uMm21/UeJFdZScP1O8s1Que5Q74tmyOrtiJrZB832+HRv75imau+Ypmr3p6naO6ap2jumqd7wBNW6IdnCW5skR8qrk/V6DGpfxX9cNMvi3Sv2OuPx8v2xePtyiymJoR1XhW7Rh7VzWj1O1bbrBqf2uwdk8yvw+6LudZqIMmxHJB9qeL1uJS3GZrT3Cq4PiD/0jVYrV3qNNPe+pz404eXKVRIFvL3heRXebj+vwhu/oXierCrWIP3+3tXFp7Oy2Q/2WpbY4K39pE25xmmMO3F9/zHXu1ceXi9g5a48vL1htZXLG1ZbudxebeXyhtXWtUnyysPl/mrruiHJ4nlikrvyLE/W5JXnSd3AznG8D3Yf103pb7j28Gr9Kn3teXJIfE37sNQFClb72O3TFDFRWuHeWL/pN2+i22UCd39/b7Lcs6JcG+rxqiVv2PmH6fbWP7za2C9dPvSGTVWY7u+q8qQhuVW99UnS4/7L/QJYH3++y6394kHpqjBnstkHizfchM38hpuwmW/fhM38hpuw1ybZiw7fvwl73ZBs1fAb7p9enmf92qwUd334/kR7sl3p1a/vj01kdT8LxeLPbgKT0bZ9woTjRqEisLr4vcnq9oDjonZ+wLgMxbV9xqTN92SfhekLk7qabqwx2wj32NYP12BZnK1V4zH0qjg9/7EZq97AtfMD47F8WK3g1Q4nfD0At2NJX/O4Rn5MW3nNg+jy4EU71o9sx3qprY5Fbq+DLz2S6+B8ey3rSStS6+B8ey1r3YrcOvgzD36Dx3bbI7cOzsa318HXHrl18E941Bc9Uuvgzzwy6+D5Y3nVI7cOnvfgVz1S6+Bc79698qQVqXVwXi1iJdmx5HkNdtiCYKsnnbI8Xz4tleR5vU3SdStyPG/bl7YiyfMnHvwGj+22R5Lnq7WrLM+XHkme5z3qix45nj/xSPE8fSyveiR5nvbgVz1yPO+3SbpuRY7n3b6U5/XaG6b2x+/netYxV29Lj2S95T3qix65envikaq39LG86pGst7QHv+qRqjdZrk6lzvR1K1L1Jqu1qWS9LcfUsQsH45e7fGzFal0qOaaW1SpMsg+29Ej2waTc5eiTVqT6YFLsS1uR64M98+A3eGy3PXJ9MFl9AVHymrD2yF0TPuFRX/RIXROeeWSuCfljedUjd03Ie/CrHrlrAt8dOT1pRe6awHSbHeX2mFr4/hzp0iPLc75NUr4/RyrcvrQVSZ7z/TnSZx7bbY8kz+X+HOnaI8nzvEd90SPHc7k/R5o/llc9kjxPe/CrHjme622Syv05UlH5Up7nxtSyWmvK1tvSI1lveY/6okeu3p54pOotfSyveiTrLe3Br3rk6m315FTuTF+3Ildvdntkv1z6jw29K+xx/nHpX1ZfM5Vc+pe63V76l1puL/2vPXJL/2uP3NK/rBabstMUq+eDst3a5TdWJbu19e5J+qQVuW5t7V/aimS39okHv8Fju+2R7NaunpXKXmaXHsnLbN6jvuiRu8w+8UhdZtPH8qpH8jKb9uBXPXKX2c53q3bditxltt++2K95npum6PU+z3u9z/N+m6TrVqR4rsuvmrrfiiTPn3jwGzy22x45nut2f9i09sjx/BMe9UWPFM+feWR4nj+WVz1yPM978KseKZ5ruUvSJ61I8VxL/VKe56YpdPXwU7belh7Jest71Bc9cvX2xCNVb+ljedUjWW9pD37VI1dvdHcy/0krcvV2f7FpPaZOLf0r0+0xta6edUr2wZYeyT6Y8m2OrluR64Nx/dJW5Ppgzzz4DR7bbY9kH2y1UV/2mrD0SF4T8h71RY/cNeGJR+qakD6WVz2S14S0B7/qkbsm6N2R05NW5K4JyrfZQbfH1Kr350iXHlme622S6v05UtX+pa1I8lzvz5E+89hueyR5bvfnSNceSZ7b/TnSJx45ntv9OdL8sbzqkeS53Z8jfeKR43m9TVK7P0eqVb+U58kxdb2/Le/aI1lveY/6okeu3ur9bXnzx/KqR7Le0h78qkeu3trd2/SetCJXb+32A3jLpf/4ep9Gj5/619WWfHudXl/eVvBbwvonTBrh98i9aHLtlrGblIcmyZshGvWH78jSokW9tbayWG3poDb7UKL98b4Qunq6iQ5Yn+8H7ob7/Zu6XFWIN4Sk1IXJ6nsjkju76GrNKbezi23LnSFyO7usTZI7u9h2/7ui1w1J7uySN1l8VcraJLmpkq1m9d/ylmQ3VVoXX5xpYiQPi8+W2/DFIKiUQo89yvJhp3hD4Ds+uZUPFqvdrAMBDb7q/XuL1Uifrm15cZe30vLN6Ne3e1V67UjwiyS39ppH2a6uYaHVW7pafbqGlRvi/cNpWt7wRZJWbn+RpJU3fPXi2iRb/HT/iySfNCRb/Lz8dGM7/AYbwH9ub6jWYm+ovi1MaLn3pf3nr9P6zC6CfJ3x+3XLXjS5+gC/uzPzo8l6X9+Ym9o1fDvfx319bbXxXn7n2LVNeufYJzbZnWNt+QRUaudYW607ZHeOteX+e8lN/IzfsFmk8e3NIm35BVLZrt76W6iSXT2+v1nkuiFZUK9Ncpv4LU/W5M6xT6o4uzu3yepJk+Tu3E9qOLuLrcnqjM3uYmvLkWN2F9snh5TdxdZWW/Fld7FdmyR3sTVddttyu9ja6umoNJhWK1ZJMK2ej0qX8tIk2+fSNwy41g3J9bnWJ0lyF1tbLVzldrE1e8NO/WZv2Knf7PZO/bba7yx9AVyaZC+Adv87UNcNyVbN2iR5AVydZ8ldbJce2V1sbfW8VHYX27VJchdbW23Ol93F9olJbhdbW92TmdvF1laLWMlH2Wy1C1vyUTaryw5s6lG2tUfuUba1R+5RNlvt0Ze87c5WX5aTvE1j6ZG8TcPa3aXWJ61I3aZhTb+0FbnbNJ558Bs8ttseuds0rG+3l43XHrll40941Bc9UsvGzzwyy8b5Y3nVI7dsnPfgVz1Sy8Z2+7GpJ61ILRvX249NPeF56ra7ut2/jXrpkeR53e6S9EkrUjyvt/fnW7cix/NnHvwGj+22R47ntdy/jXrtkeP5Jzzqix4pnj/zyPA8fyyveuR4nvfgVz1SPK90l6RPWpHjOfGX8jx3212l+7tGrz2S9Zb3qC965OqN7u8anT+WVz2S9Zb24Fc9cvXGd/eWetKKXL3d3qPvyZg69ShbXe3RlxxT19XSVLYPtvLI9sHkNkfXrcj1wYS/tBXJPtgTD36Dx3bbI9kHk/s7m689ktcEub+z+ROP3DVB7u9snj+WVz2S1wS5v7P5E4/cNeH2Y1NPWpG7Jtx+bOoJz3Njars/R7r0yPLcbpPU7s+R1tv7861bkeS53Z8jfeax3fZI8rzenyNdeyR5Xu/PkT7xyPG83p8jzR/Lqx5Jntf7c6RPPHI8v71J35NW5HjeypfyPDmmbvd3jV57JOst71Ff9MjVW7u/a3T+WF71SNZb2oNf9cjVW7+7a/STVuTq7fb3Qa2X/lO72NbVA1PJpf+6el4qufRfV49LJZf+1x65pf+1R27pv23l9jRF2+5/2c7SI9mtbdvdk/RJK1Ld2rbZl7Yi16195sFv8Nhue+S6tW35WFDuMrv2yF1mP+FRX/RIXWafeWQus/ljedUjd5nNe/CrHqnL7PEM872qXbcidZltRLfZUW5PUzS6/2U7S48sz+k2Sen+l+202/vzrVuR5Dnd/7KdZx7bbY8kz/n+sGntkeQ53x82PfHI8ZzvD5vyx/KqR5LnfH/Y9MQjx3O5TVK+P2xqIl/K89w0RZP7u0avPZL1Jvd3jX7ikas3ub9rdP5YXvVI1pvc3zX6iUeu3vTuZP6TVuTq7f5i03pMnVr6b9rvj6lXzzpl+2Arj2wfzG5zdN2KXB/M5EtbkeyDPfHgN3hstz2SfTC7v7P52iN5Tch71Bc9ctcEu7+zef5YXvVIXhPSHvyqR+6aUG+PnOz+zuat3R7Zr3meG1O3N8yRtjfMkbbbJG1vmCO9vT/fuhVJnrc3zJG2N8yRtjfMkfY3zJH2N8yR9jfMkfY3zJH2N8yR9jfMkfY3zJH2N8yR9vtzpH27TdJ+f460b/SlPM+Nqft2f9fotUeu3j7hUV/0SNXbM49MveWP5VWPXL3lPfhVj1y9lbu36T1pRa7ebn8f1HrpP7WLbV/tyJfdxXZtktzF9llLUrvYJm+GWO1iu7TI7WK73tIhuYttXz3dlN3Ftq9XFXK72HZ6w9ZmnW5vbdbpDVubrU2SO7t0ur+12bohyZ1d8iaLXWzXJslNlfpqVv8tb0l2U6V18eV2se2rR52Su9j25bZzqV1s++peytwutp3Xe85ldrFdNiO3i+3aIreL7dIju4ttf7LP6TXIhg/2w2m6WnxK83C12XKSh8u997IEWZpki3/1JEm2+NcNyRb/tvx0U7vYPjHJ7WK73Nstu4vtE5PcLrZrk3fsYmtbXDXF9DrXPu5i21cb7+1XqJis23WtC5u6RNq1dSUJ3PX6YbfIrqsFKYlTtsDckL58OM0eH85q1aFGFVfYslLoUw2Jg/FG0aIh9LXviF378TbTtmjIanRlXOL6awwjePtw1Vo9BpU/TczuvimfOBr4dL47mnb3LFm3Q2LD5V0Dkz62YwVHIZ4NEYb7q/f3+oPJYrqKr6NhvF58b0LvMFl1W7faopfW8XDap97ZGAD7O/v4fF1twLdPc8PU+z5R89hl1XNN7uXZ6xv26e/19j79vfY3jPiWJtkRX7u/T/+6Idn+WtpkNeKrb/jqgt70i9+SZKfvSfkdm+SN8qswKWifKuJarzm9BmfbR5e2Gm5Vi52sdw1E+ZyLxo6tu14AZbUooF3j3dW9C6IPL4B9uRB3LUsSTDP2jy3hN0Cpv2PY1e8Pu/o7hl39HcOu/oZhV3/DsOvJmWZFrzMNNuX9cKbtg/8VZPk6HFil6PaplphES+rjc35vyeKE3bts1+w8M0wEf85GlObHvGt53AXN06Dqw47b3pjl3aqxU3hhmAn68A0Gz0xweU4WJu02UnaT1X7UdM1KEXD2Iw7OTfQffkLXI4c7IGFi6jMtSdJtb8kb9un33bfv8m33eMNO/U9ckoTbXe7v1f+sKTnGPTv1myRO/SelfOzcMUu502vdg1bKNc21F9NjIKx28SPSWEDcy7AsuLJ6tip/+q+Wu/Kn/2q9K3v6r5a7soOOJy7JUcfuUt9w+i+bkq7ntUvuSwSenbnX91i1Aosa351yvNzvh0t8kcB+0tXHl+flF1C1Ftd4mFzdPtcUoZjd2ZcNbNGU1apz9htwnr4xcQvOruvqjVnP40lM44GJfeZ8SUJ3Oe3c4r3ddXs8r7kfzvJrJ4JQ+zwgLBz17RMu+2nWrzKCWvyuGFdb/u2LcNdXQLWrjOrH91buj8nKJvwObr9jMWx30fvcXi4gpbm9dElz+w0LYk+akub22iXH7XUdFqhDaos6XH0VlS/gxkTNts9IXHT6+L6svoxqv4RcfSjYruS7Elp9gVNurPmkIS1MSqt90RB7y1BzbSPxZWG7hhuovrdZnLj7JFiQv+Ls1Wc8Gl2LQFJf9MhdgZZvSXb0vf6UqdBsyj4rv/iUjd8w+Lb0892LwfdqWSx97VitiuUH31bvD77N3nEVWz0Pk7+KrdbGslex5dJYGvpLl/Tgu96/p+tZU7KD7/Wpnxp8Ly9i11d4sm6wrdP3F7HV2li+M7ncCTvdmaz9DZ3J5Sb4WSCs1sfyZdjeMgfW3jAHtnqcK9+ZXLqkO5PtHXNg7S2TemmXxerjE5c0nVZfCfSet+Udo9TrblGHzKp3vFok+0TveLVMlu4dr5bJsr3jZUOyvePVtoKf6B2vbdK949X3WGV7x0uPZO947ZHrHS/fknzvuMv93nFZP/SV6x0/MbndRdjX2YLXynA031Vy2dY3KMJXlMrq8l5W62S2xb1We1fZHvWPn7RFGb5zHE6W79tSlnsjXL0EYX7YSyjlHb2E8paVsvKGlbJS3tFLWLtkewnlHStl5S1Lf3mXVS+hvGUBsdD21W9LdgzzrBT7hQVTXpTiaqkseXF+0hazWCjY1/76qi2rbw3e+rX/8NYX1+eyejosv/yxbs15rTpbs1d/W9isZm/7fGtUYV2obPkLiW5RAbq6IXtv5PaGsebSJT3WLKvFsuxYszDfH2uW1VpZ/irCb3iqcXex+1cRfsNzjU9c0lcR7m/AJb/h0cZPuCyvIvyGhxv3d4+/+m15w1hTpQNYthVYlnvCpceaRer9sWZZrpUlL2fLhiTHmkW3d4w1n9hkx5pltViWHGuuPXJjzSceqbHm+i1JjzWXn3J6rLl8eiw71lyb3B1r7oXcopOBe2HwRy4td6xrbLj1wuKUXdvItXNL081etVECm3ajNdemFLiBwkeb5fZk15O+unddLtry9qm21KsLtp/+D4t5+VHr1Z/EiwenuV8tngSvht/Q4Rb/tf/zx7/8/NuffvnrX378x89//fXv/pel/uDblHz7obRd+OJX6UPQNkWZgqbgKWQKPTi/C5vCnb091KZwZ1/u4G2KclwSdkFT8BQyfFjnT2wKd/YFAm5T9CFkm6JM4c7+5ILwFDKFHheQXdgU1W/s2psqbYp+PGb17QfdpihT0BQ8hUyhU9gUdYo2xXS26WzT2aazTWc7nPcWmk7hzt7/tTqFO3uvzdzZr+vVnf2iWssU7uznWeUp3Nm3a6o6hTt7p6q6s/fEqzv7kmZ1Z3+aq21TlAMvu6Ap3NlHsE2mcGcfcTWbwp19+NTaFN27tfsb3jcXe+N7Obqou6Ap2MUe2mWK3Zn9/ek2RXWxN6PvzgfDex9iHyaFcm9/q8pGoTiU2/uNVfuKvytxZaFqqBbKM/wd34fToUooCsVjLLBfwULp0Ulz5Rn+mRSvyqFaKM/wz6d4YQ5Vjjt3XFEoDiXHzTyuNJRneP+leH0O1UJ5hpdq8RIdyjO8WIsXKXsBFq/SoTzDl/yK1+lQnuFXvuKVOlQL5Rm+kFW8WIfyDO87Fy/XoTiUHOMmVxrKju6xqxqq+eOZzjKv2lN52Q5V/OFc//S9cIdiV37kXrriJ1nx2h3KQlVXnuvlO5Rn+JxS8QIeqoTyDL8fungND+UZPs4oXsVDWSjP8FFx8UIeqo+Ob/FSFh82FK/loTzjOGO9mofyjOPc9XoeykJ5xnHGekkP5Rl+Z0vxoh6qhKJjrxRXHMozjnPSK3soz/A7MIrX9lAtlGc4SYqX91Ce4bNCxQt8KA4loTzjODu9yIfyDH++tXiZSz38+lDkdT6UZ/gFnrzOh+JjdOZKQmkoz/DnGcnrfCjPcGyR1/mpvM6H8gy/eJDX+VCe4T038jpX39WPvM6HMlfkqoZqrjzN6/xUXudDFVfVFYVi7714mtf5UBrKjr6NqxrKM/zsJK/zU3mdKx2X9BKKQnmGn53kdT6UZ/j1hrzO1ac9yOt8qBbKM3yjFvI6H8oz/L5X8jofikN5ho+vyet8KM9wTpLX+VAtlGf4/XvkdT5UOSbkXHmG923I63woz/CuHHmdD+UZfsEjr/OhWijP8Ekt8jofyjPO3g6F4lCe4WcneZ0P5RnHOel1PpRnNP8svc5P5XU+lGf4kjF5nQ/lGX5JJa/zoTSUZ3jHhrzOh2qhPOM4Y73OtR89s3mNokah+FhSciWuvC1e50OZb0R3/N8aqoXqU3mdD1VCUSgOJaE0VGT0yOiR0WcGb1uoEopCcSgJpaEsVA3VQkVGiYwSGSUySmSUyCiRUSKjREaJjBIZFBkUGRQZFBkUGRQZFBkUGV7n5lcc9jo/ldf5UCUUheJQEkpDWagaKjI4MiQyJDIkMiQyJDIkMiQyJDIkMiQyNDI0MjQyNDI0MjQyNDI0MjQyNDIsMiwyLDIsMiwyLDIsMiwyLDIsMmpk1MiokVEjo0ZGjYwaGTUyamTUyGiR0SKjRUaLjBYZLTJaZLTIaJHRIqNHRo+MHhk9Mnpk9MjokdEjo0dGnxmybaFKKArFoSSUhrJQNVQLFRklMkpklMgokVEio0RGiYwSGSUySmRQZFBkUGRQZFBkUGRQZFBkRJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5RJ1L1LlEnUvUuUSdS9S5Rp1r1LlGnWvUuUada9S5Rp1r1LlGnWvUuUada9S5Rp1r1LlGnWvUuUada9S5Rp1r1LlGnWvUuUada9S5Rp1r1LlGnWvUuUad61nn4lNOR4a6OjLMFYXiUBLqyKiuLFQNdWQ0V57hsyR61Dkf81qeIcfPKJRneB9djzo/lWf4PJMedX4qz9DjLzzDR4t61LmPDPWo81N5hk8l6lHn9ZhG41ASSkN5ho8H9ajzU7VQfaqjzn22Qo86P5Vn+PygHnXuMxN61PmpNJRn+ByFHnV+Ks9oh0uf6qjzU3lGP6b8KBT7fQ/+HnidD6WhzJW3xet8qObKW+B1Xn1CTL3Ohyqu/N31Oh+Kj7sZXEkoDeUZ3jtUr/OhPOM4r7zOT+V1PpRnHOea1/lQnnGcTV7nQ3mGz1Go1/lQNZRn+GyFep0fyrzOq59D5nVefWbCvM6H4lCe4XMU5nU+lGfI4VJDtVCe4U+LWNlCeYaP/czrfCgO5Rk+CjSv86E8w2fQzOu8+ryZeZ0P5Rl+xprX+VDlmHF3RaE4lGfUY15XQ3mGz0eY1/lQLZRn+NlpXudDeYafk+Z1PpRn+FKveZ0PpaE8w8d55nU+lGf4bJl5nZ/K63yoEor8Fhtvi9f5UOLKnb3Om89MmNf5UDVUc+Wfh9f5qbzOm8+5mdf5UBTKM/xmPvM6H8ozjrlvr/OhaijP8Hle8zo/ldf5sZRpXufNuWZe50Pxsd23KwnlGX47i3mdD1VDecYxs+51fiqv8+asM6/zoSiUZ/hit3mdD+UZx9npdT6UZ/gchXmdD9Wn8jpvx9npdT6UZ/heoeZ13nxmwrzOh9JQnuFzFOZ1PpRn2OHSp/I6H8ozfHLfvM6H8ox6LCVIKA3lGT7Ta17nQ3mGz6CZ13nzebPqdT6UZ/isRvU6H8oz/FaH6nU+lIbyDJ+3qF7nQzW/Cae46lN5nQ9VXPmyhdf5UOzKW+B1PtSe0f0mmOp1PlQN5Rk+g1a9zk/ldd7LsXpSQlEoz/AHX6vX+VAayjP8jK1e593JWmleoyrNa1T1Ou9+1a1e593Ptep1PpRnyPF/JZSGslA1VAvVp/I6H6qEolCRIZEhkSGRIZEhkSGRoZGhkaGRoZGhkaGRoZGhkaGRoZFhkWGRYZFhkWGRYZFhkWGRYZFhkVEjo0ZGjYwaGTUy6pHhn3m1UDVUC9WnaluoEopCcSgJFRktMlpktMhokdEjo0dGj4weGT0yemT0yOiR0SOjz4y2baFKKArFoSSUhrJQNVQLFRklMkpklMgokVEio0RGiYwSGSUySmRQZFBkUGRQZFBkUGRQZFBkUGRQZHBkcGRwZHBkcGRwZHBkcGRwZHBkSGRIZEhkSGRIZEhkSGRIZEhkSGRoZGhkaGRoZGhkaGRoZGhkaGRoZFhkWGRYZFhkWGRYZFhkWGRYZFhk1MiokVEjo0ZGjYyo8xZ13qLOW9R5izpvUect6rxFnbeo8xZ13qLOW9R5izpvUect6rxFnbeo8xZ13qLOW9R5izpvUect6rxFnbeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5jzrvUec96rxHnfeo8x513qPOe9R5P+pcj1tKPMPXG/tR574u3o86P1Wf6qjzU3mGr0b2o85PxaE8w1fS+1HnfidHP+r8VDWUZ3ifvx91fqijzr2n3486PxWF4lDu7KPPflS3jyD7Ud2naqHc+bgHYzvKe0j39m2vdunmx+0Vm1e4/+DQcujj5hev8tA2n0fY/1tBt0PXQ/vdWttxE8Xm9b7/9/D3ii8bnTfo0KGPJhQGfeQeN0ds5cg9bo/YioE+cuX0PHL1/PmRe9yusB03t0195B431GzHLW5TM2gBfeTa0c7jdrepK+gGul/6uPVt6gKaQDNoAQ25DLkMuQy5DLkCuQK5ArkCuQK5ArkCuQK5ArkCuQq5CrkKuQq5CrkKuQq5CrkKuQq5BrkGuQa5BrkGuQa5BrkGuQa5BrkVcivkVsitkFsht0JuhdwKuRVyK+Q2yG2Q2yC3QW6D3Aa5DXIb5DbIbZDbIbdDbofcDrkdcjvkdsjtkNsht1+5x718oQtoAs2gBbSCNtAVdAMNuQVyC+QWyC2QWyC3QG6B3AK5BXIL5BLkEuQS5BLkEuQCrwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCHhFwCsCXhHwioBXBLwi4BUBrwh4RcArAl4R8IqAVwS8IuAVAa8IeEXAKwJeEfCKgFcEvCLgFQGvCHhFwCsCXhHwioBXBLwi4BUBrwh4RcArAl4R8IqAVwS8IuAVAa8IeEXAKwJeEfCKgFcEvCLgFQGvCHhFwCsCXhHwioBXBLwi4BUBrwh4RcArAl4R8IqAVwS8IuAVAa8IeEXAKwJeEfCKgFcEvCLgFQGvCHhFwCsCXhHwioBXBLwi4BUBrwh4RcArAl4R8IqAVwS8IuAVAa8IeEXAKwJeEfCKgFcEvCLgFQGvCHhFwCsCXhHwioFXDLxi4BUDrxh4xcArBl4x8IqBVwy8YuAVA68YeMXAKwZeMfCKgVcMvGLgFQOvGHjFwCsGXjHwioFXDLxi4BUDrxh4xcArBl4x8IqBVwy8YuAVA68YeMXAKwZeMfCKgVcMvGLgFQOvGHjFwCsGXjHwioFXDLxi4BUDrxh4xcArBl4x8IqBVwy8YuAVA68YeMXAKwZeMfCKgVcMvGLgFQOvGHjFwCsGXjHwioFXDLxi4BUDrxh4xcArBl4x8IqBVwy8YuAVA68YeMXAKwZeMfCKgVcMvGLgFQOvGHjFwCsGXjHwioFXDLxi4BUDrwR4JcArAV4J8EqAVwK8EuCVAK8EeCXAKwFeCfBKgFcCvBLglQCvBHglwCsBXgnwSoBXArwS4JUArwR4JcArAV4J8EqAVwK8EuCVAK8EeCXAKwFeCfBKgFcCvBLglQCvBHglwCsBXgnwSoBXArwS4JUArwR4JcArAV4J8EqAVwK8EuCVAK8EeCXAKwFeCfBKgFcCvBLglQCvBHglwCsBXgnwSoBXArwS4JUArwR4JcArAV4J8EqAVwK8EuCVAK8EeCXAKwFeCfBKgFcCvBLglQCvBHglwCsBXgnwSoBXArwS4JUArwR4JcArAV4J8EqBVwq8UuCVAq8UeKXAKwVeKfBKgVcKvFLglQKvFHilwCsFXinwSoFXCrxS4JUCrxR4pcArBV4p8EqBVwq8UuCVAq8UeKXAKwVeKfBKgVcKvFLglQKvFHilwCsFXinwSoFXCrxS4JUCrxR4pcArBV4p8EqBVwq8UuCVAq8UeKXAKwVeKfBKgVcKvFLglQKvFHilwCsFXinwSoFXCrxS4JUOXtGhG+gz19eb9ORVPfWRezwWqiev2vGg7skrvxG36MmroY/cfv7+kduPB4VPXg3tuWU72nPwauiDV1MX0HTow//g1dQCWkEb6Aq6ge6X7hvoAhpyO+R2yO2Q2yG3Q26H3H7lHvfshi6gCTSDFtAK2kBX0A005BbILZBbILdAboHcArkFcgvkFsgtkEuQS5BLkEuQS5BLkEuQS5BLkEuQy5DLkMuQy5DLkMuQy5DLkMuQy5ArkCuQK5ArkCuQK5ArkCuQK5ArkKuQq5CrkKuQq5CrkKuQq5CrkKuQa5BrkGuQa5BrkGuQa5BrkGuQa5BbIbdCboXcCrkVcivkVsitkFsht0Jug9wGucArA14Z8MqAVwa8MuCVAa8MeGXAKwNeGfDKgFcGvDLglQGvDHhlwCsDXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV5V4FUFXlXgVQVeVeBVBV414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNeNeBVA1414FUDXjXgVQNedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FUHXnXgVQdedeBVB1514FW/eEXbxSvaLl7RdvGKtotXtF28ou3iFW0Xr2i7eEXbxSvaNsgtkFsgt0BugdwCuQVyC+QWyC2QWyCXIJcglyCXIJcglyCXIJcglyCXIJchlyGXIZchlyGXIZchlyGXIZchVyBXIFcgVyBXIFcgVyBXIFcgVyBXIVchVyFXIVchVyFXIVchVyFXIdcg1yDXINcg1yDXINcg1yDXINcgt0JuhdwKuRVyK+RWyK2QWyG3Qm6F3Aa5DXIb5DbIbZDbILdBboPcBrkNcjvkdsjtkNsht0Nuh9wOuR1yO+QCrwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgCvCvCqAK8K8KoArwrwqgxekevBq1OfuXxoAn3mHptkDl6d224euf48EZ33t09dQTfQRy4dbTh5NXQBfeTSscHnySs6/vbk1dBH7rFR5nl/e/EHwem8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",
      "is_unconstrained": false,
      "name": "redeem_private_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "redeem_private_to_public",
      "verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAwwr8yZEzdtDUE4d2DkR86VwAAAAAAAAAAAAAAAAAAAAAAA3Ff15y8P3TNPVZ/Gf6xwAAAAAAAAAAAAAAAAAAABosT77qG2+2mESMX8e5/OvXAAAAAAAAAAAAAAAAAAAAAAAHdJiemjSb57g1oNyuAM8AAAAAAAAAAAAAAAAAAAA4HI3G4shtUjqu64UYCqxh5QAAAAAAAAAAAAAAAAAAAAAALYgHyHwsttTDac5LVkM1AAAAAAAAAAAAAAAAAAAAJx8aW8T/bkkr+FZm/HlRr5sAAAAAAAAAAAAAAAAAAAAAAB20kB78b5cSCdQozfhDTQAAAAAAAAAAAAAAAAAAAKTmpp2Mgl+pSGH3brge9mcQAAAAAAAAAAAAAAAAAAAAAAAE2/D3Pc+A1qEUoilfOtcAAAAAAAAAAAAAAAAAAAAiBmdg60o/TwC/muJJ8JIb3gAAAAAAAAAAAAAAAAAAAAAAGzdsSKD87uUq4p2JG07pAAAAAAAAAAAAAAAAAAAAa+59prDTfGUPIKqdIGBSfiQAAAAAAAAAAAAAAAAAAAAAAAp/RfxuaERGUreSkLbBsQAAAAAAAAAAAAAAAAAAAHj0R5GcW11JyY4+JSzTesNGAAAAAAAAAAAAAAAAAAAAAAAFNlOs7/ZgxsS0lX5qd8AAAAAAAAAAAAAAAAAAAACxqkcO69g9OQOA9DyevZAcjgAAAAAAAAAAAAAAAAAAAAAACIvSfyhGOxvK5NYhfg4rAAAAAAAAAAAAAAAAAAAAnqEluqqIrxdtsqB94I7o/sEAAAAAAAAAAAAAAAAAAAAAABR+2Hc3f9hMpHuZrhTrWQAAAAAAAAAAAAAAAAAAAJN2Lqm3gcJ+taokzvOoGxNbAAAAAAAAAAAAAAAAAAAAAAAZEi/m03gADXgjLXdtnP8AAAAAAAAAAAAAAAAAAACsJaf1eXEHx9j+XYlHSftBuQAAAAAAAAAAAAAAAAAAAAAAJspH7t9CVaPhcYgDaE4WAAAAAAAAAAAAAAAAAAAA34RD4CY/7x6vQarrV/2yyVwAAAAAAAAAAAAAAAAAAAAAAAot+yK0pCzlx7efA+XTYQAAAAAAAAAAAAAAAAAAADKV5Skq5e58zJPucpMJ/0oEAAAAAAAAAAAAAAAAAAAAAAAlPhj9v98Uc9CgAq5ucpwAAAAAAAAAAAAAAAAAAABx5zYhN1wv1vbfLyCbbVTaYQAAAAAAAAAAAAAAAAAAAAAAFirzOUFp4ss0XzWfetIXAAAAAAAAAAAAAAAAAAAA2nMNAzJArrrdtiFD8Mw3d3YAAAAAAAAAAAAAAAAAAAAAABKRZzcRcvTTCBmsCocv4wAAAAAAAAAAAAAAAAAAAHLRPgpZVV/2wZOvfdijtknAAAAAAAAAAAAAAAAAAAAAAAABNko/0bih4tEcxq0HnHYAAAAAAAAAAAAAAAAAAADIiMXN9uXKT7t+0WfLV1lvIgAAAAAAAAAAAAAAAAAAAAAABzy/tbhOa4MG03JiTmpMAAAAAAAAAAAAAAAAAAAAurUHVkcwwI5xeVKjVnFG3LcAAAAAAAAAAAAAAAAAAAAAAC7dOa5FCWQtS5yhLtfNyQAAAAAAAAAAAAAAAAAAAGOxZdR+59e1LmYS4K8NMhJOAAAAAAAAAAAAAAAAAAAAAAAJN4RFxl/ckosFtqquzRkAAAAAAAAAAAAAAAAAAADBjcpCh41pzTfJH8mNptodwwAAAAAAAAAAAAAAAAAAAAAAEqjOzqj0FMJLXx0XwpYrAAAAAAAAAAAAAAAAAAAAHztmXySEZ6/JcTbVfYeHjVQAAAAAAAAAAAAAAAAAAAAAAAQ9NBe0ViWFZw2wMJv9QQAAAAAAAAAAAAAAAAAAAIAH47mpYjq+OKI3HK4dD7YOAAAAAAAAAAAAAAAAAAAAAAAc9enWNHQZkucZSUkbctoAAAAAAAAAAAAAAAAAAAChatiKilyTMQM8O7rn+vdvaAAAAAAAAAAAAAAAAAAAAAAAHIOT/PlJ/xdSUkPiwcgwAAAAAAAAAAAAAAAAAAAAfxcax2czFAHbxhSLkCdURCUAAAAAAAAAAAAAAAAAAAAAAA/6K5WoS8/RRbUGc4xB2QAAAAAAAAAAAAAAAAAAAGSuYhgkPo6/gxxdjofAdy8ZAAAAAAAAAAAAAAAAAAAAAAAD9QTZrJaPALMx4TVd/ZUAAAAAAAAAAAAAAAAAAADL4qqNiqkd8KSyDeRPnC1UUQAAAAAAAAAAAAAAAAAAAAAADwgcGJhsPhjk11RhROaYAAAAAAAAAAAAAAAAAAAAbbH8xFwIHHtfZxnGeQEaOf8AAAAAAAAAAAAAAAAAAAAAACU+zxoGi9V2esMRU3VZGgAAAAAAAAAAAAAAAAAAAMD8GwYgTI2vyyeqPqokUqzrAAAAAAAAAAAAAAAAAAAAAAAn/fWRdip9BG2g8xu5iqoAAAAAAAAAAAAAAAAAAAC52slqMk4qHOGTfZMJZ1v0vgAAAAAAAAAAAAAAAAAAAAAAD8sg5P2hSceWjbnKzPvnAAAAAAAAAAAAAAAAAAAAJTD+Z3Ermjc3I3eI6+wocqAAAAAAAAAAAAAAAAAAAAAAABtgAbLJyhDSC8LY67E9nAAAAAAAAAAAAAAAAAAAABL8mB6nn75OMxXvBwDRYbdVAAAAAAAAAAAAAAAAAAAAAAAJS84GHN1RTjgVRjTRKqUAAAAAAAAAAAAAAAAAAABscttk2KoHnVuvHaFuU3ge7gAAAAAAAAAAAAAAAAAAAAAAK2GXDECfD5u9mYhXSdUnAAAAAAAAAAAAAAAAAAAAI9itKkDTysXo3X5iHtsYTyYAAAAAAAAAAAAAAAAAAAAAAB2+5WDEa30P1CDO4yl9mAAAAAAAAAAAAAAAAAAAAE6DlITQxAbL08XYko0sM905AAAAAAAAAAAAAAAAAAAAAAAj7ypt2v4b8qZoaihR3K8AAAAAAAAAAAAAAAAAAACzMBw82COCU8Y+EZFSkhNBwQAAAAAAAAAAAAAAAAAAAAAAKMOyrmWuMNTh6v2J2VcBAAAAAAAAAAAAAAAAAAAA+PqtHOPocUNSeSH96+awbhsAAAAAAAAAAAAAAAAAAAAAAAd82S2jxl//x/6umJEouwAAAAAAAAAAAAAAAAAAABuiR3KJazrCEmoLoGiJjO7qAAAAAAAAAAAAAAAAAAAAAAAN1xScRgEa5cXCCRiN3qIAAAAAAAAAAAAAAAAAAABXRnU6mKEoeXAa2yyjesPmOgAAAAAAAAAAAAAAAAAAAAAADBDlP/Og0TeE2qKzjM7mAAAAAAAAAAAAAAAAAAAAp0ACk5law4O4jN0+o9kco/0AAAAAAAAAAAAAAAAAAAAAACZHNQwjHzXeS1y0jABlmwAAAAAAAAAAAAAAAAAAAFqn3Apxy458Y759KQSafct5AAAAAAAAAAAAAAAAAAAAAAAhKhJqERZXq++dpKWHJCUAAAAAAAAAAAAAAAAAAAAvzJlglgIxWsgtEzrMDg0JrwAAAAAAAAAAAAAAAAAAAAAACJ/wGCVPp8v9IHjOaUZjAAAAAAAAAAAAAAAAAAAAP8iVGGFPcPEQkCSZNwiUU+0AAAAAAAAAAAAAAAAAAAAAABGUA3yGt9ZLpC4bYvc9EwAAAAAAAAAAAAAAAAAAAHDOtHoNZ0Enw6Da+4s+PwVJAAAAAAAAAAAAAAAAAAAAAAALJf+hm0NtjXOZuRlMrF8AAAAAAAAAAAAAAAAAAABxMCnCK+Y5scivETthuvr9gQAAAAAAAAAAAAAAAAAAAAAACQx6aubBQZPajGtDpzkfAAAAAAAAAAAAAAAAAAAA0RYqkJPYIoeWO4ncv0Fh3cAAAAAAAAAAAAAAAAAAAAAAAAvOUfYGPNAh9nmd/RFU4AAAAAAAAAAAAAAAAAAAAJW12Le0pjsF32UrDRDvFG0mAAAAAAAAAAAAAAAAAAAAAAAJnjvVoKAKt/4YBAEFubMAAAAAAAAAAAAAAAAAAAAhKa86Y39aYioyRA+GDR4qfwAAAAAAAAAAAAAAAAAAAAAAABW40lFdduLM7Jnc0ZRZAAAAAAAAAAAAAAAAAAAAIiuIgQjcJdGqRQ4LS8ISw34AAAAAAAAAAAAAAAAAAAAAABuRdReSC609i8AclZUJKgAAAAAAAAAAAAAAAAAAAEghQcfr5CAAodWMy3Q4H20ZAAAAAAAAAAAAAAAAAAAAAAAwXomSsUju2yLm6ZIHeoQAAAAAAAAAAAAAAAAAAAB8hoR2GGgdwp2Kk2OrfEDhwwAAAAAAAAAAAAAAAAAAAAAAFkZaXMu1UM0sY71YEW/kAAAAAAAAAAAAAAAAAAAAQ5lzrBLXynltb+mMpA5sprcAAAAAAAAAAAAAAAAAAAAAAC4k1CD7+VCO0x3mkttHewAAAAAAAAAAAAAAAAAAACjt0afkbIQNnJQ/30VSHGTOAAAAAAAAAAAAAAAAAAAAAAAEPQY7Ewrfs3NCr0XQFVoAAAAAAAAAAAAAAAAAAACTMJUq50xXPRaG2ctKAHM4VAAAAAAAAAAAAAAAAAAAAAAAJhUixAiTMGRq/5ZzYZSUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwm9TRQKSfpGMaKYn3d1gnFQAAAAAAAAAAAAAAAAAAAAAAKs5YEwPqnOh7ki8feQr6AAAAAAAAAAAAAAAAAAAA9KxX8h88TOH4OoZkyuisAz0AAAAAAAAAAAAAAAAAAAAAABWopi6FPbEZmM9/Kv94JAAAAAAAAAAAAAAAAAAAAGvMegX/lalrKJQkxfczZw2WAAAAAAAAAAAAAAAAAAAAAAAAxDcm91tv2g3iLODg36sAAAAAAAAAAAAAAAAAAAAdCgnXF47JO614WPluZPC0jQAAAAAAAAAAAAAAAAAAAAAAL5tuC04sAZaN5cMkgqp9AAAAAAAAAAAAAAAAAAAAF6UyFPM7GtAJ5GGyaZJyGb4AAAAAAAAAAAAAAAAAAAAAABQQfUvkU8gEqOKRhpGbPgAAAAAAAAAAAAAAAAAAAJKHn2GoKCaTAlYbtX87FVfPAAAAAAAAAAAAAAAAAAAAAAAoRQUJTjXTtVikNALK2uI="
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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eXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TWlMrAyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N311TKwMrk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dc7sMrEzeXSOTd9fI5N01Mnl3jUzeXSOTd9fI5N01Mnl3jUzeXSOTd9fI5N01Mnl3jUzeXSOTd9fI5N01Mnl3jUzeXSOTd9fI5N01Mnl3jUzeXSOTd9fI5N01Mnl3jUzeXSP08rxM3l0jk3fXyOTdNTJ5d41M3l3zkgysTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXeNTN5dI5N318jk3TUyeXfNVzKwMnl3jUzeXSOTd9fI5N01Mnl3jUzeXfODDKxM3l0jk3fXyOTdNTJ5d41M3l0jk3fXyOTdNTJ5d41M3l0jk3fXyOTdNTJ5d41M3l1bJu+uLZN315bJu2vL5N21ZfLu2jJ5d22ZvLu2TN5dWybvri2Td9eWybtry+TdtWXy7toyeXdtmby7tkzeXbu5DKxMOl27pQysTJZcWyZLri2TJdeWyZJry2TJtWWy5NoyWXJtmSy5tkyWXFsmS64tkyXXlsmSa8tkybVlsuTaMllybZksubZMllxbJkuuLZMl15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdeWyZJry2TJtWWy5NoyWXLtPjKwMllybZksubZMllxbJkuuLZMl15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdfeXQZ2gAysTP5bWyb/rS2T/9aWyX9ry+S/tWXy39oy+W9tmfy3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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "redeem_public_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "26387131971136782": {
            "error_kind": "string",
            "string": "Invalid response from registry"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "tZ3djty2DoDfZa9zIVEUJeVViqJI0+1BgCAJtskBDoq8+xFpifROYI527b1JvnBmaOqPEknb+ffhr8c/f/znj09f/v76z8P73/59+PPp0+fPn/7zx+evHz98//T1S5f++xD4j0jp4X161/+uD+9L/7v0f8fI0AWRJbUMaLABxDRhfAQwP4IpSVOSpgTjhDwghwk4oQ2geQkaZkBhhZWBBtQ4oSuEwNAGNJwwJCnghCmJUwLdDIgMeUCaksTfQYb+q8QSrANoSrjHNpgf1SmpU9KmpJUNMMQJNCCGCXnCuAQCThgKkbt3g6mQuzclhjyAu3eDKaEpoSkpU8K9mnpLkXt1A/4OdWgsKQxtg8ydicDQJdg6IA3gi26QB9CU0JSUKSk4oQ7grtugDOBZt8G4BHHXbZAnDDMo4oSuMPduIZ6ZG5QBaUrSlOCU4JTkbkYGhjqA+DvIwJLcgXtMgHuM+Fe1S6h3JnGPbdANoz5FC/dY6V8uPEwb5AHcYxtMCU0JqaQN4Mm2QR1QYUIZ0OYluMcYaggTcMJQWHktl8JQBnCPbTAlaUrSlOCU8HIovYGVe2yD/p3al1XlJVx7t9QSJ3R7Kv+Ke6w2BhrAC7YhQzesdT2NTY0BmNgphP5hi6hU56eQlETWZ2xLaZI4nY1okridwNeo4uz4t7xSY2TNLSmV8WkMAQxFSowRFNmHTMyGbHlsjGLSwKqIJkWTZpMS289eqiMp8gKKIOaUrFhFKheuaNgUm0mbSmNQaZQGpSBYFCEakiL7yInZsCkiGnLb2KnEmItiMWkFQ/tCM2lTKQQwJMUYDLNhUwQ01AuDDMtAu4TMmoF2CZk37BHjtmENbIpkUjJpMWkxaRUjeVuFFgzlu1WwTWkKybAqRpNugyUoO/FAMZ2nUUrRkC+MPCwJg0q3wdqwKWaT5qooe/NAvjDycSHxKp9IijInMQmiYVNsJm0qxYCGJpWBRR4LlPU2kL+buUEoo7lhNqmYviHZF8ikxaTFpDInB5IiO9eJeWJmBzsRDZtiTIZFEcBQLsHrOMvKGpgV0aRo0mzSbFLxGjkJkqJ4Dd7DOmaTNkUZoYEmFYc4sE4kWYW8/XUkxRgN5RJFsClug7WhSZNJk0nRpFszq2A25O8St1h25YFyUBxYFKtJq0mbSXmz3LDIaA7Mhnq1IvvQQLkwd2qRnWjDJMp4oRcZNz4DdJRjbhCsiuLtBxZFGcKBpFhMWu1n1ZQ1kzZVVmWwBqqyGqOhScGkspNtKBsVNcGimMFQNHCX1M30DbNhUxSPONCkWyt4ctWtFYwtREO5BPdv20zfUC7BU66JUxhYFWW75RNJbNKKKj+TAeCjR2wyAI0EiyIf+CaatJi0mFQikYFZUfz6QDRsAyGEZFgVIxiSIkRDuUQVbIqyhgaaFE2KJs0mJTGyCWZDCZIiY5HgChh5yk2sjKKBB6tvvxwO8mD17ZcxBkM0bIpgUjBpMimP20A+bk4silmuJnEoz76BYjofnkBiWeA4riP/DBIjD9ZEUuTBmoiGbSIElULUnwFEQ5OmYJgNTRmaMjRpNinvWQOL6OVehxoMs6Fo4C7Z4t6BdWLi5T+xKEaTbq3YwnZSlLEY2BRROrUKVkX2BMBxaMeiSCYlkZIkBFjKJ5COLEWxgR008PbVkRR5u52oUgmeJ5pUptxANGyK7KAnVsUEhkUR7RK83Q7MdgkZLN5NQQ4YAykZmrSYtJi0mlSGkPfNPh3QUL67ZUpEyl2dZdwGsr2844AcJYB3HJDzA5Qo2BRl3AZWxWzSbFIyqYzbhrz5ALvijqQoprOnBTkpQNnyOPIzXoUSrk8kRRmsgWjYFMGkyX6GpgxNmk0ZHw8mmjIyZWTSYlIZlg1lnhXJNIVgmA1ZAwe0IAeBiVVRxmJgUUwmlVbUJEiKMqMGNkUZC96zOlZFWUNV8mKyhjasJuVDDjSeqYUPOSB+vYqn3ZDPyhOrIpoUTZpNKqt7Q97nJ5IinzInZkO7MJ8yJ9oldkY2vYTs/kn2ocYDMFAyZQNNCiYFkyaT8jRKsn1JWmCifJc7tWWRZsGmSJJ8Ew1bzo+HpRVUrJKLk+/WothMuiX9CicfAxiaNJpUWjFQ8oCVUVox0KRo0i0tKZiToUmJFIukHpsgKVaT1qbI3iiNvClLJSsqKYOJJo0izYIsTZJllZTlhpK0HFgU0aRo0mxS3twHbgnMDbOhXU2GZaBdWBKyA+USwCgjJAgyuTjK7yjKiDHKz6pgUQQwJEUZoYFZEU2a7WfZlJFJyZTJCA00ZdWUVZM2k8pgCcrmnjgN0JEUIRqyBt6Ek2S7J6JhVWSnMNGk0grOAifZ5wdKQnlgNuRORe5USQOkLMl1yYoPLBNRlshAk0aTRpNKgwZmRWnQQDRsipgMq2K2S2S7BMklkiApFpNuDcqCooz7F2Vy5SZIE7P4s4HZsCnKGhpo0mQ/S6YMTYqmTLL+A01ZNmVkUjKpVDE2lHw/HzA65okUgiFrICmCiOkbymoZWBRltQw0qbSCM+RJdvSJTVFMp/Tz57uHWbT64/vT4yPXrHZVrF7b+vbh6fHL94f3X358/vzu4b8fPv+QL/3z7cMX+fv7h6f+aZ+xj1/+6n93hX9/+vzI9POd/Toc/xRkH5Bf9+NxVgU9lfZMRXRUdFddpo7QZ60qqfRMBzg6+PCxaWhoRrT1dvT6xNTQUwaH7cBjFX25zK7oq8G64saIfEFP0Bv2RM8pzvmAPTNw2BP1WEU/kMehIvckvamA581oF3RFDGf7wm1I2DUEDxsSnalZEKYV/RDr6EjHOpqtstadueroeeXnOpzp2WtGaeroQ3ysw5mgiaO7bYa3ohr6yfm5Bm96Ek4VHJm8SkeqxcwI9XU6Woqqg9qxDmeOYmlzVHq4CrsJ9gIzdLF1PG6KN0dRe7QXmuFwfgFc4YLTW662xEXO0ZL9XnLbEmeG9hKkdkfPuAU8bIkzKrnpcuupfDpcKpzzObtkoZ5fstDOLtnkedGefZ4D25Osr9MBujf2nFg61gGnl5tnxupy82eY9UcvYkM5mmHJU4JxTvVegsunVwsdrxavO3rmdzalB3/Blj1ied4Wx5CS6uzU0nvVOjU9b0tyZmkr/Ok208tuo73VgeECJ4bxrBNzm0ItalN2s+OXpqQLvBjieS+G+bwXQzrvxbCc9WJYz3sxV8eiF8vhtBfzzFj1Yv4MW/RiOZ33YqveA3ce6Bfv4eno/k+P2M6Sy84s7bXpOUt7bXo3tgWf6/Bmac/R6zztmfl02Kne6PaiLKpT7mnXQyVXhE90Onzy21Jrs7bsdqlbM8Bb+zoyPefyqpiWk5xgG12mw42O8PxGR/n8Rkd0xeCWs4PrNmVxo6N2wUZXwvmNrsTzG12B8xtdSWc3uoLnNzpXx+JGV+j0RueZsbrR+TNscaMr7fxGt+o9vI3O1bG40VU4v9HVdMFGV/GCja5ekTKtp3OmflsWN7pa33qjI4voWkiHG11ztPRCofXpbnAjPDekRW/t5mKerOzSyDc54CvSUu10WsprCqY852lP8dNxU/Lp4kC7Yttv5S17g/pM1+22thiOp5iXO5Wb6keVIR/2Rz8feDtdjkm3urzb+X+pEXgTFXXh0nGP3DNECx7A9wQfG+I5VZ0hvUesV/Pr+nTXll+a4szTQrNHS9mdkuEl06MWnR51N8lup0cM5WxnuHY0aDZNa3Ps8HZ+/uncLluINrRUn2uJl8zUeH6mxktmajw7U1/SrQDH3Xp2svp29DN7Njt2tcpf7CjucTmgnpd7ve+4V73sElZVkiE7A+ybQs1MqXhsiq8Fw07L4XEmgjdfs87XYh2bwsvGRzsl9r0mH46PW5lKIWhzUnCWH7iBFWhQFMvxLQLRqx4sD7JvSdMiKqToWOKNcdSTIuzDonbbsV6BCmga0r1tPK4pexUqCurXKGTr1/QCO1br4yleUCBPcLpCntL5AN5XshjBR69KtVrgdg3JaBM+wytbs1dS6iuVrN56sKykvlLJ8g0MrpLVOxgQ3naEV7M09w4EunL4CaZjR++VqwBCtd0vYj3WQhd4E69itexN3ErPmjfBdoE3cZWsepMcz88115BVb7KsxPMmnpLlNewqWV3Dmd62X69Zw02Og3MN70K/29WXXS3NjkghxOPQwKtd9WWl1YnecudITl4QGVLSownS0dHEN6RZhJEjHB+lydt2guVtugc8Pja6pmR5CnCYAun4GOyVfYCo2A5YX22KxX85xePbO/0ali3kQq83hfLOFDg2xfMpVdOd0EJ4rSnJahU9UD82pbhpgqhxF6KTKPALyKDpk85YXrWW+RncbJlkJ3x7gZZd+HajxU2Mt6L56O5WnLSUV9RazYzHUs6nxmOpF2SDo1fYWksHu61ZzY7HGk+nx2O9oloQa3rTHqFMest353x8W130SlurtxtEr7S1er9BrOWSnq2ne9ZtzeItB9Gtbq3ecxC9/PLqTQfRK3AtRxpegWs50mh4OtLwSlzLkYarZDXS8Ipcqydit2C3eiL2p9rizQcQwvm7D5a9iXf7ga9k8f4D8OpcqzcgQMAL7kAAr9q1fAsChCsKsxBOV2bvNGfxLgQI7fxtCPf2QC3OdC5wuAeCV/IiLLOkSfsyxG2veA9gVUpTR6VdIaLc9El052wGm7SZwmHPeo9grYWT9wzRc2yPjej4+Rb3KawUdLKlCsezzTelZlJTajmebW7VazGcvGNK0xNX53w8PBDOh5P3TNFaIJty7AzcB7IWw0nflBJA50oJnil4Ppz012DRqmQtu3V8uwbBjb2sFFh252FsL9DRgmWodlm7Wx1+W3Sa1P2jwr+0xfGxuep5K9f9vQnwPKIF72mm7k6scLZzSbdKvLC479TZwmLPTXtVr9WwGPw6wlpYDAmv2Iu9wtfiXuy1ZjUshlROh8WQ6iU90t60Ryg3vT+pcz6+cQy8J7RWw2Lw6l6rYTFguqJnvce0FnvWbc1iWAxe1Wv9yVmv7LX86CxeUM4Hr6Sx/PCs97TWWlgMXtlrNSz2lSyGxeA9rrUYFruGLD9B60+11bDYfWJrMSxe9iZeWOwrWQ2L3brXalhM4Yqw2Ct7rYfFdMlLBeh0PvZOc1bDYsrnw+J7e6DeMdW5HKeGwSt8rYbFVM+Hxe7DNcthsf/8Fk1Lepfko7D4jiGLYbH3ANdyWOybshoWu09grYbFvimrYXGhC8LiO6YshsVu0Ws1LHZNWQ6La7ggLHbX4GJY7D7PtRgWuzoWw2K/LWthsZdfXg6LvSLRJWGxPKkxttGYjh+jgnrBmzHkXojToUq74t0Y0E6/HMNvzWqo0q54PQa0C96PAe2CF2RAu+ANGdBOvyID2gXvyPCVrL7qJ5x/S4ZryHKo0q54T0YKF7woY9mbuKFKveBVGSlc8K6MFK54WYYcyk6HKilc8bqMdP51g3easxiqpHjBGzPujU/YjQ/WY1McJxtr08Nw2z09xze3rW/GRRcygJM3TF7Ni0rVm2077+5oe6ka2Kupr1ZjIVzxHtS+o6alYGoyvFqNbstU90853qpxxwl3Cxq9DnZLX2CPSrJD0c3wdvJ6T3xlJH1xJ+4iudszYPIqX5nSXNDP7+J6yUESd4sIo/OGNfeFhJSzWnL8ZG/ynvdC0lgDaXdCuDmfJ+85q+W7qpP/wNdKGfyOIYt3Vafkvnl47a5q35TVu6qT/1zRWrx/z5S1u6qTX/xai/fvmbJ2V3Xy6l+r8f4dUxbvqk5eAWw13vfXYKu6jkM4zLklL9m8GO+7TimrY+tcj9+Gldzy16qjdl9SuOqovce+LnHUGXZ9kpzNyy1/LTpqr/q16qixXeGoczjtqH1DVh11hgsctWvKsqPOFyRm75my6KjzBYnZe6YsOup8QWL2jimrjpouSMz6a3DRUdMrE7O/9399+Pjp6dl/Ov6TdT19+vDn58fxz79/fPm4+/T7/77NT+Z/Wv7t6evHx79+PD2yJvufy/sfv5WecC+Qfn/3wP8l0G+9FvCuuxP+Z+RP+9IuKf/+k435Pw==",
      "is_unconstrained": true,
      "name": "redeem_public_to_public"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "7504532782847838406": {
            "error_kind": "string",
            "string": "caller is not admin"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "shares",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAgQBJwIDBAAfCgACAAMARC0IRAElAAAAZycCAQRFJwICBAA7DgACAAEsAABDADBkTnLhMaApuFBFtoGBWF0oM+hIeblwkUPh9ZPwAAAAJiUAAAOXHgIAAgAeAgADAB4CAAQAKQIABQDHMvl3JwIGAAArAgAHAAAAAAAAAAACAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4FCgAiCgIKLQ4ECgAiCgIKLQ4GCgAiCgIKLQ4HCi0LCAQAIgQCBC0OBAgtCAEEJwIFBAUACAEFAScDBAQBACIIAgUAIgQCBz8PAAUABycCBQQBACoEBQgtCwgHHgIABAApAgAIAANtUn8rAgAJAAAAAAAAAAADAAAAAAAAAAAtCAEKJwILBAUACAELAScDCgQBACIKAgstCgsMLQ4IDAAiDAIMLQ4EDAAiDAIMLQ4HDAAiDAIMLQ4JDC0LCgQAIgQCBC0OBAotCAEEJwIHBAUACAEHAScDBAQBACIKAgcAIgQCCz8PAAcACwAqBAUKLQsKBzMKAAcABCcCBwEBJAIABAAAAcYlAAADvR4CAAQALAIACgAaXEKx+YxD2a18BdhFLUZQFf5UEmwRTU2eozASmdZ5ay0IAQsnAgwEBQAIAQwBJwMLBAEAIgsCDC0KDA0tDggNACINAg0tDgQNACINAg0tDgoNACINAg0tDgkNLQsLBAAiBAIELQ4ECy0IAQQnAggEBQAIAQgBJwMEBAEAIgsCCAAiBAIJPw8ACAAJACoEBQktCwkIMwoACAAEJAIABAAAAnclAAADzx4CAAQAJwIHAAEvKgAHAAQACB4CAAQBCiIEQwcWCgcJHAoJCgAEKgoECScCBAEACioHBAokAgAKAAACvCcCCwQAPAYLAQoqCQgEJAIABAAAAs4lAAAD4SwCAAQAIugKqxFf9/kzrHLsLdXpUqgiaR8P2eHzMG36U3rr82I0AgAEKwIABAAAAAAAAAAAAQAAAAAAAAAALQgBBycCCAQFAAgBCAEnAwcEAQAiBwIILQoICS0OAQkAIgkCCS0OBgkAIgkCCS0OBgkAIgkCCS0OBAktCwcEACIEAgQtDgQHLQgBBCcCBgQFAAgBBgEnAwQEAQAiBwIGACIEAgg/DwAGAAgAKgQFBy0LBwYnAgQABTAKAAEABCcCAQAGMAoABgABJigAAAQEeEUMAAAEAyQAAAMAAAO8KgEAAQXaxfXWtEoybTwEAgEmKgEAAQUGYTs9C529MzwEAgEmKgEAAQVyMQyWM6ynPzwEAgEmKgEAAQVoJXTOJutIxjwEAgEm",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "tZnRjuM2DEX/Jc/zIIoUKc2vFItFdjZbBAgyg+xMgWIx/14yFmUnhdQ0zr4kJ3R8LV1RlGX/2nzfffv48+v++OP15+b5j1+bb6f94bD/8+vh9WX7vn89avTXJtgHhLx5xqcNAG6exb71N4BC1ABYBKODVEi5Avsh9kPiEfFI9kjmCiU4JIcyQQzkUC8RAR1MMCtEcOAKqIIxGJBDqUAeIY8kjySPsDYjapejBIcWsf+QQtaz0CIFJ0Agh1wh+qHoEfQIeoSiA1dI4JAqcHDwS3CpIC5o9p4hu6DZizqSaPZOkCagEBw8Ah4Bj5irSAZcwVxFNrCIDgEROJQKZiZFA41QUSg8QbKLTpAqgEfAI9EjkRxyBbNuAqlg1k3glzDrJnBBb0ZiF2QVTOpPssycQCpkj2SPFI+UGuGgzUjRIFcA+w8ZWCQpmGNnQG0P21nmGKurbI5NoA1jdYzNMS4GpQJjPWRNPYONspiO5ArZIwUceAIxnyUapArnqXwGO11HUMyfCfSi2c7KwYEc/FDxSKmRHMghVzATJpAKlj8TcAUMDsnBBLVhmdAhV0gmSAZcgcHBI+IR8Uj2iI1g1iHINoIT2H/U3hLAQSqcG18+P582Xg+/vp92OyuHiwKpZfNte9od3zfPx4/D4Wnz1/bwcf7Tz7ft8fz9vj3pUS0hu+N3/VbBH/vDzujzaT479E/VypXq2RFjagKAeCEBA4lAQVwj6DRuIpkvNOJAQ7IrFJobUW7vB2d2Bcm52w/qSyCRW6G1cbbiqhHpAU7wb3SCQvF8IMih60TuS6RAUCVS4LkXEC+7UR5gBYS1Xgw7EhYdoW5HYJCaQtFbIYkGGtjXKPMsK7oANw0UuNQYpGcJhK6hQ9zXGCQo2voxZXiRphBzvFQYpSeTS+hdS7hLA7PMzQj5Po2C0DS49DUGOUpSfFQoY1wk2P9oRptsiv2ujHKUmqN6XxG7+RXjI0ow/s7ZhoVaT5ZryXVPBhkKITQ7IECgbk8Go5JKm24c9OK9qRJl/ZSNef2UjWXtlMVRFYXcBhYK36cR29oYY8a+Rlw93UbNuHW6jTNs9gNCjNLLMByJEHiqA6W0erZwf7aM7IgtR1GHpUkQyWVPBs0QzG6pqKezpXjZExzkaBE7OuW5LJbZaw0KDyhhBGtL2LArur9pXVnkxr+6gg+oYUTraxil9TWMeH0NI1lbwyivr2FDjRtrWAqra9ioGbfWsHGG3VjDEq6vYbdWDwrQrx4jDa1+7QZ7MOXSIEuBW5aCPs6YNYQuNUZZGhlankZG7Jo6Gl0o6K4qp24ZS4/YPPHqzdO4LzmXuS+LNeq6GXE099vIYLpvR4uRZB6X2F3meFBOCSK3XXHqbu55tLuHBNiKUFrU5Gs7RhsGao5y34z/aEbbnSuXbpryaGhbKVQ35qKe7vNz0ZOrjshgWIXdTZHZS4p3pYVQNy1GEhh8kuiT8v4NlAzKKDO4E6xVqFu+ZOAmlNxWamXszjQZ3ZMmaGtCWgzqdXINOyPguaXPgPv1XGS4OIW2Ni3WyOtaLA/YOcnqnVMeldBEXstjSvEujVsfdgw1bnzYkXH1nUt+wO5rPFvaYs96q91NsDysoXqD3Z7Uhn4hzqPVHlG4zX1aOHItMiqjLK0hAle3UF/05/Zlf7p45/lpYqf99tthV3/++Di+LI6+//3mR/yd6dvp9WX3/eO0M6Xli1N9RaBvQp+A8Yu9N7WfWnD1DeiXT7v8Pw==",
      "is_unconstrained": true,
      "name": "set_shares_token"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "7504532782847838406": {
            "error_kind": "string",
            "string": "caller is not admin"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "shares",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "initial_deposit",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "depositor",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "set_shares_token_with_initial_deposit"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "8240001999008529939": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_private_exact_internal can only be called by the same contract"
          }
        },
        "parameters": [
          {
            "name": "commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_deposit_private_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15003037494331704051": {
            "error_kind": "string",
            "string": "Too many shares requested"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "2713641840009731152": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_private_internal can only be called by the same contract"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "JwACBAEoAAABBIBKJwAABEolAAAATycCAwQCJwIEBAAfCgADAAQASBwASEgGHABJSQYtCEgBLQhJAiUAAACNJwIBBEonAgIEADsOAAIAAScAQwEAJwBEAQEsAABFADBkTnLhMaApuFBFtoGBWF0oM+hIeblwkUPh9ZPwAAAAJwBGBAMpAABHBP////8mJQAABjseAgADAB4CAAQAHgIABQEKIgVFBhYKBgccCgcIAAQqCAUHCiIGQwUkAgAFAAAAyicCCAQAPAYIAQoqBwQFJAIABQAAANwlAAAGYR4CAAQAHgIABQAeAgAGACkCAAcAA21SfywCAAgAEiGCuTM7Td696PbEfBFNpczfbzgXIDlptgAbhFPiNScrAgAJAAAAAAAAAAADAAAAAAAAAAAtCAEKJwILBAUACAELAScDCgQBACIKAgstCgsMLQ4HDAAiDAIMLQ4GDAAiDAIMLQ4IDAAiDAIMLQ4JDC0LCgYAIgYCBi0OBgotCAEGJwIIBAUACAEIAScDBgQBACIKAggAIgYCCz8PAAgACycCCAQBACoGCAstCwsKMwoACgAGJAIABgAAAbolAAAGcx4CAAYAJwIKAAMvKgAKAAYACykCAAYA/3lJ8i0IAQonAgwEAwAIAQwBJwMKBAEAIgoCDC0KDA0tDgYNACINAg0tDgUNJwIFBAIAIgoCBjoDoABHAEcACwAFAAYgAgAFIQIABicCCgQALQgBDAAiDAIPLQsPDy0KDw4nAhAEAwAqDBANIjoABgAKAA0tCgYOJwMMBAEAIgwCDy0ODg8AIg8CDy0ODg8nAhAEAwAqDhAPAAgBDwEtCg4LBiILAgskAgAFAAACsiMAAAKFLQsMAwAiAwIDLQ4DDAAiDAIFLQsFBS0KBQQnAgYEAwAqDAYDPA4EAyMAAAKyCioLCAMkAgADAAACyCcCBAQAPAYEAQAiDEYELQsEAxwKAwUGHAoFBAAcCgQDBh4CAAQAHgIABQAeAgAGACwCAAsAIugKqxFf9/kzrHLsLdXpUqgiaR8P2eHzMG36U3rr82ItCAEMJwINBAUACAENAScDDAQBACIMAg0tCg0OLQ4HDgAiDgIOLQ4GDgAiDgIOLQ4LDgAiDgIOLQ4JDi0LDAYAIgYCBi0OBgwtCAEGJwILBAUACAELAScDBgQBACIMAgsAIgYCDT8PAAsADQAqBggMLQsMCzMKAAsABiQCAAYAAAObJQAABnMeAgAGACcCCwAFLyoACwAGAAwpAgAGAI3TguwtCAELJwINBAIACAENAScDCwQBACILAg0tCg0OLQ4GDgAiCwIGOgOgAEcARwAMAAgABiACAAYhAgALLQgBDQAiDQIQLQsQEC0KEA8nAhEEAwAqDREOIjoACwAKAA4tCgsPJwMNBAEAIg0CEC0ODxAAIhACEC0ODxAnAhEEAwAqDxEQAAgBEAEtCg8MBiIMAgwkAgAGAAAEgCMAAARTLQsNBAAiBAIELQ4EDQAiDQIGLQsGBi0KBgUnAgoEAwAqDQoEPA4FBCMAAASACioMCAQkAgAEAAAElicCBQQAPAYFAQAiDUYFLQsFBBwKBAYGHAoGBQAcCgUEBgIqAwEFDioBAwYkAgAGAAAExSUAAAaFAioEAgMOKgIEBiQCAAYAAATcJQAABoUeAgAEACwCAAYAEtOwTwWbYEGUVIoYHKND51EWE6RT+OzwgajfUGgC6Q8tCAEKJwILBAUACAELAScDCgQBACIKAgstCgsMLQ4HDAAiDAIMLQ4EDAAiDAIMLQ4GDAAiDAIMLQ4JDC0LCgQAIgQCBC0OBAotCAEEJwIGBAUACAEGAScDBAQBACIKAgYAIgQCBz8PAAYABwAqBAgHLQsHBjMKAAYABCQCAAQAAAWNJQAABnMeAgAEACcCBgAHLyoABgAEAAccCgcGBhwKBgQAHAoEBgYAKgMGBA4qAwQHJAIABwAABcUlAAAGlwQqAQQDJwIHBgAKKgcEBiQCAAYAAAXzBioDBAkKKgkBCCQCAAgAAAXzJQAABqknAgEGAQAqBQEEDioFBAYkAgAGAAAGDyUAAAaXBioDBAEGKgMEBgQqBgQHAioDBwUMKgECAwoiA0MBJAIAAQAABjolAAAGuyYoAAAEBHhKDAAABAMkAAADAAAGYCoBAAEF2sX11rRKMm08BAIBJioBAAEFJajK4EFq3FA8BAIBJioBAAEFcjEMljOspz88BAIBJioBAAEFG7xl0D/c6tw8BAIBJioBAAEF0Afr9MvGZ5A8BAIBJioBAAEFBQQbmSCvYEw8BAIBJioBAAEF0DV/HJGCAvM8BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_deposit_private_to_private_internal"
    },
    {
      "abi": {
        "error_types": {
          "11238433410490296974": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_public_internal can only be called by the same contract"
          },
          "13257043288428800530": {
            "error_kind": "string",
            "string": "Zero shares, insufficient assets"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_deposit_private_to_public_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9676179333820745919": {
            "error_kind": "string",
            "string": "Function settle_deposit_public_to_private_exact_internal can only be called by the same contract"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_deposit_public_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15003037494331704051": {
            "error_kind": "string",
            "string": "Too many shares requested"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "8680563134121479596": {
            "error_kind": "string",
            "string": "Function settle_deposit_public_to_private_internal can only be called by the same contract"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "JwACBAEoAAABBIBMJwAABEwlAAAAVycCBQQEJwIGBAAfCgAFAAYASBwASUkGHABKSgYtCEgBLQhJAi0ISgMtCEsEJQAAAJUnAgEETCcCAgQAOw4AAgABJwBDAQAnAEQBASwAAEUAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAApAABGBP////8nAEcEAyYlAAAHxR4CAAUAHgIABgAeAgAHAQoiB0UIFgoICRwKCQoABCoKBwkKIghDByQCAAcAAADSJwIKBAA8BgoBCioJBgckAgAHAAAA5CUAAAfrHgIABwApAgAIAANtUn8sAgAJABIhgrkzO03evej2xHwRTaXM3284FyA5abYAG4RT4jUnKwIACgAAAAAAAAAAAwAAAAAAAAAALQgBCycCDAQFAAgBDAEnAwsEAQAiCwIMLQoMDS0OCA0AIg0CDS0OBw0AIg0CDS0OCQ0AIg0CDS0OCg0tCwsHACIHAgctDgcLLQgBBycCDAQFAAgBDAEnAwcEAQAiCwIMACIHAg0/DwAMAA0nAgsEAQAqBwsNLQsNDDMKAAwAByQCAAcAAAG4JQAAB/0eAgAHACcCDAADLyoADAAHAA0eAgAHAB4CAA4AHgIADwAsAgAQACLoCqsRX/f5M6xy7C3V6VKoImkfD9nh8zBt+lN66/NiLQgBEScCEgQFAAgBEgEnAxEEAQAiEQISLQoSEy0OCBMAIhMCEy0ODxMAIhMCEy0OEBMAIhMCEy0OChMtCxEPACIPAg8tDg8RLQgBDycCEAQFAAgBEAEnAw8EAQAiEQIQACIPAhI/DwAQABIAKg8LES0LERAzCgAQAA8kAgAPAAAChSUAAAf9HgIADwAnAhAABS8qABAADwARKQIADwCN04LsLQgBECcCEgQCAAgBEgEnAxAEAQAiEAISLQoSEy0ODxMAIhACDzoDoABGAEYAEQALAA8gAgAPIQIAECcCEQQALQgBEwAiEwIWLQsWFi0KFhUnAhcEAwAqExcUIjoAEAARABQtChAVJwMTBAEAIhMCFi0OFRYAIhYCFi0OFRYnAhcEAwAqFRcWAAgBFgEtChUSBiISAhIkAgAPAAADbyMAAANCLQsTBQAiBQIFLQ4FEwAiEwIOLQsODi0KDgcnAg8EAwAqEw8FPA4HBSMAAANvCioSCwUkAgAFAAADhScCBwQAPAYHAQAiE0cHLQsHBRwKBQ4GHAoOBwAcCgcFBh4CAAcAHgIADgAeAgAPAC0IARAnAhIEBQAIARIBJwMQBAEAIhACEi0KEhMtDggTACITAhMtDg8TACITAhMtDgkTACITAhMtDgoTLQsQCQAiCQIJLQ4JEC0IAQknAg8EBQAIAQ8BJwMJBAEAIhACDwAiCQISPw8ADwASACoJCxAtCxAPMwoADwAJJAIACQAABDMlAAAH/R4CAAkALyoADAAJAA8pAgAJAP95SfItCAEMJwIQBAMACAEQAScDDAQBACIMAhAtChASLQ4JEgAiEgISLQ4OEicCCQQCACIMAg46A6AARgBGAA8ACQAOIAIACSECAAwtCAEPACIPAhMtCxMTLQoTEicCFAQDACoPFBAiOgAMABEAEC0KDBInAw8EAQAiDwITLQ4SEwAiEwITLQ4SEycCFAQDACoSFBMACAETAS0KEg4GIg4CDiQCAAkAAAUhIwAABPQtCw8HACIHAgctDgcPACIPAgwtCwwMLQoMCScCEAQDACoPEAc8DgkHIwAABSEKKg4LByQCAAcAAAU3JwIJBAA8BgkBACIPRwktCwkHHAoHDAYcCgwJABwKCQcGHgIACQAsAgAMABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBDicCDwQFAAgBDwEnAw4EAQAiDgIPLQoPEC0OCBAAIhACEC0OCRAAIhACEC0ODBAAIhACEC0OChAtCw4IACIIAggtDggOLQgBCCcCCQQFAAgBCQEnAwgEAQAiDgIJACIIAgo/DwAJAAoAKggLCi0LCgkzCgAJAAgkAgAIAAAGACUAAAf9HgIACAAnAgkABy8qAAkACAAKHAoKCQYcCgkIABwKCAkGACoFCQgOKgUICiQCAAoAAAY4JQAACA8EKgIIBScCCgYACioKCAkkAgAJAAAGZgYqBQgMCioMAgskAgALAAAGZiUAAAghJwIIBgEAKgcICQ4qBwkKJAIACgAABoIlAAAIDwYqBQkHBioFCQoEKgoJCwIqBQsIDCoHAwUKIgVDAyQCAAMAAAatJQAACDMcCgIDACkCAAIAxHreoC0IAQUnAgcEBgAIAQcBJwMFBAEAIgUCBy0KBwktDgIJACIJAgktDgEJACIJAgktDgYJACIJAgktDgMJACIJAgktDgQJJwIBBAUAIgUCAjkDoABGAEYADQABAAIgAgABIQIAAi0IAQQAIgQCBy0LBwctCgcGJwIJBAMAKgQJBSI6AAIAEQAFLQoCBicDBAQBACIEAgctDgYHACIHAgctDgYHJwIJBAMAKgYJBwAIAQcBLQoGAwYiAwIDJAIAAQAAB64jAAAHgS0LBAEAIgECAS0OAQQAIgQCBS0LBQUtCgUCJwIGBAMAKgQGATwOAgEjAAAHrgoqAxEBJAIAAQAAB8QnAgIEADwGAgEmKAAABAR4TAwAAAQDJAAAAwAAB+oqAQABBdrF9da0SjJtPAQCASYqAQABBXh3ji3LqY2sPAQCASYqAQABBXIxDJYzrKc/PAQCASYqAQABBdAH6/TLxmeQPAQCASYqAQABBQUEG5kgr2BMPAQCASYqAQABBdA1fxyRggLzPAQCASY=",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_deposit_public_to_private_internal"
    },
    {
      "abi": {
        "error_types": {
          "11585274054527399039": {
            "error_kind": "string",
            "string": "Function settle_issue_private_to_private_exact_internal can only be called by the same contract"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "asset_commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_issue_private_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "6247811934934211614": {
            "error_kind": "string",
            "string": "Function settle_issue_private_to_public_exact_internal can only be called by the same contract"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "asset_commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_issue_private_to_public_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16839601838445455264": {
            "error_kind": "string",
            "string": "Function settle_issue_public_to_private_internal can only be called by the same contract"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "tZzfbhQ7D8DfpddcxPljJ7wKQqhAOapUFdQDn/QJ8e7HzsTxdNF4h53hpv3Vu+N1nMSxk2x/3n1++Pjjnw+Pz1++/nv39t3Pu48vj09Pj/98ePr66f7749dnlv68C/IDcrl7m97cQeE/SX7z3wAMyAKQV7AotPESZQWRFIaaFVTSaIEYogIyIAOAQhsQ+fEIAiyJlSHVAVQGNFwghaAwXkqgElBJVEnX3GEoTCkp0IAcFfQjCiiowjIMS6gKkRWmwEBRgQZUlVSVNJW0IcmBzUggUAeASkDeww7PUSSZIYECW5jl8cySHAVwQGHDMgmwqUX0iKkFBViCopCSQh1QVVJV0lQipgqUAAo4QBy+QFEYH1HE4QsMhSVFBVUoxmMRKANk9C2gElQJqoRUQmIGt6tUUJD3cKeUJpIm0BbAwPZQEWAJsX9Q3FvZYxhxQAoKZUBWSVZJUYn4eYE6AJOCaOZuQhkSC6ikyeMoII9XAX68cVeSjIQFaABEBRwg43mBMiCpJOubsz5eVFL0cQQFfZz0cVJJVYnMZYEqM7c2ARwgM3cBeYqbXLthHbJCHSATbQGVdAvZG7VbKCC9vEBR4G5q3F9VgswC8jh7rMpYXUAlMlYhJKEqxN3bxJ0AUUhkwOa2XCY1pZInTRlOGU4ZpUmkJBN8ECrJ0BuknwZBYpViNqwTIRmKeomCECIY4sRk0mTSbNJsUvEwxNiRJmJ/b+7YpRKpgwyBgbUH/a6h9rAvcT+0YCimJ/Y9gAzXgT2iD8SJ0aTRpMmkqRiKvyWyAeQ8sZsu0Y3VymM5d5THMnZsE/uiNLBO7D01kCa2KY0hG05lEUwKU1mUeKw4lcVkypJJs0l7tyzYB1guHevEPsQGdg3ikriYviBO7H0xsCj2NVGxr8DivtRbsWCMhjSx94WsFYw4UYIflNyxTCwm7TlCEXtTzxIGmrQ3aKA0U1Yh7uhkaNKGijn0xAA69mRBGpRzMqSJfYAPNCmaFE1KYFgm9rE+MBu2ic0+uA/7jiVEw2lkATCUj6DQsU2U+Kho0mTSZNJs0u51go7FsL+3p23d6yTdUrrXB4q9tWvoXpflibFO7F6XlYnzPDA0aW+QrFiMODGaNJq0t2KgWFYlkcTeioEmLSbtnTWQJpJJew8NlGbKugl9KVWc0r6KKvZmSkylHl4H0sQ+GQZKK2S1Y3eCoUl7eG1L1osT+zyWNY2xTSST9sk7kCZ2r3esfca21LFMBJP2uLNgjzuyOnLfdHNqR8lWQ39Dz1cXlAmpmA3bRDIpmbSaVEbJQImTiqTYAhhOGxoEw2I4P6LFbNg/opcJPR0faNKlQdSxK2sdRVkvPJrkXIp1oowdRZwoaaKiSZs+FkNIhiaFaEgTIxjixGTSZFIJpANL1xt6GRQNaSJ1DakjTqzBMBu2iW1KYWlF6VgnAk5cTC+/fr2500Lww/eXhwepA1eVIdeL3+5fHp6/3719/vH09Obuf/dPP/qb/v12/9x/f79/4VfZ7ofnz/ybFX55fHoQ+vXGng7bj8Yk/dyf5vWzTAW8Dr1SAY4Kdi+pjpAjTCUVX+mIjg6qqqFlM6LtbwdK2Fs0UK2b7cjbKlLO6gouQM0VF0aUEzyBf9ETXIRHbQZnYJueqNsqMidFQ0XmNW7LE81pBS+5SdvBCy1ueQK8luSmDcFtV/hWZDArWtq0InpWFPOFzbBykzNX7bhoBjgjk1B9SWSezPGmIZG2J7mjAnNK2hvMGM2MTK8bQk5DUtVYRam1qYOj0Gsdjj+5DlRDeG3J2zraGSErHJ2pblOwwWxKpM2mRGd4Sj2rncula8ibTUnbSkqbqwCG1WRNBK91OIO02UrSeCdvW4cTQFvIOtIbF7vbOpwAmsoc623l0vp6tkTywkadPctZzW064gwbMda0rcMZpZnaDD01xdUQ220GT7IwvdHqthnuCDN/cCBZjdOLEZY8JVkC3KIjr5aU36bLzujBJer2zPd0ZFSf8vbc9pRLzijlKK6jlAumVd9Sfq3DG6URYY7TiGlzaUpe73Kqnmdg51x9U0k9IRamdjQW+m2ptVlbVvnXhRkZvLk/e4YPCm5Kn3ijGXAudKxvc6HLTkDlGtV8uupc3tt6rcPLR1shi2TrRO7CIWdkpPlwSuo1Jaei45STbNxuSj2cnuczlv0S/qY3sGBUHcyraXs5xEo8nkuVdDyXKvkMp5ajTnWbsjOXKnRCLlXq8VyqtOO5FIbjuRTC0VwK4/FcytWxM5fCfDiX8szYm0v5I2xnLoV0PJfaGz28XMrVsTOXonA8lyI4IZeieEIuRemEWEj5aCz027IzlyI8nktdWenm1gUzbe8aUPVSMrKMrG6u/OQE1IpJVVQk6xZ67Y/qjtQSbagWDFtOrc5QxZCmP/iU2ILyn5hBNM1YL9qXZiR313eOsVTjZt/6htSC05BKm4Oseus+4pwvuN62/SND2kyn5CRqu2O8ep1ynvvHeLMhIa8M2Zz91ctR68z6+Yg53GYIhTjHCIVtQ5oXVTPMGJKzE4i8aUeoOiqtZu7FtGtuJVWnT2mV5ua2XwUflKmKFuqWCr8hc3jU9fHCZUOceFrqTKb4/HfVkFhf6yA3fMxN2LCKQJc6/PqWbCOXj5Q3Q3Jrx+tbzqiPF7gQzjh96nvgB/dyvdbsrXEhHD+DglBO8Qj+VY9gafPog3kVmH87Mwj1hEOD0E44NfAOpPZ7FuC4Z9vxYhcgnVDtgnc2tbfcBSjH610APF7wgrc/vK/iBe9UZ2/J6yvZWfOCd0K1s+h1Ddlb9V4ZajvLXvBOqXafIeyNJu4hgqtkZ+UL3kHV3tIX3AOevbUvxHpC8QvxjO1VSMePVf3m7Kx/wTuy2lsAX1sDMdoaSNt7vZDy4RIYvGOrnTUwJDyhCAbvrId9opawS8pGFXzNkH1lMLjHVjvr4Cum7CyEwTu62lsJXzFlZykM3uHV3lr4min7imFwz692VsO+KXvLYch0vB725+C+ghhyO1wR+zr2lcRX2rKrJgZvC3lvUQze0c8pVTHOgpZ5VYxehmlXCQWL0pTijUoQTElzFoxyxk2rcsZVq3JKVoDHs4Jywm0rwDOuWwGecN8K8IQLV4An3LgCPHzlCvCEO1e+kr1FEx6/deUasrtowjPuXQGdcfFqbzRxi6ZywtUroBPuXgGdcfkK6IzbV0BnXL8COnz/6kpz9hZN9YQbWNf6J6z6J9dtU7ztgtpmWt5gdY8L4v7FuK4ug9VVe35bjL1TLqSa5prO2RvdrCau1dSb1VgxSS2kW9W0FExNiTermcsy1gDpHDW3urja8s5cbkzhGsz7XbmlG5PJVi0jbe02JSVE230I5OzAN68Ki/ZlDgm0M0m4nNTu+VeeeW3Jq1r7t1TfOwArmNSzry/O/UGqXwKsfBKdBNs7AeOPL9OS7a91RPfICGc1mHHVw3T5JQTw1vc6Bz6XfHEzVkbv/GvfvYQrhrSZfUGBWLYNcW8T2krG+crm+uGbUiLMgp83rHDbFDy+I3PNlLmqchELzjdN6vEdmWumYFmZEjdNcc/Adu7IXDElWWpbsmdKPL4j48/BVuc8DmFzVzR6Z2Dejsx7/uv+0+PLq3/580t0vTzef3x6GH9++fH8afXq9/9/01f0XwZ9e/n66eHzj5cH0bT6v0H8813iMZZafv/mTr4t/o5T9Dc5pPe/5OP/Aw==",
      "is_unconstrained": true,
      "name": "settle_issue_public_to_private_internal"
    },
    {
      "abi": {
        "error_types": {
          "14069640285051497178": {
            "error_kind": "string",
            "string": "Function settle_redeem_private_to_private_exact_internal can only be called by the same contract"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "asset_commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_redeem_private_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "10911617422606317509": {
            "error_kind": "string",
            "string": "Function settle_redeem_private_to_public_internal can only be called by the same contract"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_redeem_private_to_public_internal"
    },
    {
      "abi": {
        "error_types": {
          "14594265138695903586": {
            "error_kind": "string",
            "string": "Function settle_redeem_public_to_private_exact_internal can only be called by the same contract"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "asset_commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "min_assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_redeem_public_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "11151469993655308386": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_private_exact_internal can only be called by the same contract"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_withdraw_private_to_private_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "11055045375070769067": {
            "error_kind": "string",
            "string": "Insufficient shares burnt"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "6634907361972239": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_private_internal can only be called by the same contract"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "JwACBAEoAAABBIBJJwAABEklAAAATycCAwQCJwIEBAAfCgADAAQARxwAR0cGHABISAYtCEcBLQhIAiUAAACIJwIBBEknAgIEADsOAAIAAScAQwEBLAAARAAwZE5y4TGgKbhQRbaBgVhdKDPoSHm5cJFD4fWT8AAAACcARQQDKQAARgT/////JiUAAAZsHgIAAwAeAgAEAB4CAAUBCiIFRAYWCgYHHAoHCAAEKggFBycCBQEACioGBQgkAgAIAAAAyicCCQQAPAYJAQoqBwQGJAIABgAAANwlAAAGkh4CAAQAHgIABgAeAgAHACkCAAgAA21SfywCAAkAEiGCuTM7Td696PbEfBFNpczfbzgXIDlptgAbhFPiNScrAgAKAAAAAAAAAAADAAAAAAAAAAAtCAELJwIMBAUACAEMAScDCwQBACILAgwtCgwNLQ4IDQAiDQINLQ4HDQAiDQINLQ4JDQAiDQINLQ4KDS0LCwcAIgcCBy0OBwstCAEHJwIJBAUACAEJAScDBwQBACILAgkAIgcCDD8PAAkADCcCCQQBACoHCQwtCwwLMwoACwAHJAIABwAAAbolAAAGpB4CAAcAJwILAAMvKgALAAcADCkCAAcA/3lJ8i0IAQsnAg0EAwAIAQ0BJwMLBAEAIgsCDS0KDQ4tDgcOACIOAg4tDgYOJwIGBAIAIgsCBzoDoABGAEYADAAGAAcgAgAGIQIABycCCwQALQgBDQAiDQIQLQsQEC0KEA8nAhEEAwAqDREOIjoABwALAA4tCgcPJwMNBAEAIg0CEC0ODxAAIhACEC0ODxAnAhEEAwAqDxEQAAgBEAEtCg8MBiIMAgwkAgAGAAACsiMAAAKFLQsNAwAiAwIDLQ4DDQAiDQIGLQsGBi0KBgQnAgcEAwAqDQcDPA4EAyMAAAKyCioMCQMkAgADAAACyCcCBAQAPAYEAQAiDUUELQsEAxwKAwYGHAoGBAAcCgQDBh4CAAQAHgIABgAeAgAHACwCAAwAIugKqxFf9/kzrHLsLdXpUqgiaR8P2eHzMG36U3rr82ItCAENJwIOBAUACAEOAScDDQQBACINAg4tCg4PLQ4IDwAiDwIPLQ4HDwAiDwIPLQ4MDwAiDwIPLQ4KDy0LDQcAIgcCBy0OBw0tCAEHJwIMBAUACAEMAScDBwQBACINAgwAIgcCDj8PAAwADgAqBwkNLQsNDDMKAAwAByQCAAcAAAObJQAABqQeAgAHACcCDAAFLyoADAAHAA0pAgAHAI3TguwtCAEMJwIOBAIACAEOAScDDAQBACIMAg4tCg4PLQ4HDwAiDAIHOgOgAEYARgANAAkAByACAAchAgAMLQgBDgAiDgIRLQsRES0KERAnAhIEAwAqDhIPIjoADAALAA8tCgwQJwMOBAEAIg4CES0OEBEAIhECES0OEBEnAhIEAwAqEBIRAAgBEQEtChANBiINAg0kAgAHAAAEgCMAAARTLQsOBAAiBAIELQ4EDgAiDgIHLQsHBy0KBwYnAgsEAwAqDgsEPA4GBCMAAASACioNCQQkAgAEAAAElicCBgQAPAYGAQAiDkUGLQsGBBwKBAcGHAoHBgAcCgYEBgAqBAIGDioEBgckAgAHAAAExSUAAAa2HgIABAAsAgAHABLTsE8Fm2BBlFSKGByjQ+dRFhOkU/js8IGo31BoAukPLQgBCycCDAQFAAgBDAEnAwsEAQAiCwIMLQoMDS0OCA0AIg0CDS0OBA0AIg0CDS0OBw0AIg0CDS0OCg0tCwsEACIEAgQtDgQLLQgBBCcCBwQFAAgBBwEnAwQEAQAiCwIHACIEAgg/DwAHAAgAKgQJCC0LCAczCgAHAAQkAgAEAAAFdiUAAAakHgIABAAnAgcABy8qAAcABAAIHAoIBwYcCgcEABwKBAcGACoGBwQOKgYECCQCAAgAAAWuJQAABrYEKgEEBicCCAYACioIBAckAgAHAAAF3AYqBgQKCioKAQkkAgAJAAAF3CUAAAbIJwIBBgEAKgMBBA4qAwQHJAIABwAABfglAAAGtgYqBgQDLQgBBwAAAQIBLQ4DBwYqBgQJBCoJBAoCKgYKCCcCBAYADCoECAYkAgAGAAAGMCMAAAZQACoDAQQOKgMEBiQCAAYAAAZHJQAABrYtDgQHIwAABlAtCwcBDCoCAQMKKgMFASQCAAEAAAZrJQAABtomKAAABAR4SQwAAAQDJAAAAwAABpEqAQABBdrF9da0SjJtPAQCASYqAQABBQAXkmnAbZAPPAQCASYqAQABBXIxDJYzrKc/PAQCASYqAQABBdAH6/TLxmeQPAQCASYqAQABBQUEG5kgr2BMPAQCASYqAQABBZlraTJM6w+rPAQCASY=",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_withdraw_private_to_private_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "4559061047743182509": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_public_exact_internal can only be called by the same contract"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "commitment",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_withdraw_private_to_public_exact_internal"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "6000439261111030356": {
            "error_kind": "string",
            "string": "Function settle_withdraw_public_to_private_internal can only be called by the same contract"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public",
        "abi_only_self"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "settle_withdraw_public_to_private_internal"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "17786700691773584094": {
            "error_kind": "string",
            "string": "Function shares can only be called statically"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          }
        },
        "parameters": [],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "inner",
                "type": {
                  "kind": "field"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAQQAJwICBAAfCgABAAIARCUAAABCLQIBRCcCAgREJwIDBAE7DgADAAImJQAAAnseAgABAB4CAAIAHgIAAwApAgAEAMcy+XcnAgUAACsCAAYAAAAAAAAAAAIAAAAAAAAAAC0IAQcnAggEBQAIAQgBJwMHBAEAIgcCCC0KCAktDgQJACIJAgktDgMJACIJAgktDgUJACIJAgktDgYJLQsHAwAiAwIDLQ4DBy0IAQMnAgQEBQAIAQQBJwMDBAEAIgcCBAAiAwIFPw8ABAAFJwIEBAEAKgMEBi0LBgUeAgADACkCAAYAA21SfysCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgYKACIKAgotDgMKACIKAgotDgUKACIKAgotDgcKLQsIAwAiAwIDLQ4DCC0IAQMnAgUEBQAIAQUBJwMDBAEAIggCBQAiAwIJPw8ABQAJACoDBAgtCwgFMwoABQADJwIFAQEkAgADAAABoSUAAAKhHgIAAwkkAgADAAABsyUAAAKzHgIAAwAsAgAIACLoCqsRX/f5M6xy7C3V6VKoImkfD9nh8zBt+lN66/NiLQgBCScCCgQFAAgBCgEnAwkEAQAiCQIKLQoKCy0OBgsAIgsCCy0OAwsAIgsCCy0OCAsAIgsCCy0OBwstCwkDACIDAgMtDgMJLQgBAycCBgQFAAgBBgEnAwMEAQAiCQIGACIDAgc/DwAGAAcAKgMEBy0LBwYzCgAGAAMkAgADAAACZCUAAALFHgIAAwAnAgQABS8qAAQAAwAFLQoFASYoAAAEBHhFDAAABAMkAAADAAACoCoBAAEF2sX11rRKMm08BAIBJioBAAEFBmE7PQudvTM8BAIBJioBAAEF9tcOCotb8t48BAIBJioBAAEFcjEMljOspz88BAIBJg==",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tVjdbts8DH0XX+dCIilK6qsMRZG26RAgSIus+YAPRd59ZCwqdgYJWZ3dxMd0fEwekdTP1/C6eT7+fNru395/DQ8/vobnw3a32/582r2/rD+373uxfg1Of6IfHnA1RB4e4mpIcue9XOXWy30O49U7VwB4A/YI7RGahcxC1ZILCGggFcBgIBYQ7ROxeOGTEiYFZCAXkIUQnII4AnBgwCzeLN4sYBYQN0ACBkQDZiH9DymQt1AtgQuIZlG9RmCPsllysaDzBoKBXIAnA6kAQAPlE4hgwAhV3hEYocqLMoqo8o4gFcBmYbNEs0SzqKpICnIBqiqyArXIEJCjAlTMEYiHJBqSikniBmkmjEAcI3md1NUgnyBV7AxUsRFwAdksuViC8waCgVyAKjaCVIAqNoLyiaCKjcAIzY1ARqiKhSBAFRtBKoDNwmaJZolmUcUCK8gFqGIhKVBLXg2s6XcGqhgHBWJhkY5VMY6n02qwgnz6PGw2Wo+TCpW6/VgfNvvP4WF/3O1Ww3/r3fH8p18f6/35+rk+yFMZhM3+Va5C+LbdbRSdVpe3XftVkKwsbwNCqAQecUbhOxSOXDQOR+ArSeIZB3Q4YjKGTBcn8u1xcGJjiCk146A2BRKZFEh8keLKiXAHJfgfKkEuWz6QNM6mEqlNEZxW8ZkiOL5E4WEeRr6DFN4t1aIbiJsEQs1AfCc1I4F5EQN1OLDNkS9VlpGgcmD0c45OemZHaBwyxG2OToJiAMvwHCsDJJgz9NKTySiAg/sWB6Z4ccOl73Fk9JWDc5ujk6MUs40KJYRJgv2FG7XYBLZD6eUoVUUDMTTzC+AeLRj/ZbVhphrJdC65jqSTobLQrHJ45x01I+mMSsi13NjJx1ulAnF5yUJaXrKQl5Ys9rqoT3VgfebvcUCdG2XJjG0OWFxuPTduLbd+hl308A4gtjIMeyTkLdVlkxMWVwu3q6UnB8ZYVyyTUrme6rHjhmxGcu2kog005cg9TVOVw7v4nWXLPBZuxtKjSBBreqRpEyOK81Vgb77HZCRRkuySYziPhXrzfVS1xsKPk3XHHxx0h55OYWlP74bCNT1ynBTLH6HEOzR1SsubOuXlTT245U09+KVNPcDypt7luLGpB1rc1Htu3NrU+xl2Y1MPcXlTv7V7kPPtcunuODjUHUen5LiTpZ5rlnrmydhGmnP0shTY1zwFRmxuZ3ujKyd0VOeXHNp7YrzHxpqW9sJ+LCnlSyyTSfvajd6WIdSRwXDtyKPcrl+2h9lB7UnJDtv1825Tbt+O+5fJ08//P+yJHfR+HN5fNq/Hw0aZLqe9Xn5/eNnRyDnuoxyaer2VJawc4j6e9PO/AQ==",
      "is_unconstrained": true,
      "name": "shares"
    },
    {
      "abi": {
        "error_types": {
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9824461336563710658": {
            "error_kind": "string",
            "string": "Function total_assets can only be called statically"
          }
        },
        "parameters": [],
        "return_type": {
          "abi_type": {
            "kind": "integer",
            "sign": "unsigned",
            "width": 128
          },
          "visibility": "public"
        }
      },
      "bytecode": "JwACBAEoAAABBIBGJwAABEYlAAAAQScCAQQAJwICBAAfCgABAAIARSUAAABQLQIBRScCAgRFJwIDBAE7DgADAAInAEMEAykAAEQE/////yYlAAADox4CAAEAHgIAAgAeAgADACkCAAQAxzL5dycCBQAAKwIABgAAAAAAAAAAAgAAAAAAAAAALQgBBycCCAQFAAgBCAEnAwcEAQAiBwIILQoICS0OBAkAIgkCCS0OAwkAIgkCCS0OBQkAIgkCCS0OBgktCwcDACIDAgMtDgMHLQgBAycCBAQFAAgBBAEnAwMEAQAiBwIEACIDAgU/DwAEAAUnAgQEAQAqAwQGLQsGBR4CAAMAKQIABgADbVJ/KwIABwAAAAAAAAAAAwAAAAAAAAAALQgBCCcCCQQFAAgBCQEnAwgEAQAiCAIJLQoJCi0OBgoAIgoCCi0OAwoAIgoCCi0OBQoAIgoCCi0OBwotCwgDACIDAgMtDgMILQgBAycCBQQFAAgBBQEnAwMEAQAiCAIFACIDAgk/DwAFAAkAKgMECC0LCAUzCgAFAAMnAgUBASQCAAMAAAGvJQAAA8keAgADCSQCAAMAAAHBJQAAA9seAgADAB4CAAgAHgIACQAsAgAKABIhgrkzO03evej2xHwRTaXM3284FyA5abYAG4RT4jUnLQgBCycCDAQFAAgBDAEnAwsEAQAiCwIMLQoMDS0OBg0AIg0CDS0OCQ0AIg0CDS0OCg0AIg0CDS0OBw0tCwsGACIGAgYtDgYLLQgBBicCBwQFAAgBBwEnAwYEAQAiCwIHACIGAgk/DwAHAAkAKgYECS0LCQczCgAHAAYkAgAGAAACfCUAAAPtHgIABQAnAgYAAy8qAAYABQAHKQIABQD/eUnyLQgBBicCCQQDAAgBCQEnAwYEAQAiBgIJLQoJCi0OBQoAIgoCCi0OCAonAgUEAgAiBgIIOgOgAEQARAAHAAUACCACAAUhAgAGJwIHBAAtCAEJACIJAgwtCwwMLQoMCycCDQQDACoJDQoiOgAGAAcACi0KBgsnAwkEAQAiCQIMLQ4LDAAiDAIMLQ4LDCcCDQQDACoLDQwACAEMAS0KCwgGIggCCCQCAAUAAAN0IwAAA0ctCwkBACIBAgEtDgEJACIJAgMtCwMDLQoDAicCBQQDACoJBQE8DgIBIwAAA3QKKggEASQCAAEAAAOKJwICBAA8BgIBACIJQwItCwIBHAoBAwYcCgMCABwKAgEGJigAAAQEeEYMAAAEAyQAAAMAAAPIKgEAAQXaxfXWtEoybTwEAgEmKgEAAQUGYTs9C529MzwEAgEmKgEAAQWIV3+Ii3B6wjwEAgEmKgEAAQVyMQyWM6ynPzwEAgEm",
      "custom_attributes": [
        "abi_public",
        "abi_view"
      ],
      "debug_symbols": "tZndbts6DMffJde90AdFUnuVg2HIumwIEKRF1h7gYOi7HzIWZSeDiCzObrZfmPhfiiIp2v61+bb7+v7jy/74/eXn5tM/vzZfT/vDYf/jy+Hlefu2fzmK9dcm6D9cNp/y06bKB5L/5FOMT5sY5HMkhdogQoNcDOwrsK/ALMUsxSyYDagBJQNswNHA/kQ1N6oKsgJPkEI2EMEUBGI0wAbJLMks2SzZLCBupKhADYpZiv4GBFCuymqh0KCaRSOmkEMwMEs0S+yW2iBlA26QkwE1gGiADYoJangnMEENb84K1EDDO4FZ2CxslmoWjWqWlYJGdQL9DQpEtZACN9BgnkGDCUFBLCBugGbCBOIY6OXqatHfqKulCKBYMD1tSogGpYFGbAKzJLOkbqkNcjbgBrqVE1CDYn9Ct/IMaILdDTRBUkFQoAYasQnMUs1SmwVDMlA3ZIGoEZtAfyOBQt1ulFxFjdgE4g/pVbrLhArYQCPGEkPUPZ2AGuieTmAWNgubRTNzgjIBaWZOoMpZoTaIZkl6ufhM6iGTgl5eBSAYgEFtULIBNcBkYBayH7NdzmapdrmmnwKHZNAu52iWaBYt6jNo/2EJJkM24AZawjUqUAMt4QlKA63lCcyiHtasUBvoLtdze0wGsk1VNq5qt5lAL9feqbk6wdny8fG0sX775e2022m7XTRgacuv29Pu+Lb5dHw/HJ42/24P7+cf/XzdHs//v21P8q1Uz+74Tf4Xwe/7w07p42m+OowvTdKN2tUpp9IFYs4XEtGRCNILTCNAil2E8UIjORrEplBhdqLevg5kNAViHq4DxhIZwEIhHXUOxZUT5QGRwL8YCQjV8kE6chhGgscSJWiLPkuUgPMqYrpcRn1AKGJYGwt3IWGxEBguJDqpSZDMCyrgaOSxRp2rrGZIXSNTvNRw0rMGyKYhWzzWcBI0l2QZLu3HFBKnSwUvPRFMImEJd2nIeDG7Efg+jZpj18A61nByFKjargDntEiwP3CjF5vgeClejkKPaAFMw/xK6REtOP/Nast63LWVLM+S65U4GSr3FT0cMcQAw5U4u1JqLzeZvnBYKonWl2zi9SWb6tqSzV4Xjdw3Nla8TyP1szElzmONtLrcPDduLTc/w+Z4xJASjTIseyIQLdUjlLK6WnBcLV445NatTyyLUrk+6rPjRg619k4qsUnDcFQvptzDEQPdM7ZcrgWHa/EkZKq3ehNenE4AdDkFOmkaCeZWmvNiXy7XAtnL00Jz1S7ikS9jCvCAng5lbU/3lgLyLMGqFgqOl0KrJ2vgR0Sj/s1oYME+DQqXOEyx4twxUWZrYyR9bG5j+epWw0nTSlqQ09lCi9H2N438gKAWWBtUdynYO1ClRT/+bSn4gLmh0Pq5ofD6uaHU9XMDhrVzA8b1c4OrcePcgHn13OC5cevc4GfYjXMD4vq54dbuASGOy8XTACz9ptYpOfQOfexZGuVR5KxBcKFBXpbKk/OepwkXx+1VUMnb3Vgz9BGmlmEbo0fcQtHqWyh/Lcx1XsvisLx2w73N7zsjLwDuPukwzycdpeFJR05HRSB7LIfAw5OfnIbKmE2CkeZtoat4uJk6D4bCGEZBZSdVMeQejwCLw+FP3OgzrrzlwuEZxcl9YNtzTF7YjJPMdYQLdkfk8fbQEe/cR+z1gssnrn/kSO3jlHAZb4z7xBSgP/rFux0JsHBkWP3szajcp/5UQ7jPEQqp5wiFsSPV66oQew8BcBqRV3aEpsG0qNyrsqvundR8V0iLMRfq7RK1P8CNy0eFVxL+Qnp68PLNwPVCnH5auA9TRdrz7EXiSw1020ft7WPRgc4an+Xj9nl/unj9/qFip/3262HXPn5/Pz4vvn3779W+sdf3r6eX592399NOleZ3+Pra9J8oJ5dsyWd9Va8f5W1eZPr8oX/+fw==",
      "is_unconstrained": true,
      "name": "total_assets"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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XZUn41Ym766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om764SunyRyburZPLuKpm8u0om766SyburCmXcyuTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l0lk3dXyeTdVTJ5d5VM3l31kIxbmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6vWybiVyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om766SyburZPLuKpm8u0om767aIuNWJu+uksm7q2Ty7iqZvLtKJu+uksm7q3bIuJXJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu6tk8u4qmby7SibvrpLJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a1aVcSuTTtdMk3ErkyXXlMmSa8pkyTVlsuSaMllyTZksuaZMllxTJkuuKZMl15TJkmvKZMk1ZbLkmjJZck2ZLLmmTJZcUyZLrimTJdeUyZJrymTJNWWy5JoyWXJNmSy5pkyWXFMmS64pkyXXlMmSa8pkyTVlsuSaMllyTZksuaZMllyzg4xbmSy5pkyWXFMmS64pkyXXlMmSa8pkyTVlsuSaMllyTZksuaZMllxTJkuuKZMl15TJkmueKOO2q4xbmfy3pkz+W1Mm/60pk//WlMl/a8rkvzVl8t+aMvlvTZn8t6ZM/ltTJv+tKZP/1pTJf2vK5L81ZfLfmjL5b83BMm5l8t+aMvlvTZn8t6ZM/ltTJv+tKZP/1pTJf2vK5L81ZfLfmjL5b02Z/LemTP5bUyb/rSmT/9aUyX9ryuS/NWXy35oy+W9Nmfy3pkz+W1Mm/60pk//WlMl/a8rkvzVl8t+aMvlvTZn8t6ZM/ltTJv+tKZP/1pTJf2vmybiVyX9ryuS/NWXy35oy+W9Nmfy3pkz+W1Mm/60pk//WlMl/a8rkvzVl8t+aMvlvTZn8t6ZM/ltTJv+tKZP/1pTJf2vK5L81ZfLfmjL5b02Z/LemTP5bUyb/rSmT/9aUyX9ryuS/NWXy35oy+W9NUv7b/pmjc/Mm9c3Jyl8YmbvBHNn60DZtDzu8XfsOHY/o1PnIo44+5tjjjj+hy4ldu3Xv0bNX7z59+510cv8BAwedMnjIqUNPG3b6GWeedfY556afl3H+8BGZI0ddkHXhRdmjc3LHXJw3Nn/c+AkTJ02+5NIpl10emRopiEyLTI/MiFwRmRmZFZkdmRO5MnJVZG7k6sg1kXmR+ZEFkcLIwsiiyLWR6yLXR26I3Bi5KXJz5JbIrZHbIosjt0fuiNwZuSuyJLI0sixyd2R55J7IvZEVkfsiKyP3Rx6IrIo8GHko8nDkkcijkdWRxyKPR56IPBl5KvJ05JnIs5HnIs9HXoi8GHkp8nLklcirkdcir0feiLwZeSsSiUDk7ciayNrIO5F1kXcj70Xej3wQ+TDyUWR95OPIJ5ENkU8jn0U2Rj6PbIp8Efky8lXk68g3kW8j30W+j2yObIn8EPkxsjWyLbI98lNkR+TnyC+RXyM7I79Ffo/8Efkz8lfk78g/kX8ju8BIAcMAQ4FhgmGBYYPhA8MPRgCMIBghMMJgpIJRCYzKYFQBoyoY1cBIA6M6GDXAqAlGLTBqg1EHjLpg1AOjPhgNwGgIxkFgNAKjMRgHg9EEjKZgHAJGMzCag9ECjJZgtAKjNRiHgtEGjLZgHAbG4WC0A6M9GB3A6AjGEWB0AqMzGEeCcRQYR4NxDBjHgnEcGMeDcQIYXcA4EYyuYHQDozsYPcDoCUYvMHqD0QeMvmD0A+MkME4Goz8YA8AYCMYgME4BYzAYQ8A4FYyhYJwGxjAwTgfjDDDOBOMsMM4G4xwwzgUjHYzzwMgA43wwhoMxAoxMMEaCMQqMC8DIAuNCMC4CIxuM0WDkgJELxhgwLgYjD4yxYOSDMQ6M8WBMAGMiGJPAmAzGJWBcCsYUMC4D43IwpoJRAMY0MKaDMQOMK8CYCcYsMGaDMQeMK8G4Coy5YFwNxjVgzANjPhgLwCgEYyEYi8C4FozrwLgejBvAuBGMm8C4GYxbwLgVjNvAWAzG7WDcAcadYNwFxhIwloKxDIy7wVgOxj1g3AvGCjDuA2MlGPeD8QAYq8B4EIyHwHgYjEfAeBSM1WA8BsbjYDwBxpNgPAXG02A8A8azYDwHxvNgvADGi2C8BMbLYLwCxqtgvAbG62C8AcabYLwFRgQMAONtMNaAsRaMd8BYB8a7YLwHxvtgfADGh2B8BMZ6MD4G4xMwNoDxKRifgbERjM/B2ATGF2B8CcZXYHwNxjdgfAvGd2B8D8ZmMLaA8QMYP4KxFYxtYGwH4ycwdoDxMxi/gPErGDvB+A2M38H4A4w/wfgLjL/B+AeMf8HYBSoFlAFKgTJBWaBsUD5QflABUEFQIVBhUKmgKoGqDKoKqKqgqoFKA1UdVA1QNUHVAlUbVB1QdUHVA1UfVANQDUEdBKoRqMagDgbVBFRTUIeAagaqOagWoFqCagWqNahDQbUB1RbUYaAOB9UOVHtQHUB1BHUEqE6gOoM6EtRRoI4GdQyoY0EdB+p4UCeA6gLqRFBdQXUD1R1UD1A9QfUC1RtUH1B9QfUDdRKok0H1BzUA1EBQg0CdAmowqCGgTgU1FNRpoIaBOh3UGaDOBHUWqLNBnQPqXFDpoM4DlQHqfFDDQY0AlQlqJKhRoC4AlQXqQlAXgcoGNRpUDqhcUGNAXQwqD9RYUPmgxoEaD2oCqImgJoGaDOoSUJeCmgLqMlCXg5oKqgDUNFDTQc0AdQWomaBmgZoNag6oK0FdBWouqKtBXQNqHqj5oBaAKgS1ENQiUNeCug7U9aBuAHUjqJtA3QzqFlC3groN1GJQt4O6A9SdoO4CtQTUUlDLQN0Najmoe0DdC2oFqPtArQR1P6gHQK0C9SCoh0A9DOoRUI+CWg3qMVCPg3oC1JOgngL1NKhnQD0L6jlQz4N6AdSLoF4C9TKoV0C9Cuo1UK+DegPUm6DeAhUBBaDeBrUG1FpQ74BaB+pdUO+Beh/UB6A+BPURqPWgPgb1CagNoD4F9RmojaA+B7UJ1BegvgT1FaivQX0D6ltQ34H6HtRmUFtA/QDqR1BbQW0DtR3UT6B2gPoZ1C+gfgW1E9RvoH4H9QeoP0H9BepvUP+A+hfULjBTwMQpWYFpgmmBaYPpA9MPZgDMIJghMMNgpoJZCczKYFYBsyqY1cBMA7M6mDXArAlmLTBrg1kHzLpg1gOzPpgNwGwI5kFgNgKzMZgHg9kEzKZgHgJmMzCbg9kCzJZgtgKzNZiHgtkGzLZgHgbm4WC2A7M9mB3A7AjmEWB2ArMzmEeCeRSYR4N5DJjHgnkcmMeDeQKYXcA8EcyuYHYDszuYPcDsCWYvMHuD2QfMvni7jzfxeGuON9x4G403x3jLizeyeHuKN514K4k3iHjbhzdzeIuGN154O4U3SXjrgzc0eJuCNx94S4E3Cnj6jyf1eKqOJ+B4Wo0ny3gKjCe2eLqKJ6F4aoknjHgaiCd3eMqGJ2J4eoUnTXgqhCc4eNqCJyN4ioEnDng6gDt53HXjDhl3s7jzxF0i7uhw94U7JdzV4A4Edwu4ssdVOK6YcXWLK1FcNeIKD1djuHK6d3Bm/ri8nB4Z+RkbUlqnGMq0bJ8/EAyFUytVrlK1Wlr1GjVr1a5Tt179Bg0PatT44CZND2nWvEXLVvPnb0i5uLBgSdfhWXn1Ctes9W/55a1XR82fv/ejBmU/6lu4ZmV4XbdnFgfO3ffRSWU/Gly4Zua9j07vMP2zsfs+Or2srzML1+S1T72u4313d9n30XllrcaXdT+x7EeRqTE+mxbjsytifDYrxmfzYny2IMZn18X47IYYn90S47PbYny2LMZny2N8tiLGZytjfPZojM8ei/HZ0zE+ezbGZ6/H+OzNGJ+ti/HZezE++zDGZ+tjfLYpxmdfxvjsuxifbY7x2dYYn22P8dnvMT77M8Zn/8T4bFfZz3ARHevDYKwPK8f6sGqsD3sXrqm/89Tcpl9eu7n4Q1WtcM2m8Lx7fhu39cfoh2mFa25eMa/BWR1//Cb6Yd3CNR+HPzm4290TukU/xPHgipodJne7fOnr0Q8blO2yuIop22lxhRKjnOrIWB92ifVh11gf9oj1Ya9YHw6I9eGgWB8OjfXhsFgfnhXrw3NifZgZ68NRsT68MNaH2bE+zI/14fhYH14S68MpsT6cFevDObE+XBDrw4WxPrwu1oc3xPrw9lgf3hnrw7tjfXhPrA9XxvrwgVgfPhbrwydiffh0rA+fjfXhq7E+fD3WhxDrwzUxPjR9Mbq2uSZG1zbXxuja5ocxurb5UYyubW6L0YvNHYVrLvj4+/TIZ+Pvjn74c+GaOQMH9Gg7Z4MV/fD3GH9uqcI1D3dqc0yl05tPLf7QF2u48B0SI5CvTSzLo2L4DAyJYRkYGuvDYTECBXIL16yo+fw5PZruOntDyvCCe3tOHJOXOXZsVm7OwvnJfz9pkNs/uMDtH2S4/YOxbv8g0+0fNHb7B8MPvFrKcfsHow68ah0hXqR88QjDD7wijRBvuFxxtrou0ki3fzBOHIM8NbL+HzTcBHHQ+eKjt2vQYyqm3QNi2pUf7i9y+weHiVdrX/GxtfGB10WzxPtD4/8HRXLdHyaKj3z/kyuyNuItPU6cfPLzQ1O3f3CW+CyaLf4HrpdwrhdY6RWrGYlaqjhEoPzBOW7/IGVDSu3C9S0zdr+zlT48d/SYjPys87Mz03PzMobj/xufmVfkKn1CXsaYMZl5G1JqFSztnpszNn9hwbIeWXmZw/NVwd19c/IzR2Xm3TW0Y4fkr3uV/nvD1d9P7VH671Pcxe9RsKR7Rnb2gnCxn+WDM7MR9PhMdyVJSSnrQbn1cF9RWUbg5W333DGTiiH1cJbJ4XxPySuVu+Q9GEq+ZEh+7pgFhXFKWqqNui/tlZWZnVyDVmvZnuvsvUirFqzolZuXmTUqp+g/r13fImNyfubw9HH52el7CNu9mK8Dd9P1tD1snT9/QcHKPe8Ldh0xoqg3FBdkQcGyIVmjx2Rn7inRvnilymu5qo2JPQpWdMvKySh6OzF/4Jhr93kxl5+MoU+9ICOnyEuUr8VBlvUbN3pM35GFxX9Qs2Bl35wRe0oat5N0TpAb6ONXfv3gkX4dRhcsORU77ILC6N/v6617EReub5w1Nj1zYubwcflF/TsrJz0vEzv7ns4/5oKMsZkbUupq7uu9ytnXe+3lUeVy890o68Fk7+vK6RxL7gDeI/rgjFpwV//c8SX6YLHZHuRV9lrs/bin07S8ddKz3HVilB1FnHVQcjCoXmowaL5nMBiTNz49a2zPfUTumzO4mMaDilhcZiSIhioeC4pLfefQ9vHtjbL2sdsgGoFneOnFNbzU2X/Dy7OjMouWEzn5OC7n4+gyNj8jZ3gmPuRn5uVkZG9I6ax5bBlazrFl6F5aNvgPji3JRo2GCUaNEt/0cgYo8U3vsvH2ftMn+o1V8pu+0W/skt/0i37jK/nNSdFv/CW/OTn6TaDkN/2j3wRLfjMg+k2o5DcDo9+ES34zKPpNaslvTol+U6nkN4Oj31Qu+c2Q6Delxu5To99ULcuYauUeu9Pceahaduyu5nBWcuxuV3Lsfia6jsNhovveUaLv3kFiA/qOO2bH/caM+40V9xs77je+uN/4434TiPtNMO43objfhON+kxr3m0pxv6kc95sqcb+J3wrVipqoxDqa97+c8/GBZk9ZH+z96wQLg9LfJRqezbIDpuODMkOm44Myg6bjgzLDpuODMgOn44MyQ6fjgzKDp+ODMsOn44MyA6jjgzJDqOODMoOo44Myw6jjAwfFS31X1UFynsXbUK7FW6f9t3i7f0Rm0UlQ7tjM9AtwxbYh5SDNi7Xe5Vys9f4PbwTLs8WLv1grL4oYCwh3HSNFlV1AOEe6kguIOvv2w7Fso2RaMrR9h6PKmDqrc+/QvHJPn9z9HwPHLHIY3DVk3Plxxuyyx277jrWqt0/5sNHGTpMOrdU5d+D4GRtPXXlZjbtafVulztZxx43/Y0Nu/HjWXf3HZcdB5W3+sHjGrd5c41bD/TduLc/O3zditfn/O2KZbvtZeXsqYcRKtEZxjFhlWFs8aMUcy3pxHlf12r/HVU0S9PllPS8el5E9Nk7XLu5B0T9oWLCk6EM8AyuDwXaHIcZKsJig8deBRoJ1oIo9UKTchQvkkmOEo8x76qhlyeZ2WKQkWOj6Ey6Q91RU40R3JLiKJ7R1/CBGcZD4I7R5gI3CLfbbKJyc/9HS0ya3GNVa+AjeXuSMy87OGpmVmZc+JhOx5YzSf2NRMez/jw/7pW4pnnZeUgzYx9dBe+ga/yjBjHk1URj/6CH+gVlhwgOO/84Ath/vLlYPvyBz+EWO4SVzYtbY/LEbUur8P7kPrfT/cBtc+f/PTWdazDGk6LR8RG5mdBTpWcRKievN5MeXB9i9Zu39NzbcNzY/Ny9jVGZ6XmbGiA1GuuYR4ZxyjgjnFK/EyzC8rjtPdcp6qMc+ItR1Oi/5hsQp0YcSt/MlrYZEH5zMKGV1WvQh5snS3m+HRR9KmnlZCZXZbhQvhsrshIqvWMsc+Bdfscbb5PUtu8krvmIts8UrvmItc9BffMVa5pi/+Iq1zCF/8RVrmSP+4ivWMgf8xVesZY73ixu7zOF+8RVrmaP94qYv9U216BVrqW/S9n0ztPQ31aMUKfVNjSgrSn1Tc983p5f+pta+b84o/U3tfd+cWfqbOvu+OWtvH25dcgY8m3MGPFt6BizzxqA776VmUDC6lDkFruegz94ZrrSJ49aoahwTxwVR9Tgm1R1ciD2V1oiO9mWqtb474LVjz6FG6dMXwxmh9GzpKJjLNi0ZPBqiOHxZzGW29w2cRVuKJMnLjP1t3HANyoZrEA2XyKXid2nyu7T4Xdr8Ln38Lv38LgP8LoP8LkP8LsP8LlP5XVbid1mP32UVfpeV+V1W43eZxu+yKr/L6vwua/K7rBV3n2CQJ/VooDILPIrk4s+0nZtirOyIao2UuFsTo9z3VHXcr2vs+Osai2ldY5dtbCvuusbnLFoZIvgIixBf2XC+BNzyERYhFS4rXFa4rHBZ4bLC5X/JZZlvDecUXH45a3kvy2uVe8UTY83kc3sWVMaDv3wvvdR11uiel14ii+M1b6DkvU0sJ1aMl5sCYLTd5/vOgiUn52aMKHHW7GhxyfVyKMmit/a+h7gn2zEaMNVdA9ruF72p8Re9YaZFb2rZbhuOu+it5CxamU5biTBKVCobrlKCUeI/5zKUcCwLl/ug3R+D225fHUr0tt/ervp4vJpRcYaBgBNR2WFARb7b5/qpMqOActZVnLj+si2inINxaZ+mc5SMN6SV9Rl0jmalfZaQziR45xu9xilIiSsc0wmlXHftKXbxzUj8q0bbRdWazqotQ2i/s5LiOLUSOg0l4oDloqBB53Ra2meJt0rjtpevZHuVKEi89jLl2kslbS8rYVeIMQBZiSqpBAvjRDRjNWb84TCx3C3+fGqJz6dW/PnUZJpPY7ZOcV3R186OCl7eLTtj+EXdcicWPDIod2xm1ojcnA6DMvNGj8vPKEqKUOhsasu5xLYSTkZxZz+VZEAoTaHE0pX47e36nVfX7W3Gb2/F1N5m4vZ2vur1bAlhdK+83NGDxp2fnTV8yJ6XjhYU3NMnM2NM17y8jEnOHmMsKFi658NS73AZizy8Mlo77jd14iupF5VD5bu7btxUHo1p0XcCPKwmUl3GLSFijeuz/7js0oui4vcd4i004yynUp1DdtnlVKXItuIZ5Ix4vivHmi6TjURVyv5RZWexSteMY+lbJf4cW7nkHBt2/r2GNVE46RxbKdauKNGaqIRc2ZPThGuiSi58pjoLGo8b9+/j3R6xUlwPlWKwr3JkV3Hdnh03QhxmV0rM7MpgqOTUruKF2lXL/lEVZ7lKV7/zfaH41K4Ud/lYOS61wzqXj5XdLh8re6Ohig5+CYZTj8QOyRAbjLTkzE71xuxUMGpqGbTLMjuVNGhXijtopx6Yg3aio6zuZXmdmqiKlNMHfZ2sEmyLwh6XyVqPGdV+OWb0MKq42halOrdFlRJvi5SL5g44p9ryHKvFOIqqS5jGQwnfxIzzR+GyfxRyhk1wSB8u82XIWYfxAiY/M4w1YIbB6OQYMOMNOaFyDjl1pIYc5W1qCyRcXAaTnC/Hv+IJRK94yifsOYdL2ANGj/2oW95D3L0f+6JEignGv8yxfCj9N6oMFD8YffdWLxgnlaSqHQ21z+L0OBaub7qs2H8QLP0HZvQPSkQORQ1KfB6X+Hs/To1RPcW+gmWqB5c+w0o1QCD6Z/sIXTp2IHbsUGlwoXgdbp/D0n/g6KH7WmRQPCK6vebdR7dy8vqrwKCe6tG5jZLzupyB9v2QXnJt3GNFOT/H7D6wSi9ScaVPyMrPwR6/wZioWSY3u5wyudl7Z4AOZddedcp9R1/X7bsKSWVydUpM1hUyuQqZ3P+QTG5PTz2i5HR1lpNm8WRypVLYnuOkWYlvznXSrMQ36YQluT/xa1Clh4eAu+HhvLIegu48tIy7kC51PW05C1lqveIIvm/x3D/R60mkkp1V7tppW1aFWOLOnlmFeHoZcaBjuX0gqxDruZ3VXJ8o1JNXIdZzo0Ks7yxamR1UfcImNobosX6Cw576hAMF7y5NfpcWv0ub36WP36Wf32WA32WQ32WI32WY32Uqv8tK/C7r8ruswu+yMr/Lavwu0/hdVuV3WZ3fZU1+lxUqxAT/KlSIWRV6lQqXFS4rXFa4rHD5P++yQoWoQ4VYx1mje6+o73GrQqzjrNSYKsRj9/m+r0KFWKFCrFAh/hdUiC+yqxB37nP9SoUKscwFEN/Lm+dWqBAdjhxFPkBViOdWqBC9LsoqVIj/ARWiP0F7u7xjbuW+vQPx29vP1N4xJhG/o73jqxD3KBB7ZORnDNvzOtd1B8Cvs8bUQQZaXsf0O6Sx1ZQtvfwAR22vP8BxQP1G6P+2lPKf4mkwr0JKGWeOi7tQqJBSlldxVqm4csfxaymrJud2hZbS+yK4QkuZiNmNkzPbu5ayqZZR+7+ppfQwaldoKfdUYYWW8kDVUr7oYi9UhzCPC2gp6xxIWsrujgFTXkvJPOQcCFrKOk6/cS6q9hbXH1eAZ5es+0DUoMTnwWgDxBbBxRDgFfvylxHghcoK8HzRPyslwAtGTWLGDpQGF4jXSvsclv4DxyxcLMDj+dG52Xza1HP+/2hTzy+u5hFJtakX/+9pU8cc2NrUrAptajJt6gMji1bc6dnYydPzsZdX/FR09J+q+Kno3f/2+09FS/5C+v/g7zavb5Y5Ois/PWNc/gW5eVmTd+9L0jPGpueOHDn8goysnPTMkSPRfkPKEs1dv285u37fvQyqVu6XtexyazIJXd95kVBKG94z+lBCjq5fGr6vj5apH8NtW5X/tcAyg4qR4AyofJrVSIHgzajvv34z+sSem9ExeeOLbkb7ZIy9YBB+OTp+ataAHS81qx3/l7jN0r/EXVrb6zzs2HdjKXWUFIpVO44oCc4vQgzvgNFPAvzOKN7uFOPzoHuio5jUcp8iWi4OqP3OKAluCCuzn20uT3ACnrBUlZ0n4GUnHIrQa/Caxo3ipsSIMTJVcQc11f3IVCX+yJTK1PeqxDq6Kh6ZyiTucFZy6WOrqs6mol/ZVU1wwl7VOaOyu7T5XRr8LgP8Lk1+l0F+l2F+lyF+l5X4XcYYVg2vSlXGlww9DGB6XjJ0vpBZTq1K2IVA1k5w/EB5TziQ8KbbLrFkKCsuGZLw5WQ3L5P7S5/+DWDVoyR8DTM+e8svfHF94FSmqCUOmMpPLW4Rk89ZvD1Nd27cbhPnCq+ElrsszaysvY4zEr+nl+g3E+K+Wr0sFu+NxAUyR+7bVc6K59dI/Bqyc/P1dPS11KJznoF7T3V67j7UmT8/zg7MCMfbgYX37Xzp+8LUeIf10ak24bV1wnf/g2W+DCRqtSCh1UJxiBRM3G6hi/e125VxL4ID5bwITt0X4uq42fFsV3fqyVom8QuBwYT3wG7kI0Enkz3NJiXEPTFmk0v3Vd0dCQfsUJIxkg6pRJYIyrhWvrPnvlxnz5GZ+++GtpyBZnR/qe0X3z48WTwQ/W5O9s45smDfGxILk9w4R27/X7twjiw+kO+bIzccYNfN9Fvg9Y3HZuanX4DntniGu+fgNj03L2N4dmb6BPzTMZl5G1IO03w51Kucl0O99s4Odf6D98LlvWzpUe4SG2726Lbb+nS9R7fl9+h2wj16vOWfETcVrB03Fay1l5l1E11fJ30D4JBys6SX9JVc7I3FvpnvQHvzr+mB/N5fg5LXky1dSH+N5Jd4Y0te4s2fXxjvFxbjax4L4/32Ysn/5HktoxfX0rjt/nst49nhWOtY3VnjM/Iz00eOyxm++8WMLIySl5ORvSHlcM0z7knlnHFP2kvOmv9vX8coadU7+pDAqk/0wXFwdsC82VGr5KDaN+7U1s9ZpPIuqfqWe4Giyk49ziVUyeGyVdndevzVjEumme5XM/74qxkf02omcXL9EvPAM9F5oGiEGrRngOq1d3yKc5zoV/GOE9W1HtThzIr5aym/tEs3KdFxy7vqcvP7yL5EB58ldPClX40x463pylg6F51x3rNR8cCWuzKUt9M3I1FaFMtrMgGepclJXEuTw/bf0mRJNtbm/58tf3WG18DKO8MRFiCJElk41gN7MNVwIRBMdMHoEkZPtpOEsntnFXfvbCbdOzcsdxP33L9vubd0I741yzeKEpYgprz41qRfabp+n9Q04i0/jPjvkxoL6Eln/ltHFy0O5KOLxv+7W/71zXJy87NGTkofnpeJa+oR6TnjsrOzRmZl5u07bh+Tlztx0gZHwlo9M2/Pcs68+w4lU/8fzryVyr3K7bm/Dlr3FLhqycF1fePo6LqHjt33sHHAPjIWvTRCHTR5OnNPrs5ccz925v/ApVmfcvbjPmyXZtb/4KWZKXhpZlVcmpXj0qw326VZn4pLs4pLM3eXZqb7SzNTYtLt8x9cQe89mWr7/2R9XHEydQCdTKWInEw1OABOplLcnEy1SHAy5VrQ8N8+VUqJd6qU8r94qtT8QJ7bGx1gG9E2FRtRx7+KjWjFRrRiI1qxEa3YiFZsRMv8+09uRNe3yRg7NjMvP318RnbWiPQxu38NZPcLU+lFE0OZCbjiRqcsEq+jfsWNTqkbnabRzr+HlacVkXLPL9Tsq6mKS53/L2tprjR55V9L2/+Da2lLcC1tV6yly7GW7sO2lu5bsZauWEu7W0tb7tfSlsSk2/c/uJZetScM1lV6Vs54XL7cWLoSapZzhq3BMyulRMtT7Lj0WoCc9Kp0luN9Fb+3c5aJWTZZgFkm2Qg15ZYRL3rKXT2yxpdpqehoVgx7X0UUPhRtvPzc9LyMEVkTN6RUK10w220DlPp7XzkJ4FrEk4QA/iiwkvIuI/airnR5gu7KEyLOFMFo9Hj0undvXEc7OygW56+sot8VLDMdJTAfMu78GINMvNnCcjv4+0pOeCnRosWedmKOfsH4U17AX+4GK9Vjoi1T+KRzuNvtMv3icbn5WZk5+TeUDus6MWypvw8zD3yhqOM4ba8SESwuLQ0nwRTBPBbBjDisUKUbozh3R+j/AGWYUar0AQgA",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "tX3bjuy4sey/zPN6EMkkM9O/YmwYY+85GwMMxsbYPsCBsf/9KCkyFdNrisouqV9WRffqiqBUjOBVrP/88N8//fXf//OXn3/9P3//5w9/+vN/fvjrbz//8svP//OXX/7+tx//9fPff91/+58fNvsn0Q9/SrX977cfUv+x2Y91/zHbj2WzH2n/sZz/u+1/yxOIgbQDNZD39/W35P0t5G8hHn9AMv6ggzRBnqBMQBPUCdoA1N9lBa5nkcr+Y+s/7r8svP/E9hPtfFT29+x0RPvr/r/U9tc2Xve/6pwyXvV4rdt4TeM1j9cyXmm81vHaxuvgq4OvDr42+Nrga4OvDb42+Nrga4OvDb42+Nrg48HHg48HHw8+Hnw8+Hjw8eDjwceDTwafDD4ZfDL4ZPDJ4JPBJ4NPBp8MPh18Ovh08Ong08Gng093PqtEyuN157O6pHq8pm2bIE2QJygT0AR1gjYBTyATTOY0mdNkTpM5TeY0mdNkTpM5TeY0mdNkzpM5T+Y8mfNkzpM5T+Y8mfNkzpM5T+YymctkLpO5TOYymctkLpO5TOYymctkpslMk5kmM01mmsw0mWky02SmyUyTuU7mOpnNHHU3ZzI3VDJgEmKAJjAJNdAm4AlkAh3AXHGANEGeoExAE0xmnsw8mXky82S2+t962u1/0yztrMY3uwqr8h1YnW92OVbpD7CrN7suq/bH39AEdYI2AU8wma3yt2p5uU1gzM1AnsCY2QDNv6kTtAl4AplgMlvlbz2J0wR5gp2ZNwM0QZ2gTcATyAQ6gFX+pgZ2Zk4G8gTGXAzQBHWCNgFPIBMYs12yVf4DGKFdu9V57q0HTWCEpm51/gA8gUywE4oV1er8AdIEO7NYUWky02S2On+ANgFPIBMYs7WEVucPYMx2FdaQHKBMQBPUCdoEPMHOLGRAB7AG5QDGbB+lmahrmYkOQBPUCdoEPIEx2800E3VgJhK7q2aiA+QJygQ0QZ2gTWDMdhPMRAfQAayREbvz1sp0LWtmDlAmoAnqBG0CnmCWWWaZzXpqn5dZ7wB5gjIBTVAnaBPszGqfu1nPQDGjaTZgPMVAmYAmqBO0CXgCmUCPZCu9lekgTZAnKBPQBHUCiybrfIl1ZqzKqB6dj71BPHofezt4dD8OYN2yjY4OyAF0AKsxB0gT5AnKBDRBnaBNMJnbZG6TmSczT2aezDyZeTLzZObJzJOZJzNPZpnMMpllMstklsksk1kms0xmmcwymXUy62TWyayTWSezTmadzDqZdTLrZO5dlYGSo+yoOCJH1VEX4NFjGahLyOizHChtjpKj7Kg4IkfVUXPEjlwjuUZ2jewa2TWya2TXyK6RXSO7RnaN7BrFNYprFNcorlFco7hGcY3iGsU1imuQa5BrkGuQa5BrkGuQa5BrkGuQa1TXqK5RXaO6RnWN6hrVNaprVNeortFco7nG4cHZ09mrxejq7B/86OsMZGqpjt7OQOxIHOlE3XoHSo6yo+KIHLmGuIa4hriGuEY3WGqj87NXx9H72avj6P501Ps/e8UcHaCBrCx5G12g8XfkqDpqjtiRODKNnEZPaCDTyHn0hQYyjVxGb2j8XXXUHLEjceQa3VGZRqdooOyoa7TRLxqoOmqO2JE40om6o7J1CLqjMo+O0kBdY3aVBqqOmiN2JBN1L2QdPZ7duqPLM5CVoKTR6RkoOcqOrAQlj47PQNWRaZTZ9zmYq2t0L3TUvXCg5Cg76ho0ukADdY06OkEDsSNxpBP1Zu1AyVHXaKMvNBA56hqzO3TodpcdSBzpRN1lB0qOuoaMXtFAXUNHv2ig5ogdiSOdqDd1B+ozJ9voHg1UHPUpl9lDOnR7g3cgdiSOdKDSHXqg5Cg7Ko66xuw9DdQcsSNxpBN1hx6oX0cenaiBOt/sNO0RbogdiSOd6JiG6ig5yo56qlhfsLvxQNVRc8SOxJFO1N2Ytr0Hp+dcWJ9r63NvRyB8OybC7DWP1zJeabzW8Wrv7/Vrf+2f8njV47XL2Wsar3m8lvFK47WO1zZeB18ZfGXw0eCzhtOy1prN/lrGK43XOl7beOXxKuNVj1eLhv46+Orgq4OvDr46+Orgq4OvDr46+Nrga4OvDb42+Nrga4OvDb42+NrgM9Pn0ZPNoyObRz82j25sHr3YPDqxefRh8+jC5tGDzaMDm0f/NY/uax691zw6r9aamK37ax2vbbzyeJXxqserWdRS3sxoGW9W7K/2/zL6ngdIE5ikjo7nAWyGdBudzQPwBDufpW/vaXZg9fQAaYI8wU5ogdU7mQeoE7QJeAKZQAewum+Z2nuXB8gTlAlogjqBMSczUJ+ttoo76q3aL/uctb19mGd4Z1gnH87Jh3Hy4Zt62KYerqmHadrhmXZYph2OkcMwcvhFTK9Pinf3DvMO7w7rDucO49obaE65l54C9Y8uooVI7S/5j94uPqtvuZP0u7/ZfzuXAf7yr99++sn+ANYF9tWCf/z420+//uuHP/36719++fbD//3xl3/3P/rnP378tb/+68ff9v/da8xPv/73/roT/p+ff/nJ0P9+O9+9vX4rW8b2NzNXf/s+GRYlaNacdALZCAhylEBsYuUgUHlJUF4TlDYvofBZAsr1dwT0miD7Pdg7Ii8JYiWQ8pJgcQ80TwLt1fGP7wHfvYRFCarNB3WClvmtelDbrEjbSbD35qME+8BOeVDsQ7t83ocmv+NI6Qur8z5stNm8oxR1H1q8LMWiPlAus07T3g+Dz+P35UiLSlm4lbNS5dcc9QGOtriWjafBaVO8FnnznmZ6eU9lUb828hq61TMoyicY/FPZydoLhvV1+P3cr6OkV9eRFzW02Kra8ZG0s3Lt49/fM+RFMbZ9pD2Lse1j3pefSS6ri8l+KZhZnypHbmc5iF+Xo65YaPOS7Li8ZlmXhbezLLJgWaToPrz2G7uPbV7fldXnm91yTV5/vus7kuS8I7m+e1+RhfJLlrK4mkZpVte2p9prjvy1HLnMTzfX/PJzWTJ4/djH6y8Zti/pZO2zR/MO7BNE6Ppwhgp5L6lh8/r78CqL+Nun8WaA7rN358ewTzz8nkPvN2y03W+UKD3Ake83bEsOqbPLQsLbWxzha1mYvZ698Nrq4loesDrxbZsua2k7aynRy1pKuupNt9miaIZPtnD6HUdd9Yd1m5dSNW8vOgtrhtacATqjcYa2JfYOS5K3GCJdnuW93OcHfWgCjch393JRO3Xz8NJNt9ccbdVtmh9pUcg/+f0Iqa4ad/URyg7f5eDkHJLf4tgXQrwx2GDA+imOWk+jgd8/x0F0cuR3y9Gcg+V+Od7laJR9/Fu3Nzmql6PJdr8cb3IU4bOqb+/dj6LFRxl7oL7kaKu2nrV62wbtUtJPFEM3L4a+vpRVv0fnh6Iw6PvY7+FF+1p9kNLSa4ZVEdgTEEdsH4tA4REbxqj8/m7yIkZz37x7VK5jn/BoXtMnKmjyZm2HbwbH5p/JzvFmcKTkRkn5TbPt8+YnxwPX8i5HX9MbHMRvctTzs10Y9oLDG5bE2/1reZtDxDm0vceRz882J3mXYzs59Pa1vM0Bk7M4M/GRQ7f7YbzsC9J29gXf649GpuBWiw3JZ2fhGvbR6O/vA90fxGq9P4jVdn/QpvwAh9wfxC45goPYFUd4pnlL90exq5saHcWmrdwdxq7raWwYm7Z6fxzb28F7A9kLishIdkkRG8peUETGsusbGhzMptUSU3Q023s494azabXIFB3PXpDEBrRLkuiIdk0SHNJekMTGtFclCQ1q4yV5myQ4rL0giY1r4yV5lyQ6sl2TBIe2abU4EuxOXRTk9uCWvUcmW3vZH1p/MMEB3YWBYyO6i5LEhnRXlxMa08Uv522S4KjugiQ2rLsiCY3r4pfzPklsZLcmCQ7trkhCY7vw5bxPEhzdpeU6UjCP1v2jyPjuiuLeAC/ZevXsT+xSsAUnvNKpPkhU8G7i8Pvr/FCV9Y33S57hISSv3p9WaybNu8sNNyF9goF9upDT9ibD/Bw41zfuQiL3RqrY9YgvWVOb9ZEUt5SFy9DU7wKBOxOFL2LzupQ2DL0U3hfH6nv7ZIPxZCof7L2aARJtPuyQd0qxx1PxkIEe9t6N+lCKRZWo5N30SvJ6P0hq2/0x+upiSvNG0eauX97SttrOkdqZ3bBjUT9eS3lgONjogeFgq7eHg201I7Wd/eKt6Jsk/SG1gyStxk9N7jdm4atZdVeWJO2clGqc3iXJ4iS0vdPNz3SOBQn3OH+s8FyWa0iUzjUkPquJ1M+wEJ27wirs2Jb4VuHsndqaRReXs7ite1epnRuy9rnL15ezZKFzrC4V7Pc5FvYg2DHUlPhNoXOhcv+I6+ubIqs7y97YVIZ9YunjLKos5qekeIPF9LLZXVOozzvCLsjvKRYVjTN7KkJftH74WGSVrHqumbaz5S30cctvXXXF2FtvBoqPxWgPtBLCD7QSIrdbCdEHWoklSbSV0HS/lVgWJBrwYRJw7udIorNSWr/4lgRnpZbOE3Ae9jY/Om+1IpSyenNFUEm+J3lg91mfDbjrvbylu97LW77vvTVJ0Ht5o9sVbV2QoPcuSGKdq2VT085VMngW4mNTkzdZrXDxucKlWFm3DyS66uadE1uEK2368emB7f7idE4PbI/OKT9BsupvlpJ8laoUej1gXN/a4mXJJGlxax9Y/curx6HCYZL4dpisHmYKh8mSJBom+f7WlPjVLIZ7a5JoIoVJFr2BNUmwN5AfWKO6KEisN7AMx7b5I01tH0e9DscsD5gv6wPmK9tt862eigqbb0kSNV8p9yvJsiBR36xJYi35uqaVc/1h99DrmlZW4doP6xr3FdZB0odma/0USvUesPLLGfglx97x8fVQXI/5yEHLCYHTedurtZSLUpzzpLhB7LtS5C8tRfLHy2357737maQ8wLHd5ii+wyyX+rpurJ6T2hdjfWGCYBvjpzio+EPVRE9w8Jsc9RzotfYuhz+9i/27t6/lXY66+bXUtN3nKO9ynHO9tdFLjtUTUzHXrktxPg7dFm6pcrcU60bBG9u9UaDXjcJy2Sp7G1czkHxsFNYcvtK/f67tNcfygVFv9EnaExz6kiN+U2VxU1ePmNN2HtgBC5vfXcxqy0Hyp9RbqguO1Z7f6n2PVtH5b3O8rCDRafOcF9Pmy2NYvNOwr2aklysAmVeHoGTYZ48tw3ck+YEO+2q5KdxhXz09Feywrx6dCnfYlyTRDjvz/Q77siDRDvuaJDr1tnzG2duptq2q68o25Bw1QRdEPrQysjr+I/kKa0q4fkfxYlQ6d6jrohi0uh3umX3Q3F5Xd3limkqemKaS+9NU8sQ0lTwxTfXAE1TrgkSNtyYJjpRXlfV8DGpfxX9tmqV5d8eeNR6b74/m1eURU+RDu8IVukUf1s7z6nEq2c4NTvK7B2TjK/B7D098X1Ej6G3ayOb3RVmuW5H42CzvvYLzAyof+karlat6jjT3vmd9SVKWK1fBKCjbA8+rlO328yplKw+Y52JVkT3p93vHi09nRbNf7LksscGt/SRNOsdpBU/i+v5j5rstT1kvYMVanrI9sNpa0gOrrSXdXm0t6YHV1jVJsOUp6f5q67ogQfNckMRanmVlDbY8F76Bk+PKPth97ZukD7Q9ZbV+FW57Li6pnNM+hXgRBatz7PZGzCdKGfbG2qbfOEndThLY/f09yfLMinQeqFdWJXng5J+Sbx/9U1YH+4Xtkx84VKXk+6eqXBQktqq3riTq+y/3BpBff77Lo/38QWmuMGeytQ8UD2zCLuWBTdil3N6EXcoDm7DXJNFGp9zfhL0uSNQ15YH908t6pudhpXjqw/cV7eK40rNfr69JaLWfJfviz04Ck9Ft+wRJ8Y1CiWB18XuS1faA3qgdHzAuQxWWz5DIvCf7LIwuSHg13cg+2wh7bPlDG0yL2srVH0PnitPzH4ux6g2cJz8UvJYPqxVldcJJOR+A22OpvsdxjvxK3tJ7HDmfHGVRjvUj275e2lbXQrfXwZccwXXwcnst66IUoXXwcnsta12K2Dr4FUd5gGO7zRFbBy+t3F4HX3PE1sE/wcFvcoTWwa84Iuvg8Wt5lyO2Dh7nKO9yhNbBC9/dvXJRitA6eFktYgWzY5nn7NnRFgm2etIpmufLp6WCec63k3Rdiliey/alpQjm+QVHeYBju80RzPPV2lU0z5ccwTyPc/CbHLE8v+AI5Xn4Wt7lCOZ5mKO8yxHLc72dpOtSxPJc25fmOZ9nw7C+vp/rWceY35YcQb/FOfhNjpjfLjhCfgtfy7scQb+FOcq7HCG/0XJ1KlTT16UI+Y1Wa1NBvy3H1H4KR8Evd/lYitW6VHBMTatVmGAfbMkR7INRupujF6UI9cEotS8tRawPdsVRHuDYbnPE+mC0+gKiYJuw5oi1CZ/g4Dc5Qm3CFUekTYhfy7scsTYhzlHe5Yi1CeXuyOmiFLE2oeTb2ZFuj6mp3J8jXXJE87zcTtJyf46UinxpKYJ5Xu7PkV5xbLc5gnlO9+dI1xzBPI9z8JscsTyn+3Ok8Wt5lyOY52GO8i5HLM/r7SSl+3OkVOlL8zw2pqbVWlPUb0uOoN/iHPwmR8xvFxwhv4Wv5V2OoN/CHOVdjpjfVk9OxWr6uhQxv7XbI/vl0r8f6M1wxvnHpX9afc1UcOmfeLu99E+cbi/9rzliS/9rjtjSP60Wm6LTFKvng6Ld2uU3VgW7tXy3kl6UItatZf3SUgS7tRcc5QGO7TZHsFu7elYq2swuOYLNbJyD3+SINbMXHKFmNnwt73IEm9kwR3mXI9bMarnr2nUpYs2s3m7s13kem6ZQvp/nyvfzXG8n6boUoTyvy6+aul+KYJ5fcJQHOLbbHLE8r9v9YdOaI5bnn+DgNzlCeX7FEcnz+LW8yxHL8zhHeZcjlOc13U3Si1KE8rwm/tI8j01T1NXDT1G/LTmCfotz8JscMb9dcIT8Fr6WdzmCfgtzlHc5Yn7LdyfzL0oR89v9xab1mDq09F9Lvj2mrqtnnYJ9sCVHsA9Wy+0cXZci1gcr/KWliPXBrjjKAxzbbY5gH2x1UF+0TVhyBNuEOAe/yRFrEy44Qm1C+Fre5Qi2CWGO8i5HrE2od0dOF6WItQm13M6OfHtMXev9OdIlRzTP6+0krffnSGvVLy1FMM/r/TnSK47tNkcwz9v9OdI1RzDP2/050guOWJ63+3Ok8Wt5lyOY5+3+HOkFRyzP+XaStvtzpJXrl+Z5cEzN94/lXXME/Rbn4Dc5Yn7j+8fyxq/lXY6g38Ic5V2OmN/k7ja9i1LE/Ca3H8BbLv371/tIfv3Uf10dybf79PzytoTfEqafIJGM3yP3Jsl5WsZOkl6SBDdDSNaXd2RJIe43kRXF6kiH2mYfiqq+Pheirp5uyj2sj/uBp+F+f1OXqwp+QzIlXpCsvjcieLJLXa05xU52advyZIjYyS5rkuDJLm27/13R64IET3aJkyy+KmVNEjxUqa1m9R+5JdFDldbm85pGLdNL87XlMXw+CEop5dccafmwk98Q+I7PIukDxeo0a48Aga96/55iNdLP57G8eMpbkngx9Px2L87vXQl+keQm73Gk7ewapry6pavVp3NYuWG8f6im6YEvkmzp9hdJtvTAVy+uSaLmz/e/SPKiIFHzl+Wn68fhCxwA/7mzoUT8bCjdFiR5efZl++Ov0/rMKYLlrPF7u9XeJDn7AL/bmfmRZHmu73lA+I7hLN2P5/q21cF78ZNj1zThk2MvaKInx7blE1Chk2Pbat0henJsW56/FzzEr5UHDots5fZhkW35BVLRrt76W6iCXb1y/7DIdUGiQb0miR3it6yswZNjL1wcPZ270epJk+Dp3Bcejp5iu6fW4t5GT7Fty5Fj9BTbi0uKnmLbVkfxRU+xXZMET7Ftddlti51i21ZPR4WDabViFQym1fNRYSsvSaJ9rvrAgGtdkFifa11JgqfYttXCVewU29YeOKm/tQdO6m/t9kn9bXXeWbgBXJJEG8B2/ztQ1wWJumZNEmwAV/UseIrtkiN6im1bPS8VPcV2TRI8xbatDueLnmJ7QRI7xbat9mTGTrFtq0Ws4KNsbXUKW/BRtsbLDmzoUbY1R+xRtjVH7FG2JuvRX2TbXVt9WU5wm8aSI7hNo8ndpdaLUoS2aTSpX1qK2DaNK47yAMd2myO2TaPpdnvZeM0RWzb+BAe/yRFaNr7iiCwbx6/lXY7YsnGco7zLEVo2brcfm7ooRWjZmG8/NnWR56Ftd7zd30a95AjmOW93k/SiFKE859vn861LEcvzK47yAMd2myOW55zub6Nec8Ty/BMc/CZHKM+vOCJ5Hr+WdzlieR7nKO9yhPKc890kvShFLM9z+dI8j22743z/1Og1R9BvcQ5+kyPmt3z/1Oj4tbzLEfRbmKO8yxHzW7l7ttRFKWJ+u31G38WYOvQoG6/O6AuOqXm1NBXtg604on0wup2j61LE+mBUvrQUwT7YBUd5gGO7zRHsg9H9k83XHME2ge6fbH7BEWsT6P7J5vFreZcj2CbQ/ZPNLzhibcLtx6YuShFrE24/NnWR57Exdbs/R7rkiOZ5u52k7f4cKd8+n29dimCet/tzpFcc222OYJ7z/TnSNUcwz/n+HOkFRyzP+f4cafxa3uUI5jnfnyO94Ijl+e1D+i5KEctzSV+a58Extdw/NXrNEfRbnIPf5Ij5Te6fGh2/lnc5gn4Lc5R3OWJ+07unRl+UIua3298HtV76D51iy6sHpoJL/7x6Xiq49M+rx6WCS/9rjtjS/5ojtvQvW7o9TSHb/S/bWXIEu7Wy3a2kF6UIdWtla19aili39oqjPMCx3eaIdWtl+VhQrJldc8Sa2U9w8JscoWb2iiPSzMav5V2OWDMb5yjvcoSa2f4M8z3XrksRamYl59vZkW5PU0i+/2U7S45onufbSZrvf9mO3D6fb12KYJ7n+1+2c8Wx3eYI5nm5P2xacwTzvNwfNl1wxPK83B82xa/lXY5gnpf7w6YLjlie0+0kLfeHTUL0pXkem6YQun9q9Joj6De6f2r0BUfMb3T/1Oj4tbzLEfQb3T81+oIj5rd6dzL/ohQxv91fbFqPqUNL/1L1/ph69axTtA+24oj2wdrtHF2XItYHa/SlpQj2wS44ygMc222OYB+s3T/ZfM0RbBPiHPwmR6xNaPdPNo9fy7scwTYhzFHe5Yi1CXx75NTun2wucntkv87z2JhaHpgjlQfmSOV2ksoDc6S3z+dblyKY5/LAHKk8MEcqD8yR6gNzpPrAHKk+MEeqD8yR6gNzpPrAHKk+MEeqD8yR6v05Ut1uJ6nenyPVLX9pnsfG1LrdPzV6zRHz2yc4+E2OkN+uOCJ+i1/Luxwxv8U5yrscMb+lu9v0LkoR89vt74NaL/2HTrHV1Yl80VNs1yTBU2yvShI6xTa4GWJ1iu2SInaK7fpIh+Aptrp6uil6iq2uVxVip9hqfuBoM823jzbT/MDRZmuS4Mkumu8fbbYuSPBklzjJ4hTbNUnwUCVdzeo/ckuihyqtzRc7xVZXjzoFT7HV5bFzoVNsdbWXMnaKrZb1mXORU2yXxYidYrumiJ1iu+SInmKrF+ecnoNs+GA/VNPV4lM4D1eHLQfzcHn2XjRBliRR86+eJImaf12QqPm35acbOsX2giR2iu3ybLfoKbYXJLFTbNckj5xiy3yuvID3Pp5iq6uD9/YWyifrdsy8oOFlpJ1HV2aCXa8fTovUulqQIq+yCeaG6tuXI+315axWHdhdzHBkJeVPFcQvxgqVFwXJX3tH2nker7Qqi4KsRletJG9/W4ERfPvQaq0eg4pXk9bu3pRPXA18Ot9djdytJetykB+4vGPIpI/lWIUj5TILQgX2V+/3+gPJYrqqnFdTsL34niQ/QbLqtm4s3ktTvBz51J31AbDd2df1dXUA3z7NDVPv+0TNa5ZVzzV4lqfyA+f0K98+p19ZHxjxLUmiIz65f07/uiDR/lqYZDXi4we+ukClfvEtCXb6LuzXD8kb9mOYFGyfMjHzOacnUNs+sshquMXNT7LeMSTK51iqn9i640WgrBYFqla/u3XvgtSXDaAuF+LOZckM04z6sSTlgVDSJ4Zden/YpU8Mu/SJYZc+MOzSB4ZdFzWtpXrWNDiU90NN2wf/q5At5+XAKoW2T5WkkZeEX9f5vSSLCrt32c7Z+VJgIvhzNFTz/Jh3TK+7oPE04Pqy47YXZrlb1U8KTwVmgj58g8EVCS7P0YJEbkfKTrI6jzqfs1IZcvZjHByH6L/8hM5HDveAhImpz5QkmG57SR44p99O376bbzvHAyf1X7AEE25nuX9W/1VRYhl3VfWFAlX/wsr95I5pZc3vdQ8kpXOaazfT60BYneKXc/UFxN2GaZErq2er4tV/tdwVr/6r9a5o9V8td0UHHRcswVHHzsIPVP9lUcJ+XrPEvkTgquae32MlCRY1vqtyZXneT0n+RQJ7pePXzfPyC6hEvI2HydXtc0Wh7LM7+7JBWxRlteoc/QacyxvjW3B2zKsbs57HI5/GA5L2mfoSDN3ltHM7N2a21XTifjnLr53whNrnAWHhSLdPsOzVTE8bgRe/M+PqyL99Ee78Cig5bcQf7y3dH5OljcoTuf3EYtjOUu/n9nIBKZzbS5Zwbj+wIHZRlHBuh1kWE0YXLOHeXM1ffVseCZYEwZLTIlhWD2fZirTPPG37FMsZtx+vaLVssreJZ6cQzl/5LhNWq2KxwfNFQcRJkrAuCqKPjJ3XNOTffrZj2BH2Hc3q+Ld9Vs+bMsbpuM9wSD5XtYjf5Ig1qctbEp1OWH/KOeVZlH2ZYfEptydmE9r9IdXSyeJ7W3esdeHktt4mA98qRcvmnZfzCb48tk8ttJfzCeuy1AJfEwmV5Q/Ksnz84ewlUCmvewn8SC+BH+kl8AO9BH6kl8CP9BL4iV4CP9JL4Ed6CfxIL0HyV9+W8JzPhRX1jIVWy8KKy7WyYOO8LktrPrbbp2t0VZZFR4E3PY+M23TVPos8MmJdlmbvN00rcdobhNc0q+8HIp23plYYyqct3pDoORnGG0xwfN+QrJbL4mNNzU+MNVcrZuGx5mrFLDzW1Ad2JewsD2xL2FnkfiuiD2xMuGCJtiJpSw/EpeoTrYjqE62IPrA7Yb8t9atvyxNjTfXdCRYyi2BJmzwx1kyb3h9rptWqWbA5WxckONZMq0Wz+FjzgiY61kyrdabgWHPNERtrXnCExprrWxIeay4/5ehYMyW9P9a8ILk71qyk4p0MfHyxfMyl1XJZltLwablFlV3T0PmwrdStvUtTM9DIjdKczxHiM28faZYnSpwPZ9S963Kmbdk+VRY+u2B79X9p5uVHXc/+JDYeJZz73PzhHW54qLJR/Nf+449/+/m3v/zy97/9+K+f//7rP+2diX+wJ0u//ZBkBzYWSDpA3iZIE+QJygQ0Qe05v4M2gTFbebJMYMy2B7RsE6TeJOwgT1AmoMFT6vxNm8CYbTRXZAIdgLYJ0gTGbP1eKhPQBLU3IDtoE7Ctxe1FJZlA+87Ybz/UbYI0QZ6gTEAT1AnaBDyBTDCZ22Ruk7lN5jaZW2feS9jqBMZs81CNJzBmW01qxmzT2WzMtmbAaQJjtnrGZQJjthlArhMYs3WqmPsE1w6kD1B2YMw2vSDbBKnHyw7yBMZs4xqhCYzZBg3SJjBm63aLTKDWrd1vuG79QZYdpN5F3UGeoBjYRZUm2JmL3R9tE7CBvRgq9hjKXmbVAfZhkiPjtlu1ryc6Ko6M3tbC9s6eITLUHLEjcWQadsf3lslRcpQdlTEW2NtSR6ZhM/4pmYZ9JslcOZA4Mg37fJIZc6DUF8kNZUfFEfV1c0PVkWlY/yWZPwcSR6ZhVk1m0YFMw8yazKTFDJjMpQOZhnU2k/l0INOwli+ZUwcSR6ZhTzslM+tApmF952R2Hag4oj5uMlQdtd49NsSOxHbUW5aZaw9kth0o2fMU9umbcQcqhuzKzbpklSyZdwdqjtiQ6Zp9BzIN24OfzMADJUemYU1GMg8PZBo2zkjm4oGaI9OwmdxkRh5IR8c3mZXJHv1M5uWBTKPXWHPzQKbR6675eaDmyDR6jTVLD2Qa9lBRMlMPlBzl/niroeLINHqdNGcPZBo2757M2wOJI9OwJElm74FMw2aFkhl8oOKIHJlGr51m8oFMw6biktmcuPPpQNl8PpBpWAOfzecDlT46M0SOqiPTsGm1bD4fyDQstrL5/EDm84FMwxqPbD4fyDSs55bN59UOYsnm84GaoWyIHYkhUzOfH8h8PlAyxIayo2K9F1Mznw9UHbXetzHEjkzDamc2nx/IfF5zb9KTo+zINKx2ZvP5QKZh7U02n1fb05HN5wOJI9OwZ2uz+Xwg07CtCtl8PlBxZBo23ZLN5wOZhuVkNp8PJI5Mo1pZzOcDpT4hZ8g0rG+TzecDmYZ1hrP5fCDTsAYvm88HEkemYZNa2Xw+kGkcvZ3sqDgyDaud2Xw+kGn0Omk+H8g0bKIym88PZD4fyDRsY1M2nw9kGtakZvP5QNWRaVjHJpvPBxJHptFrrPm8au+ZzTYqS3ZU+pKSITJkZTGfD9Ts7JD+v+xIHOlE5vOBkqPsqDgiR9WRa6hrqGvo1Cjb5ig5yo6KI3JUHTVH7EgcuUZyjeQayTWSayTXSK6RXCO5RnKN5BrZNbJrZNfIrpFdI7tGdo3sGubzvoupmM8PZD4fKDnKjoojclQdNUfsyDWKa5BrkGuQa5BrkGuQa5BrkGuQa5BrVNeorlFdo7pGdY3qGtU1qmtU16iu0VyjuUZzjeYazTWaazTXaK7RXKO5BrsGuwa7BrsGuwa7BrsGuwa7BruGuIa4hriGuIa4hriGuIa4hriGuIa6hrqGuoa6hrqGuoa6hrqGuoZODdo2R8lRdlQckaPqqDliR+LINZJrJNdIrpFcI7lGco3kGsk1kmsk18iukV0ju0Z2jewa2TWya2TXcJ+T+5zc5+Q+J/c5uc/JfU7uc3Kfk/uc3OfkPif3ObnPyX1O7nNyn5P7nNzn5D4n9zm5z8l9Tu5zcp+T+5zc5+Q+J/c5uc/JfU7uc3Kfk/uc3OfkPif3ObnPyX1O7nNyn5P7nNzn5D4n9zm5z8l9Tu5zcp+T+5zc5+Q+J/c5uc/JfU7uc3Kfk/uc3OfkPif3ObnPyX1O7nNyn5P7nNzn5D4n9zm5z8l9Tu7z6j6v7vPqPq/u8+o+r+7z6j6v7vPqPq/u8+o+r+7z6j6v7vPqPq/u8+o+r+7z6j6v7vPqPq/u8+o+r+7z6j6v7vPqPq/u8+o+r4fPyaacukY11DWaoeyoOCJHXYMNNUfsqGuIIdOwWZLafV76vJZpUP9ddmQa1kev3ecHMg2bZ6rd5wcyjdrfYRo2Wqzd5zYyrN3nBzINm0qs3efcp9GKI3JUHZmGjQdr9/mBxJFO1H1usxW1+/xApmHzg7X73GYmavf5gaoj07A5itp9fiDTkM6iE3WfH8g0tE/5ZUfF9j3YPTCfD1QdNUNWFvP5QGLISmA+Z5sQq+bzgZIhu7vm84FK381giBxVR6ZhvcNqPh/INHq9Mp8fyHw+kGn0umY+H8g0em0ynw9kGjZHUc3nA7Ej07DZimo+76iZz9nqUDOfs81MNPP5QMWRadgcRTOfD2Qa1FnYkTgyDXu6rqXNkWnY2K+ZzwcqjkzDRoHNfD6QadgMWjOfs82bNfP5QKZhNbaZzwdKfcbdUHZUHJkG93nd6sg0bD6imc8HEkemYbWzmc8HMg2rk818PpBp2FPQzXw+UHVkGjbOa+bzgUzDZsua+fxA5vOBkqNsW2ysLObzgciQMZvPxWYmmvl8IHYkhuzzMJ8fyHwuNufWzOcDZUemYUuDzXw+kGn0uW/z+UDsyDRsnreZzw9kPu9Lmc18LpZrzXw+UOknNBoiR6Zhj+s08/lA7Mg0+sy6+fxA5nOxrGvm84GyI9Owxe5mPh/INHrtNJ8PZBo2R9HM5wPpROZz6bXTfD6Qadhm32Y+F5uZaObzgaoj07A5imY+H8g0WmfRicznA5mGTe438/lApsF9KYEcVUemYTO9zXw+kGnYDFozn4vNm7H5fCDTsFkNNp8PZBq21YHN5wNVR6Zh8xZsPh9IbBNOMqQTmc8HSoZs2cJ8PlAxZCUwnw9U7VRQMtQcsSPTsBk0Np8fyHyuqa+eJEfZkWnYKjCbzweqjkzDaiybz9WSlfNsozjPNorN52qtLpvP1eoam88HMg3q/0uOqqPmiB2JI53IfD5QcpQduQa5BrkGuQa5BrkGuUZ1jeoa1TWqa1TXqK5RXaO6RnWN6hrNNZprNNdortFco7lGc43mGs01mmuwa7BrsGuwa7BrcNewz5ybI3YkjnQi2RwlR9lRcUSOXENcQ1xDXENcQ11DXUNdQ11DXUNdQ11DXUNdQ6eGbJuj5Cg7Ko7IUXXUHLEjceQayTWSayTXSK6RXCO5RnKN5BrJNZJrZNfIrpFdI7tGdo3sGtk1smtk18iuUVyjuEZxjeIaxTWKaxTXKK5RXKO4BrkGuQa5BrkGuQa5BrkGuQa5BrlGdY3qGtU1qmtU16iuUV2jukZ1jeoazTWaazTXaK7RXKO5RnON5hrNNZprsGuwa7BrsGuwa7jPxX0u7nNxn4v7XNzn4j4X97m4z8V9Lu5zcZ+L+1zc5+I+F/e5uM/FfS7uc3Gfi/tc3OfiPhf3ubjP1X2u7nN1n6v7XN3n6j5X97m6z9V9ru5zdZ+r+1zd5+o+V/e5us/Vfa7uc3Wfq/tc3efqPlf3ubrP1X2u7nN1n6v7XN3n6j5X97m6z9V9ru5zdZ+r+1zd5+o+V/e5us/Vfa7uc3Wfq/tc3efqPlf3ubrP1X2u7nN1n6v7XN3n6j5X97m6z9V9ru5zdZ+r+1zd5+o+V/e5us/Vfa7uc3Wfq/tc3efqPlf3ubrP1X2u7nN1n2v3ee1bSkzD1hu1+9zWxbX7/EA6Uff5gUzDViO1+/xAxZFp2Eq6dp/bTg7tPj8QOzIN6/Nr93lH3efW09fu8wNlR8WRMdvoU7u7bQSp3d0HEkfG3PdgbN3eAxq3PYmxQyPv2ys2c7j9omPquG9+MZc7bvN5hP1fBiwdc8e2W2vrmyg28/v+b+c3x6ctHxt0cse9CKkA7rp9c8SWum7fHrGlBrjr0sHZdevx93rivrlt6xvftr6/bWtdt29xm7jr9q00W9/oNnEF3AB33XbwC2A9cd/6NnECnAEXwAS4Am6AQbeAbgFdAl0CXQJdAl0CXQJdAl0CXQJdAt0KuhV0K+hW0K2gW0G3gm4F3Qq6FXQb6DbQbaDbQLeBbgPdBroNdBvoNtBl0GXQZdBl0GXQZdBl0GXQZdBl0BXQFdAV0BXQFdAV0BXQFdAV0BXQVdBV0FXQVdBV0FXQVdBV0FXQ1VO37+VznABnwAUwAa6AG2AGLIBBN4FuAt0Eugl0E+gm0E2gm0A3gW4C3Qy6GXQz6GbQzaCbQTeDLuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXmXIqwx5lSGvMuRVhrzKkFcZ8ipDXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuRVgbwqkFcF8qpAXhXIqwJ5VSCvCuQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkFUFeEeQVQV4R5BVBXhHkVYW8qpBXFfKqQl5VyKsKeVUhryrkVYW8qpBXFfKqQl5VyKsKeVUhryrkVYW8qpBXFfKqQl5VyKsKeVUhryrkVYW8qpBXFfKqQl5VyKsKeVUhryrkVYW8qpBXFfKqQl5VyKsKedX3zToGXcirCnlVIa8q5FWFvKqQVxXyqkJeVcirCnlVIa8q5FWFvKqQVxXyqkJeVcirCnlVIa8q5FWFvKqQVxXyqkJeVcirCnlVIa8q5FWFvKojr44HczfAh25/OHfkVX/w98ir/rhyPfJq4Aq460rnP/Jq4K7bV8XqkVfS//7Iq4G7rm30TX0/rs1Cd1wAU8edp+fVxKab0vFe7rjr9ryaWDvu19jzauIEOAPuuqnz97yauAJugBmwAFbHfc+u4wQ4Ay6ACXAF3AAzYAEMugl0E+gm0E2gm0A3gW4C3QS6CXQT6GbQzaCbQTeDbgbdDLoZdDPoZtDNoFtAt4BuAd0CugV0C+gW0C2gW0C3gC6BLoEugS6BLoEugS6BLoEugS6BbgXdCroVdCvoVtCtoFtBt4JuBd0Kug10G+g20G2g20C3gW4D3Qa6DXQb6DLoMugy6DLoMugy6DLoMugy6DLoCugK6AroCugK6AroCugK6AroCugq6CroKuhCXjXIqwZ51SCvGuRVg7xqkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXDHnFkFcMecWQVwx5xZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwJ5JZBXAnklkFcCeSWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlkFcKeaWQVwp5pZBXCnmlZ17l7cyrvJ15lbczr/J25lXezrzK25lXeTvzKm9nXuXtzKu8baCbQDeBbgLdBLoJdBPoJtBNoJtAN4FuBt0Muhl0M+hm0M2gm0E3g24G3Qy6BXQL6BbQLaBbQLeAbgHdAroFdAvoEugS6BLoEugS6BLoEugS6BLoEuhW0K2gW0G3gm4F3Qq6FXQr6FbQraDbQLeBbgPdBroNdBvoNtBtoNtAt4Eugy6DLoMugy6DLoMugy6DLoMug66AroCugK6AroCugK6AroCugK6AroKugq6CroKugq6CroKugq6CLuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lSCvEuRVgrxKkFcJ8ipBXiXIqwR5lUZecccJ8KHbj/AceXXgrtuPzjz2tyd7uD8f+9uTHUORj/3tE3fd3A8KPfLqwEdeDZwAd93cDwI98mpgAlwBH7r9WkZeHceOHrr9Wo68OvDIq/43R17lA2fABTABrvDeBhh0K+geedUPEj32t6dyHH+aAGfABTABroAbYAYsgPXEDLoMugy6DLoMugy6DLoMugy6DLoCugK6AroCugK6AroCugK6AroCugq6CroKugq6CroKugq6CroKunrqHvvbJ06AM+ACmABXwA0wAxbAoJtAN4FuAt0Eugl0E+gm0E2gm0A3gW4G3Qy6GXTz0P1fO7H/t59//OsvP/3zhz/9x47l//evf5tH8O8//uv//WP+z19/+/mXX37+n7/847e//+2n//73bz/Zcf32fz9s/bj+/d8/78mVkx3nn85f6bdM9qvsvyL5Vov9qviv9ojJar8i/1Whb6X/qn7P1c5fybfcuXiU5M9lj59C9F/fBs3+ppL7j6mzyrdSN3uH+Dvq9q00/a9eoD+XUvb3F38/7eUg9ffz/r9c7f36fbnSNjn36Py2R8tksazZE3qy7EGz/28vd+q3yoSt3HW+gbZv1FUS3Lf0jVr/XfH3qN2k795Df/CJ1Aud5v+/3yHxy9dvdFwaX7xf/kBTV++xL374/w==",
      "is_unconstrained": false,
      "name": "withdraw_private_to_private",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5d8zUZszJ5d02ZvLumTN5dUybvrimTd9eUybtryuTdNWXy7poyeXdNmby7pkzeXVMm764pk3fXlMm7a8rk3TVl8u6aMnl3TZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumutkzMrk3TVl8u6aMnl3TZm8u6ZM3l1TJu+u+aOMWZm8u6ZM3l1TJu+uKZN315TJu2vK5N01ZfLumjJ5d02ZvLumTN5dUybvrimTd9eUybtryeTdtWTy7loyeXctmby7lkzeXUsm764lk3fXksm7a8nk3bVk8u5aMnl3LZm8u5ZM3l1LJu+uJZN315LJu2vVlTErk07Xqi9jViZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5lkyWXEsmS64lkyXXksmSa8lkybVksuRaMllyLZksuZZMllxLJkuuJZMl15LJkmvJZMm1ZLLkWjJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5VhcZszJZci2ZLLmWTJZcSyZLriWTJdeSyZJryWTJtWSy5FoyWXItmSy5lkyWXEsmS64lkyXXOkzGbHcZszL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aQ2XMyuS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//WKpYxK5P/1pLJf2vJ5L+1ZPLfWjL5by2Z/LeWTP5bSyb/rSWT/9aSyX9ryeS/tWTy31oy+W8tmfy3lkz+W0sm/60lk//Wksl/a8nkv7Vk8t9aMvlvLZn8t5ZM/ltLJv+tJZP/1pLJf2vJ5L+1ZPLfWqT8twPzxhYVT+5fmF8yN37FGmvUrrvt3mmPPffq3KXr3vvsu9/+Bxx40MGHHNrtsO49evbq3advv/4DDj9i4KDB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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "withdraw_private_to_private_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "max_shares",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "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vLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLumRAZWJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7ppyGViZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a26XgZXJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2tk8u4amby7RibvrpHJu2uEXp6XybtrZPLuGpm8u0Ym766RybtrXpGBlcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+ukcm7a2Ty7hqZvLtGJu+u+UoGVibvrpHJu2tk8u4amby7RibvrpHJu2t+kIGVybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766RybtrZPLuGpm8u0Ym766Rybtry+TdtWXy7toyeXdtmby7tkzeXVsm764tk3fXlsm7a8vk3bVl8u7aMnl3bZm8u7ZM3l1bJu+uLZN315bJu2tny8DKpNO1G8nAymTJtWWy5NoyWXJtmSy5tkyWXFsmS64tkyXXlsmSa8tkybVlsuTaMllybZksubZMllxbJkuuLZMl15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdeWyZJry2TJtWWy5NoyWXJtmSy5tkyWXFsmS64tkyXX7i0DK5Ml15bJkmvLZMm1ZbLk2jJZcm2ZLLm2TJZcWyZLri2TJdeWyZJry2TJtWWy5NoyWXLtfWVg+8rAyuS/tWXy39oy+W9tmfy3tkz+W1sm/60tk//Wlsl/a8vkv7Vl8t/aMvlvbZn8t7ZM/ltbJv+tLZP/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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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IicMtbjTOx1X4XlchZKOy/D8uEjvuA6vwyNLjutyjyvxPB5hmI5L8QYMteOqqONivAGV0AhDzU/eStgAjyzpMBFmwkIohEpohFQTqgnVlGpKNaWaUk2pplRTqinVlGpKNaOaUc2oZlQzqhnVjGpGNaOaUc2p5lRzqjnVnGpONaeaU82p5lSrVKtUq1SrVKtUq1SrVKtUq1SrVGtUa1RrVGtUa1RrVGtUa1RrVGtQOy7nGzARZsJCKIRKaIROWAmplqiWqJaolqiWqJaolqiWqJaolqiWqZaplqmWqZaplqmWqZaplqmWqVaoVqhWqFaoVqhWqFaoxizJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLMnMkswsycySzCzJzJLMLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwpzJLCLCnMksIsKcySwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSYZYIs0SYJcIsEWaJMEuEWSLMEmGWCLNEmCXCLBFmiTBLhFkizBJhlgizRJglwiwRZokwS4RZIswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosUWaJMkuUWaLMEmWWKLNEmSXKLFFmiTJLlFmizBJlliizRJklyixRZokyS5RZoswSZZYos0SZJcosMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUuMWWLMEmOWGLPEmCXGLDFmiTFLjFlizBJjlhizxJglxiwxZokxS4xZYswSY5YYs8SYJcYsMWaJMUvOSzaPG93PazY7PNTsgE54qNUDHmqxLH9euNmOm76PLOkwExZCIVRCIwy146738wLOdqgdWXLCyJK6Hf82sqTG3cPpuIhzwBKwHFAIldAIPeBxHiJLBmwDHhdzDnionfei59Gc43rOGlfFp+OCzgGV/+BQO25X35ywEjbAI0vOrx1Z0iHVEtXSoXb+7XFsx93vyQidsBI2wLwRJsJMWAiFkGqZaplqmWqZaoVqhWqFaoVqhWqFaoVqhWqFaoVqQjWhmlBNqCZUE6oJ1YRqQjWhmlJNqaZUU6op1ZRqSjWlmlJNqWZUM6oZ1YxqRjWjmlHNqGZUM6o51ZxqTjWnmlPNqeZUc6r5qfbveJrP77/89Odff/77lz/8Kx7Z88/f/jIez7P/8R///2/j//z5919+/fWX//3T337/619+/u9//v5zPMon/t+X7XiUz/7fPyb7mlM86ifxr9rXLPFXGX8l9auW+KuCv8ryNbf4K8FfFflajr/S77mMf1W/5oPLe0v+GO9q31fh/utrp9m/tC84xh/TwVq/7its8Y2Kb+j2dV+k+q+jQX/clw737xd8X/Z2SMP3963MfTkqvt++b1faBue+nvF1r1QGy74M/HVf5Bsse1Wx/9+j3ek4VSEc7dbxBdm+yqGSLuctfRU7/q7gOy1O0nffkf/wi+gTHXvy/x3/fz+DFaenfZXz0OuT77ePbYqHQv0f",
      "is_unconstrained": false,
      "name": "withdraw_private_to_public_exact",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "11217216648848338406": {
            "error_kind": "string",
            "string": "The provided public data tree leaf preimage is not the correct leaf for the requested slot"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15711892660910782274": {
            "error_kind": "string",
            "string": "Hint values do not match hash"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16216212843441549037": {
            "error_kind": "string",
            "string": "Proving public value inclusion failed"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "2014890719615096298": {
            "error_kind": "string",
            "string": "Field failed to decompose into specified 40 limbs"
          },
          "7555607922535724711": {
            "error_kind": "string",
            "string": "Preimage mismatch"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9589626482238399944": {
            "error_kind": "string",
            "string": "Non-zero hint for zero hash"
          },
          "9703767922216001139": {
            "error_kind": "string",
            "string": "Can't read a pending nullifier with a zero contract address"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "inputs",
            "type": {
              "fields": [
                {
                  "name": "call_context",
                  "type": {
                    "fields": [
                      {
                        "name": "msg_sender",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "contract_address",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        }
                      },
                      {
                        "name": "function_selector",
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        }
                      },
                      {
                        "name": "is_static_call",
                        "type": {
                          "kind": "boolean"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                  }
                },
                {
                  "name": "anchor_block_header",
                  "type": {
                    "fields": [
                      {
                        "name": "last_archive",
                        "type": {
                          "fields": [
                            {
                              "name": "root",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "next_available_leaf_index",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                        }
                      },
                      {
                        "name": "state",
                        "type": {
                          "fields": [
                            {
                              "name": "l1_to_l2_message_tree",
                              "type": {
                                "fields": [
                                  {
                                    "name": "root",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "next_available_leaf_index",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                              }
                            },
                            {
                              "name": "partial",
                              "type": {
                                "fields": [
                                  {
                                    "name": "note_hash_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "nullifier_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  },
                                  {
                                    "name": "public_data_tree",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "root",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "next_available_leaf_index",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::state_reference::StateReference"
                        }
                      },
                      {
                        "name": "sponge_blob_hash",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "global_variables",
                        "type": {
                          "fields": [
                            {
                              "name": "chain_id",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "version",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "block_number",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "slot_number",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "timestamp",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 64
                              }
                            },
                            {
                              "name": "coinbase",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                              }
                            },
                            {
                              "name": "fee_recipient",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            },
                            {
                              "name": "gas_fees",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                        }
                      },
                      {
                        "name": "total_fees",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "total_mana_used",
                        "type": {
                          "kind": "field"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                  }
                },
                {
                  "name": "tx_context",
                  "type": {
                    "fields": [
                      {
                        "name": "chain_id",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "version",
                        "type": {
                          "kind": "field"
                        }
                      },
                      {
                        "name": "gas_settings",
                        "type": {
                          "fields": [
                            {
                              "name": "gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "teardown_gas_limits",
                              "type": {
                                "fields": [
                                  {
                                    "name": "da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  },
                                  {
                                    "name": "l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas::Gas"
                              }
                            },
                            {
                              "name": "max_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            },
                            {
                              "name": "max_priority_fees_per_gas",
                              "type": {
                                "fields": [
                                  {
                                    "name": "fee_per_da_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  },
                                  {
                                    "name": "fee_per_l2_gas",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 128
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                        }
                      }
                    ],
                    "kind": "struct",
                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                  }
                },
                {
                  "name": "start_side_effect_counter",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
            },
            "visibility": "private"
          },
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": {
          "abi_type": {
            "fields": [
              {
                "name": "call_context",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "function_selector",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::call_context::CallContext"
                }
              },
              {
                "name": "args_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "returns_hash",
                "type": {
                  "kind": "field"
                }
              },
              {
                "name": "anchor_block_header",
                "type": {
                  "fields": [
                    {
                      "name": "last_archive",
                      "type": {
                        "fields": [
                          {
                            "name": "root",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "next_available_leaf_index",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                      }
                    },
                    {
                      "name": "state",
                      "type": {
                        "fields": [
                          {
                            "name": "l1_to_l2_message_tree",
                            "type": {
                              "fields": [
                                {
                                  "name": "root",
                                  "type": {
                                    "kind": "field"
                                  }
                                },
                                {
                                  "name": "next_available_leaf_index",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                            }
                          },
                          {
                            "name": "partial",
                            "type": {
                              "fields": [
                                {
                                  "name": "note_hash_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "nullifier_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                },
                                {
                                  "name": "public_data_tree",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "root",
                                        "type": {
                                          "kind": "field"
                                        }
                                      },
                                      {
                                        "name": "next_available_leaf_index",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::state_reference::StateReference"
                      }
                    },
                    {
                      "name": "sponge_blob_hash",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "global_variables",
                      "type": {
                        "fields": [
                          {
                            "name": "chain_id",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "version",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "block_number",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 32
                            }
                          },
                          {
                            "name": "slot_number",
                            "type": {
                              "kind": "field"
                            }
                          },
                          {
                            "name": "timestamp",
                            "type": {
                              "kind": "integer",
                              "sign": "unsigned",
                              "width": 64
                            }
                          },
                          {
                            "name": "coinbase",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::eth_address::EthAddress"
                            }
                          },
                          {
                            "name": "fee_recipient",
                            "type": {
                              "fields": [
                                {
                                  "name": "inner",
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                          },
                          {
                            "name": "gas_fees",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                      }
                    },
                    {
                      "name": "total_fees",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "total_mana_used",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                }
              },
              {
                "name": "tx_context",
                "type": {
                  "fields": [
                    {
                      "name": "chain_id",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "version",
                      "type": {
                        "kind": "field"
                      }
                    },
                    {
                      "name": "gas_settings",
                      "type": {
                        "fields": [
                          {
                            "name": "gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "teardown_gas_limits",
                            "type": {
                              "fields": [
                                {
                                  "name": "da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                },
                                {
                                  "name": "l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas::Gas"
                            }
                          },
                          {
                            "name": "max_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          },
                          {
                            "name": "max_priority_fees_per_gas",
                            "type": {
                              "fields": [
                                {
                                  "name": "fee_per_da_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                },
                                {
                                  "name": "fee_per_l2_gas",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 128
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                }
              },
              {
                "name": "min_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "is_fee_payer",
                "type": {
                  "kind": "boolean"
                }
              },
              {
                "name": "expiration_timestamp",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 64
                }
              },
              {
                "name": "start_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "end_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_non_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "expected_revertible_side_effect_counter",
                "type": {
                  "kind": "integer",
                  "sign": "unsigned",
                  "width": 32
                }
              },
              {
                "name": "note_hash_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifier_read_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                              }
                            },
                            {
                              "name": "contract_address",
                              "type": {
                                "fields": [
                                  {
                                    "name": "inner",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "key_validation_requests_and_separators",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "request",
                              "type": {
                                "fields": [
                                  {
                                    "name": "pk_m",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "x",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "y",
                                          "type": {
                                            "kind": "field"
                                          }
                                        },
                                        {
                                          "name": "is_infinite",
                                          "type": {
                                            "kind": "boolean"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                    }
                                  },
                                  {
                                    "name": "sk_app",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                              }
                            },
                            {
                              "name": "key_type_domain_separator",
                              "type": {
                                "kind": "field"
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "call_context",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "function_selector",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                              }
                            },
                            {
                              "name": "args_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "returns_hash",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "start_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            },
                            {
                              "name": "end_side_effect_counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_call_requests",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 32,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "msg_sender",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "contract_address",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                    }
                                  },
                                  {
                                    "name": "is_static_call",
                                    "type": {
                                      "kind": "boolean"
                                    }
                                  },
                                  {
                                    "name": "calldata_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "public_teardown_call_request",
                "type": {
                  "fields": [
                    {
                      "name": "msg_sender",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "contract_address",
                      "type": {
                        "fields": [
                          {
                            "name": "inner",
                            "type": {
                              "kind": "field"
                            }
                          }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                      }
                    },
                    {
                      "name": "is_static_call",
                      "type": {
                        "kind": "boolean"
                      }
                    },
                    {
                      "name": "calldata_hash",
                      "type": {
                        "kind": "field"
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                }
              },
              {
                "name": "note_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "kind": "field"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "nullifiers",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "note_hash",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "l2_to_l1_msgs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 8,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "recipient",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "inner",
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                    }
                                  },
                                  {
                                    "name": "content",
                                    "type": {
                                      "kind": "field"
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "private_logs",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 16,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "log",
                                    "type": {
                                      "fields": [
                                        {
                                          "name": "fields",
                                          "type": {
                                            "kind": "array",
                                            "length": 16,
                                            "type": {
                                              "kind": "field"
                                            }
                                          }
                                        },
                                        {
                                          "name": "length",
                                          "type": {
                                            "kind": "integer",
                                            "sign": "unsigned",
                                            "width": 32
                                          }
                                        }
                                      ],
                                      "kind": "struct",
                                      "path": "aztec::protocol_types::abis::log::Log"
                                    }
                                  },
                                  {
                                    "name": "note_hash_counter",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              },
              {
                "name": "contract_class_logs_hashes",
                "type": {
                  "fields": [
                    {
                      "name": "array",
                      "type": {
                        "kind": "array",
                        "length": 1,
                        "type": {
                          "fields": [
                            {
                              "name": "inner",
                              "type": {
                                "fields": [
                                  {
                                    "name": "value",
                                    "type": {
                                      "kind": "field"
                                    }
                                  },
                                  {
                                    "name": "length",
                                    "type": {
                                      "kind": "integer",
                                      "sign": "unsigned",
                                      "width": 32
                                    }
                                  }
                                ],
                                "kind": "struct",
                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                              }
                            },
                            {
                              "name": "counter",
                              "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                              }
                            }
                          ],
                          "kind": "struct",
                          "path": "aztec::protocol_types::side_effect::counted::Counted"
                        }
                      }
                    },
                    {
                      "name": "length",
                      "type": {
                        "kind": "integer",
                        "sign": "unsigned",
                        "width": 32
                      }
                    }
                  ],
                  "kind": "struct",
                  "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                }
              }
            ],
            "kind": "struct",
            "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
          },
          "visibility": "databus"
        }
      },
      "bytecode": "H4sIAAAAAAAA/+1dB3gV1RLOnt29ewkJvYQeOiggRbCL9CZFimKBGCBANCQxCQj22LshFHulKqIoWLAXsO6IXcEoYu/67J13Qkju3tyys3tnOKjhe9/3jruTf84/Z07fmauXLrx6a8+MjMzTirKmZ+QWZGTnFmUV5GbmFGZknJpdNHtGQeapGflzp+VkT88oysvIL8iel1mUBcEfy4I9i9cNzMmcfvLAvPlD5+ZOH5SZk1O8YvyAMcOGlBavOia7KDersFCkI4R0DSFUH4PU8AiEUBP7HIRUU5RUS0ytWmGEWmOE2mCE0lE1b4uSaoeSao+S6oCpfGcJtWZgQXZOTvascoHFSSUli0pKNqUnxf+nFd8xoLAwq6DouKyCvEUlC0s3pfecMaZgR69buj44bsj9xcWTp3Tp89nwBRvzFw7a8dOi7+SfgH5VfNg3un94sh/Y2LU1KwtRLLFhXF5hVvaMvNze47IK5swtyizKzsstXVxlGVndqnLHqlInx/uSxaAvBL0U9EWgLw6v+aJSdxN2RshIDSgbLHGFSvJewS6oCpaiKrgUUUE/jbTEUV7qKC9ylBfLhroa9GtAvxb068LtUIrg2AHF8HpEp3HvkBIn3XsNG6JqeIMLkHbUOaga3nBE+JihLSxeOSE7d1ZOVkWXdastxlZJuzDn5OdkgX4jbkTCVP1GLbzqDZmrfpP3wXThIlQ1JDauwje7u4Y//TeXeBx0cMg3SuRFKH++ESV1M0rqFh+thKjhbi4I1ri2RHG5laVdZIvfiJuMbkPoD+uFwmMv1NwVlCXVC/XCZaHi8lBxRai4MlRcFSquDhVvDxXvCBXXhIp3hoprQ8W7QsW7Q8V1oeI9oeK9dKPc7TixO3Fid+PE7vW1Jlwfn/KZ0z46zQ/shpiwRmXB13JjvaO8zFFe6ShvkMuN+0C/H/QHQH/Q+7JLOilK6j6UJTYyLbw2Osr3O8oPOMoPSks8BPrDoD8C+qN+2vGxmLXXE6q9sx1XOMoPOcqPydo/DvoToD8J+lN+av90fNv3OKbOSD+wm2LCpiZklKcd5VWO8mpHeZM0ymbQnwH9WdCf8+Pct6OkNqMs8TzHtkcO8SipZ1BVfIGnimtQUs+iqvgi0xDxvKP8gqP8oqP8nPQnG3QA/SXQt/ixxJ0oKRtliZd5GmstSgpQVXyFp4p3oaReQlXxVSZ/etlRfsVRftVR3iL96TXQXwf9DdDf9GOJu1FSr6Es8RZPY61DSb2OquLbPFW8ByX1BqqKW5n86S1H+W1Heauj/Kb0p22gvwN6Gejv+rHEvSipbShLvMdkifcc5Xcc5TJH+V1pie2gvw/6DtA/8LNu+TB+7U+6ZiT4qv2HjvJ2R/nxaou5j0D/GPRPQP80fPupez4E+si9HUpDO7vPQsXPfRyu49zsI1QTfBYpdUI1KYn1udcNvFEasmAUftU1eDX3Z57O3L6g20h/EaUpcEaurq66fomNwvrS1ZpJKCZfyoseH1Q+R0nhqHwVSaX6H6GofBX1+uuu0XNzirInTM/MySyQxcWLilcPysstLMrMLUI4Q6Ss2NJw6tzA8inTu3dOHfK/tAaLz+u/6Ypz+3fu5gE3yVntzxzlz71UbhHoX4P+DejfRqG9bsicaVkzZmTNGDS3YF7WgBkzFjtvPr52lL9xlL91Ct3hKK9xHg95rOR3oP8P9O8jby/cXENDDQLfeV2o4CalH+LDfv1+u3m+JqUfqspajHOi8inpR9B/Av1n0H9J7F5C8zRC/spzKyEb6dcSj7cNyFb6Lb52fc74s3210m9RW+nHaq30O+h/gP4n6H+Ft5JZ6nUm+xHhxIwN/zfd1Pi35v2aUl4ioFp7J1Edd6aHt1dgYdgypUHbczf2OWT0e49+9vOmM+qPXmFvzzuwafpB2fcntTh/wgd9O4cMZyT5/CjC7S8kMkuHMTR3enQdxtDCO4whwNDBMMAwY3cYRAMwdgUjQNYVjICvrrAT1Y4WUR2tal3BKktK82Zeg3roMqkBA9SAFjVgkBqwFjVgMjVgbWrAFGrAVGrAOtSAdakB61ED1qcGbEAN2JAasBE1YGNqwCbUgE2pAdOoAZspWF/HPfqq9k93rECCXB/aGphZwQds7Lmh6njLz5rSCDrKtWKUk+WqsjYYKWCkglHHT+1dBtGRU2793g+s+1Bq+DJK3agL7XrVFtr1wWgARkMwGoUv74JlSU1rlncugDXLu8QBa5Z3iQPWLO8SB6xZ3iUO+B9c3skZ1B1yaWjN1jhUbBIqNg0V00LFZsUrBhQUZC4oS+oCRnMwWoDREoxWYLQGow0Y6WC0BaMdGO3B6ABGRzA6gdEZDCncFYx9wNgXjG5gdAejBxj7gdETjF5g9AajDxj7g9EXjH5gHADGgWAcBMbBYBwCxqFgHAbG4WD0B+MIMAb4vG12X/XUR9m2CQprIKJREwvawKhwLMwHMQVtGAMlNq7CgzmCNsr1D/YatIH7/GCXQ7g3Nc4hhvA7xBBPDjGUyyGGSGxchYexOITUP6zEq7VrlTKMsV4hm3hqwOHY3dwwRDNjjtuHawl+YoQhGPrEyBgRKo7ExSYZw2QtcVUZ7nHIwOsvxelHNd0oH7V01z1CAuNc50iEfozrHFntSx1cPUei6zmaqJ6jo9QT0UqSIKqewemJe13kp23l+kfj9M9g8acmsgoorw9OR0nN8Dp6836qh+kFjnF5DBZ2FJHTjnGdpSO/1Cv3mTE4n8nyurhaXOraBOUVQHXssYRulUVk77HVPzuMRrg6NSzhcVKqYa+kt9ps77tg3yb98sbOO3/7xLVnNVrW9dO6ad/MPXTeb2V5sodIqVZ9Rl//5PiT1l1xcN1hvZNfO/O1C0/q8+ZVl5y7zw/nHLMg0L6UjvC46gk1vM/89T3N/EeFiuMpe5P3oU12k6NwU9AEImNP8DVVynqOx9VzIlE9J/qdKifghp1ZXFPlRJz+2Sz+VB89Vc5CSc3ey6bKCZ6mykl7eqqc5HOqnITzmWyVU+XRhG6VTWTvozmnymNQU+Vs1FRJRfiY6lOlUcqw2uTtlZP3dK+c7LNXTsb1ypO89soluL05SupY3L6QsO+eRNQqx0bru+6Ej0P1txmEfZeK8HF7epl7fKh4AnL9UHnAhDiKQkm5H4P5OQIur+UiylqipKawcDleAuNW1lOJ/HCqrx3ACeh6ZhDVM8PXDkBO71Nx4/Yclh2A1J+B05/LtQOYgtsBzEFJYWq5J3cAUz2tNU7Ewk4hctoT/aw1pM+ciPOZPJ4dwBRUx84kdKs8Intn+tsB4AhPQ60iclGrCCrC0xJfRXi7JpseKs6g7E3ehzbZbtNxUxDVyWSWr6lS1nMGrp4zieo50+9UmYUbdk7hmipn4vQXcN0rIafKU1BSBXvZVJnlaaqctaenylk+p8pZOJ8pVDlVziZ0q0Iie8/mnCqzUVNlAWqqpCKcnfhhGWbPxdorT9rTvfIkn73yJFyvLPLaK3GHZTgnPRm3LyTsu0VErXKyv8OyHFR/yyXsu1SEc3zl3kF+Y5uGwprjdTr3/knlHE9jQS7XJ5VzJDauwnksn1RK/Xl74JPKNPrBvL6nBszHflKZh2hmTC/K1/bsifMpoWIBchOSJ2uJq0p+4puQGPpxn1Tmo5qu0Ect3XWfIoFxrkM1ABf52voWoOs5l6iec31tfcsJ4hYsp7JsfcsrjtM/n+uUuBC39T0VJTXf6+jNvPUt8jQuz8PCUu1M5vlZZJf/Hc5nFvBsfQtRHftUQrdaQGTvU/1tfXGE56OWz/NRy2cqwvMTPyVO8zTzLwgVT6PsTd6HNsl+AW4KOp3I2Kf7mirlH56Gq+cZRPU8w+9UeTpu2Dmda6o8A6f/DBZ/SkNPlaejpM7Yy6bK0z1NlWfu6anyTJ9T5Zk4nzlT5VR5FqFbnUlk77M4p8qzUVPlGaipkorw2YmfEmP2XKy98pw93SvP8dkrz8H1yrN4TolxTlqM2xcS9t2ziFql2N8p8bmo/jafsO9SET53Ty9zzwsVz0euHyoPmBBHUSgp92MwP0fA5bVcRFlLlNQFLFzOk8C4lfWFRH54oa8dwPnoel5EVM+LfO0ALpAEceN2McsOQOq/CKf/XK4dwAW4HUAxSgpTyz25A7jQ01rjYizsBUROe7GftYb0mYtxPnMezw7gAlTHvoTQrc4jsvcl/nYAOMKXolYRuBUJFeFL93RgxmWh4uWUvcn70Ca7yWW4KegKImNf4WuqlPW8HFfPK4nqeaXfqfIK3LBzAddUeSVO/4Us/lQfPVVegJK6cC+bKq/wNFVetaenyqt8TpVX4XzmIpVTZQmhW1Gtp0s4p8qFqKnyQtRUSUV4YeKHZZguzdorS/d0ryz12StLcb3yYp7DMpyTos4MkAtYXN+9mKhVFvk7LFuM6m/nEvZdKsKLq/fdhhyHZY6OtoTre0W5IV+Cq/BSlu8Vpf6lnr9X9G7tZp6sfTWXtZtJbFyFr2GxttR/jdcMrDjkpRIZt6u4NvHVevTdwrW4VLGoodG4FsXlOq/zBe70ejBK6noWF5VrqutwDXmDr8HU/acnmjjKTR3lNMePT2xYDMaNYNwExs1g3OInY3AzlNSNKEvcymSJWx3lmxzlmx3lW6QlbgNjGRjLwVgRPk42WuR1nPSUJd59JOniRVgsdGYsXwnGKjBWg3E7GHeAsQaMO8FYC8ZdYNwNxjow7gHjXjDWg7EBjPvAuB+MB8B4EIyNYDwExsNgPALGo2A8BsbjYDwBxpNgPAXG02BsAmMzGM+A8SwYz4HxPBgvgPEiGDYYQPerfCtxYqtwYqtxYrfjxO7Aia3Bid2JE1uLE7sLJ3Y3TmwdTuwenNi9OLH1OLENOLH7cGL348QewIk9iBPbiBN7CCf2ME7sEZzYozixx3Bij+PEnsCJPYkTewon9jRObBNObDNO7Bmc2LM4sedwYs/jxF7Aib2IE7NxYlDtlyzKkrriplzUEmOli9S3O3fulLOJu9RfcjJxl/pNziXuUv+TU4m71A45k7hLyen5TnepYjmPuEtJq97lKvW3lLrbVepPKbXOVepXKXWPq9R3UupeV6n3pdR6V6knpNQGV6lzpNR9rlLlXni/m9Tf5VIPuEn9WS71oJvUr+VSG92kviuXeshN6v1yqYfdpJ4ol3rETeqccqlH3aR29drHXKS+2SX1uIvUV7uknnCR+myX1JMuUu/vknrKRerlXVJPu0it2yW1yUUqf5fU5vhSpRW3ac/El1pYIfVsfKmrKqSeiy91WYXU8/GlzquQeiG+VGGF1IvxpSZUSNnxpRpWSAHL+UtzOUXgzrhvZDl/uQ2t/yaKm69IA9yGmkZfQp2L34iSYiLSHEVkC66teVoEdz70ckxYUQXr51TkJUd5S4zfa31Znoq8AsarYLwGxus++lMLuZjC+fPNLP1Jnn28gtN/C48bvoJq4zdQPeVmlBQTkRYoIm/i2pqsRfw4/huO8ptxHP8tMN4GYysY23w4fku5P8A53q0sji9P/N7C6b+Nx1/eQvnLOyiXvhUlxUSkJYpIGa6tyVrEj+O/4yiXxXH8d8F4D4ztYLzvw/FbyS0vzvGWsTi+POd+F6d/OY+/vIvylx0ol16GkmIi0gpF5ANcW5O1iB/H3+EofxDH8T8E4yMwPgbjEx+O31qe4uAcbwWL48vbnQ9x+lfy+MuHKH/5FOXSK1BSTERao4h8hmtrshbx4/ifOsqfxXH8z8H4AowvwfjKh+O3kQeTOMdbxeL48k7zc5z+1Tz+8jnKX75GufQqlBQTkTYoIt/g2pqsRfw4/teO8jdxHP9bML4DQx7Af+/D8dPlWTvO8W5ncXx5k/8tTv8dPP7yLcpffkC59O0oKSYi6SgiP+LamqxF/Dj+D47yj3Ec/ycwfgbjFzB+9eH4beX1Ec7x1rA4/lpZf5z+O3n85SeUv/yGcuk1KCkmIm1RRH7HtTVZi/hx/N8c5d/jOP4fYPwJhry+/duH47eTN6I4x1vL4vh3yfrj9N/F4y9/oPxlJ8ql16KkmIi0wxAxk3BtTdYifhx/Z6hsJsV2fFMDU4Cpg2n4cPz28pIf53h3szj+3bL+OP3rWPzF1FD+YqJc+m6UFA8Roz2KSADX1mQt4sPxTdNRDsRxfAvMIJi1wEz24fgdwFiHc7x7WBx/naw/Tv+9PI5vofylNsql70FJ8RAxOqCIpODamqxF/Dh+bUc5JY7jp4JZB8y6YNbz4fgdwbgH53jrWRz/Hll/nP4NPI6fivKX+iiXXo+S4iFidEQRaYBra7IW8eP49R3lBnEcvyGYjcBsDGYTH47fCYx7cY53H4vj3yvrj9N/P4/jN0T5S1OUS9+HkuIhYnRCEUnDtTVZi/hxfEf8lpkWx/GbgdkczBZgtvTh+J3BWI9zvAdYHH+9rD9O/4M8jt8M5S+tUC79AEqKh4jRGUWkNa6tyVrEj+O3cpRbx3H8NmCmg9kWzHY+HL8LGBtwjreRxfE3yPrj9D/E4/ioex+zPcqlN6KkeIgYXVBEOuDamqxF/Dh+e0e5QxzH7whmJzA7g9nFh+N3BeM+nOM9zOL498n64/Q/wuP4uKUxKgAp+DBKioeI0RVFZB9cW5O1iB/H7+oo7xPH8fcFsxuY3cHs4cPx9wHjfpzjPcri+PfL+uP0P8bj+Pui/GU/lEs/ipLiIWKgXNrsiWtrshbx4/j7Oco94zh+LzB7g9kHzP19OP6+YDyAc7zHWRz/AVl/nP4neBy/F8pf+qJc+nGUFA8RA9eD++HamqxF/Dh+X0e5XxzHPwDMA8E8CMyDfTh+NzAexDnekyyO/6CsP07/UzyOfwDKXw5BufSTKCkeIkY3FJFDcW1N1iJ+HP8QR/nQOI5/GJiHg9kfzCN8OH53MDbiHO9pFsffKOuP07+Jx/EPQ/nLAJRLP42S4iFidEcRGYhra7IW8eP4AxzlgXEcfxCYg8EcAuZQH47fA4yHcI63mcXxH5L1x+l/hsfxB6H8ZRjKpTejpHiIGD1QRIbj2pqsRfw4/jBHeXgcxx8B5kgwR4F5pA/H3w+Mh3GO9yyL4z8s64/T/xyP449A+ctolEs/i5LiIWLshyIyBtfWZC3ix/FHO8pj4jj+WDDHgXkUmON9OH5PMB7BOd7zLI7/iKw/Tv8LPI4/FuUvE1Au/TxKioeIgTqvMSfi2pqsRfw4/gRHeWIcx58E5tFgHgPmZB+O3wuMR3GO9yKL4z8q64/Tb/M4/iSUvxyLcukXUVI8RAzc8dRxuLYmaxE/jn+so3xcHMc/HswTwJwC5lQfjt8bjMdwjgcsjv+YrD9O/0s8jn88yl8yUC4NKCkeIkZvFJETcW1N1iJ+HD/DUT4xjuNngjkNzOlgzvDh+H3AeBzneFtYHP9xWX+c/pd5HD8T5S9ZKJfegpLiIWL0QRGZiWtrshbx4/hZjvLMOI4/C8zZYGaDeZIPx98fjCdwjvcKi+M/IeuP0/8qj+PPQvnLySiXfgUlxUPE2B9FJAfX1mQt4sfxT3aUc+I4/hwwc8HMAzPfh+P3BeNJnOO9xuL4T8r64/S/zuP4c1D+cgrKpV9DSfEQMfqiiBTg2pqsRfw4/imOckEcx5evi8CcC+Y8H47fD4yncI73BovjPyXrj9P/Jo/jo34j3sT9+jsu0SAPEQP1MYI5H9fWZC3ix/FPdZTnx3H8BWCeBubpYJ7hw/EPAONpnOO9xeL4T8v64/S/zeP4C1D+cibKpd9CSfEQMXDfXpyFa2uyFvHj+Gc6ymfFcfyzwTwHzGIwz/Xh+AeCsQnneFtZHH+TrD9O/zYexz8b5S/noVx6K0qKh4hxIIrI+bi2JmsRP45/nqN8fhzHvwDMC8G8CMyLfTj+QWBsxjneOyyOv1nWH6e/jMfxUb/waeJ+oh6XWpaHiHEQisiluLYmaxE/jn+Jo3xpHMe/DMzLwbwCzCt9OP7BYDyDc7x3WRz/GVl/nP73eBz/MpS/XIVy6XdRUjxEjINRREpwbU3WIn4c/ypHuSSO4y8EsxTMRWAu9uH4h4DxLM7xtrM4/rOy/jj97/M4Pkq5uQTl0ttRUjxEjENQRJbi2pqsRfw4/hJHeWkcx78azGvAvBbM63w4/qFgPIdzvB0sjv+crD9O/wc8jn81yl+uR7k0Lpk4DxED9aW9eQOurclaxI/jX+8o3xDH8W8E8yYwbwbzFh+OfxgYz+Mc70MWx39e1h+n/yMex0f9mI6J+8mHD1FSPEQMXGDBbbi2JmsRP47v+IFk87Y4jr8MzOVgrgBzpQ/HPxyMF3CO9zGL478g64/T/wmP46N+A8HEJQD/GCXFQ8Q4HEVkNa6tyVrEj+OvcpRXx3H828G8A8w1YN7pw/H7g/EizvE+ZXH8F2X9cfo/43F8VEZsE5cOFvfzETxEjP4oInfh2pqsRfw4/lpH+a44jn83mOvAvAfMe304/hFg2DjH+5zF8W1Zf5z+L3gcH5Uf1cQlB/wcJcVDxDgCRWQDrq3JWsSP4693lDfEcfz7wLwfzAfAfNCH4w8AA3CO9yWL44OsP07/VzyOj8qWZ+JSRX2JkuIhYgxAEXkI19ZkLeLH8Tc6yg/FcfyHwXwEzEfBfCzcXqWI2qegnMNrLqlSVJ8bDMYwlOD1YNxQ4s7FR7dvKmuBO8/EJFdZM7AgOycne1Z5+y5uuLB45YTs3Fk5WRU/G+taGYyKXZhz8nOywHxiUUmJO6p3m5iPS2xchZ/kaJNy/U+W+BhkXZE9tLbnRBilKFhU8grzaY/NWoqaYWpLYJT9n5KCPPYPIls2oX6U5C7i6EWbeHqRbMVNpag+tAkltZmhp8k6bl6I1e4itEfb7Bm2NnsGZ49nmFpjEWJ4SELUEJcj8Vn+Ge1ZTzPac1wzmrwyfQ5X4edZZjSp/3mWEdXcLJEXoVoblUXDREVemy94bKUS3FCIil8vV+6piUpwM75LmHVqr2vW++nTuPNzkyuk90VH2a4qi9BTfYPcQMjN50tgbgHz5XDLLcI0iH41qtlQEZ7mK0x2eMVRfslR3uIol2+lXgXzNTBfB/ON8KEveYnXoQ/Top4gBTWgbDlySPNVasiO7oAl2MoxZYzQnd8dvRpno/4mmG+B+TaYW8O9q3Zp8YoBBQWZCxYqM7Os3B42dJgFUpaQe0UI0GXqfXb+iKYMxvIIaViElMoRS0MLq22h4ju8fWXF+AFjhg0pdfSHbek+ljXy4ncbbs3wAmpaKSMiU5Ye7rapnlfEiK/AF1YOBmC+uzeNbO/GGdneA3M7mO+DucP7OWB5a7+zCLXulIp41tES+V23ldrqjr2vxFnax/LT5QOpEe98N9PXwueDqnLH6JOU/phsvg/B/AjMj8H8JNy/63j27w/38Cziq6nLKMeWT4nGlk/T/fiNy23z8otWX+8H1uV2d/bHA8/25Y6fOcqfR3NNvUS64xdgfgnmV2B+7X0/0hnVtF+grPCN176OqWAXVAVRN0/mt0zbpW8c5W8d5a8c5a9lQ30H5v/A/B7MH8LHjbqVC9rFrkuVclciW/PhgDpTAXWhX4V/hxo/WY7JDEseweDuoH/gGpk/xen/0U/HdO9OP6LurX9ASf2IaCLMtPBjtSVnvYXqXCqxFaRWVepUbbz/CcyfwfwFzF+5xvufUO3/G9Nw6vihe/NnR/kXR/lXaYffwfwDzD/B/Cu8zes7hlNMm2tUA1ynPTrkltAPp7+T+X5CxxXy6pNwd997c9mvDIbwCvkjNaTuDug41Pg7VNzpd/iKHG7/rjbcNi71ahaXXcvOnTt/xba0Fk45kBQqamSUA1q6j1N/t81R6XflUoEkzLgb0BAm876JCSQhHNTrKkXDXukEBIP2jmjtukftrld05aekyC1xwOBaHr6JI29y6X8Hpz/Aob98eY5sfIuL/zacfsxkd8forDl5BQtG5GYXLRpRlnSE7DDSa6XvlCsKmNKIkoeEkmeN/4j/razg4/neO4jtVLUQRl1dUYmx+aUjFqEmCOSkhlFOtjT1zCIJuwgjYwGBZJZj4EBtxJzOZR6EcjRUCo95Ul1hBZ95Uumg6vCYp64rrM5nnrp0UPVUDhL16HjU52nmBq6wJl8zN6CDashjnkausAE+8zSig2rMY54mrrAWn3ma0EE15TFPmvuKjc88aXRQzXjM09wVthafeZrTQbXgMU9LV9hkPvO0pINqxWOe1q6wtfnM05oOqg2PedJdYVP4zJNOB9WWxzztXGFT+czTjg6qPY95OrjC1uEzTwc6qI485nG/y6rLZ55OdFCdeczj/i1DPT7zdKGD6spjnn1cYevzmWcfOqh9eczTzRW2AZ95utFBdecxTw9X2IZ85ulBB7Ufj3l6usI24jNPTzqoXjzm6e0K25jPPL3poPrwmGd/V9gmfObZnw6qL495+rnCNuUzTz86qAN4zHOgK2wan3kOpIM6iMc8B7vCNuMzz8F0UIfwmOdQV9jmfOY5lA7qMB7zHO4K24LPPIfTQfXnMc8RrrAt+cxzBB3UAB7zDHSFbcVnnoF0UIN4zDPYFbY1n3kG00EN4THPUFfYNnzmGUoHNYzHPMNdYdP5zDOcDmoEj3lGusK25TPPSDqoUTzmOdIVth2feY6kgxrNY54xrrDt+cwzhg5qLI95xrnCduAzzzg6qKN4zDPeFbYjn3nG00FN4DHPRFfYTnzmmUgHNYnHPEe7wnbmM8/RdFDH8JhnsitsFz7zTKaDOpbHPMe5wnblM89xdFDH85jnBFfYffjMcwId1BQe80x1hd2XzzxT6aAyeMxzoitsNz7znEgHlcljnmmusN35zDONDmo6j3lmuML24DPPDDqoLB7zzHSF3Y/PPDPpoGbxmGe2K2xPPvPMpoPK5jHPSa6wvfjMcxId1Mk85slxhe3NZ54cOqg5PObJdYXtw2eeXDqoPB7z5LvC7s9nnnw6qFN4zFPgCtuXzzwFdFCFPOYpcoXtx2eeIjqouTzmmecKewCfeebRQZ3KY575rrAH8plnPh3UAh7znOYKexCfeU6jgzqdxzxnuMIezGeeM+igzuQxz1musIfwmecsOqizecxzjivsoXzmOYcOqpjHPOe6wh7GZ55z6aDO4zHP+a6wh/OZ53w6qAt4zHOhK2x/PvNcSAd1EcY8jmRJI3clS0qGQAoE6kCgHgTqQ6AhBBpDoCkEmkGgBQRaQaANBNpCoD0EOkKgMwS6QmBfCHSHwH4Q6AWBPhDoC4EDIHAQBA6BwGEQ6A+BARAYBIEhEBgGgREQGAWB0RAYK6+55VWuvK6UV3Ly2klercjrA3lELo+B5VGnPM6TR1byWEYePcjttdxCym2S3ArI5a5c0slli5ya5fQjh1g5jMiuIt1BUvabLEmaqxbKOS52h3I4x0jaZEkXkzkHKm2kVx5o5YTpki5RyIMyr9GlKnkQJiC6TCUPwkxBl6vsH/XoeFyhsj0a0EFdqZIHYe6dq1TyIEySU6KSB2E2m4UqeRCmnSlVyYMwP8wilTwIE7ksVsmDMOPKEpU8CFOjLFXJgzCHydUqeRAmG7lGJQ/CrCDXquRBmL7jOpU8CPNsXK+SB2FCjBtU8uhJB3WjSh696aBuUsmDMBfEzSp5ECZtuEUlD8LsCreq5EGYBuE2lTwI8xUsU8mDMLHAcpU8CDMArFDJgzBUf6VKHoQx9atU8iAMfl+tkgdhlPrtKnkQhpPfoZIHYdz3GpU8CAO071TJYxwd1FqVPMbTQd2lkgdhbPLdKnkQBhGvU8mDMNr3HpU8CMNy71XJgzB+dr1KHoSBrhtU8iCMSL1PJQ/C0NH7VfIgjPF8QCUPwmDMB1XyIIya3KiSB2F440MqeRDGIT6skgdhwOAjKnnk00E9qpJHAR3UYyp5EMbKPa6SB2FQ2xMqeRBGnz2pkgdhmNhTKnkQxnM9rZIHYeDVJpU8CCOkNqvkQRjK9IxKHoQxR8+q5EEYHPQcgoczOGjUruCgSyBwKQQug8DlELgCAldC4CoIlEBgIQRKIbAIAoshsAQCSyFwNQSugcC1ELgOAtdD4AYI3AiBmyBws7y6l7fe8sJY3rXKa0p5wycvx+S9krySkbcZ8iJAnqHL42d5cisPPeV5oTxqk6dU8oBHno3IYwW5I5ebWbkPlFsoufuQC3e55pXLRbnSkosUOb/LqVHOKnJAlmOZHAZkD5LOJ9tNUk4gOOjiUkxw0PPuUH4C0l6ID9t7c9mvDp8bRRtz9Dydz73gqe+MIu07lDFHLyrkQRlzZKvkQRhzBCp5EMYcvaSyf9Sj47FFZXs0oIN6WSUPwpijV1TyIIw5elUlD8KYo9dU8iCMOXpdJQ/CmKM3VPIgjDl6UyUPwpijt1TyIIw5elslD8KYo60qeRDGHG1TyYMw5ugdlTwIY47KVPIgjDl6VyUPwpij91Ty6EkHtV0lj950UO+r5EEYc7RDJQ/CmKMPVPIgjDn6UCUPwpijj1TyIIw5+lglD8KYo09U8iCMOfpUJQ/CmKPPVPIgjDn6XCUPwpijL1TyIIw5+lIlD8KYo69U8iCMOfpaJQ/CmKNvVPIYRwf1rUoe4+mgvlPJgzDm6H8qeRDGHH2vkgdhzNEPKnkQxhz9qJIHYczRTyp5EMYc/aySB2HM0S8qeRDGHP2qkgdhzNFvKnkQxhz9rpIHYczRHyp5EMYc/amSB2HM0V8qeRDGHP2tkkc+HdROlTwKyKCsJJU86GKOLE0lD7qYI0uo5EEXc2TpKnnQxRxZhkoedDFHlqmSB13MkRVQyYMu5siyVPKgizmygip50MUcWbVU8qCLObKSETycMUdH7oo5ehECNgQAAi9BYAsEXobAKxB4FQKvQeB1CLwBgTch8BYE3obAVghsg8A7ECiDwLsQeA8C2yHwPgR2yKt7eestL4zlXau8ppQ3fPJyTN4rySsZeZshLwLkGbo8fpYnt/LQU54XyqM2eUolD3jk2Yg8VpA7crmZlftAuYWSuw+5cJdrXrlclCstuUiR87ucGuWsIgdkOZbJYUD2IOl8st0k5QRijp4vRQQHWe7xIM4fJDqSNDjIIgtG8TYlH0nq4oShQVaKQh6EoUFWqkoedKFBVh2VPOhCg6y6KvtHPToe9VS2RwM6HvVV8qALDbIaqORBFxpkNVTJgy40yGqkkgddaJDVWCUPutAgq4lKHnShQVZTlTzoQoOsNJU86EKDrGYqedCFBlnNVfKgCw2yWqjkQRcaZLVUyYMuNMhqpZIHXWiQ1VolD7rQIKuNSh496Xikq+TRm45HW5U86EKDrHYqedCFBlntVfKgCw2yOqjkQRcaZHVUyYMuNMjqpJIHXWiQ1VklD7rQIKuLSh50oUFWV5U86EKDrH1U8qALDbL2VcmDLjTI6qaSB11okNVdJQ+60CCrh0oedKFB1n4qeYyj49FTJY/xdDx6qeRBFxpk9VbJgy40yOqjkgddaJC1v0oedKFBVl+VPOhCg6x+KnnQhQZZB6jkQRcaZB2okgddaJB1kEoedKFB1sEqedCFBlmHqORBFxpkHaqSB11okHWYSh50oUHW4Sp50IUGWf1V8sin43GESh4FdDwGqORBGBo0UCUPwtCgQSp5EIYGDVbJgzA0aIhKHoShQUNV8iAMDRqmkgdhaNBwlTwIQ4NGqORBGBo0UiUPwtCgUQgeztCg0eWhQVYKWKlg1QGrLlj1wKoPVgOwGoLVCKzGYDUBqylYaWA1A6s5WC3AaglWK7Bag9UGrHSw2oLVTl7dy1tveWEs71rlNaW84ZOXY/JeSV7JyNsMeREgz9Dl8bM8uZWHnvK8UB61yVMqecAjz0bksYLckcvNrNwHyi2U3H3Ihbtc88rlolxpyUWKnN/l1ChnFTkgy7FMDgOyB0nnk+0mKfsPDbJql2JCg9zvEZyhQaNpQ4PoLjFMb3krRpM6OWVw0GiFPCiDg8ao5EEYHDRWJQ/C4KBxKvtHPToeR6lsjwZ0PMar5EEYHDRBJQ/C4KCJKnkQBgdNUsmDMDjoaJU8CIODjlHJgzA4aLJKHoTBQceq5EEYHHScSh6EwUHHq+RBGBx0gkoehMFBU1TyIAwOmqqSB2FwUIZKHoTBQSeq5NGTjkemSh696XhMU8mDMDhoukoehMFBM1TyIAwOylLJgzA4aKZKHoTBQbNU8iAMDpqtkgdhcFC2Sh6EwUEnqeRBGBx0skoehMFBOSp5EAYHzVHJgzA4KFclD8LgoDyVPAiDg/JV8hhHx+MUlTzG0/EoUMmDMDioUCUPwuCgIpU8CIOD5qrkQRgcNE8lD8LgoFNV8iAMDpqvkgdhcNAClTwIg4NOU8mDMDjodJU8CIODzlDJgzA46EyVPAiDg85SyYMwOOhslTwIg4POUckjn45HsUoeBXQ8zlXJgzA46DyVPAiDg85XyYMwOOgClTwIg4MuVMmDMDjoIpU8CIODLlbJgzA46BKVPAiDgy5VyYMwOOgylTwIg4MuR/BwBgeN2RUcNBqsMWCNBWscWEeBNR6sCWBNBGsSWEeDdQxYk8E6FqzjwDoerBPAmgLWVLAywDoRrEywpoE1XV7dy1tveWEs71rlNaW84ZOXY/JeSV7JyNsMeREgz9Dl8bM8uZWHnvK8UB61yVMqecAjz0bksYLckcvNrNwHyi2U3H3Ihbtc88rlolxpyUWKnN/l1ChnFTkgy7FMDgOyB0nnk+0mKScQHHRkKSY46Ap3KIdzjKENDrqCzDlMbz92OYbUySmDg65UyIMyOOgqlTwIg4NKVPIgDA5aqLJ/1KPjUaqyPRrQ8VikkgdhcNBilTwIg4OWqORBGBy0VCUPwuCgq1XyIAwOukYlD8LgoGtV8iAMDrpOJQ/C4KDrVfIgDA66QSUPwuCgG1XyIAwOukklD8LgoJtV8iAMDrpFJQ/C4KBbVfLoScfjNpU8etPxWKaSB2Fw0HKVPAiDg1ao5EEYHLRSJQ/C4KBVKnkQBgetVsmDMDjodpU8CIOD7lDJgzA4aI1KHoTBQXeq5EEYHLRWJQ/C4KC7VPIgDA66WyUPwuCgdSp5EAYH3aOSxzg6Hveq5DGejsd6lTwIg4M2qORBGBx0n0oehMFB96vkQRgc9IBKHoTBQQ+q5EEYHLRRJQ/C4KCHVPIgDA56WCUPwuCgR1TyIAwOelQlD8LgoMdU8iAMDnpcJQ/C4KAnVPIgDA56UiWPfDoeT6nkUUDH42mVPAiDgzap5EEYHLRZJQ/C4KBnVPIgDA56ViUPwuCg51TyIAwOel4lD8LgoBdU8iAMDnpRJQ/C4CBbJQ/C4CBA8HAGB43dFRx0JVhXgVUC1kKwSsFaBNZisJaAtRSsq8G6BqxrwboOrOvBugGsG8G6CaybwboFrFvBug2sZWAtl1f38tZbXhjLu1Z5TSlv+OTlmLxXklcy8jZDXgTIM3R5/CxPbuWhpzwvlEdt8pRKHvDIsxF5rCB35HIzK/eBcgsldx9y4S7XvHK5KFdacpEi53c5NcpZRQ7IciyTw4DsQdL5ZLtJygkEB11RigkOeskdyuEcY2mDg14icw7zR09OPpbUySmDg7Yo5EEZHPSySh6EwUGvqORBGBz0qsr+UY+Ox2sq26MBHY/XVfIgDA56QyUPwuCgN1XyIAwOekslD8LgoLdV8iAMDtqqkgdhcNA2lTwIg4PeUcmDMDioTCUPwuCgd1XyIAwOek8lD8LgoO0qeRAGB72vkgdhcNAOlTwIg4M+UMmjJx2PD1Xy6E3H4yOVPAiDgz5WyYMwOOgTlTwIg4M+VcmDMDjoM5U8CIODPlfJgzA46AuVPAiDg75UyYMwOOgrlTwIg4O+VsmDMDjoG5U8CIODvlXJgzA46DuVPAiDg/6nkgdhcND3KnmMo+Pxg0oe4+l4qLyvpQwO+kklD8LgoJ9V8iAMDvpFJQ/C4KBfVfIgDA76TSUPwuCg31XyIAwO+kMlD8LgoD9V8iAMDvpLJQ/C4KC/VfIgDA7aqZIHXXBQMEklD7rgoKCmkgddcFBQqOSRT8dDV8mjgI6HoZIHXXBQ0FTJgy44KBhQyYMuOChoqeRBFxwUDKrkQRccFKylkgddcFAwWSUPuuCgYG2VPOiCg4IpKnnQBQcFU1XyoAsOCtZB8HAGB43bFRy0BayXwXoFrFfBeg2s18F6A6w3wXoLrLfB2grWNrDeAasMrHfBeg+s7WC9D9YOsD4A60OwPgLrY3l1L2+95YWxvGuV15Tyhk9ejsl7JXklI28z5EWAPEOXx8/y5FYeesrzQnnUJk+p5AGPPBuRxwpyRy43s3IfKLdQcvchF+5yzSuXi3KlJRcpcn6XU6OcVeSALMcyOQzIHiSdT7abpJxAcNBLpYjgoKB7/IEzOGgcaXBQkC74wcRsTr0b0fwbZcR6CCOuG5iTOf3kgXnzh87NnT4oMyeneMX4AWOGDSktXnVMdlFuVmGhxEkvXjOwIDsnJ3tWucTiBguLV07Izp2Vk4U1A2Jvu7B4xYCCgswFJaimDDcaWSXCeWpeeSIsnrQLc05+ThYE6+OoYpqofrhFFi5C1Fa/FfTbFqI8qYFX0zX0bLoGnkzX0LuXoGwSbCCxcRVu5G44f/oblXi1duPSKmuXa3Ftz6qWd69PfI/WdtWlqqVL3IVLQ23YOFRsQtcTGuPEmqRHNA7ObItwZovfrUq/2yXVGNX5miCawLujNSpXj9KPq2VTlu5YXwLjhihEJJOPIfJ60G/B6W/mQ787Kp5/cw77e5giWiQwaJXgHLEequs14xuxWoaKrehGrJY4sVbhI1bJYkqboYarliiNrViGK9kRWi5C6a+PksJxae2jU6E6dUvcNFIfJYXj0sbjAFWKapc06TwowWZyiMKNJOksFa0n64oSbC7HMlxF27Js7vQbcW7u6fhkHOnxCWHaiWA7hTwI004E26vkQZd2IthBJQ+6k5dgR5X9ox4dj04q26MBHY/OKnnQpZ0IdlHJgy7tRLCrSh50aSeC+6jkQZd2IrivSh50aSeC3VTyoEs7Eeyukgdd2olgD5U86NJOBPdTyYMu7USwp0oedGkngr1U8qBLOxHsrZIHXdqJYB+VPOjSTgT3V8mDLu1EsK9KHj3pePRTyaM3HY8DVPKgSzsRPFAlD7q0E8GDVPKgSzsRPFglD7q0E8FDVPKgSzsRPFQlD7q0E8HDVPKgSzsRPFwlD7q0E8H+KnnQpZ0IHqGSB13aieAAlTzo0k4EB6rkQZd2IjhIJQ+6tBPBwSp50KWdCA5RyWMcHY+hKnmMp+MxTCUPurQTweEqedClnQiOUMmDLu1EcKRKHnRpJ4KjVPKgSzsRPFIlD7q0E8HRKnnQpZ0IjlHJgy7tRHCsSh50aSeC41TyoEs7ETxKJQ+6tBPB8Sp5EKadmKCSB2HaiYkqeRCmnZikkkc+HY+jVfIooONxjEoehGknJqvkQZh24liVPAjTThynkgdh2onjVfIgTDtxgkoehGknpqjkQZh2YqpKHoRpJzJU8iBMO3GiSh6EaScyETwigk/cwkqSEKq7cijWEIr34VAsEIr35VCsIxR386PYDbR7KSbU+WqvqjFe24PDkAZC8X4cik2E4p4cigMIxb04FFsIxb05FAcRivtwKK6FULw/h+JkhOK+HIprIxT341CcglB8AIfiVITiAzkU10EoPohDcV2E4oM5FGOi0Q/hUFwfofhQDsUNEIoP41DcEKH4cA7FjRCK+3MoboxQfASH4iYIxQM4FDdFKB7IoTgNoXgQh+JmCMWDORQ3RygewqG4BULxUA7FLRGKh3EoboVQPJxDcWuE4hEcitsgFI/kUJyOUDyKQ3FbhOIjORS3QygezaG4PULxGK+KMZvusRyg4/yYyA30KNTJxA0crdMBUb3xHJwnYDhj8kpGpMRBoEKwNUqwDQTTMV4xkaWaLTxUsy2mmpM4esTRHKDHcIBO5gA9lgP0OA7Q4zlAT+AAncIBOpUDNIMD9EQO0EwO0GkcoNM5QGdwgGZxgM7kAJ3FATqbAzSbA/QkDtCTOUBzOEDncIDmcoDmcYDmc4CewgFawAFayAFaxAE6lwN0HgfoqRyg8zlAF3CAnsYBejoH6BkcoGdygJ7FAXo2B6h9DgtqMQvquSyo57Ggns+CegEL6oUeUVFHHvqPoP+Nys/+uxTEHDPZF6HO1n73aiOU7otRuq/3qBuTa1ta6G9UM17iQ7kbKBgCjAAm0bd9KcZCRvm3aq0Hvrhx7c/jR/4+a8z3Zn7yA8dPXFBv2rUHdL5ix7a6N7R6YZvUyNKGl6HacCdLGxoBVBteztLBr2BBvZIF9SoW1BIW1IUsqKUsqItYUBezoC5hQV3Kgsrykal9DQvqtSyo17GgXs+CegML6o0sqDexoN7MgnoLC+qtLKi3saAuY0FdzoK6ggV1JQvqKhbU1Syot7Og3sGCuoYF9U4W1LUsqHexoN7NgrqOBfUeFtR7WVDXs6BuYEG9jwX1fhbUB+LvXr/duXOnD9QHWeq6kQX1IRbUh1lQH2FBfZQF9TEW1MdZUJ9gQX2SBfUpFtSnWVA3saBuZkF9hgX1WRbU51hQn2dBfYEF9UUWVJsFFVhQX2JB3cKC+jIL6issqK+yoL7Ggvo6C+obLKhvsqC+xYL6NgvqVhbUbSyo77CglrGgvsuC+h4L6nYW1PdZUHewoH7AgvohC+pHLKgfs6B+woL6KQvqZyyon7OgfsGC+iUL6lcsqF+zoH7DgvotC+p3LKj/Y0H9ngX1BxbUH1lQf2JB/ZkF9RcW1F9ZUH9jQf2dBfUPFtQ/WVD/YkH9mwV1JwcqaEk8sBoPrOCB1XlgDR5Ykwc2wANr8cAGvcKWomDLc7a5B4u341GejFLenkd5bZTyDjzKU1DKO/IoT0Up78SjvA5KeWce5XVRyrvwKK+HUt6VR3l9lPJ9eJQ3QCnfl0d5Q5TybjzKG6GUd+dR3hilvAeP8iYo5fvxKG+KUt6TR3kaSnkvHuXNUMp78yhvjlLeh0d5C5Ty/XmUt0Qp78ujvBVKeT8e5a1Ryg/gUd4GpfxAHuXpKOUH8Shvi1J+MI/ydijlh/Aob49SfiiP8g4o5YfxKO+IUn44j/JOKOX9eZR3Rik/gkd5F5TyATzKu6KUD+RRvg9K+SAe5fuilA/mUd4NpXwIj3LUj04Eh/Io74FSPoxH+X4o5cN5lPdEKR/Bo7wXSvlIHuW9UcpH8Sjvg1J+JI/y/VHKR/Mo74tSPoZHeT+U8rE8yg9AKR/Ho/xAlPKjeJQfhFI+nkf5wSjlE3iUH4JSPpFH+aEo5ZN4lB+GUn40j/LDUcqP4VHeH6V8Mo/yI1DKj+VRPgCl/Dge5QNRyo/nUT4IpfwEHuWDUcqn8CgfglI+lUf5UJTyDB7lw1DKT+RRPhylPJNH+QiMcvMFd6FI5RQ/Awk8P4WBU83yYxg6SjXTdmE0qrU9f8O5CKV8DMrPf0BJsXwOCTw/nwHef0ADB3sUD+x4HtgJPLATeWAn8cAezQN7DA/sZB7YY3lgj+OBPZ4H9gQe2Ck8sFN5YDN4YE/kgc3kgZ3GAzudB3YGD2wWD+xMHthZPLCzeWCzeWBP4oE9mQc2hwd2Dg9sLg9sHg9sPg/sKTywBTywhTywRTywc3lg5/HAnsoDO58HdgEP7Gk8sKfzwJ7BA3smD+xZPLBn88CewwNbzAN7Lg/seTyw5/PAXsADeyEP7EU8sBfzwF7CA3spD+xlPLCX88BewQN7JQ/sVTywJTywC3lgS3lgF/HALuaBXcIDu5QH9moe2Gt4YK/lgb2OB/Z6HtgbeGBv5IG9iQf2Zh7YW3hgb+WBvY0HdhkP7HIe2BU8sCt5YFfxwK7mgb2dB/YOHtg1PLB38sCu5YG9iwf2bh7YdTyw9/DA3ssDu54HdgMP7H08sPfzwD7AA/sgD+xGHtiHeGAf5oF9hAf2UR7Yx3hgH+eBfYIH9kke2Kd4YJ/mgd3EA7uZB/YZHthneWCf44F9ngf2BR7YF3lgbR5Y4IF9iQd2Cw/syzywr/DAvsoD+xoP7Os8sG/wwL7JA/sWD+zbPLBbeWC38cC+wwNbxgP7Lg/sezyw23lg3+eB3cED+wEP7Ic8sB/xwH7MA/sJD+ynPLCf8cB+zgP7hdegPBzslzy1/YoH9mse2G94YL/lgf2OB/Z/PLDf88D+wAPLFGn4Ew/szzywv/DA/soD+xsP7O88sH/wwP7JA/sXD+zfPLA8v8EgeH6DQfD8BoPg+Q0GwfMbDILnNxgEz28wCJ7fYBA8v8EggjywtXhgk3lga/PApvDApvLA1uGBresRduEiVPYRMD/E6a/HQ6s+F60ynP4GPLQa8sA24oFtzAPbhAe2KQ9sGg9sMx7Y5jywLXhgW/LAtuKBbc0D24YHNp0Hti0PbDse2PY8sB14YDvywHbige3MA9uFB7YrD+w+PLD78sB244HtzgPbgwd2Px7YnjywvXhge/PA9uGB3Z8Hti8PbD8e2AN4YA/kgT2IB/ZgHthDeGAP5YE9jAf2cB5Ynh94EahczSbPF4liAA/sQB7YQTywg3lgh/DADuWBHcYDO5wHdgQP7Ege2FE8sEfywI7mgR3DA8uTd1fw5N0VPHl3xXgeWJ68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrCnhgefLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In764o5YHlybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u+JeHlievLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLuCJ++u4Mm7K5i+cufJuyt48u4Knry7gifvruDJuyt48u4Knry74lUeWJ68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrePLuCp68u4In767gybsrvuCB5cm7K3jy7gqevLuCJ++u4Mm7K3jy7gqevLviex5Ynry7gifvruDJuyt48u4Knry7gifvruDJuyt48u4Knry7gifvruDJuyt48u4Knry7Ok/eXZ0n767Ok3dX58m7q/Pk3dV58u7qPHl3dZ68uzpP3l2dJ++uzpN3V+fJu6vz5N3VefLu6jx5d/W6PLA86XT1+jywDXhgebLk6jxZcnWeLLk6T5ZcnSdLrs6TJVfnyZKr82TJ1Xmy5Oo8WXJ1niy5Ok+WXJ0nS67OkyVX58mSq/NkydV5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",
      "custom_attributes": [
        "abi_private"
      ],
      "debug_symbols": "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",
      "is_unconstrained": false,
      "name": "withdraw_public_to_private",
      "verification_key": "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"
    },
    {
      "abi": {
        "error_types": {
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "26387131971136782": {
            "error_kind": "string",
            "string": "Invalid response from registry"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          }
        },
        "parameters": [
          {
            "name": "from",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "to",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          },
          {
            "name": "assets",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 128
            },
            "visibility": "private"
          },
          {
            "name": "nonce",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "withdraw_public_to_public"
    },
    {
      "abi": {
        "error_types": {
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "992401946138144806": {
            "error_kind": "string",
            "string": "Attempted to read past end of BoundedVec"
          }
        },
        "parameters": [
          {
            "name": "messages",
            "type": {
              "fields": [
                {
                  "name": "storage",
                  "type": {
                    "kind": "array",
                    "length": 16,
                    "type": {
                      "fields": [
                        {
                          "name": "ciphertext",
                          "type": {
                            "fields": [
                              {
                                "name": "storage",
                                "type": {
                                  "kind": "array",
                                  "length": 15,
                                  "type": {
                                    "kind": "field"
                                  }
                                }
                              },
                              {
                                "name": "len",
                                "type": {
                                  "kind": "integer",
                                  "sign": "unsigned",
                                  "width": 32
                                }
                              }
                            ],
                            "kind": "struct",
                            "path": "std::collections::bounded_vec::BoundedVec"
                          }
                        },
                        {
                          "name": "recipient",
                          "type": {
                            "fields": [
                              {
                                "name": "inner",
                                "type": {
                                  "kind": "field"
                                }
                              }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                          }
                        },
                        {
                          "name": "tx_hash",
                          "type": {
                            "fields": [
                              {
                                "name": "_is_some",
                                "type": {
                                  "kind": "boolean"
                                }
                              },
                              {
                                "name": "_value",
                                "type": {
                                  "kind": "field"
                                }
                              }
                            ],
                            "kind": "struct",
                            "path": "std::option::Option"
                          }
                        },
                        {
                          "name": "anchor_block_timestamp",
                          "type": {
                            "kind": "integer",
                            "sign": "unsigned",
                            "width": 64
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::messages::processing::offchain::OffchainMessage"
                    }
                  }
                },
                {
                  "name": "len",
                  "type": {
                    "kind": "integer",
                    "sign": "unsigned",
                    "width": 32
                  }
                }
              ],
              "kind": "struct",
              "path": "std::collections::bounded_vec::BoundedVec"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "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",
      "custom_attributes": [
        "abi_utility"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "offchain_receive"
    },
    {
      "abi": {
        "error_types": {
          "10911617422606317509": {
            "error_kind": "string",
            "string": "Function settle_redeem_private_to_public_internal can only be called by the same contract"
          },
          "11055045375070769067": {
            "error_kind": "string",
            "string": "Insufficient shares burnt"
          },
          "11151469993655308386": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_private_exact_internal can only be called by the same contract"
          },
          "11238433410490296974": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_public_internal can only be called by the same contract"
          },
          "11476781779461000022": {
            "error_kind": "string",
            "string": "Function preview_deposit can only be called statically"
          },
          "11585274054527399039": {
            "error_kind": "string",
            "string": "Function settle_issue_private_to_private_exact_internal can only be called by the same contract"
          },
          "11625864663635132841": {
            "error_kind": "string",
            "string": "Function max_issue can only be called statically"
          },
          "12511970388699677811": {
            "error_kind": "fmtstring",
            "item_types": [
              {
                "kind": "field"
              }
            ],
            "length": 27
          },
          "12938323047425881034": {
            "error_kind": "string",
            "string": "Function asset can only be called statically"
          },
          "13257043288428800530": {
            "error_kind": "string",
            "string": "Zero shares, insufficient assets"
          },
          "13687859235885718838": {
            "error_kind": "string",
            "string": "Function max_redeem can only be called statically"
          },
          "14069640285051497178": {
            "error_kind": "string",
            "string": "Function settle_redeem_private_to_private_exact_internal can only be called by the same contract"
          },
          "14415304921900233953": {
            "error_kind": "string",
            "string": "Initializer address is not the contract deployer"
          },
          "14594265138695903586": {
            "error_kind": "string",
            "string": "Function settle_redeem_public_to_private_exact_internal can only be called by the same contract"
          },
          "14763784077041570654": {
            "error_kind": "string",
            "string": "Function preview_withdraw can only be called statically"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15003037494331704051": {
            "error_kind": "string",
            "string": "Too many shares requested"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "16839601838445455264": {
            "error_kind": "string",
            "string": "Function settle_issue_public_to_private_internal can only be called by the same contract"
          },
          "17575855721250604774": {
            "error_kind": "string",
            "string": "Function convert_to_assets can only be called statically"
          },
          "17786700691773584094": {
            "error_kind": "string",
            "string": "Function shares can only be called statically"
          },
          "18355088748931941725": {
            "error_kind": "string",
            "string": "Function max_deposit can only be called statically"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "26387131971136782": {
            "error_kind": "string",
            "string": "Invalid response from registry"
          },
          "2713641840009731152": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_private_internal can only be called by the same contract"
          },
          "2882618126309823073": {
            "error_kind": "string",
            "string": "Function preview_issue can only be called statically"
          },
          "3424173660575720123": {
            "error_kind": "string",
            "string": "vault_offset must be greater than 0"
          },
          "354807202822353": {
            "error_kind": "string",
            "string": "Function convert_to_shares can only be called statically"
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "4559061047743182509": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_public_exact_internal can only be called by the same contract"
          },
          "459713770342432051": {
            "error_kind": "string",
            "string": "Not initialized"
          },
          "5840832052917126499": {
            "error_kind": "string",
            "string": "Function get_vault_offset can only be called statically"
          },
          "6000439261111030356": {
            "error_kind": "string",
            "string": "Function settle_withdraw_public_to_private_internal can only be called by the same contract"
          },
          "6247811934934211614": {
            "error_kind": "string",
            "string": "Function settle_issue_private_to_public_exact_internal can only be called by the same contract"
          },
          "6634907361972239": {
            "error_kind": "string",
            "string": "Function settle_withdraw_private_to_private_internal can only be called by the same contract"
          },
          "6701232297318336583": {
            "error_kind": "string",
            "string": "Function max_withdraw can only be called statically"
          },
          "7504532782847838406": {
            "error_kind": "string",
            "string": "caller is not admin"
          },
          "8018008184173784433": {
            "error_kind": "string",
            "string": "Function preview_redeem can only be called statically"
          },
          "8228371833434187583": {
            "error_kind": "string",
            "string": "Trying to read from uninitialized PublicImmutable"
          },
          "8240001999008529939": {
            "error_kind": "string",
            "string": "Function settle_deposit_private_to_private_exact_internal can only be called by the same contract"
          },
          "8680563134121479596": {
            "error_kind": "string",
            "string": "Function settle_deposit_public_to_private_internal can only be called by the same contract"
          },
          "9640296564857848209": {
            "error_kind": "string",
            "string": "Function admin can only be called statically"
          },
          "9676179333820745919": {
            "error_kind": "string",
            "string": "Function settle_deposit_public_to_private_exact_internal can only be called by the same contract"
          },
          "9824461336563710658": {
            "error_kind": "string",
            "string": "Function total_assets can only be called statically"
          },
          "9894212961085021188": {
            "error_kind": "string",
            "string": "Message not authorized by account"
          },
          "9967937311635654895": {
            "error_kind": "string",
            "string": "Initialization hash does not match"
          }
        },
        "parameters": [
          {
            "name": "selector",
            "type": {
              "kind": "field"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "JwACBAEoAAABBIBfJwAABF8lAAAAQScCAgQBJwIDBAAfCgACAAMAXi0IXgElAAABFycCAQRfJwICBAA7DgACAAEnAEMBACcARAEBLAAARQAwZE5y4TGgKbhQRbaBgVhdKDPoSHm5cJFD4fWT8AAAACkAAEYE/////ycARwABKQAASABH2s1zJwBJBAMnAEoEACcASwYAJwBMAAAnAE0EAScATgYBJwBPBAInAFAAAycAUQQEJwBSBAUnAFMABScAVAQGKAAAVQABFygAAFYAAScoAABXAAEpKAAAWAABLCgAAFkAAUEpAABaAANtUn8pAABbAGKIEt4pAABcBP95SfIrAABdAAAAAAAAAAABAAAAAAAAAAAmJQAAgjApAgACAFq9OccKKgECAy0IAQInAgQEAwAIAQQBJwMCBAEAIgICBC0KBAUtDFsFACIFAgUtDEcFJwIFBAAnAgcEAwAqBQcGLQgBBAAIAQYBJwMEBAEAIgQCBi0OBQYAIgYCBi0OBQYnAgYEAwAqBAYFJwIFAActCAEGJwIHBAMACAEHAScDBgQBACIGAgctCgcILQxbCAAiCAIILQ4FCC0IAQcnAggEAwAIAQgBJwMHBAEAIgcCCC0KCAktDFsJACIJAgktDFAJKQIACADHMvl3JAIAAwAAAfkjAAAG2C0IAQMnAgkEBAAIAQkBJwMDBAEAIgMCCR8wAEkATQAJACIDTQotCwoJACIDTwstCwsKACIDSQwtCwwLHAoLDAYcCgwDABwKAwsGHgIADAAeAgANAB4CAA4ALQgBDycCEAQDAAgBEAEnAw8EAQAiDwIQNg4ADgAQAAAiD00RLQsREAAiD08SLQsSERwKEA8ABCoPERIkAgAQAAACnicCDwQAPAYPAScCEQQTLQgAEy0KDhQACAARACUAAIJWLQIAAC0KFA8tChUQJAIADwAAAtInAg4EADwGDgEtCAEOJwIPBAIACAEPAScDDgQBACIOAg8fMABNAEoADwAiDk0RLQsRDxwKDxEEHAoRDgAnAhEEEy0IABMtCEMULQhMFS0IWRYACAARACUAAIKbLQIAAC0KFA8pAgARABb4ryctCAETJwIUBAQACAEUAScDEwQBACITAhQtChQVLQ4RFQAiFQIVLQ4OFQAiFQIVLQ4PFScCDwQULQgAFC0KExUtCEkWAAgADwAlAACyIi0CAAAtChUOCioQDg8kAgAPAAADnCUAALVyCiISTA4nAhEEEy0IABMACAARACUAALWELQIAAC0KFA8tChUQJAIADwAAA9EnAhEEADwGEQEKKhIQDxIqDg8QJAIAEAAAA+glAAC1qgwoSwsOJAIADgAAA/olAAC1vC0LAgsAIgsCCy0OCwInAg4EDy0IAA8tCgIQLQhPEQAIAA4AJQAAtc4tAgAALQoQCzQCAAstCAELJwIOBAIACAEOAScDCwQBACILAg4tCg4PLQ4JDy0LCw4AIg4CDi0ODgsnAg8EEC0IABAtCgsRLQhNEgAIAA8AJQAAuR4tAgAALQoRDjACAAkARycCCQACMAoADgAJLQsHCQAiCQIJLQ4JBycCCwQOLQgADi0KBw8tCE8QAAgACwAlAAC1zi0CAAAtCg8JNAIACS0IAQknAgsEAgAIAQsBJwMJBAEAIgkCCy0KCw4tDgoOLQsJCwAiCwILLQ4LCScCDgQPLQgADy0KCRAtCE0RAAgADgAlAAC5Hi0CAAAtChALMAIACgBQJwIJAAQwCgALAAktCwYJACIJAgktDgkGJwIKBA4tCAAOLQoGDy0ITxAACAAKACUAALXOLQIAAC0KDwk0AgAJLQgBCScCCgQCAAgBCgEnAwkEAQAiCQIKLQoKCy0OAwstCwkKACIKAgotDgoJJwILBA4tCAAOLQoJDy0ITRAACAALACUAALkeLQIAAC0KDwowCgADAAUnAgMACDAKAAoAAx4CAAMAJwILBA4tCAAOLQoDDwAIAAsAJQAAglYtAgAALQoPCS0KEAokAgAJAAAF8icCCwQAPAYLASkCAAkA7eAidi0IAQsnAg4EBAAIAQ4BJwMLBAEAIgsCDi0KDg8tDgkPACIPAg8tDgMPACIPAg8tDgoPJwIJBA4tCAAOLQoLDy0ISRAACAAJACUAALIiLQIAAC0KDwM0AgADHgIAAwAtCAEJJwIKBAMACAEKAScDCQQBACIJAgotCgoLLQ4ICwAiCwILLQ4DCycCCgQOLQgADi0KCQ8tCE8QAAgACgAlAAC1zi0CAAAtCg8DNAIAAy0LBAMAIgMCAy0OAwQAIgQCCi0LCgotCgoJJwILBAMAKgQLAzsOAAkAAyMAAAbYKQIAAwAPafePCioBAwktCAEDJwIKBAMACAEKAScDAwQBACIDAgotCgoLLQxbCwAiCwILLQxTCycCCgAGJAIACQAAByEjAAAJuy0IAQknAgsEAgAIAQsBJwMJBAEAIgkCCx8wAE0ATQALACIJTQwtCwwLHgIACQAeAgAMAB4CAA0ALQgBDicCDwQDAAgBDwEnAw4EAQAiDgIPLQoPEC0OCBAAIhACEC0ODRAnAg8EEC0IABAtCg4RLQhPEgAIAA8AJQAAtc4tAgAALQoRDR4CAA4ALQgBDycCEAQEAAgBEAEnAw8EAQAiDwIQLQoQES0MWhEAIhECES0ODhEAIhECES0ODREnAg4EEC0IABAtCg8RLQhJEgAIAA4AJQAAsiItAgAALQoRDTMKAA0ADiQCAA4AAAgSJQAAuvUtCwINACINAg0tDg0CJwIOBA8tCAAPLQoCEC0ITxEACAAOACUAALXOLQIAAC0KEA0eAgAOAC0IAQ8nAhAEBAAIARABJwMPBAEAIg8CEC0KEBEtDFoRACIRAhEtDg4RACIRAhEtDg0RJwIOBBAtCAAQLQoPES0ISRIACAAOACUAALIiLQIAAC0KEQ0zCgANAA4kAgAOAAAIryUAALsHHgIADQAvKABHAA0ADh4CAA0BCiINRQ8WCg8QHAoQEQAEKhENEAoiD0MNJAIADQAACOonAhEEADwGEQEKKhAODSQCAA0AAAj8JQAAuxktCwMNACINAg0tDg0DJwIOBA8tCAAPLQoDEC0ITxEACAAOACUAALXOLQIAAC0KEA00AgANLQgBDScCDgQCAAgBDgEnAw0EAQAiDQIOLQoODy0OCw8tCw0OACIOAg4tDg4NJwIPBBAtCAAQLQoNES0ITRIACAAPACUAALkeLQIAAC0KEQ4wAgALAFMwCgAOAAotCwQLACILAgstDgsEACIEAg4tCw4OLQoODScCDwQDACoEDws7DgANAAsjAAAJuykCAAkAkrqjBQoqAQkLKQIACQTEet6gKQIADARFG1+uJAIACwAACegjAAAPZS0IAQsnAg0EBQAIAQ0BJwMLBAEAIgsCDR8wAFEATQANACILTQ4tCw4NACILTw8tCw8OHAoOEAYcChAPABwKDw4GACILSREtCxEQACILURItCxIRHgIACwAeAgASAB4CABMALQgBFCcCFQQDAAgBFQEnAxQEAQAiFAIVLQoVFi0OCBYAIhYCFi0OExYnAhUEFi0IABYtChQXLQhPGAAIABUAJQAAtc4tAgAALQoXEx4CABQALQgBFScCFgQEAAgBFgEnAxUEAQAiFQIWLQoWFy0MWhcAIhcCFy0OFBcAIhcCFy0OExcnAhQEFi0IABYtChUXLQhJGAAIABQAJQAAsiItAgAALQoXEzMKABMAFCQCABQAAAsDJQAAuvUtCwITACITAhMtDhMCJwIUBBUtCAAVLQoCFi0ITxcACAAUACUAALXOLQIAAC0KFhMeAgAUAC0IARUnAhYEBAAIARYBJwMVBAEAIhUCFi0KFhctDFoXACIXAhctDhQXACIXAhctDhMXJwIUBBYtCAAWLQoVFy0ISRgACAAUACUAALIiLQIAAC0KFxMzCgATABQkAgAUAAALoCUAALsHHgIAEwAvKABHABMAFCcCFgQXLQgAFwAIABYAJQAAtYQtAgAALQoYEy0KGRUkAgATAAAL3ScCFgQAPAYWAQoqFRQTJAIAEwAAC+8lAAC7GS0LAxMAIhMCEy0OEwMnAhQEFS0IABUtCgMWLQhPFwAIABQAJQAAtc4tAgAALQoWEzQCABMtCAETJwIUBAIACAEUAScDEwQBACITAhQtChQVLQ4NFS0LExQAIhQCFC0OFBMnAhUEFi0IABYtChMXLQhNGAAIABUAJQAAuR4tAgAALQoXFDACAA0AUzAKABQACi0LBgoAIgoCCi0OCgYnAhMEFC0IABQtCgYVLQhPFgAIABMAJQAAtc4tAgAALQoVCh4CABMALQgBFCcCFQQEAAgBFQEnAxQEAQAiFAIVLQoVFi0MWhYAIhYCFi0OExYAIhYCFi0OChYnAhMEFS0IABUtChQWLQhJFwAIABMAJQAAsiItAgAALQoWCjMKAAoAEyQCABMAAA0cJQAAuwceAgAKAC8qAAUACgATHAoTFAYcChQKABwKChMGJwIUBBUtCAAVLQoOFi0ISxctCEsYLQoTGS0IQxoACAAUACUAALsrLQIAAC0KFgotCwcOACIOAg4tDg4HJwITBBQtCAAULQoHFS0ITxYACAATACUAALXOLQIAAC0KFQ4eAgATAC0IARQnAhUEBAAIARUBJwMUBAEAIhQCFS0KFRYtDFoWACIWAhYtDhMWACIWAhYtDg4WJwITBBUtCAAVLQoUFi0ISRcACAATACUAALIiLQIAAC0KFg4zCgAOABMkAgATAAAOBCUAALsHHgIADgAvKABQAA4AEy0IAQ4nAhQEBQAIARQBJwMOBAEAIg4CFC0KFBUtDhAVACIVAhUtDhIVACIVAhUtDg8VACIVAhUtDhEVLQsODwAiDwIPLQ4PDicCEQQULQgAFC0KExUtCgkWLQoOFy0IQxgtCEoZLQhDGi0IShsACAARACUAALvpLQIAAC0KFQ8tChYQCiIPSg4kAgAOAAAOqicCEQQAPAYRARwKCg4ALQgBCicCDwQDAAgBDwEnAwoEAQAiCgIPLQoPES0OEhEAIhECES0ODhEtCwoOACIOAg4tDg4KJwIRBBItCAASLQoNEy0KDBQtCgoVLQhDFi0IShctCEMYLQhKGQAIABEAJQAAvUgtAgAALQoTDi0KFA8KIg5KCiQCAAoAAA82JwINBAA8Bg0BLQsECgAiCgIKLQ4KBAAiBAIOLQsODi0KDg0nAhEEAwAqBBEKOw4ADQAKIwAAD2UpAgAKADvGDwwKKgEKCyQCAAsAAA+AIwAAFJotCAEKJwILBAUACAELAScDCgQBACIKAgsfMABRAE0ACwAiCk0NLQsNCwAiCk8OLQsODQAiCkkPLQsPDhwKDhAGHAoQDwAcCg8OBgAiClERLQsREB4CAAoAHgIAEQAeAgASAC0IARMnAhQEAwAIARQBJwMTBAEAIhMCFC0KFBUtDggVACIVAhUtDhIVJwIUBBUtCAAVLQoTFi0ITxcACAAUACUAALXOLQIAAC0KFhIeAgATAC0IARQnAhUEBAAIARUBJwMUBAEAIhQCFS0KFRYtDFoWACIWAhYtDhMWACIWAhYtDhIWJwITBBUtCAAVLQoUFi0ISRcACAATACUAALIiLQIAAC0KFhIzCgASABMkAgATAAAQmyUAALr1LQsHEgAiEgISLQ4SBycCEwQULQgAFC0KBxUtCE8WAAgAEwAlAAC1zi0CAAAtChUSHgIAEwAtCAEUJwIVBAQACAEVAScDFAQBACIUAhUtChUWLQxaFgAiFgIWLQ4TFgAiFgIWLQ4SFicCEwQVLQgAFS0KFBYtCEkXAAgAEwAlAACyIi0CAAAtChYSMwoAEgATJAIAEwAAETglAAC7Bx4CABIALygAUAASABMtCwMSACISAhItDhIDJwIUBBUtCAAVLQoDFi0ITxcACAAUACUAALXOLQIAAC0KFhIeAgAUAC0IARUnAhYEBAAIARYBJwMVBAEAIhUCFi0KFhctDFoXACIXAhctDhQXACIXAhctDhIXJwIUBBYtCAAWLQoVFy0ISRgACAAUACUAALIiLQIAAC0KFxIzCgASABQkAgAUAAAR4iUAALsHHgIAEgAvKABTABIAFCcCEgQVLQgAFS0IQxYtCEwXLQhYGC0KCxkACAASACUAAL6DLQIAACcCFQQWLQgAFgAIABUAJQAAwYItAgAALQoXEicCFgQXLQgAFwAIABYAJQAAwvItAgAALQoYFS0LBhYAIhYCFi0OFgYnAhcEGC0IABgtCgYZLQhPGgAIABcAJQAAtc4tAgAALQoZFh4CABcALQgBGCcCGQQEAAgBGQEnAxgEAQAiGAIZLQoZGi0MWhoAIhoCGi0OFxoAIhoCGi0OFhonAhcEGS0IABktChgaLQhJGwAIABcAJQAAsiItAgAALQoaFjMKABYAFyQCABcAABLpJQAAuwceAgAWAC8qAAUAFgAXHAoXGAYcChgWABwKFhcGJwIYBBktCAAZLQoOGi0KEhstChUcLQoXHS0IQx4ACAAYACUAALsrLQIAAC0KGhYMKEsWDiQCAA4AABNGJQAAxMktCAEOJwISBAUACAESAScDDgQBACIOAhItChIVLQ4LFQAiFQIVLQ4RFQAiFQIVLQ4PFQAiFQIVLQ4QFS0LDgsAIgsCCy0OCw4nAhAEFy0IABctChMYLQoJGS0KDhotCEMbLQhKHC0IQx0tCEoeAAgAEAAlAAC76S0CAAAtChgLLQoZDwoiC0oOJAIADgAAE98nAhAEADwGEAEcChYLAC0IAQ4nAhAEAwAIARABJwMOBAEAIg4CEC0KEBEtDg0RACIRAhEtDgsRLQsOCwAiCwILLQ4LDicCEAQVLQgAFS0KFBYtCgwXLQoOGC0IQxktCEoaLQhDGy0IShwACAAQACUAAL1ILQIAAC0KFgstChcNCiILSg4kAgAOAAAUaycCEAQAPAYQAS0LBAsAIgsCCy0OCwQAIgQCEC0LEBAtChAOJwIRBAMAKgQRCzsOAA4ACyMAABSaKQIACgBfkLo3CioBCgskAgALAAAUtSMAABqpLQgBCicCCwQGAAgBCwEnAwoEAQAiCgILHzAAUgBNAAsAIgpNDS0LDQsAIgpPDi0LDg0AIgpJDy0LDw4cCg4QBhwKEA8AHAoPDgYAIgpRES0LERAcChASBhwKEhEAHAoREAYAIgpSEy0LExIeAgAKAB4CABMAHgIAFAAtCAEVJwIWBAMACAEWAScDFQQBACIVAhYtChYXLQ4IFwAiFwIXLQ4UFycCFgQXLQgAFy0KFRgtCE8ZAAgAFgAlAAC1zi0CAAAtChgUHgIAFQAtCAEWJwIXBAQACAEXAScDFgQBACIWAhctChcYLQxaGAAiGAIYLQ4VGAAiGAIYLQ4UGCcCFQQXLQgAFy0KFhgtCEkZAAgAFQAlAACyIi0CAAAtChgUMwoAFAAVJAIAFQAAFeglAAC69S0LBxQAIhQCFC0OFAcnAhUEFi0IABYtCgcXLQhPGAAIABUAJQAAtc4tAgAALQoXFB4CABUALQgBFicCFwQEAAgBFwEnAxYEAQAiFgIXLQoXGC0MWhgAIhgCGC0OFRgAIhgCGC0OFBgnAhUEFy0IABctChYYLQhJGQAIABUAJQAAsiItAgAALQoYFDMKABQAFSQCABUAABaFJQAAuwceAgAUAC8oAFAAFAAVLQsDFAAiFAIULQ4UAycCFgQXLQgAFy0KAxgtCE8ZAAgAFgAlAAC1zi0CAAAtChgUHgIAFgAtCAEXJwIYBAQACAEYAScDFwQBACIXAhgtChgZLQxaGQAiGQIZLQ4WGQAiGQIZLQ4UGScCFgQYLQgAGC0KFxktCEkaAAgAFgAlAACyIi0CAAAtChkUMwoAFAAWJAIAFgAAFy8lAAC7Bx4CABQALygAUwAUABYnAhQEFy0IABctCEMYLQhMGS0IVxotCgsbAAgAFAAlAAC+gy0CAAAnAhcEGC0IABgACAAXACUAAMGCLQIAAC0KGRQnAhgEGS0IABkACAAYACUAAMLyLQIAAC0KGhctCwYYACIYAhgtDhgGJwIZBBotCAAaLQoGGy0ITxwACAAZACUAALXOLQIAAC0KGxgeAgAZAC0IARonAhsEBAAIARsBJwMaBAEAIhoCGy0KGxwtDFocACIcAhwtDhkcACIcAhwtDhgcJwIZBBstCAAbLQoaHC0ISR0ACAAZACUAALIiLQIAAC0KHBgzCgAYABkkAgAZAAAYNiUAALsHHgIAGAAvKgAFABgAGRwKGRoGHAoaGAAcChgZBicCGgQbLQgAGy0KDhwtChQdLQoXHi0KGR8tCEQgAAgAGgAlAADE2y0CAAAtChwYLQgBDicCFAQFAAgBFAEnAw4EAQAiDgIULQoUFy0OCxcAIhcCFy0OExcAIhcCFy0OERcAIhcCFy0OEhctCw4RACIRAhEtDhEOJwIUBBktCAAZLQoVGi0KCRstCg4cLQhDHS0ISh4tCEMfLQhKIAAIABQAJQAAu+ktAgAALQoaES0KGxIKIhFKDiQCAA4AABkaJwIUBAA8BhQBLQgBDicCEQQDAAgBEQEnAw4EAQAiDgIRLQoRFC0ODRQAIhQCFC0ODxQtCw4NACINAg0tDg0OJwIRBBktCAAZLQoWGi0KDBstCg4cLQhDHS0ISh4tCEMfLQhKIAAIABEAJQAAvUgtAgAALQoaDS0KGw8KIg1KDiQCAA4AABmhJwIRBAA8BhEBAioQGA0OKhgQDiQCAA4AABm4JQAAxZkMKEsNDiQCAA4AABnKIwAAGnocCg0KAC0IAQ0nAg4EBQAIAQ4BJwMNBAEAIg0CDi0KDg8tDhMPACIPAg8tDgsPACIPAg8tDgoPACIPAg8tDEwPLQsNCgAiCgIKLQ4KDS0LDQoAIgoCCi0OCg0nAg4EFi0IABYtChUXLQoJGC0KDRktCEMaLQhKGy0IQxwtCEodAAgADgAlAAC76S0CAAAtChcKLQoYCwoiCkoNJAIADQAAGnUnAg4EADwGDgEjAAAaei0LBAoAIgoCCi0OCgQAIgQCDS0LDQ0tCg0LJwIOBAMAKgQOCjsOAAsACiMAABqpKQIACgAb3n/dCioBCgspAgAKBMYRsMUkAgALAAAazSMAAB/rLQgBCycCDQQFAAgBDQEnAwsEAQAiCwINHzAAUQBNAA0AIgtNDi0LDg0AIgtPDy0LDw4AIgtJEC0LEA8cCg8RBhwKERAAHAoQDwYAIgtREi0LEhEeAgALAB4CABIAHgIAEwAtCAEUJwIVBAMACAEVAScDFAQBACIUAhUtChUWLQ4IFgAiFgIWLQ4TFicCFQQWLQgAFi0KFBctCE8YAAgAFQAlAAC1zi0CAAAtChcTHgIAFAAtCAEVJwIWBAQACAEWAScDFQQBACIVAhYtChYXLQxaFwAiFwIXLQ4UFwAiFwIXLQ4TFycCFAQWLQgAFi0KFRctCEkYAAgAFAAlAACyIi0CAAAtChcTMwoAEwAUJAIAFAAAG+glAAC69S0LBxMAIhMCEy0OEwcnAhQEFS0IABUtCgcWLQhPFwAIABQAJQAAtc4tAgAALQoWEx4CABQALQgBFScCFgQEAAgBFgEnAxUEAQAiFQIWLQoWFy0MWhcAIhcCFy0OFBcAIhcCFy0OExcnAhQEFi0IABYtChUXLQhJGAAIABQAJQAAsiItAgAALQoXEzMKABMAFCQCABQAAByFJQAAuwceAgATAC8oAFAAEwAULQsDEwAiEwITLQ4TAycCFQQWLQgAFi0KAxctCE8YAAgAFQAlAAC1zi0CAAAtChcTHgIAFQAtCAEWJwIXBAQACAEXAScDFgQBACIWAhctChcYLQxaGAAiGAIYLQ4VGAAiGAIYLQ4TGCcCFQQXLQgAFy0KFhgtCEkZAAgAFQAlAACyIi0CAAAtChgTMwoAEwAVJAIAFQAAHS8lAAC7Bx4CABMALygAUwATABUnAhMEFi0IABYtCEMXLQhMGC0IVhktCg0aAAgAEwAlAAC+gy0CAAAnAhYEFy0IABcACAAWACUAAMGCLQIAAC0KGBMnAhcEGC0IABgACAAXACUAAMLyLQIAAC0KGRYtCwYXACIXAhctDhcGJwIYBBktCAAZLQoGGi0ITxsACAAYACUAALXOLQIAAC0KGhceAgAYAC0IARknAhoEBAAIARoBJwMZBAEAIhkCGi0KGhstDFobACIbAhstDhgbACIbAhstDhcbJwIYBBotCAAaLQoZGy0ISRwACAAYACUAALIiLQIAAC0KGxczCgAXABgkAgAYAAAeNiUAALsHHgIAFwAvKgAFABcAGBwKGBkGHAoZFwAcChcYBicCGQQaLQgAGi0KDxstChMcLQoWHS0KGB4tCEQfAAgAGQAlAAC7Ky0CAAAtChsXHAoXDwAtCAETJwIWBAQACAEWAScDEwQBACITAhYtChYXLQ4NFwAiFwIXLQ4PFwAiFwIXLQ4RFy0LEw0AIg0CDS0ODRMnAhEEFi0IABYtChUXLQoKGC0KExktCEMaLQhKGy0IQxwtCEodAAgAEQAlAADFqy0CAAAtChcNLQoYDwoiDUoRJAIAEQAAHxYnAhMEADwGEwEtCAENJwIRBAUACAERAScDDQQBACINAhEtChETLQ4SEwAiEwITLQ4OEwAiEwITLQ4QEwAiEwITLQxMEy0LDQ4AIg4CDi0ODg0tCw0OACIOAg4tDg4NJwIRBBUtCAAVLQoUFi0KCRctCg0YLQhDGS0IShotCEMbLQhKHAAIABEAJQAAu+ktAgAALQoWDi0KFxAKIg5KDSQCAA0AAB+8JwIRBAA8BhEBLQsEDQAiDQINLQ4NBAAiBAIRLQsRES0KEQ4nAhIEAwAqBBINOw4ADgANIwAAH+spAgALAK/qKtsKKgELDSQCAA0AACAGIwAAJSQtCAELJwINBAUACAENAScDCwQBACILAg0fMABRAE0ADQAiC00OLQsODQAiC08PLQsPDgAiC0kQLQsQDxwKDxEGHAoREAAcChAPBgAiC1ESLQsSER4CAAsAHgIAEgAeAgATAC0IARQnAhUEAwAIARUBJwMUBAEAIhQCFS0KFRYtDggWACIWAhYtDhMWJwIVBBYtCAAWLQoUFy0ITxgACAAVACUAALXOLQIAAC0KFxMeAgAUAC0IARUnAhYEBAAIARYBJwMVBAEAIhUCFi0KFhctDFoXACIXAhctDhQXACIXAhctDhMXJwIUBBYtCAAWLQoVFy0ISRgACAAUACUAALIiLQIAAC0KFxMzCgATABQkAgAUAAAhISUAALr1LQsHEwAiEwITLQ4TBycCFAQVLQgAFS0KBxYtCE8XAAgAFAAlAAC1zi0CAAAtChYTHgIAFAAtCAEVJwIWBAQACAEWAScDFQQBACIVAhYtChYXLQxaFwAiFwIXLQ4UFwAiFwIXLQ4TFycCFAQWLQgAFi0KFRctCEkYAAgAFAAlAACyIi0CAAAtChcTMwoAEwAUJAIAFAAAIb4lAAC7Bx4CABMALygAUAATABQtCwMTACITAhMtDhMDJwIVBBYtCAAWLQoDFy0ITxgACAAVACUAALXOLQIAAC0KFxMeAgAVAC0IARYnAhcEBAAIARcBJwMWBAEAIhYCFy0KFxgtDFoYACIYAhgtDhUYACIYAhgtDhMYJwIVBBctCAAXLQoWGC0ISRkACAAVACUAALIiLQIAAC0KGBMzCgATABUkAgAVAAAiaCUAALsHHgIAEwAvKABTABMAFScCEwQWLQgAFi0IQxctCEwYLQhVGS0KDRoACAATACUAAL6DLQIAACcCFgQXLQgAFwAIABYAJQAAwYItAgAALQoYEycCFwQYLQgAGAAIABcAJQAAwvItAgAALQoZFi0LBhcAIhcCFy0OFwYnAhgEGS0IABktCgYaLQhPGwAIABgAJQAAtc4tAgAALQoaFx4CABgALQgBGScCGgQEAAgBGgEnAxkEAQAiGQIaLQoaGy0MWhsAIhsCGy0OGBsAIhsCGy0OFxsnAhgEGi0IABotChkbLQhJHAAIABgAJQAAsiItAgAALQobFzMKABcAGCQCABgAACNvJQAAuwceAgAXAC8qAAUAFwAYHAoYGQYcChkXABwKFxgGJwIZBBotCAAaLQoPGy0KExwtChYdLQoYHi0IQx8ACAAZACUAAMTbLQIAAC0KGxctCAEPJwITBAQACAETAScDDwQBACIPAhMtChMWLQ4NFgAiFgIWLQ4QFgAiFgIWLQ4RFi0LDw0AIg0CDS0ODQ8nAhEEGC0IABgtChUZLQoKGi0KDxstCEMcLQhKHS0IQx4tCEofAAgAEQAlAADFqy0CAAAtChkNLQoaEAoiDUoPJAIADwAAJEonAhEEADwGEQEcChcNAC0IAQ8nAhEEBQAIAREBJwMPBAEAIg8CES0KERMtDhITACITAhMtDg4TACITAhMtDg0TACITAhMtDEwTLQsPDQAiDQINLQ4NDy0LDw0AIg0CDS0ODQ8nAhEEFS0IABUtChQWLQoJFy0KDxgtCEMZLQhKGi0IQxstCEocAAgAEQAlAAC76S0CAAAtChYNLQoXDgoiDUoPJAIADwAAJPUnAhEEADwGEQEtCwQNACINAg0tDg0EACIEAhEtCxERLQoRDycCEgQDACoEEg07DgAPAA0jAAAlJCkCAAsAl5JfDQoqAQsNJAIADQAAJT8jAAAnJh4CAAsAHgIADQAeAgAOAC0IAQ8nAhAEAwAIARABJwMPBAEAIg8CEC0KEBEtDggRACIRAhEtDg4RJwIQBBEtCAARLQoPEi0ITxMACAAQACUAALXOLQIAAC0KEg4eAgAPAC0IARAnAhEEBAAIAREBJwMQBAEAIhACES0KERItDFoSACISAhItDg8SACISAhItDg4SJwIPBBEtCAARLQoQEi0ISRMACAAPACUAALIiLQIAAC0KEg4zCgAOAA8kAgAPAAAmByUAALr1HgIADgkkAgAOAAAmGSUAAMblLQsCDgAiDgIOLQ4OAicCDwQQLQgAEC0KAhEtCE8SAAgADwAlAAC1zi0CAAAtChEOHgIAAgAtCAEPJwIQBAQACAEQAScDDwQBACIPAhAtChARLQxaEQAiEQIRLQ4CEQAiEQIRLQ4OEScCDgQQLQgAEC0KDxEtCEkSAAgADgAlAACyIi0CAAAtChECMwoAAgAOJAIADgAAJrYlAAC7Bx4CAAIALygARwACAA4nAg8EAScCEQQDACoPERAtCAECAAgBEAEnAwIEAQAiAgIQLQ4PEAAiEAIQLQ4PECcCEAQDACoCEA8tCg8QLQ4OEAAiAgIQLQsQEC0KEA8nAhEEAwAqAhEOOw4ADwAOIwAAJyYpAgACAMsNLioKKgECCyQCAAsAACdBIwAAKSgeAgACAB4CAAsAHgIADQAtCAEOJwIPBAMACAEPAScDDgQBACIOAg8tCg8QLQ4IEAAiEAIQLQ4NECcCDwQQLQgAEC0KDhEtCE8SAAgADwAlAAC1zi0CAAAtChENHgIADgAtCAEPJwIQBAQACAEQAScDDwQBACIPAhAtChARLQxaEQAiEQIRLQ4OEQAiEQIRLQ4NEScCDgQQLQgAEC0KDxEtCEkSAAgADgAlAACyIi0CAAAtChENMwoADQAOJAIADgAAKAklAAC69R4CAA0JJAIADQAAKBslAADG9y0LBw0AIg0CDS0ODQcnAg4EDy0IAA8tCgcQLQhPEQAIAA4AJQAAtc4tAgAALQoQDR4CAA4ALQgBDycCEAQEAAgBEAEnAw8EAQAiDwIQLQoQES0MWhEAIhECES0ODhEAIhECES0ODREnAg4EEC0IABAtCg8RLQhJEgAIAA4AJQAAsiItAgAALQoRDTMKAA0ADiQCAA4AACi4JQAAuwceAgANAC8oAFAADQAOJwIPBAEnAhEEAwAqDxEQLQgBDQAIARABJwMNBAEAIg0CEC0ODxAAIhACEC0ODxAnAhAEAwAqDRAPLQoPEC0ODhAAIg0CEC0LEBAtChAPJwIRBAMAKg0RDjsOAA8ADiMAACkoKQIAAgAFi61vCioBAgskAgALAAApQyMAACsqHgIAAgAeAgALAB4CAA0ALQgBDicCDwQDAAgBDwEnAw4EAQAiDgIPLQoPEC0OCBAAIhACEC0ODRAnAg8EEC0IABAtCg4RLQhPEgAIAA8AJQAAtc4tAgAALQoRDR4CAA4ALQgBDycCEAQEAAgBEAEnAw8EAQAiDwIQLQoQES0MWhEAIhECES0ODhEAIhECES0ODREnAg4EEC0IABAtCg8RLQhJEgAIAA4AJQAAsiItAgAALQoRDTMKAA0ADiQCAA4AACoLJQAAuvUeAgANCSQCAA0AACodJQAAxwktCwMNACINAg0tDg0DJwIOBA8tCAAPLQoDEC0ITxEACAAOACUAALXOLQIAAC0KEA0eAgAOAC0IAQ8nAhAEBAAIARABJwMPBAEAIg8CEC0KEBEtDFoRACIRAhEtDg4RACIRAhEtDg0RJwIOBBAtCAAQLQoPES0ISRIACAAOACUAALIiLQIAAC0KEQ0zCgANAA4kAgAOAAAquiUAALsHHgIADQAvKABTAA0ADicCDwQBJwIRBAMAKg8REC0IAQ0ACAEQAScDDQQBACINAhAtDg8QACIQAhAtDg8QJwIQBAMAKg0QDy0KDxAtDg4QACINAhAtCxAQLQoQDycCEQQDACoNEQ47DgAPAA4jAAArKikCAAIAW0o8UwoqAQILJAIACwAAK0UjAAAsoh4CAAIAHgIACwAeAgANAC0IAQ4nAg8EAwAIAQ8BJwMOBAEAIg4CDy0KDxAtDggQACIQAhAtDg0QJwIPBBAtCAAQLQoOES0ITxIACAAPACUAALXOLQIAAC0KEQ0eAgAOAC0IAQ8nAhAEBAAIARABJwMPBAEAIg8CEC0KEBEtDFoRACIRAhEtDg4RACIRAhEtDg0RJwIOBBAtCAAQLQoPES0ISRIACAAOACUAALIiLQIAAC0KEQ0zCgANAA4kAgAOAAAsDSUAALr1HgIADQkkAgANAAAsHyUAAMcbJwIOBA8tCAAPAAgADgAlAADBgi0CAAAtChANHAoNDgAnAg8EAScCEQQDACoPERAtCAENAAgBEAEnAw0EAQAiDQIQLQ4PEAAiEAIQLQ4PECcCEAQDACoNEA8tCg8QLQ4OEAAiDQIQLQsQEC0KEA8nAhEEAwAqDREOOw4ADwAOIwAALKIpAgACADrKBikKKgECCyQCAAsAACy9IwAAL1UtCAECJwILBAIACAELAScDAgQBACICAgsfMABNAE0ACwAiAk0NLQsNCxwKCw0GHAoNAgAcCgILBh4CAAIAHgIADQAeAgAOAC0IAQ8nAhAEAwAIARABJwMPBAEAIg8CEC0KEBEtDggRACIRAhEtDg4RJwIQBBEtCAARLQoPEi0ITxMACAAQACUAALXOLQIAAC0KEg4eAgAPAC0IARAnAhEEBAAIAREBJwMQBAEAIhACES0KERItDFoSACISAhItDg8SACISAhItDg4SJwIPBBEtCAARLQoQEi0ISRMACAAPACUAALIiLQIAAC0KEg4zCgAOAA8kAgAPAAAtvSUAALr1HgIADgkkAgAOAAAtzyUAAMctJwIPBBAtCAAQAAgADwAlAADBgi0CAAAtChEOJwIQBBEtCAARAAgAEAAlAADC8i0CAAAtChIPLQsGEAAiEAIQLQ4QBicCEQQSLQgAEi0KBhMtCE8UAAgAEQAlAAC1zi0CAAAtChMQHgIAEQAtCAESJwITBAQACAETAScDEgQBACISAhMtChMULQxaFAAiFAIULQ4RFAAiFAIULQ4QFCcCEQQTLQgAEy0KEhQtCEkVAAgAEQAlAACyIi0CAAAtChQQMwoAEAARJAIAEQAALqIlAAC7Bx4CABAALyoABQAQABEcChESBhwKEhAAHAoQEQYnAhIEEy0IABMtCgsULQoOFS0KDxYtChEXLQhDGAAIABIAJQAAuystAgAALQoUEBwKEAsAJwIPBAEnAhEEAwAqDxEQLQgBDgAIARABJwMOBAEAIg4CEC0ODxAAIhACEC0ODxAnAhAEAwAqDhAPLQoPEC0OCxAAIg4CEC0LEBAtChAPJwIRBAMAKg4RCzsOAA8ACyMAAC9VKQIAAgA7DIN6CioBAgskAgALAAAvcCMAADIILQgBAicCCwQCAAgBCwEnAwIEAQAiAgILHzAATQBNAAsAIgJNDS0LDQscCgsNBhwKDQIAHAoCCwYeAgACAB4CAA0AHgIADgAtCAEPJwIQBAMACAEQAScDDwQBACIPAhAtChARLQ4IEQAiEQIRLQ4OEScCEAQRLQgAES0KDxItCE8TAAgAEAAlAAC1zi0CAAAtChIOHgIADwAtCAEQJwIRBAQACAERAScDEAQBACIQAhEtChESLQxaEgAiEgISLQ4PEgAiEgISLQ4OEicCDwQRLQgAES0KEBItCEkTAAgADwAlAACyIi0CAAAtChIOMwoADgAPJAIADwAAMHAlAAC69R4CAA4JJAIADgAAMIIlAADHPycCDwQQLQgAEAAIAA8AJQAAwYItAgAALQoRDicCEAQRLQgAEQAIABAAJQAAwvItAgAALQoSDy0LBhAAIhACEC0OEAYnAhEEEi0IABItCgYTLQhPFAAIABEAJQAAtc4tAgAALQoTEB4CABEALQgBEicCEwQEAAgBEwEnAxIEAQAiEgITLQoTFC0MWhQAIhQCFC0OERQAIhQCFC0OEBQnAhEEEy0IABMtChIULQhJFQAIABEAJQAAsiItAgAALQoUEDMKABAAESQCABEAADFVJQAAuwceAgAQAC8qAAUAEAARHAoREgYcChIQABwKEBEGJwISBBMtCAATLQoLFC0KDhUtCg8WLQoRFy0IQxgACAASACUAAMTbLQIAAC0KFBAcChALACcCDwQBJwIRBAMAKg8REC0IAQ4ACAEQAScDDgQBACIOAhAtDg8QACIQAhAtDg8QJwIQBAMAKg4QDy0KDxAtDgsQACIOAhAtCxAQLQoQDycCEQQDACoOEQs7DgAPAAsjAAAyCCkCAAIAHcEw2goqAQILKwIAAgD/////////////////////JwIOBAEnAhAEAwAqDhAPLQgBDQAIAQ8BJwMNBAEAIg0CDy0ODg8AIg8CDy0ODg8nAg8EAwAqDQ8OLQoODy0OAg8kAgALAAAyeSMAADOiLQgBAicCCwQCAAgBCwEnAwIEAQAiAgILHzAATQBNAAseAgALAB4CAA4AHgIADwAtCAEQJwIRBAMACAERAScDEAQBACIQAhEtChESLQ4IEgAiEgISLQ4PEicCEQQSLQgAEi0KEBMtCE8UAAgAEQAlAAC1zi0CAAAtChMPHgIAEAAtCAERJwISBAQACAESAScDEQQBACIRAhItChITLQxaEwAiEwITLQ4QEwAiEwITLQ4PEycCEAQSLQgAEi0KERMtCEkUAAgAEAAlAACyIi0CAAAtChMPMwoADwAQJAIAEAAAM2ElAAC69R4CAA8JJAIADwAAM3MlAADHUS0LDQ8AIg8CDy0ODw0AIg0CES0LEREtChEQJwISBAMAKg0SDzsOABAADyMAADOiKQIAAgBGccQVCioBAgskAgALAAAzvSMAADZVLQgBAicCCwQCAAgBCwEnAwIEAQAiAgILHzAATQBNAAsAIgJNDi0LDgscCgsOBhwKDgIAHAoCCwYeAgACAB4CAA4AHgIADwAtCAEQJwIRBAMACAERAScDEAQBACIQAhEtChESLQ4IEgAiEgISLQ4PEicCEQQSLQgAEi0KEBMtCE8UAAgAEQAlAAC1zi0CAAAtChMPHgIAEAAtCAERJwISBAQACAESAScDEQQBACIRAhItChITLQxaEwAiEwITLQ4QEwAiEwITLQ4PEycCEAQSLQgAEi0KERMtCEkUAAgAEAAlAACyIi0CAAAtChMPMwoADwAQJAIAEAAANL0lAAC69R4CAA8JJAIADwAANM8lAADHYycCEAQRLQgAEQAIABAAJQAAwYItAgAALQoSDycCEQQSLQgAEgAIABEAJQAAwvItAgAALQoTEC0LBhEAIhECES0OEQYnAhIEEy0IABMtCgYULQhPFQAIABIAJQAAtc4tAgAALQoUER4CABIALQgBEycCFAQEAAgBFAEnAxMEAQAiEwIULQoUFS0MWhUAIhUCFS0OEhUAIhUCFS0OERUnAhIEFC0IABQtChMVLQhJFgAIABIAJQAAsiItAgAALQoVETMKABEAEiQCABIAADWiJQAAuwceAgARAC8qAAUAEQASHAoSEwYcChMRABwKERIGJwITBBQtCAAULQoLFS0KDxYtChAXLQoSGC0IQxkACAATACUAALsrLQIAAC0KFREcChELACcCEAQBJwISBAMAKhASES0IAQ8ACAERAScDDwQBACIPAhEtDhARACIRAhEtDhARJwIRBAMAKg8REC0KEBEtDgsRACIPAhEtCxERLQoRECcCEgQDACoPEgs7DgAQAAsjAAA2VSkCAAIAvtJejAoqAQILJAIACwAANnAjAAA3mS0IAQInAgsEAgAIAQsBJwMCBAEAIgICCx8wAE0ATQALHgIACwAeAgAOAB4CAA8ALQgBECcCEQQDAAgBEQEnAxAEAQAiEAIRLQoREi0OCBIAIhICEi0ODxInAhEEEi0IABItChATLQhPFAAIABEAJQAAtc4tAgAALQoTDx4CABAALQgBEScCEgQEAAgBEgEnAxEEAQAiEQISLQoSEy0MWhMAIhMCEy0OEBMAIhMCEy0ODxMnAhAEEi0IABItChETLQhJFAAIABAAJQAAsiItAgAALQoTDzMKAA8AECQCABAAADdYJQAAuvUeAgAPCSQCAA8AADdqJQAAx3UtCw0PACIPAg8tDg8NACINAhEtCxERLQoRECcCEgQDACoNEg87DgAQAA8jAAA3mSkCAAIARXxnxgoqAQILJAIACwAAN7QjAAA6TC0IAQInAgsEAgAIAQsBJwMCBAEAIgICCx8wAE0ATQALACICTQ0tCw0LHAoLDQYcCg0CABwKAgsGHgIAAgAeAgANAB4CAA4ALQgBDycCEAQDAAgBEAEnAw8EAQAiDwIQLQoQES0OCBEAIhECES0ODhEnAhAEES0IABEtCg8SLQhPEwAIABAAJQAAtc4t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LQxaEgAiEgISLQ4PEgAiEgISLQ4OEicCDwQRLQgAES0KEBItCEkTAAgADwAlAACyIi0CAAAtChIOMwoADgAPJAIADwAASiAlAAC7Bx4CAA4ALygAUwAOAA8nAhAEES0IABEACAAQACUAAMGCLQIAAC0KEg4nAhEEEi0IABIACAARACUAAMLyLQIAAC0KExAtCwYRACIRAhEtDhEGJwISBBMtCAATLQoGFC0ITxUACAASACUAALXOLQIAAC0KFBEeAgASAC0IARMnAhQEBAAIARQBJwMTBAEAIhMCFC0KFBUtDFoVACIVAhUtDhIVACIVAhUtDhEVJwISBBQtCAAULQoTFS0ISRYACAASACUAALIiLQIAAC0KFREzCgARABIkAgASAABLACUAALsHHgIAEQAvKgAFABEAEhwKEhMGHAoTEQAcChESBicCEwQULQgAFC0KCxUtCg4WLQoQFy0KEhgtCEQZAAgAEwAlAAC7Ky0CAAAtChURHAoRCwAtCAEOJwIQBAQACAEQAScDDgQBACIOAhAtChARLQ4IEQAiEQIRLQ4LEQAiEQIRLQ4NES0LDggAIggCCC0OCA4nAg0EEC0IABAtCg8RLQoKEi0KDhMtCEMULQhKFS0IQxYtCEoXAAgADQAlAADFqy0CAAAtChEILQoSCwoiCEoNJAIADQAAS+AnAg4EADwGDgEtCwQIACIIAggtDggEACIEAg4tCw4OLQoODScCDwQDACoEDwg7DgANAAgjAABMDykCAAIA5g1kPwoqAQIIJAIACAAATCojAABOQS0IAQInAggEAwAIAQgBJwMCBAEAIgICCB8wAE8ATQAIACICTQstCwsIHAoIDQYcCg0LABwKCwgGACICTw0tCw0LHAoLDQYcCg0CABwKAgsGHgIAAgAeAgANACcCEAQRLQgAEQAIABAAJQAAtYQtAgAALQoSDi0KEw8kAgAOAABMtCcCEAQAPAYQAQoqDw0OJAIADgAATMYlAADJLicCDgQPLQgADwAIAA4AJQAAwYItAgAALQoQDScCDwQQLQgAEAAIAA8AJQAAwvItAgAALQoRDgAqDgsPDioODxAkAgAQAABNEyUAAMlALQsGDgAiDgIOLQ4OBicCEAQRLQgAES0KBhItCE8TAAgAEAAlAAC1zi0CAAAtChIOHgIAEAAtCAERJwISBAQACAESAScDEQQBACIRAhItChITLQxaEwAiEwITLQ4QEwAiEwITLQ4OEycCEAQSLQgAEi0KERMtCEkUAAgAEAAlAACyIi0CAAAtChMOMwoADgAQJAIAEAAATbAlAAC7Bx4CAA4ALyoABQAOABAcChARBhwKEQ4AHAoOEAYnAhEEEi0IABItCggTLQoNFC0KDxUtChAWLQhEFwAIABEAJQAAuystAgAALQoTDgwqCw4ICiIIQwskAgALAABOEiUAAMlSLQsECAAiCAIILQ4IBAAiBAINLQsNDS0KDQsnAg4EAwAqBA4IOw4ACwAIIwAATkEpAgACABcaOMkKKgECCCQCAAgAAE5cIwAAUaItCAECJwIIBAMACAEIAScDAgQBACICAggfMABPAE0ACAAiAk0LLQsLCAAiAk8NLQsNCxwKCw0GHAoNAgAcCgILBh4CAAIAHgIADQAnAhAEES0IABEACAAQACUAALWELQIAAC0KEg4tChMPJAIADgAATtcnAhAEADwGEAEKKg8NDiQCAA4AAE7pJQAAyWQtCwcOACIOAg4tDg4HJwIPBBAtCAAQLQoHES0ITxIACAAPACUAALXOLQIAAC0KEQ4eAgAPAC0IARAnAhEEBAAIAREBJwMQBAEAIhACES0KERItDFoSACISAhItDg8SACISAhItDg4SJwIPBBEtCAARLQoQEi0ISRMACAAPACUAALIiLQIAAC0KEg4zCgAOAA8kAgAPAABPhiUAALsHHgIADgAvKABQAA4ADycCEAQRLQgAEQAIABAAJQAAwvItAgAALQoSDgAqDgsQDioOEBEkAgARAABPxSUAAMlAJwIRBBItCAASAAgAEQAlAADBgi0CAAAtChMOLQsGEQAiEQIRLQ4RBicCEgQTLQgAEy0KBhQtCE8VAAgAEgAlAAC1zi0CAAAtChQRHgIAEgAtCAETJwIUBAQACAEUAScDEwQBACITAhQtChQVLQxaFQAiFQIVLQ4SFQAiFQIVLQ4RFScCEgQULQgAFC0KExUtCEkWAAgAEgAlAACyIi0CAAAtChURMwoAEQASJAIAEgAAUH0lAAC7Bx4CABEALyoABQARABIcChITBhwKExEAHAoREgYnAhMEFC0IABQtCgsVLQoOFi0KEBctChIYLQhDGQAIABMAJQAAxNstAgAALQoVERwKEQsALQgBDicCEAQFAAgBEAEn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CAsnAg4EEy0IABMtChIULQoJFS0KCxYtCEMXLQhKGC0IQxktCEoaAAgADgAlAAC76S0CAAAtChQILQoVDQoiCEoLJAIACwAAWDcnAg4EADwGDgEtCwQIACIIAggtDggEACIEAg4tCw4OLQoOCycCDwQDACoEDwg7DgALAAgjAABYZikCAAIANTYC9AoqAQIIJAIACAAAWIEjAABary0IAQInAggEAwAIAQgBJwMCBAEAIgICCB8wAE8ATQAIACICTQstCwsIHAoIDQYcCg0LABwKCwgGACICTw0tCw0LHAoLDQYcCg0CABwKAgsGHgIAAgAeAgANACcCEAQRLQgAEQAIABAAJQAAtYQtAgAALQoSDi0KEw8kAgAOAABZCycCEAQAPAYQAQoqDw0OJAIADgAAWR0lAADJrCcCDgQPLQgADwAIAA4AJQAAwYItAgAALQoQDScCDwQQLQgAEAAIAA8AJQAAwvItAgAALQoRDgIqDQgPDioIDRAkAgAQAABZaiUAAMWZAioOCw0OKgsOECQCABAAAFmBJQAAxZktCwYOACIOAg4tDg4GJwIQBBEtCAARLQoGEi0ITxMACAAQACUAALXOLQIAAC0KEg4eAgAQAC0IAREnAhIEBAAIARIBJwMRBAEAIhECEi0KEhMtDFoTACITAhMtDhATACITAhMtDg4TJwIQBBItCAASLQoREy0ISRQACAAQACUAALIiLQIAAC0KEw4zCgAOABAkAgAQAABaHiUAALsHHgIADgAvKgAFAA4AEBwKEBEGHAoRDgAcCg4QBicCEQQSLQgAEi0KCBMtCg8ULQoNFS0KEBYtCEMXAAgAEQAlAAC7Ky0CAAAtChMODCoOCwgKIghDCyQCAAsAAFqAJQAAyZotCwQIACIIAggtDggEACIEAg0tCw0NLQoNCycCDgQDACoEDgg7DgALAAgjAABarykCAAIAklXPSgoqAQIIKQIAAgQR+zgkJAIACAAAWtMjAABfmS0IAQgnAgsEBQAIAQsBJwMIBAEAIggCCx8wAFEATQALACIITQ0tCw0LACIITw4tCw4NHAoNDwYcCg8OABwKDg0GACIISRAtCxAPHAoPEQYcChEQABwKEA8GACIIUREtCxEQHgIACAAeAgARACcCFAQVLQgAFQAIABQAJQAAtYQtAgAALQoWEi0KFxMkAgASAABbbycC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AAsAAHCLIwAAdC4tCAEIJwILBAQACAELAScDCAQBACIIAgsfMABJAE0ACwAiCE0MLQsMCwAiCE8NLQsNDBwKDA4GHAoODQAcCg0MBgAiCEkOLQsODRwKDQ4GHAoOCAAcCggNBh4CAAgAHgIADgAnAhEEEi0IABIACAARACUAALWELQIAAC0KEw8tChQQJAIADwAAcR4nAhEEADwGEQEKKhAODyQCAA8AAHEwJQAAyhgtCwcPACIPAg8tDg8HJwIQBBEtCAARLQoHEi0ITxMACAAQACUAALXOLQIAAC0KEg8eAgAQAC0IAREnAhIEBAAIARIBJwMRBAEAIhECEi0KEhMtDFoTACITAhMtDhATACITAhMtDg8TJwIQBBItCAASLQoREy0ISRQACAAQACUAALIiLQIAAC0KEw8zCgAPABAkAgAQAABxzSUAALsHHgIADwAvKABQAA8AECcCEQQSLQgAEgAIABEAJQAAwYItAgAALQoTDycCEgQTLQgAEwAIABIAJQAAwvItAgAALQoUEQIqDw0SDioNDxMkAgATAAByJyUAAMWZAioRDA8OKgwREyQCABMAAHI+JQAAxZktCwYRACIRAhEtDhEGJwITBBQtCAAULQoGFS0ITxYACAATACUAALXOLQIAAC0KFREeAgATAC0IARQnAhUEBAAIARUBJwMUBAEAIhQCFS0KFRYtDFoWACIWAhYtDhMWACIWAhYtDhEWJwITBBUtCAAVLQoUFi0ISRcACAATACUAALIiLQIAAC0KFhEzCgARABMkAgATAABy2yUAALsHHgIAEQAvKgAFABEAExwKExQGHAoUEQAcChETBicCFAQVLQgAFS0KDBYtChIXLQoPGC0KExktCEQaAAgAFAAlAADE2y0CAAAtChYRAioNEQwOKhENDyQCAA8AAHM9JQAAxZkMKEsMDSQCAA0AAHNPIwAAc/8cCgwIAC0IAQwnAg0EBQAIAQ0BJwMMBAEAIgwCDS0KDQ8tDg4PACIPAg8tDgsPACIPAg8tDggPACIPAg8tDEwPLQsMCAAiCAIILQ4IDC0LDAgAIggCCC0OCAwnAg0EES0IABEtChASLQoCEy0KDBQtCEMVLQhKFi0IQxctCEoYAAgADQAlAAC76S0CAAAtChIILQoTCwoiCEoMJAIADAAAc/onAg0EADwGDQEjAABz/y0LBAgA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",
      "custom_attributes": [
        "abi_public"
      ],
      "debug_symbols": "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",
      "is_unconstrained": true,
      "name": "public_dispatch"
    },
    {
      "abi": {
        "error_types": {
          "10791800398362570014": {
            "error_kind": "string",
            "string": "extend_from_bounded_vec out of bounds"
          },
          "11021520179822076911": {
            "error_kind": "string",
            "string": "Attempted to delete past the length of a CapsuleArray"
          },
          "12327971061804302172": {
            "error_kind": "fmtstring",
            "item_types": [],
            "length": 98
          },
          "12469291177396340830": {
            "error_kind": "string",
            "string": "call to assert_max_bit_size"
          },
          "12913276134398371456": {
            "error_kind": "string",
            "string": "push out of bounds"
          },
          "14990209321349310352": {
            "error_kind": "string",
            "string": "attempt to add with overflow"
          },
          "15764276373176857197": {
            "error_kind": "string",
            "string": "Stack too deep"
          },
          "16431471497789672479": {
            "error_kind": "string",
            "string": "Index out of bounds"
          },
          "17655676068928457687": {
            "error_kind": "string",
            "string": "Reader did not read all data"
          },
          "1998584279744703196": {
            "error_kind": "string",
            "string": "attempt to subtract with overflow"
          },
          "2967937905572420042": {
            "error_kind": "fmtstring",
            "item_types": [
              {
                "kind": "field"
              },
              {
                "kind": "field"
              }
            ],
            "length": 61
          },
          "3330370348214585450": {
            "error_kind": "fmtstring",
            "item_types": [
              {
                "kind": "field"
              },
              {
                "kind": "field"
              }
            ],
            "length": 48
          },
          "361444214588792908": {
            "error_kind": "string",
            "string": "attempt to multiply with overflow"
          },
          "7158692485152407286": {
            "error_kind": "fmtstring",
            "item_types": [
              {
                "kind": "integer",
                "sign": "unsigned",
                "width": 32
              }
            ],
            "length": 101
          },
          "9530675838293881722": {
            "error_kind": "string",
            "string": "Writer did not write all data"
          },
          "9791669845391776238": {
            "error_kind": "string",
            "string": "0 has a square root; you cannot claim it is not square"
          },
          "9885968605480832328": {
            "error_kind": "string",
            "string": "Attempted to read past the length of a CapsuleArray"
          },
          "992401946138144806": {
            "error_kind": "string",
            "string": "Attempted to read past end of BoundedVec"
          }
        },
        "parameters": [
          {
            "name": "scope",
            "type": {
              "fields": [
                {
                  "name": "inner",
                  "type": {
                    "kind": "field"
                  }
                }
              ],
              "kind": "struct",
              "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
            },
            "visibility": "private"
          }
        ],
        "return_type": null
      },
      "bytecode": "H4sIAAAAAAAA/+29d2Acx3U/TuLugANwh+t3EitIip1HFBIUIbAAYu8QiwpVQRIiIUIkRYKyJDfRtuzEBYUg1RwnLpKsxHFJLJckTnOc2IlxcX7xN3GJHcclxf46sZPYceKvHf+OFrD3Zmfem5m9WeDWWP51xO5+prwyb9689yZweeSp37jw6Jnj914Y6BnonTFy6X03n+/r7+87uaWnv/9K8f8vHOo7c7K/d3R45PKnGmfQ/2bOkL4yY3h0eFgONDJjeLjYIujaV7qWXHp+y9kzFwZGL72wte987/GBqkvv3XVmoPdk7/n3HFnTKge1fz9T6/vHT9m/n6HX/qlLz12b1JGIhfPiwd7+noG+h3sdj8RCCOghzLj0m9f6cqJnoGfL2XOPWkM6CfsEwN+z7+zDl0t/mFl6/+UxtfA9mqk7O+XOyoxLzx0aOHtuhOknALNRb8vz2/t6+08UYb96vPnsm672/s+Ld94y/MhbTxX2/sah6u9+vu3Hz5/65p9/4hP/Yf9wq/XhcPxbTV9t+c7/fPSza9v//vKhP7z3H7fszsy4/eMf2vHMc+96xV/aP9xmfTh2YtE3v3hl876/eVu6+7GVf/uHr/u78JbkR5/+wYFvdrx44rFL9g+3Wx/GP7jrzPGOD7Y3X7nymqUHP/3UX/zhf3/y4t0j5y7/ydt/7aX9P7V/uAPM4Lq1khmc+eA77d/vtBr+wYUvvPDZt334Uy8OvPf5JxNfjj5Tv6rutU888b3Z/zbn2e8/8R77h7usht99ZL2UcgH757u1Pq+2f77H6vamjwWOnvqtH5+t3/H6D77iy1/afzE6p+eT83/p+aN/OjL/2/e+0f7hXuvDf3nr218b++DldzauLPywesfQd+/9z12h9V8uvOr6P3ndT779/VH7h/usD//66E+++lJs9LFH3vY7r1y/LNXzm6Nf+PfvfPqzH4j959ff/9AX2uwf7tfj8bD9+wN639fZv+8uU4feovX9zMv27w/qtR+3f39Ih8OL/+zfH9b7nhv/Eb3vOS10q5aE8v2/zWK8S8+9+NWutxWav/mTujfv63nDI2ve8vnb/vWx6967+B8feP+c30zYP7zd+vAbA1tGBnIPrvvX8Ofe1vKu2XO/9oP3vvTP//Vo7/rv/vO/fHTBf9o/vEOPYp32749aDUv+2T+8c+LD61qXtp97+q/SX1m28O86/+g3V1+5/gc3bPjKx3e+6/s//vP/Fnx418SHMzVbvFtjqPV37t1r//4eZKgzZQ3fK5mjmdiH9+kRh1O8PbpLru37Y3rfc+JwXJE5QvYPT2g0/L8/+shS+/e9Ew2v2FD7/eff/JonZvzDe//v4H+t+ERnPjGvK7H6/7z9b2efOX/n9d+3f3i/3ojnvHCwd+Di+TPjdlOh88uX3rf97PnevpNnrv3h6u/1PDbQe/zeiwP9957sHTgy0NffN/BoscWB3kcGvjIjd+n9+3ofPHv+0a4TJ873XrgAzRvsSQB9EkSfhNAn1eiTGvRJGH1Siz6pQ5/Uo08i6JMo+qQBfRJDn8TRJwn0SRJ9kkKfpNEnGfRJFn2C88511xiruM978Fz/uBh47X+MDEpfWbdWC/O5Iy2t6+m/yns6PMzvb67XsnLv5AFmaQH08ACztQAe4wHmaAEM8ABztQB6eYB5WgDHeYD5WgB5HqBRC+AMD7BAC+A8D7BQC+BuHmCRFkAjD3CDFkA3D7BYC+B+HmCJFsBZHmCpFsCDPMAyLYA+HmC5FsBJHmCFFsAFHmClFsCjPMAqLYBTdr9SvuSa46BX6xlaq4qezL4zPecfLX504NxVC/g9xeXv5VVioiXQwvt3nTnxsnPI1nhed5vMNl5qwmqeH3OVfTaaYNeeL/q2zveKn16PNdfEN9dUao6CnGUecrZ5yDnmIeeah5xnHnK+echG85ALzEMuNA+5yDzkDZ7gSxfIs9g85BJPDHypechlnpDx5Z4QyBWeWHtmTdcV0hsUX+kJgXTB2ljlCRW8xBPkcUGrz56ummiZR5jItq9bXdp7qu5RrYbQHepqQztUwThXl5pX/ygv/aiZbgmeiry/dCrSf/bk8PAVuy/bihv49Z29Pee6zp/veRQSYyXyfo/4/eYZVzh/b9Gfcen5l18cET1cKfZF2z952Rs8gx3eHzCHPt29RRKfOXm45+TJ3hN7z568MDx8Gen/TtSnXzxpp3zTnKfhBdTv0qx7pKftd2nGubrJEFc3k9LLEOMlhhhbes5duNjfexmd6DzCQiUCAC5pQfhh5hX8cEaV9FZAB8oSV8o9SkEmt4WY3O5Lz+0923MCzgz48NopqI3epYkdb/T9Lzf68/8cOHcFvPCefRf7hZ82c7jNkGDMCIkeNI/3wP5KHuNPQqy0FT21ouR1/Kaa8pswKr959+QXLDDcmFt0o4rUObsFjttGhlb4DIFc84G9Rak8fKrnzLaHLvb0X0DRizO9++KD53bdDxpYM/ZpnjEskhzF2mzlh9Famr3nrjUzMvZJSlLzGoRpJpg4T8xeM8HEmgTt0mfiFpyJmw0xcQs9V/ZmW3UDrXSoD8ZtI8Ma+AyBXEsycSsE45l47dgXeMZYI2XiNfww1nBM/NcU66gcSR2i6KACcJoHWKMFcI4HWKsF0M8DtGkBPMIDrNMCeCUPcKMWQDMPsF4L4NV2rm4nlMtNeoK2Ql+53IQrl3ZDyuUmXjza0ZPFDtg1ThbBU/RksYNvroPQ+x0KrgXnkLPNQ84xDznXPOQ885DzzUM2modcYB5yoXnIReYhW8xDtpqHXGYeco0nIJd5QnqWe4LVXdCXSz3BRC6sPSs9QfG15iGXTFfpWeyJRXeJJ2R8kSdkvM0TA19nHvJG85DrqV2iygb0FfyWC9+AbtDbAy7V34BuwDegHYY2oBvIybbNxkbYNY4Q4Cm6Ad3IN7eRoC2AnGUecrZ5yDnmIeeah5xnHnK+echG85ALzEMuNA+5yDzkDZ6YyyWeYHUXBHKFJyCXeULGl3tCINd6Qnq8MZc3eYLVXTANVnmCPHM8YQx6g9XXmYe80TzkevvGYQOxjdpYXtSHwjZqI76N2mBoGyWYqw1EkMAmvWZjWLOb+GY3wXHbyLAZPkMgO8kggU0QjA8S6CzMvMpzxmZplMBmfhyb7VEChZnDXKwL4LlmQ2zcTMzfRoKNyySpAhtvwtl4oyE23kTPlb3ZzXrNNmiRH4zbRoZO+AyB7CLZeDME49m4qzDzeZ4zOqVs3MmPo5Nn43dybLxJQS6Foq6kjTdRzPruIy0K7EJQXgVgBk9BXJC69JjqZ/qC1IULUqchQeoiOcE2GzfDrnGUvBnOOtLczXxzNxPM4UP6kD6kD+lD+pA+pA85aZCbfMhpBjlt+dIXSJ/ivtrw+dKH9JnIZ3Uf0l97fIr7A/eZyF90fX3pM5HPRP7A/bn0Ke7zpT9wn4l88vgq2F8ofCbyNZGvL32+9MnjKzef1X2B9PnS76UP6cu4Tx4f0lfB/sD9gfsD95WbP5c+pC/jPuR0WXv8ddznS7+XPqQP6UuPL5A+efy59PWlbwX7rO4zkU8enzw+efzlzJ9LXyB9yGnFRLYCkl0T3wnKad6sV9EyauvuBLDVWasl0AJaTrPLUDlNwVx1gbmyN7tFr9kI1uwWvtktcNw2MmyFzxDIbWRd2i0QjK9Lu60Q+DjPGVsnZgKtS7uVH8fW0vSN16UNfJhiHpXbk7ZQlFABuMgDbNUCOMEDbNMCWGWn6XZCtHbosdl2fdHagYvWdkOitYPnje0l3rDNxk7YNY4RwVP0AqidfHM7Ca0HIGeZh5xtHnKOeci55iHnmYecbx6y0TzkAvOQC81DLjIPebN5yCXmIbeYh1xrHnKrJyje6AmKz/HEXG6drlrdBX250jzkmunKl0s9wZcrPAHpgn253BPkWeQJTbTME2pjlScovsAT+tKFgbdN14VisSeYaIknVshFnmCiNk8MfJ15yBvNQ643D7nNE+RZ5gmbyBs73QWeIE+jGxS3eZF3ED71na7f/rYT96nvMORTF8zVDtSnvgt2jZtH8BQ9SdzFN7eLII0P6QrkZk9A+gOfbnM5bXvpQ043Gfc1kQ/p86W/9vhM5M+lP3Af0l/OfFb3mcifS58vfUh/hfQXCn/gPqS/QvqQPqv7c+lD+vrSJ4+vify59PWlz5d+L31W9yF9Gfchfb70pccfuD9wX6v7c+lD+hT3+dJnIn858wfuKzdfE/mQPl/6+tJnIp88/sB98kxn6fFl3Gcinzw+efyB+3Ppy7jPlz4T+UzkQ/qQPqQP6UP6kD6kD+ka5HN7z/acAA+ZW5mQ9jTLd+6ArxFFOlXu1DrMA+zSAriXB9itBfCQvebmnomhCyqQ7tUrAtpim/EJYGu+rZZAC2gF0j2GKpDu5cm9p0Ru22zsg13jWGEfpDvS3D6+uX0EdwHIVeYh55qHXGQecp55yLXmIWeZh1xmHnKpJ5hoq3nIXeYhV5iH3G0ecoF5yDmeUBvrPKGCXZDxRk9QfL0nmGiZJ9TGIk8w0ZLpqonmeEITecMY9BfdiiaPCzK+2BMDb5uuNlGbG6aBbdu9l3BC7NPzA2zSd0Lsw50Qew05IQRztRd1QuyHXePmETxFnRD7+eb2E6TZr7DuOIecax5ykScGvsw8ZKN5yDmeIM86n+KVTPH1nmCireYhl3hCX67wBHkaPUEeb+jLrZ7gy6WeoHijJwTSBb5cYB5ylicG7g2TdY4nbCJvUNwbJmvbdLXclvk2kW8TVaAmWuQJvtxtHnKLJ8izwA3TwOat22nOdxkx6rvc6Z7vEsbL2Zvdr9dsvRaJwLhtZDgAnyGQ3R/Y23vhwuFTPWe2PXSxp/8Cin7g0gu7Lz54btf9oIHuQs0WnjMOTMzEUazRA/w4DpSm77lr7YwUajZxoYwuBJvthK8R7W001N5Gxfa6DLXXRfDHPkJMNVl2q76Y7sfFdJ8hMd1PzhUuLftFTG39vN4ZW1OQs8xDzjYPOcc85FzzkPPMQ843D9loHnKBeciF5iEXmYe82TzkEvOQW8xDrjUPudUTFG/0BMXneGIut05Xrb5kus6lC0y01BMDX+EJSBeMweXTlS/XeGLRdYHiyzyx6HpjR9E2XU2DxZ7YpCzxxHK2yBNM1OaJga8zD3mjecj15iG3eYI8yzxhwHhjD7lgupoGyymftEpa/8O8gxd3d3freZyX6ru7u3F39wFD7u5ucrJts3EL7BpHCPAUdXffwjd3C0HbWxTsXeeQs81DzjEPOdc85DzzkPPNQzaah1xgHnKhechF5iFv8MRcLvEEq7sgkCs8AbnMEzK+3BMCucYTAukCxfd7wjTwxjq+yBMCucQnjzHIpZ5YKJZzUUrdpZ+rNbYi3UR7q+FrxOZMZd83g9/p4Pu+g1pbr5kf1t/3HcT3fbcY2vcdpIlrb/aQ3ph/G2v2EN/sIThuGxkOw2cI5BEyGvEQBOOjEY8UwjfxrHUY8hHS7GF+JIe5eMRwm31EBwnG0pvkGbX6jHUIZ6yDhhhLQOGDqEPhMOyagAyyoFCaCD7gdAe0sdshQvgO6/F/k77wHcaF75Ah4TssUq+Y8B2BXeNmETxFvXlH+OaOEIQ5omCyO4ecbR5yjnnIueYh55mHnG8estE85ALzkAvNQy4yD3mDJ+ZyiSdY3QWBXOEJyGWekPHlnhDINZ5YIRd4YoVc5om5XOsJvmz0hFb3hpnlDbWxwBMCud8TMj5t+XKpJwwY3ssM3EmrDTkTVsPXiPYOGmrvIHyN85bh7osjeh6EZfruiyO4++KwIffFEXKubLNxK+waN4/gKeq+uJVv7laCNLcqKBvnkLPNQ84xDznXPOQ885DzzUM2modcYB5yoXnIReYhb/DEXC7xBKu7IJArPAG5zBMyvtwTArnGEwLpAsX3e8I08MY6vsgTvdzviV42eoKJXKD4Uk+sPfzOE2xLVxva6a6Gr3FHt/hO8Fa9zdgC/Z3grfhO8IihneCt9FzZm71Nr1lUvG7jm70NjttGhtvhMwTyDjI86TYIxocn3VGovZ7nDNAsGp50Oz+S27nwpNo0x8jMrtqM4BwhZvBWgpE1iRrQZ+TbcEa+1RAj30bOFc5Pt5FkP+KM7DSknRVuU2hPKDBKrHCbffC3Eaxwux41/lifFW7HWeE2Q6xwOz1X9mbv0Gv2j1AFxDd7Bxw31/BRXbmzEfIuiI506m5SK94BwXiteHehtsPe6J3wE47v7pTGmN3Jz9KdBCNPAeBdPOBdkGgTOr2FEh+VYOguihdVAFoonlIBaOWpi+uGu/TY9Zi+brgL1w13GtINd5HcYpuNu0leB09Rz/fdfHN3E8wJIGeZh5xtHnKOeci55iHnmYecbx6y0TzkAvOQC81DLjIPebsnWN0b0rPUPOQaT8zlMk/I+HJPCKQLA1/iiV7O84SMu0DxrZ4QyBWeoLgLrL7fE3zpggGz0hPS4w3l5sLA15mHvNE85HpPzOUaT/ClN6zgRk8M3IUV0gVHxFrfZJ1m0rPCX3QreeDeMFm9oYIXeEIFz/PEXHrDvrxjutqXiz2hNhZ4Yi5XeEIgvUEeF/Tlck+YWd7gy7We4Mtpu5wddWM540JX8DiDu/WO+nfoxxncjccZ3GUozuBuURAJFmdwD+waN4/gKRpncA/f3D0Eae5R0JXOIWebh5xjHnKuech55iHnm4dsNA+5wDzkQvOQi8xD3mwecol5yC3mIdeah9zqCYo3eoLiczwxl1unq1ZfMl3n0gUmWuOJ5WyZecj9njAGvWG5+QvFdCPPUk8MfIUnIF1QG8unK18u9sRytsQTArnIE/qyzRMDX2ce8kbzkOvNQ27zBHmWeUIFe8Mm8ob53+gGxbkEONxNf4+ep7xe301/D+6mv9uQm/4e8kjDNhv3wq5x83jvxHfo+cm9fGP3EoTxAX3ACgO0Vy5gDq7MqKO7GSHDlY5KevM+HuBeLYBdPMB9WgBbeYAeLYBjPMAxLYDVPMBxLYCbeIATWgBNPECvFsAauyK+n1iWTuqtDJf0l6WT+LJ0v6Fl6SQvM/ejy9Ip2DVOnsBT9PT4FN/cKUJEAeQs85CzzUPOMQ851zzkPPOQ881DNpqHXGAecqF5yEXmIe/xBF+u8ASkC5pouSfIs8gT+nKlecg105U895qHvM8TA19nHvJG85DrPTGXyzyh1b0x8MbpqtVXTVcVvGC6Wm5zPTGX+z0x8K3TldVneUIFT1vzv8c85BZPLGe+mVXRArlkujKRN6yNeZ6g+HJPsLoLamP2dLWJtk3XhcIbrL7EE/rSG14DFyh+zBPS0+IJ5eYN83+VJ8wsFyBdOFBwwVY/bh7yhCcgt3pi7ZnnCSZyQav7oSAVzUTHPGHAzPUExW+arlZwqycWCm+cUSyYrky0whNM1Ftu8PFBPn1gvOHyo1bfcMlk1Oq97kWtgrhyP2rVN1XUIP2o1Yr2D3gjanWeJ3rpglvRj32oaCba4gmDao4njNOlnmCipZ4QSD/Kf7r5+W/yxHLmjahVPwljuknPsulqE/lJGOYg/UjL6Raa4o3zem8EaLugL9dO19MIP/S5or0GSzwhkIuna1jkFk/IuB+uO9340g/Xrei59MN1K1q5+eG6FQ3ph+tWNKQfrlvRWt2PgaloJvLDdSv6oMsP151uDjI/XLeimehouVVqj9gDVE9ONCwI1z2lFzFr9ypPAFujtVoCLaDhuicNhesKJvtkabJts9EHu8YRAjxFw3X7+Ob6CNr2KZgqziFnm4ecYx5yrnnIeeYh55uHbDQPucA85ELzkIvMQ57wBHlaPdHLJeYhb/LEwBdNV/J4Q6sv8sTAV5qHXDNdybPMPORWTwx8nXnIG81DrjcPecwT5GnxhGmwzBOaaI0nBu7COr7cN2CmmQFzjE8Pxr0vfXoOkAP63pc+3PtyypD3pY90ddlm4wHYNW4ewVPU+/IA39wDBGkA5CzzkLPNQ84xDznXPOQ885DzzUM2modcYB5yoXnIReYhbzYPucQ85BbzkGvNQ271BMUbPUHxOZ6Yy63TVasvma5z6QITrfGETbTAEzK+zBNzudZfKKaZYe0NtbHAEwK53xMyPm35cqknBr7CE5Au8OXy6cqXiz2hL5d4QiAXeUJftnli4OvMQ95oHnK9echtniDPMk+oYG/Y6t6wLxvdoDgXroofHz2gd4KT0D8+egA/PuozdHz0AH3UZm/2tF6zcazZ03yzp+G4bWToh88QyAc/sLf3woXDp3rObHvoYk//BRS9/9ILuy8+eG7X/aCBBwvRf+Q5AzTbjTXbz4+kvzSBz11raaQQ/YdLz+0923NCzHV9hhi5D772i94ed7KJC6om04b0BfU0LqgPGBLU0+Rc4fJymmTrPmds/YsAaWfY0wrtCdWWEsOenvT2bCxxmhCQfj0efUBfQPpxATltSED6ybmyzcaDsGvcPIKnaCDEg3xzDxKkAZCzzEPONg85xzzkXPOQ88xDzjcP2WgecoF5yIXmIReZh7zBEwLpAl+2ekIgt3qCiVwQyCXTVQW7QJ61nhi4C0y03BNMtMoTTLTUPOQy85ArPDHwWZ7gy3nTldUXe2I5W+CbBr5pUIEDX2kecs10JY8LK6Q3dhTrzEPeaB5yvXnI454gjwvS0zZd1ca86bqcTVtNdIcnNJE3DOtlnmD1tZ6QHhc2z9s8wZcu+Im8sUnxhr486gl9ecwT5GnxxEnKMk8Yg2s8MXBv+NV911NFGzBcIZAWIv7lmF4Iykb9+JdjePxLi6H4l2P8XLWoBIgdI+OkbjYferXEPOQW85BrzUNuNQ+5yDxkoycoPscTc+kCxeeah5znCYp7Yy5dYKI15iEXmIdcZh5yv3nIWZ7QRN7gy7meoPhcT6yQ3ljOlnqCPCs8AemCJlo+XTXRYk+skEs8IZCLPKHc2jwx8HXmIW80D7nePOQ2T5BnmSdUsDf2497YUTS6QXGba+0Y4WjUTLQ7re9oJBLtjrmXaHcMdTT6iXa/GP50P9HOHKQ3Eu1OeII8Lsh4jyfCaaZtuPYSTwx8nicG7kKqkAsxBlum66LrxxhMN/Ks8sQKucITA/cT7XxN5GuiCprLxZ4YuJ/CZg7SGylsLszlTZ7gy2lbG2KNJ8wsv4hQRTORX6XG10SVuOh6I1vTG4l2Kzyhgv3so+mmL6ftfrzRE2aWN7b4Wz0hkCs8QXEXWH2/J/jSBWfjSq5Wtgu1wPvga3ygzvPb+3r7T9BBMk9GPrmPj3fBo3/O6AXgBPWjf87g0T8PGor+OUOS1TYbZ2HXOBKchSRAmjvLN3eWoKr17Kh5QC6F0hilzxqldL97lO4vn9LXGyOM9XOWecjZ5iHnmIecax5ynnnI+eYhG81DLjAPudA85CLzkPeZh1xmHnKFJ1h9lif4cqsnKO6CjC/3hECu8QQTuUDx/Z4QSG+s44s8IZBLfPIYg1zqiYGv8ATkLE+sPd7gy8WeWM6WeEIgF3lCX7Z5YuDrzEPeaB5y/XSV8SWeUBsuzOU8T8xloyc00QJPmAbzPDGX3lDBd3hCBR/3N3zTbCvlDUeEC5pole9s9GW8AlndG5vnVZ7QRCs8MfBpu+/Z4gm1sdUTFPfG2uMNP9Gq6arVXfG52QJy2ojwpON6EUI79cOTjuPhSW2GwpOO83PVhoYnnYFd4+YRPL1eIxrqDEGaMwoLrnPI2eYh55iHnGsecp55yPnmIRvNQy4wD7nQPOQi85D3mYdcZh5yhSdYfYl5yP2eUBsLPNHLrZ4QyHXmIW80D7neE3PZ6AkZ94ZpsMITFF/sCeXmAhMt9QR5Znmil2s8wUTLPGFtzJqu+nKRJ2TcGwvFCk/w5fLpypeLPbFCLvDEXHpjW9roCa2+wBNqY54n5tIbO9073Njp2rPlj5d+9ml4z48T7fXB12y+9ePESYNeIvTMUf2TBiIR+rh7idBwruzNntUb82WtwyAwbhsZzsFnCORDH9jbe+HC4VM9Z7Y9dLGn/wKKfu7SC7svPnhu1/2ggYcKiT/mOQM02401e44fybnSBD53raWRQuITHCMzpzZmBOc4fK2C2ms21F6zYntdhtrrmsr2CHXz7iPrpQK/n5JdFYCv8wDntADeyQM8pAWwnAc4rwXwcR7gghbANh5gQAvgozzARS2ASzzAw1oAt/MAr9ACWMYDPKIF8C88wKNaADt5gMe0AH6HB3ilFsAID/AqLYAf8gCv1gIY5QFeowXwfR7gtVoAAgNo7JKeEdIogHi9HkQAU7Vjr+N1bbF/sCGbTTH2eMni0rbMxl6Hm2ZFYDO2mXBMjxMLSLFXcPA6sK9Th+WJ+DpTRLwkHDBsyE5EW9eort/oyoRsdQX1jCuoC1xBPesK6h2uoJ5zBfUhV1DPu4J6gyuoF1xBHXAF9aKHUB92BXWhK6ivcAW11xXUR1xBfdQV1JWuoD7mCuoaV1Bf6QrqzR5aDV/lCuqrXUF9jSuo3R5CfS3nLeot/US9Rb18i71q3qJeu1nca8xtPeN+o27rXvfc1r1ogLxy/c57tNzVOGk8V8bShV56o4aaCwP3Rq7XOk9QfKsnKO6NeiHLPKGJXMjgXWsecpcnmGjaJqu7QB4/Wb2iKe7CwL1RncxfdP1Fd5osun6FmIoWSL9CjL/oViIT+fU7K1p6vFGCxBvFNhs9IePTtsroMk9oIm+UbJo/XTXRtDUNvGGyesMY9EYhPhf2kN44nPHGftwbW/ye6aqJvFEZ0wWbaLcn5nIuFyOyq/QTjRHZxbe3Sy1GZBfV3klD7Z1UbO+0ofZOw9dsUR+7iBiYe/TCUB7Wj4G5B4+B2WUoBuYecq7wIpH38PPoF4n0i0SahPSLRJqDPOEJ8rgg4z3mIdd6QsYXeUK5LfHEwL1R0sWF4lIu1FHbMl0XXW9Ux9ziCX3pAqQLxfgWe6KX3qgmvMgTKnixJwa+xROayAVW3+2JuZy2a8+0rczsFyGv6Lm8yRPKzQVWX+VrIl8TVeDAV3pip+sN8rigiabtNR2uFC/1wlzO8oRW9wZfLvGEAdPoCX3pDUeEC5roqCc00TZPkMeFuwtaPbGOr/EE5DJPKLflnmD1G8xDPmwe8sJ0NawbPaHcvLGOz/EExV25+YOLZLvh+e19vf0n0CiywMQP/tNW69MfXPjCC59924c/9eLAe59/MvHl6DP1q+pe+8QT35v9b3Oe/f4Tz/GfbtMLYTvMI+zWQ4jxCEf1EBoEUYCSuZv4l+A/PaH4afn1t/633EsYZvyUquSuhDBbUMp9YgJu+NvfrfnRbwwFf/uL3z/7ih+uGP2LHW/7g/dtuFzIb3r80Def/Ld9VBF3pcbrBVXcFWe/iqrfrtR4hCrgroQQpCq4KyGEqBLuSgjVVA13JYQaqoi7EkKtoIq7hIxVEz8E9dtVOKD6339DwLmvknwaxFt9tUqrnznWcoWq1q4yWzNnlF9tfb6oULfKAO5/58dOiCq1q3wbfeLhVwu+fYP17aaPBY6e+q0fn63f8foPvuLLX9p/MTqn55Pzf+n5o386Mv/b975J8O0TejP32wKIN+rNXFQA8abyS93/kjUJ//LWt7829sHL72xcWfhh9Y6h7977n7tC679ceNX1f/K6n3z7+wLuGftl69u/PvqTr74UG33skbf9zivXL0v1/OboF/79O5/+7Adi//n19z/0hXWCb9+s13XBajf2FhXaB6r/398Lvn2rmrIWsvzbtK4osK7bSc/jkg+qSj+bMMMs8OLEDUI/t87GTbIeCMLfHBQotP6q1e5Ce9h9gEhCCOrRpUo/CSGIJyEEDCUhBHljNlAyZt+3vWjL9p08s6Wnv//qSz2PDfQev/fiQP+9J3sHtvScu3Cxv2jovn9f74Nnzz9ahDlfnH042b++s7fnXNf58z2PghkNzrx86YVDfQ+e6+8FzNFy6fmXXxyZePgy1828guJfZ38y3uvtyN+7UaRiI0yj4v8xE257BZncEDG53RyLB8GHl57b0mOjd2lixxt9/8uN/vw/B85dAS+8Z9/FfuGnQQ43CAnGjJDoQXC8B/ZXqjD+JMRKVSjwDRacGkpvbMDIVMWTqYpob4Nie82G2muGr3FaqMpSz/EP7jpzvOOD7c1Xrrxm6cFPP/UXf/jfn7x498i5y3/y9l97af//lq3ADllqsoMbdgiSAxl2tUw9hwTqubrQMmK1u9nORyFCPVe7rp6rcfUcMqSeq3lWCZlRzwGxeq52Wz1vrRz1XENMLq+eq8GHnOaD/C9TzwFWPYdgE3bcalSjEj2oRtRzAONPQqzKV8+MauCkNGCpr+H4t5q+2vKd//noZ9e2//3lQ3947z9u2Z2ZcfvHP7Tjmefe9YrPWUrgFooyIZTWMuVTLVA+NYWWjVa7R+yzVE0onxrXlU8NrnyqDSkfgXxUm1E+IbHyqXFb+WyrHOUTJiaXVz414ENKSYRkyifEKh9SqdWg+oLoQQ2ifEIYfxJiVb7yYVQDYbQ0a5jwITVbTeD2C1nKbuzEom9+8crmfX/ztnT3Yyv/9g9f93fhLcmPPv2DA9/sePHEY68rW6Fs5RHCeghbLMXXz01cLZxgZOLqZAq3VqBw6wrNr7baPecyZ1hdsjVTR+j1etf1ej2u1+sM6fV6nqfrzOj1WrFer3dbr2+pHL0eISaX1+v14ENOZdaBiZXp9VpWr9fBJuy49ZBgpF6HMIher8X4kxrrBg3WrFfbiguOmeotdfvV481n33S1939evPOW4Ufeeqqw9zcOVX/3820/fv7UN//8E5/4T/7TiJ6opSyl9UZu2FEFZdnAKkvRtyJ12VBo+pTV8ptZyf3SDYzo7ivi95zsLY5zoPeRgQs3P3r4kZ09F04ND5vbwW0rU9iE/9OwuaOu6+ao+zZ31DWbG9nwR6eRzd2gZXMD4WsgN+aaG/5q2IQdNwoJpmpzR6U9eGHbQxd7+i8Iv64Tnoqk3162hM249Nzh8z3nRi4LRYnh5d9jePnIQF9/38Cj48rqKzNyBFNjT6rRJ3Xokyj6pAF9EkOfxNEnCfRJEn2SQp+k0ScZ9EkWfYLPdR590oQ+aUWftKNPOtAnY4P4oyH80TD+aOQaczldmyrif5Qa5F9Zt1YL87kjLa3r6b/Kezo8zN36fdnkTm6M2ZlOmEPv5PR5gPnE6SFFQHhIkb/Davg5/5DC84cUFXSG7B9STPohBaE40I1rgIyjoDauFdVes6H2mhXb22iovY0V2t5kz2enofY6FdvrMtRel2J72w21t12xvR2G2ttRoe3tMdTeHsX29hpqb69iezsNtbezQtubbH022fK+z1B7+xTbO2CovQOK7a021N5qxfZuMdTeLYrtHTTU3kHF9g4Zau9QhdJvsufzsKH2DlfofB4x1N6RCm3vVkPt3Vqh47vNUHu3KbZ3p6H27lRs7y5D7d2l2N7dhtq7u0Lbu99Qe/crtnevofbuVWzvpKH2Tiq2d8pQe6cU2+sz1F6f396UtPeAofYe8Ofz5z9PG2rvtGJ7LYbaa1Fs75ih9o5VKP0eNNTeg4rt9Rtqr1+xvTZD7bVVKP2OG2rvuN/ez39Otr98sv1Zk93e2OOGGiwCVeYIew2111uh45tsi36yLYpdhtrbxbT3cixG5hLVcshwDMj8s1a7T/h1BBhqebGOwB6/jsBk1RGwCUtVpQpLlXvCAgoAcHEuoGt04Ip7SucGDyodp/N4vaFcQAA5yzzkbPOQc8xDzjUPOc885HzzkI3mIReYh1xoHnKRech15iHXe2LgazwhkC6w+lbzkMs8MfDl05UvZ3lCX87xBF+6MJdrPcGXLgjkkulqZq1wuNNX7kcV4h54f8k90H/2pCBBefyz3YhfYBG6bxe+Hyrt2mGxSs6PAB8uEu/lEdcDsb0tP3GhquSesjUTJHZ/Idd30SF89xc0tPsT8FTQjMspgLHK9HE5VROT201V0qmmXEO6aUekK4txfZAuJwgjTzsK0mUsANhBDR0ZVIvGFJQbD6oU4P3z6r/7I6rg0KXnXvxq19sKzd/8Sd2b9/W84ZE1b/n8bf/62HXvXfyPD7x/zm8mLc/1T6iUMlS91yD1K5jMMFF9tXm/NdFydgYrsh9lRHbv2ZPXalb0nHRSsOI25O+3T0LBCt/x7znH/+2+43+KHP++yWJaWHyTpVyTRVdYVE2WKm2TBe8BV92FkVh+3a0qZOeWLWEziOouIX8Z9JdBfxlUXQYrsI4+UWf+GwNbRgZyD6771/Dn3tbyrtlzv/aD9770z//1aO/67/7zv3x0wQ8oAVe5BWS7tSNonswy89n1VrtrqdHT/8JUhWv6X52tfl9zSU083NPfd6JnoLfrzImfE23bmYcu9l7sPbH/7EDvheIftz3ce2bgwvDwk9pCvhf5+z5CHenX4pr5pBsVkF442Dtw8fwZjA8a3nPo4jHE9dmNfRT7wATzvLykQhbqplkoVshuuCbJ/f0jhc5/IMWrwS7HMWJ5jLu+PMbx5TFmaHmM8xo8ZmZ5REqJx6fR8pggJpdfHuPgQ27liWmYnbZS4jHYhB03jpmZVA/i8lLiLH+iUo24pxqkEr3PkuhvUt1okM1V7BqJhAs8ZyonCF2Q1BPHI/q6IInrgoQhXZDk2TVhRhfExbogeVhHFxzW0AWAD7En21zUB3bRTpZ+NmvMflItkSIpEJF4Idtn2U1HKV2zQWNpiBMd2sCoGby9ZkPtNcPXuGrE1k/uaqIa4lkYDsf2rBY90LPKiB+1P6mH3bU9i6B40RLeOAVz3Dv5MjYYNqjVZUAhpGwhNAm/8DWBD3k65yGGoJ5EaXnHdHwL54ZpKs0wLzothVyzJToDXG9bFERHMP4WNdFpsVOnxeROsoXg71aTDYHtHTJF7SIWsX6OvZmb9zbwLbfkt8P3SDMGNNKOmDFt2NJqn7Km0ign+OUNqC2ImDqA+XcLmDFRyFmlU7NvwsCb+C3VbjgejAaiTZVoGkQ9ay9k3wK2VUgTbTyZm6SbPbpfTbCLwn4NWf36J0rZ5LmH7VCxIJ3r4EfUrjDXneSYAEKHYEydhexVYkxtUMIJfYXa4a0Ic3ZAc4nvVmsh+6zVrW9rSHqTdAXpJGeZv+cQvNep0ZEOKS/SdOuA3RPS7V2AbtTa1iRa26DGsw24Q8Gi6iAGTFtUHXZV12FydeggzKJOkw11SpehLhGfjX90B/bRdlVZ7hLwxPZC9kOAJzBeRSSyi5bIovL7sFwitzuRyB38R9thvwhduoNbYrvge+R6DfR1F7Jet8O3qfU6wa/Xv4cuqQgBEiXu4Ke/qZD9hgX9B7hbaGK1tqDAWLD+SHiO7tUn5St1E2mzO1qpEwx/iZj1z4hVLVHuSt1FriFNbkn3mJr10UGNCV3DOpzphY5C9v+T64VO2gGkrEw6Kb3QAfWHeke6pLxI062LWRVEdPui4kqdIFfqTrvSAa6PTfZnSWjD2Z6loAlne5aGho/tWQZym+1ZFjKb7VmOYc1xv8NhffX4ImUQFVXRP1rg1XrGeZeCyG93Jh5F6n9HLh47nCybO/mPdlDiAdbUnRodkYvHTlXx2CGYoJ2F7L8bMWR36KnELgWVuAOlObEm7ihk/9sa0HfHZWH8/QAzmHFv+/gzzZiYLquN79nlbccEZEiLdWT8tof/aCecE6pC+HYN28CgPm4SSmQuQDFcB5wTgd0PwEvqxpHlw9mQPDRuRSp4fdrEXp+I1e+8ecsIsyLaZVZELuGSFdFFWhHk9rdLy4cg49ouVetPZEV0FXLXGbIiCJq3UDRHfTydcprvFrowcvMVFGWiTEUZxxVlp1RRCpnHgd3K7Eqpqyk6NE785SzXocpyCbFMrqBYrgXOicBPD8BLCkd9dE2oomwSQBfd485lYpvOgXxel/20D+Tz7h/I50lNyo25Sa/ZmMZ6yBjm3AkVeIY5mFU9+i1CN3Nus4ixrTM8R6dwE9x+E3G0Wu4Ud+mzVRPOVnlDbCWgb55gqxa9Zju1yAHGzZ1HgmfY6RLJVszJB89WbYXcXuLkEmWrVn4crTxb7SD8AJsJP0CC9wNgcQJpNO4gQ4hrFsXL8XEHhyk7BDUv8y9IvIEi4zJfyN0+sZB1BYiIjk1EREeciOhI8hEdYJK5mA4wzXhUR4aP6gATzcV1gKkuRXaIgp5zJ8qON6XSQOI8c+I6L+F6nGsC13lxQzovQQYXlRPbVi2ObUtMozjXJDG53ZQGSVLxqNWy2M1qNs6VjJ9NQIKRB04QBjlwqsb4Ew1tk8e5VguD+HIDlkqsxuPmuOCPaumeI6EWT18tdk48Ij9OSgjXgAaGQ0TQb7E04ys1ZLlBOuAkaSo0MBY2169kIfdaeKpj44ckzzIo0ybQgOMkLl4CAoOuI5+lVEcsInKqkHtCTuRqvmdJKSVSaqyXFPfql2GvoNr+SEltHz977tFxvT08fNVB1HDCQTwxfq/9zKtmbw+fEJC3cIwIznfiMkaMo4yYZSf2Y6WJPdHb3zvQa03tqIOpjePTNOq8mgNlv+Rct19y7tsvOdJ+4XawoGuUwyWLNZd1ZC5dsMwlJ9VAbhcbUtmZTg0arOwTyUnZSuWkrHuclHU1yyM3jUod5InJ5S3hHBTK8nQ5YwlnmY2mDTeHGq9ED3KIJRzH+BNVLHJLWGQYZgu594KML9VFbewNpd8hFyW9YZpJOpLbmYvqSHr0ilHzYeyNLoo7z5GhQu73LEvsQ1RC/EFDNSAPErxMJTzFUDdhAn2SRJ+k0Cdp2FXOIWmPvMz9zyXM/Vh+SlM52VHqTnNCs4NjqyYNf7iFeIxOklL3TFuI9zlKDGgTIVo/L1Jh+G08B+cgCmWXXqRSHA5qdLZNTZ644Ls2k1HobYRgtJtsqL0kZeohEVlGhRJxFp3c6t8J31M1JToRU6IDNSW4+yI4XfIlXXPDwtgvNDbmvdmC/gquvW1R3PvhWLD+SLJJyF7l/kHukckSa4rDAIQQo01EAQjfIiKeQ4wtinNXXoNlGVZxFMfDsLUwjuc7VFBFDo6PUmSd1Hy0cQ+Z+FzMqhM6VjsZKeZHlCvk/t3Z6VoMrmpUMBx+ptlyCY9tbiXMiNAl/FwzCwwJ4QnaT1wupEYQNmzI4gsrtldvqL16YupDxG6p2nW/SDW+WwoZ2i1Vk3OFB9JX8/OYhVIgqq573VMT3HtdPVXXN6TR2WqCsExNRU72ccLWuB7uUoMTttoQYWvIucLjBWpIgUQvowrzzYXVZHyWecjZ5iHnmIecax5ynnnI+eYhG81DLjAPudA85CLzkEHzkEvMQ27xBBNt9QTFGz1B8UWeUG4uDHypecg15iHXemI5c2HRXeYJJmr0hECu9cRcLjcPucIT5FnsCfIs8MRcuqCCZ3liLr2hgmd5QrlNW2PQG5tnF8hzkyekxwXyrPIEeeZ4QhMt98RcrjMPud6Zb1O9HyEkLqjMOz9rOvXu/Aw7uPOzU+/OT/wOiyycDvXj1aya3z17yb3ws40eDD9zGrJ8vUboZZ4gTV5BUzmHnG0eco55yLnmIeeZh5xvHrLRPOQC85ALzUMuMg95s3nIJeYhl5qHXGMecq0nZNwFTbTME0zU6AmBXOuJuVzuiblc7Im53OIJVt/qU7ySrY1FnlghZ3liLr2xQs7yxNqzyBPKbYknmGiuJ8hzkyekxwXyrPIEeeZ4QhN5w75cZx5yvTN/nHo/XPIV5zbo+YrzDnzFG/R8xaLQ7evn/oLlFWCQstuaa4VJsdcvsrJMajUOLcIlYhPjr+Ee1ihMjqC5GrXJqaj2NhpqbyN8jaukZ3Gk6okC3hDTdyzpwMrhux7dLGA5fCBP4qg4i+8RC3wdddpTg88sV96otsSomJpVK29UK0zSur5DnuJXi8zHUYURTSSPXcvKB12xfm4W96qz7AK7lM7ja5iDHqXRaeDZvpbgxjR8Dbvas/yjuFqjR3G17h3F1To+ihv/7qgx08UHnFaABss+cM3k1KS8/IbAbcB25ZVXUF6as5eGr2GQQoMNJKVnsC9XixaFPL0orC5c32tZehGF5f2kYr9Fy3tGWC54nlWm+PoHKCLkSDbJi2gLWiaAs4aom1WhLg+ZUVjvV5NZ8BmmfyIaD8hvKszI+C6vxXcZKd89osV3jyn2W8R3NYIOZArzNljgr+bYI6PKdxmS70iTqN6QSVQPXyPayxhqL6PY3m2G2rtt8hYD0CYe5lV+Q1l81ckp8IfADMyp8QdZRi4irqS4mrCqNe9RCOpb1cQ9Cqvdu0dhNWpVM1cdcFPdAicWaU7zUnkAeZ15yBDFgHcaYsA7FWZFAHmn1KtJU86oV7MHef8+8ftNAX2vZo+OVzNAES5jiHDMKogWa5xwRpT+AorL2fUNqKiWp2twNgkL5ORLPhiN+15aXK9s0uL+fS8tpDmKX7vSwhO2FdKK03D4PLa6ru9b8XlsMTSPraS25CrIga5x89gG5xFpTrOcHYA8YR5ytdgx+BeWKfwHVC3AvMaUtqodc7VS7Z001N5J+Jo65EnpAtRGiqSjBWiXeEFpXaN3rNbm4Fhtjd6xmkbt0hqwILzMaLNWULcfogtYOz/h7WoLmPga4+v/zuL8z1EdajHUoRb4GtHeaUPtnYavqUOelnJ+B6lETXJ+e5+e6dXhwPTq0zO98LV2M1qBtMT5SzXmNIMfqAJu6aBKerZbY3ruSEvreqpgZ6d4B9hOWASdeotySN8i6MQtgnZDFkEnKVS22WDusuYEDjxFL74R3HPaRcgwgIyZh0yYh7yB49VOBTUkIEIn0R5zhS921ayAYbtcZ9gunGE7DTFsF8mwyEfbyQl+8eb+nuOnbz77yKWXus9e6O07cfZMa3fv+QcvDhTfPHvmMiR1EPxne1Cjk51K6qzLpydDGttsbIdd4+Riu4ICEnDCdkLUtitIr3PIkHnIV1Hc1WnItGJ0msaKOaUM2z4pDKtO0PZJVkDtuALqZCYQc3b9HFP4Uccl7FL19jIvVQ/hl6pbpcZDGstqR2kSKK7uok1OM1LU4VCKflHtzg6pFHWZkqLOICNSTozjbvqiAXyftInws3WAnRLuY2i9hF8f3Aa8DKKi4rM2Wy+souo2o24IzbrNGfiae3WbA/pMXml1myOwa9w8gqeouzXCNxchSAMgV1Nhu8cMhe0eg6+pQx6TqoUIOc0mHTI1DyDvHxO/H6nSd8g8oOOQsW5rn/WwWNxv5kWrzVzca5uOSLe5vm61uS/SbToi3Q67Rm3jX23IpACQ15mHrDEPeQN1TVK1oUOgaoJh2wiGbXedYdtxhm0zxLDttHJUdse2OTK02qGh1RHU6GQbbmhVwwkk+KfZEP80M+YV3l6vofZ6FdvLG2ovr9jeSUPtnVRsr8VQey2K7Z021N5pxfZ2GWpvF6HfWrl40lnn0WaReFIL4w6BjdFWmPPfFvRFYI4QUltLmZtZKrCy2lBgJdkZt9vDIIVRPzUlAvKTX1uYM8ua8kvcQCIKA9HcNFTD1+znaXALIz5PixLLbcr1LV8KX26jhpbbFD+dUdQ+zMKuUUH1ETSzkMyIpiCT/P4TJ01Sb3Y26ZMmiZMmYog0SZLT8fvdkvw8gqfXa3BCiiANgJxlHnK2ecg55iHnmoecZx5yvnnIRvOQC8xDLjQPucg85H3mIZeZh1zhCVZfYh5yvyfUxgJP9HKrJwRynXnIG81DrvfEXDZ6Qsa9YRqs8ATFF3uC4gs8MZdrPGGrL/CEQC7zxFyu9bX6NNPqLpDnJk9IjwvkWeUJ8szxhCZaPl1t9Tsm0VanXXyOXLYmU6mTG/XCR1IOwkc2aoaPTPKRAVbEwjqemo1GnkWQ4ylwXCMqdxIpzN5rgV/nYgyag9TpKY9BY7j7pRJ3n+wd2NJz7sLF/iIhbSxrwYSQGKmZlwV82YLlUl5B8a9DhGUPmg6KIZUSQsdPpYT/YwWGfQWZ3DAxud106U372RmQktB4o2gkdug9+y72Cz+t4XBrIMGYERI9mDi9s78SwvgTjRZFZLYBYooC12Yvs2okVeOhqFxxy1Bp9jF5UCtuGRKWzp29Sl7cskZ4jNvAcIgI2grMnd2kIcsN0gGHyQJaDbTyDBdmrwEFtOz8EOZZBmXaGjZ9YOwNEAaVLwGFQd+xk3TVIYeEZ+qz2+VUDvE9C0tJUavGe2FxrzbCXkG9/ZGS3j5+9tyj44p7ePiqumqFKxLyJE4sBKjivaqieNXV8ISEbCY1k4wTq3FODLEz+7HSzJ7o7e8d6LXmdtTB3Fbj8zSqMU++BUOE3DK1qDlTVKlsuCOD6YJlMAl2BQomjdCUCs10atKg9eBF4iS4STRa+olWAI2S+yaqAmiUai9jqL2MYnthQ+2FFdurN9RevWJ71Ybaq4avYZDoFo2IIIwWZt9jLW3fxntbtHkRVJ0jf3nwc1bklyDmOgk+deJjwOuwO+m9oMxqDg6EqCKfd9L7Y1Pa+yjsPV6Wudza7w4Wxjy+MOYMLYzCyTKytU9hF5a4vLXfWzlb+yZicrupmspNVKHRlMw2TbFbe6bMsx03DwlGbu0hDLK1T2H8ifc1b7OjfwlCGKyRboNqMgdlsOBfUl9FeLbg33WGEhcAZMw8ZMg8ZMI8ZNIY5Pizoz6gD+gDTg0g9ywHFS/3tKn082FqX5HROPBMqu2Jk5PeHpZvUjr6ez/aLLKvtDD2C/aVycIcKz1+9oeok84cNReoN74F6RT4duzNgn61FGZ/BOx3sdI5kTJL5yTx0jmWCRByZjeoiw0zLc+T1XnVD5uT0p1zK3kAkGQYiKNPa2H2H8kvDcFZkqZ+sjD7TxSo3+Ie9ZNOqJ8sk/oRkvpZDV9MREr9FpL6EdisUDr/Uk59LBYhK6F+pDD7/1OgftI96kek1G9xEkQjVBhgWjjqM74kdQ9lVkr9JEn9LGxWKJ1fcS77Ubnsf21qNb9c9rNOZL9FRCgwLVRKfp2G5pf7TLMk9aO05s8WZn8HUJ8y5pKkMYfm60ZfkKgkId8UPeTfs8IhYk5WSuMHV9aTPFL5KGH26Cqh5rWLEDGFKM9ESZ5J0TxTpM0PiQgJyHHi81uDedcO3NSezbvWWTQibp/f7hULQdTl81t1IQCX/nIRmGCapDGYAkWfKdM2iFCbL/6ODOaeKeICDXTbhlc5oZVwW2FO3dQa7m3SxbuddFwgHwmKPbXDaaEKlyY1hL61TMOdXdcEhvucjOLi3UYu3kkniqybKOeYBA4OTsXPhMHbUu7gyoJWEatHQI/zjuuvHgF89agytHoE+EmvQlePIOwaR2Pw9HasuSDfXJBwcAHIReYh15iHnGUecoF5yDnmIZd5Yi7XeoIvG81DLvEEE801DznTPOQKTzDRPE8w0VJPaPW1nmB1b2j1JZ7Ql4s8wUQuzOVyT8zlVk+w+lbf2qhk5ebCXC7wxELhggGzxRP60htMtGy6rpCzPDHwlb5Wn2Z7SG9s+Ho8MZfeUG7esIIXe0LGt3iC4t6w1ed7opcuaPVVntBE3lgoVniCPN7QRGunqyZq9IS1sd8TvVzgCYq7IOMubPjWeAJy7iQK5MzxmMhrmcTWHzeXfm4SBHvMvHbrULkBDyf48AE8mCKki60dTBGydycEe4YGWsCOrVuLd+x9mT+6e+uin92FkUFQ9yQkjR2qJqMzyq1HcwyNsqpmnwT5WbRCpUDjEyG0Sb5n1bo905lF0AonIdYcH3VGmInLOUUiF+DCUWFglzgctYOQgSm9ebpjUm6ets1GF+waRzvwdOx1WHuCS6u7CI0JMKPmIdvNQ97g35Xu35Vu8q706UjPdgMa6PXmZbvDPGT1ZGigTgWNJ6BCJ9FeO8GxnQTHdrnOsV04x3Ya4lhamSAfbScnWEMDdUENtD2o0clOXAO1wwkk+KfeEP/Uw9eI9poNtdesxq+q3IY3xPSdU14GG7LAerj5265ALwE7blej13Y0EcMqXTB3A9oskm7SVvopSivbXphn3ew6dzN1izDJTTxrd0EQM6q4bSrbQyBtWT6WGoAyIEjxmTfTmvTdKLQwhxOoGhHw3H0W8P9Sc5QxNEcZ5jWuQ7nC3HusDh2kOpQ31KG8IpOcNNTeSQUmEUCedLKs5cFHTq6L2CVOH+xag5bDE76/fab+dRFrdK6LmElUDNuMLjJHLUb7E47wOxQ4fwc/4TvUOH+HgPObCnPPWh06TnWoxVCHWuBrRHunDbV3Gr6mDnlayvk7+Y9a3OH8HX3I+/eJ398Z0Of8Ph3ODxDbMo7zt/Oc/0f2d/YSW4Z9elZ7g/6WYR++ZdhraMuwj2eWvQizfGkZU520++Kx/r7je3ofvdB15kR3z/mBvp7+cTbAK5YiFbT3RXUqlkZHUPzYiFru9QFi2PwmZB/4EEPsJhCPcYgHwIcY4i0E4n0cIrCZbsFrge4dN4rgd5YUvGf/WchiAHHvNWLYndR7AVll9VJvYeul7mV4HPtoH/oRSoW91z5hTqj2MEPl1pk9hblvtMT/9Xbx30Goj528+vh9bo5A63vFjnxKwxxw3SlxwH0Nc4DUMLbZ6IZd45ZMhsfV5bCbWIW7IScah9xjHpL3okEew9rbw7e3h2gPiradRHvMLYkho0vinslZEpW5fI8jL9o+6EU7ENTo5B58AWP0LbuoL2AW9eJyfmtPf9+Jn3frYO9DF3svDFwhVnPsyT70yQH0SbdejfBrWp55A7c6sHrlRy/r3OBCaepbXGf8W9zX1LfoaOpDsGucAgFPx96CtXeIb+8QoZQAZrt5yG7zkDdQRtpeQ0vDXvgat5pWKMd2TwrHqhO025GqvgWq6kNBjU52K6nqWwhzdBNvjgKIkkGK74d38PthAIbuiBmvLudLAmAlb5LQ0foF64U/Rf32ArbVDC8J6rNtB862bYbYVlDKqQ1VtJ2wa9SxjqkjVACZMg8Zo474dhmKQ9mlMCsCyF1S3UFTzqRvrf2inm+tw4Fv7aKeb610MiKU6C/z0qoZijHDCpPjxbKdOlyrpZgKrVrchZz5WZwlugarqzC3VBz2u/iRBXcNVnuJgFi4ZFuZRen+GC9Kt70Uaanua97uxNe8Ay4QnGTuhNoMO7kjjpC60cnb7t7kdUgnr8tJ7NcO0TghM9gnD0xtjUZP2uST1+He5MnLIW6nlaoGu1KctwMuR+rqHUTHYWshWQ6RibLk1UlnYe7/o8oh1pIMkYXgJfWsLletdtYAT0DD49CzznN6FmjoXjRzgG+XCiDpha8ZTUaYN4tfojQLIJ6yz1OAMFaDutjaxmqQLK2IGrJBxWSE47d/5pu1n3rNfzlLM1EPlO8F7FBmyH8vquNCaDJCEE1GqKaSEUK6PdOZRdAKla5zwhlpKMhOZ5BchkMACtlkh4Jph3kRJt/2wrxG+c2nggWpvkz7qY2atp34wdkO7pRvO7OgcSPcUZi3ZELJz2unoh/4MLadcNXFjh+Qad9JTfuewryVwNLGxHpHmaZLF2667JGaLntJt7/OAQOYE46z96lwNg+6U2q67CBNl52M3ImYZh1lunTCOaECw7cD1nNgInYTLqrtIPLTzriZ0k++RPlqaIIhnRLcPboaLh3IZ3T5bIDQJCyfPe9meI8BXnYd3fa2kPFBlI2Jhlphd2yBy6iPigezU65YBXXps1IZo685qqYmDo1/bUVGad10ul94TdW8/Qr16DNlarFaXIu1SrUYtTGo0vCftcE5oVIzBHfs5WDb1DYIvYIsw3eoGtUR1XDqx3XE9Y9RFwZ7Skfcp6Yj0oZ0RLosHUFIT3Eo9zvSEGlPaYh+BQ2R9zVEuRoi71BD5C0NgYa9Z0lo5KOc/Hq63cKsgHmvkguFYLBhKclWi6LmQb/sQpGDs04ozxrX2DqGs/VqKVsLtbNsjgS6sQlSnYosz/FPa2DbOA9mLR5E64hkEXYC/owO4XVq895mWeAf4KiYpZbATkhIzWMW8O3YG4UnLfMuy9l8uxPrkHYed1KJLzuc5FE63IAx5+nCDdgzilfpZMlMn+0U0dscpe1uR4lOrIRFR8s7FXb8WfdWwik5Juskj8m6NJYcOcN1qTJcViyR76MYjtl4U6t7Fugb9dGF0LU6JIDOfcn+Vh3hqq93/Qq/etwdX2corqSen7M6JDrhJSbsc/xOPTyCslYcdFA/UydvY6b+jX170NQ6hzf2CQMenF7XV4eHcQFndITLCqgDEyvLnKhlkyDqYBN23HpIMGaERA/qx3tgf6UW409sgurkTqBagVKpK8wrnR5/k+pGtWyu6q6RCFgVb4AwNmVQTygDzSs1HWR2RXBlUG9IGUTo8wjzyiCil8Tl5BbbOvRJ0YJ0TyPwTFtbmPeX1hr2WTtvAZOeSxuy9mBW2tC8nxELlXY9BvzaWm0ohLEaCMa6j1OE4GbdBt4mYNQZ9xRczniRA24o/Tyo0dUGwo11EL5mm8iGMiaSa4jpu62hmMmGLDC0qntCRE0oVvZ5j4NvOW2dgO+RKxBoJIGsQHFMKfKX41qjnJAp9FL4emSVqqU2JvWF+VZI9Dx0K1r7nkMXj0HK7IdjwfpDGuRxulfz/tVaOf9BwyislW4TGshe1TKSz/WroTDv3wn/M2NYEFKN3s4eE0k16BHyWZwcUwMjNNyY4oV5P6K2PtCkIxUZei98rbBeSYyRReFC9BMrRiVALESb+IUI6OjSUsQ3UVOYLwjLqTUX2lvLdxu3zTTbdZC3UovbZjWGbLNanoNr0CWcZi3wFM1AqSP3hRRk2BikZfUY7yN/aheG04q0Fybd45SXNoyadJXGruFJYVd1goIJ1kizqoVpVnVBjU6G8f15DaF+agl61rnuJ6rD6VlriJ51hElQ3tYwLN4a1rntJ7qtcvxEtL1l50PSnwMspbDM9xFm/USskYV7f8K0lQ5hECs9jPGnsp8m5FAWNT0lAaM+21r3fLa1xG4edI2yMq/T8ApFiGUvorCS1jjSJhcsbSJIjcPlHfCwUNPUVDmVeLEuqlIT+hpy8cFWLHJDwhgxIsN//nq4ycKlskZczsCgkV01jYzssIZBWeOaGFjLnlAIwjPNCsFMx0Igj4EJk0JQTQtBuDB/O7Urr4Kfj+9xMz/Rdw1ZP+Ni59CeCfD5/dRJEO/uSEBVi3QriXQLfCt0DSQL87vl8RMpJ2kLaf6jFOyYfZhJ8KlGRxJS7kmT3JOA3eMnKF2Yf5uiT4debVMU0RsooqPeoBRKdMIhmCrMv0chfqLevfiJlDR+Qsg6Mn7LiAI8wZxQ1UWTGpaXnOGSqgxXL5bIPorhGuCcCHz5ALykbxxtQzgrm4fGXehRy89t/SngzKNsfQSBBP7k+ReAn1twN0+pa8SxDWflxFy3cmK4ldNgyMqJkUdc5ezlA2LjIub2Xn575ezl48Tk8nv5GLQT7AY5kO2AbC8fYPfyzNGEHTcGCUbu5SEMspcPYPyJSjWyTEWlEv0GIuYDdCMqm6sG1pdQBVHwk1VOF8T1xPGwvi6I47ogZkgXCNg15qouiB/S0QWHnOzzG9AnwUmN+AgU5v+KteoOcrIPWBa9YyLAkydA+F42wNeI9poNtddMiA7Yh20mDhk3oEcjPahj7yixFW9Go7Z60EAXK66mMWV/J24ytCIOhczWUMJkQwkQ3YDvq1CuS/JckFTjuqR9WEmTw0oSbJMy2VBKGgOTIfQmf+tGGm4z7EtXBr5HLsdg4c4gy3EaWyLQIiRWAMz830YNRmTJBhpFlHQUK+RbLfCP4NYotzXYDceDEYDcVaXpnmUK839HHgaTJmjc7axfMdhFYb9+nwiDYa1FPDc9oREhn1GY6xw5JoCQFaaezf8TYkxpKN6Eskrpuj2ycNkXOj4+I3d1ZWjzCJkucpb5jDjgB8tpdCQr5UWablnYPSHdPkd5HpjFTLACQY2Hpwo1a7BqVs0SydpVXdbk0pAlTI2cyYZy0jUoL+Kz8Y/uQPMXVWU5L7xiZ/7fA57AeBWRyDwtkUXl93W5RDY5kchWMv8yT+lSfhXOw/dU1+s8sl5nylivv62/XlvcIVytSz7C7+IbBFvA6h1wLFh/JDxH9mr+9+UrdYzYtjhcqQMMf4mY9QfEqhYod6XOk2tIzC3p/rGa9ZGlK+NoJhtL9EK2MP9ncr2QI3eu6sokR+mFLNQf6h3JS3mRphtTUkREt8ZqxZU6QK7UKOUCwkDjHE23QKGxHo8zBu6BTYR7IE3EICeJM4kU4SKI8S4CwMd4/EwWuAn44VYXGrO8kzBpLuaZN4+Zo26EdNXECTsdtFo96e1hkMIbP3sgTwjJsdSi13xqKBsNDWUjfI1bva2fm1Ef81He+QTAMX+RZQ807qF2FjUah+gpNYKlKqm9jYba20joEMM+Jpy4SZ64aAGhNLKqJks/jwojGVb9jwW+3tnOm/fcyCPY0mqHumFhlxs3ym3BMDIfRxVGlBbVCA5D2RX26mZe72fM6f2MWLtttdbWWifxZd2USgwT+msTr79wvRcnVmsm1Kakw4SGxGHrhX2Urd1l6FyjC77m7FyjizjXGB/Lwv+Ln1Em2fPcGPyJfpRiP0oqfZS8JsVCtXTPZOm/E5RXsFPDPZsm2uuEr0k314336upbwIZnxPr2Wxb4MWr/lKIIzNAqA6cQ/SjLcoViS1w94GzJTEG/ytgZcPyT40IHbGPBmpC+yfLZnaDqke3Q2NPliPZ2wNcwGSqx2kNoswirpWhWyxUaP26BD1ADNuoqRbkiz3JFDv5EP2piP2KcbrZO503yCmioCe9dKzqkDMl+rS67jEHfbQ01mWzIAutVYO83ol5ZOXufExa/bLSKzzX+MrUnyOpsw9Iic+Tfsb632/2g9yuYlx28wSy/K2RsUM1iFhVpHxssNF4GJjNWxLPbGvAVdMAIscBPUaXA9kLjb1vgT9F3LtkfdigpirFBbqnqgPpePCu/ZnXqV6h2m/gpA69NQLyLeOsEeAsdQwerTtohkuQGF1vfW5XUVzvbXivZXhPsGNFe3n4beAecctF14GND8A3khGRsECDKQvtsEwm/baemgy0CNQTHoNoWI9TUstJBKu4OjTOs1CUsOjsF+1VSxIT4kRKGsmc7OZbi9KPqswstDkzdK9QOFBVp1zgyRlDrj1PbZxW0Pe3TT0EwoU//D+S+jiZEKedoA7EI/seOSmTvkJ6otJMlsvlqsKxysYk+tGdkkt9EWGSEGcfsp04oiUOO1RZNcKQOzNkcqeF1jpmU1EEObDum8Z7rb4zvuVZ9zgL/4i/cnitZ0XuupL/nsrH3d4zvuVY9Z4H/q9M91ybFPRehehkWSMOfIr/xgtKR7Q+I3BluA5Es+bqw+AzRSQGzveT7ky80/rfltJ9L+bH3GvJj74WvaYyfWT2FE5vijzzyupdo4dLCYbfqYmvn2rQSVmcTnofTqngt4vLmjrGvx575Cw1jy9FtGeAu+3IvQt+IZgO3o9citqLXInZQ1yK26/ZMZxZBK5yAgKcXnJGGgkybh0w6g+RuWmTCH3FrcTNqrFg5MwvWUppsjyFNtqd8TZYUa7KWsg9v1xLGEYfdpIutrckEZgjoGarJmhQ12eobv9z06c+HH9CIqWtyEqC7h9BkmvqiGdVkragma0I1WTulyVp1e6Yzi6AVykt3wRlpKMi0ecikM0hOk1EnQynC9szC0ZV0meigcoHl6l2wTudIIYlGdqXRJxmIN9EqcXFrab86AXkno60FO9UFnRbwJmLGLNt5wRbKIr/mQbEGAz5WcEEUgTU2C8nSzxi5kVCbUeFicIv1wu6pjjOJEYyVghDYCl2KM/lnNpH7d5hE7kOnes73njjUe/x878AImh+dsyVmX8UzqdEnSfRJGn2SwfO/r6pkbCP529e2bewbRADcRkN5shvhawbzZDHd4gCKCEuJa6SmZYhZiMPXqBTfjeSlkYlJ76s0ZmjBcd2MqAAcjyjJZNVpC/x+qqx+kqoYlaaY+xZDzH2LS8xNccgtJllfwGwlAlccqz1sntXWWOCPOma1I1i3EkTlLMFsHKEEfQrbu9VQe7fC19ytBAHaJNTAEUNq4AihBgRs/Ba0WVkK4zFhsbSVz1vQg9RwSSL3GSJyn9/elLT3gKH2HpgCIX2ACoXuMxQK3UfZBm63J1cKv64fek0ohXRh5e0W9G/SSkF9uEkQOkdZXurGQbI0CLp8jINsYk1bJKHYXtpQe1M6PvXwA4tC9zlKf86LEK2fF6mYgTzFthlDS3cGvka0lzPUXk6xvckeX9xQe3HF9voMtdcHX1PnwTiuyZKQA9W9tXFckzGRHupnAXFc8hivuPo5aZySPPBeOx7LTWE+TIVaduCh3iToK6hIZTzWcmyIRH2EQ4VRs2NDKOwwQaf9PCiM9R1GQUfIvvIb0yIU+BiFvUz09QAPOgI/RUFHyb6e52Hh71EU9goJy+fzjMFgaTR+f+wqCSu4tXEMhgBfRXGfJHGP8rDMxyjsUyQs750vQoGPUdinCUbg6/YVgcCndtO1+Bf8nHfsGb2TwIT+QW+xCfQ0t9g3MwVix57hZ6w0cM75PPYs0z9ukYLP0VVq7FlBm88SSx9EzbuC2uQKaqsrqO2uoHa4gkosW2XBDrkDO+wO7Ig7sJfdgR11B/aKO7BX3YF90h3YpyZ9pzBJZzV9LkeQW14kqX9p4VzddJpAyUIQJdOstOIpFjZSe4kkOUGtxKgOahBeHjaaJzMr1PdQGdwKGKQsoyH3LaMhwjIaNGUZCTZApYHbiud/rBRzcaL3+PlHzw109V5oaV0/isY3dIjr548Nx9FPxoZGlWrrg4fr48La9lfEjSfjyEUbB8Xv5+Piv7fHrzjolOQTCSAnuB2FhS2W4K7Wietq4nXKLZT7DjdyNJOc4M48p5vBVBQKwk2eKyy0riRbeGPFjsaaeGZYotFslNdHylMC3C1xyOJVYXNK96Dk3nPoVD/beL7kPsF6LJyNbsls5AsLFapFtVKzQbry+Mq3zKBUZiP/7gPn7ZwD0PBQwE1EuF/eYuj9BMJmHoET7/2EekgS8dYZoCBEAYcLb7VeOFRmF+/Rk6BbYH9tifuQl6+tHygH77vYzyRA5eEEEVf0KPLENXw0iqWJmK+cElPcIwwhWHjSeuE+Kg4GDfaKEy4mgRY8Dl/TWIRyEAKzrUvs8QTlOT9uKLz7OEEew8mQ+OD54okLz+qmQyZLYiJKhlxZYqLz1IZt0iYhqRhHwws/errWKspwZHSSaGYWvrLsbI0ZRC3EdqLAYEnXvlo3qihOkTtZWDnfgn6cUglNOuHsOULu86JRPSFeQQatF95EhawfNxSyfhy+hhNjM6GdjyusZm/X6K5889pExquo20MJdMfbQW149XacM0cdbHgH8Q1vh6n9ruAcscPYdrcd2e4OFWbid8yNDepveAuCyyiJLW+Aaj8v/qYJ2fa2Sra9WNfK2vjiMtpOyGgHYUGNDQIx5XVSvLDQqhWw8B2UvuwyZEJ1OTShEhACCyUv6aRvUiZU0pAJxVgP5aYXNuLevK19D9u9eaAVNOiBs8jbFT5r4gsoZSCrSSwQZPJ6xAbIRyx6fYAyzboM+dK74Gsa62GO4D2B+f41yrHc5SwpnBqLoByCQcu1lRh8u8mG2sFM4rEzSY0gnw412e3AISnJG3sTHY3zuE7oEHRG8863x5kX5R7OT+NNI1Z1EzNrojKMK37Hgv8LSlhbqYDL9klXyxjkC5JLdzrsjhbY+M8LJOJBY10aBzPtajLefukDxfXlRN9A39kzPf1FBriCSIfo4yY0p77DWrbGnwX1Fq2oVZrue6huCHHeJYZAKt6lVn4tS0Kq4bq8idDl7cRWrhVoc9xKiRNWSo7Ie84DOwVPJQ4QqcQJlRT5hf9MFMSPEQXxU3xBfNBQqSQ+sYetMbSHrSHmI0Bs5DQv3a7S38fF8G1cwNA2LkbOFc71MTLCuVZ4ScWimRZhf0TdNxHAOqt5BU8Avka0t91Qe9vha+qQ26W+hxqSSMxW+/2lrXb/2ZPDw1eQI9pd4j1p9Tbk/W7x+zWlm9LhPpPchG5T29W+nIlvscyyB8Q8FeQFM2HOw5iYtrdsCa2XMLXbKhLDck8uiqLAzq7vWhSXH1kKEvrULrhJEEvkJkIJVlvDvU6nXoflvDgKvhdddrlonvXCLGKd3YymIx5CT0MOWchtxAUepWoyfOfvEeaNL1psAS/Qq2GCdTnNd5mvHZ6FHYSVq6grVrNIjXHmKmQGTFL4RsQjRL3hOFrC9CGq+LH6AHPIAOPoADXkIAXxcEM0C6imYSomCFMxKTBEi2wsVBtWMN6iGykNsNOQat0JX3OiEg7pCAZoVnqGsuge6v5SdGnRvHi7hiE83t5OQ+3thK9x+xWDrqMsMdnV/GTv0Q3HArx4XhjBtOK9Fvh+ipOzuBHp4H6+rPP7+bKFRYec3893XoU3HdzPV+zV7bzFmDNnMeYc2hIJQr8mCdGvJo5magjhr4ZoZpQf0yuhPfOg1aHjlbQB3GeovX3wNXXIfZW0Adzi/gZwi7kNYJGnzvHiXG1OnBU2SEWzSbSO240u6Pwat8vUdCK/Rcpo7IDS+A4oBrUPhigLMUX7kiL6cszZDbPCvhxT6EuO6Mt9lJ2iU74BqD9J+QaduBTr58Om0ucB5itMJdADzEdMJdCnS/HPptLnQTcfNZc+b3X0gMHk+TS0hSTp8/Z8m2Eq/GhETznWOgg/GiHybYZNxR8JagOUBs7nIF1m+scfgF5WEHpR4YCxy9Sx6mUFsS8LtckV1FZXUNtdQe1wBZXQAGXBDgndFEusy9cXvduhwXFYDGydAy563iHwEbFj5dMW8IvoORxYr4XQt3JGEjDK4+NGEneGiOu2sOsncmFcs9UYUmzUNe2cWquFXeM4rxZOrChceNHvW1T88KQftRLt3WuovXvha+qQ90o3ZNUkkUxuyAJjr9fbkVU72JEV23C4JasgprnfUHv3O2Oa+yuKaR6fBKZ53BTTJEs/DxsKxDwMXyPaW22ovdXwNXXIw1KmEWyjV5fJNLuRdO6lyPs94vdTM/R5ZqkOy8ygCJc2RLg08xq3RiYKi/7eWiP/husQ0E13azjvaogO3Q1f0zj0rSuRy/akvnTebHsSgc1iR1LWqcYNQc5eS2H2DxWRl0KOJWvg2yzYlPNBuLDon0AEgr1DYYUOCQy7sFqHwlR7dxtq7274GhecZ/AoLUwwXYI/Svt33fS9RMkdI0rfWzLbgv4BVa03jM+rIH9BdpCWVDtIywi7vOh/5Adp4tTOAwrjSTlI7UwVFv0vv/9Km/O7pwnVt4lXfbjKrC/9jBHqL0EczYWhAsQXgIihBSDCvCbYe99g3Y56Qy11rNVi6FirBb422cd26pAtU3GMhthS1RvcP0bbYDKO8oYsL8415sS5huKbiCG+iTB8inuW6lz3LEW971mqg13jproOKlikuTq+uTqCenUKUq8NaRm+PqAP+AsJOEmWeg2hLctvqAYPDKhTWCc0Zy8CX5NC8mEG6JUAMcLIP8b0TRDIcoNVlKvzn9AGkC3PgMKIEiIzP0ab+YnCDTutXW9EXkzzht26PWdS3UTTsvinFvg+KoIlTLJvjHQr11FmfcyQWR+Dr6lD1km3lmER14nkp0bo17jhNsB3dqsJaoBxqwkNZ69hw9ktTXQvoaPKzd0J6RtaCdzQChsytBKk5wWPZk+IMo1lS4emn8sLgO6sOpirqXwog9e1psqAIi6KehCjjebdXQ/C1yiV+iB5z1KYYKNu/lkKrlKEKzRmyBXKLCvyRe8x3eD2AG0LhAuLH7HAX00fsRKzkaBsqSS1lqIRmGkHNkS6cMMTvJ7PmPMtZBRtDotuL0oMsV+yJv9pDbEByRTE1OpckhbAEZk70vD8vWuYSDeweg3hMus1hPB6DbEJyJDGtMYIvcDMAh03QGmjGLkG1cn0kcUrlSSosrDtOrGk/po1nA9qMGoY376lFeQ0S7D+MarWSxZn/SzL+kw3poD101LWz5Dh8tT1ddkyWD9dBuvHAK9UPOsfk7L+R63h/JkT1r/POOvf57P+tUmobNb/M4q7ayjuTlDcnaS4qc6QMV/H2wP8dzPLtt0c7NEz+B49bWiPniF9huriCib4xZv7e46fvvnsI5de6j57obfvxNkzrd295x+8ONBzrajWZcjDQfCfbJBk43AZbBwj2XiTxn6JyCNj+opFJVVaAaU69woo1SFnyi+VzpRP9g5s6Tl34WJ/L15ONiw+Ko4JysKKqtyOn/teQfGvQ46o96FH1xhS6fB63Eco/B97TM2+ou5Iq1PaZiU4TyY8z5R5MsOsJ7OOUfw2XMZXQEbAQRgkAi6M8Sfe1xi72o/9MoTAhbEyvWeciki5fjlUClcRSUMqIkX6P/HU/hS5473OkBXAZO0bh6w3BinzMvuAPqAP6DFAak+SFNm96N7Y9XiySW5PeuyweBbarOziygPCEMDF91nQc6nrmiYSM4kZ4Q/U6yERkX5HkH5b+QsHBf2OFBYvspwP30YdHNVlOjgSuIMjInVwCC4wiEj3moJT0zicE2rbp5O3Vl8yqDF+IgMM6hkGE/HVanlgS7WTu1aL0C0KpI+4R/pqKenrSRWgzi/MLFOld3ViSwJS0teTpGe8vDx96guLN8hJH0BIX0ORPlBYvHlqpT7ghPQBKekjJOlryEWj1kniKUr6WpL0TA1Znj61hcW7AempZZ720qJbkhphgdpqimlqCosPWNFsMY3JCsgdOhcsh44gV8ACug59EkPyCOJOnS5id1Bcze8SII+3HS0TYekycYSIQ4NZJuLofapSe43rjsYa9yu108kreDX9GjIwsroixMDyPCLJ6WaFYKbtrVJmjLomd2S/MYs4YT4nKfO5jsqGRW3rlOxqy4PCLL/FpxRW2Xr3VtmUk5CRlJQ2GbLeVpI8c9SRmGSZBlaSXmWLBtYFxVU25WyVrSaNRk4FA8DSLpU4yYwZ8igwkU3CgLpXy8vHK0TrDYjBHwdC4iCyySGbBqij5ww17TVUZEGCqoeYpAoboiEZeVHYIPhws/CW8sVv4VfyJnNhg2jltJzQssyWXE+i8syL32VxPFo5DKv9LIMeUdDB6TJ1cBDXwTmpDhYUw3R0C2sezsnzxAXHRG4+B5qV6uA0qYOzjA0siBxa/CuUDq6Bc0Lp4Azp0QmrRSEu/rEi81neRDhPIuazLu9c/JIG+TP4Ka3jSqgoIlMHFT0obWIPSpluYFKVcS8sqjypEgTDMrNAsWGaZMMcyYZZRTZ8qaKWH1kwbFa8/vyeNZzPajBqphRySDIqgthKxoGS5XpR1m9lWZ/pxhSwfl7K+sK1wZoEamVoLYP182Wwfg7wSsWz/jEp6/+1NZxvOGH9+4yz/n0+6wuDYSuK9b/hDuunKNbXqfmeI7aQGfgatlYLfIt514Nh87hvMWfIt0hZcDoGPJhgjWDYPAyGbQpOxR4n48Qay6hZY2FSLjP61hjeagrKj3RLEHbo3AmDzEcyI5+orlaj4TZNwF5g/k1yD5dgpk/g51wSgIcPtm6DWY1oxPil1EI9VK+74Gl0QDyUWkfeKLlDW9cblVJQ0mnULW39HBBuupfEFJwiMffuni4vq0UnwSADZ4VjJGaZpA566HTthEZ4u5KOiMlLggglXearSckZ5rxYLObLxSLrhGQ5kcsJ9IsQixxl9YRRts6Wydb1FebrS5BmLc3WOeLiyCSoIUrsRw5pDDVP6PRD8DWivdWG2lsNX1OHPOSEWi6VnM6v1is53eSg5PTq8kpO56EuMEO4tArhED2Xoc4K8oUlxyZ4fsmGSR+K6GxsSdcUVk0WFbRasr2iOlRcmPZUZl3psWFDDRaBwHsoJl5U+T40PYyot3YfAyRihCPyosri2+/2K4xHWFQZrE3iospLjlZOUeVaaMzhxUGTRMHlLFFwuYYouMxfaZZjmHZcwz1IZaIe1Iijosq2HSS6TJXjry0lOWBZeEd1CvVjT+Kwq5g116M2Z3FDc8aEIwuvpXqV1aHzlXQR7ClD7Z2Cr6lDnpKaZpNYwXq/+xWs95usYL3ktS5XsPYvIkOvK9LMbK8Ws1DY7cz2PZWT2R4jQ/LJGnfEtSnVssz2ajaznancQCSjV9OZ7RAGyWyvxviTysJnM9vfoCaM5aajx8xBJQgVoZlc3qCvIpK4ikgYUhGUC6+KvNCeOrqoNeRkT0GbyzhkvXnIiDFIy1r0AX3ASgCkDx+ogG7+LvVahR1LLd/TWrUdS6089XrJx9BmZWd2+4XJcku+bkH/LpV6nUNSr2vhvBI1x9B4+3qk3+DbsTcKMxCW/JHCQVxtmScWDfiJRb30xEKYUinbaAlTtsG0UBykk30tL+9eq1rePSBmrc8qRifXk1IY0MvDDEj4pqaw5K/kqZgBmnIupWIidbcCUbNZaFHHqZjVUp6pIXmmmuaZIm3+1k/FnDG9UzH3VGgqZp2oKoZMmdeL9C6YS2I5raeW0xoqTxPVaniZE1pnRgpLvq2w1ta5t9bKK50knAQW0SFfdKWTWg0DUF7ppE610kmtgD51hSU/UFxrI+RaqzMmpWCcWmC42jm2o/TzANZuB99uB2FMH4CvEe2tNtTeaviaOuQBKWOODU5aJETHEr1IiLFBB6EQS8oLheiASsYM6eoUWSVtqL20CqsID30l58kdhaVWxO3S+ko+mIyjR4k59EkefdKEPmmFXbU9a+e21Es3TDr5ReEqS2dXWLjK0sYKC1dZutgPV5mKcJWlTZUXrrJ0beWEq8QJdZiDZhan2l4smZWccrN+Zgn1xoertDNMi2q4GghnZlVgXxMcky/dY3Woq5JCL+4y1N5d8DV1yLsqKfRiu/uhF9tNhl4s3V92CASlB8IU37Qa4ptWRT69zVB7t8HXsLKSJu7WZfrO+aYMNhQGRh2eFVanERERU9s5kEX568U+SoNH88FpdDQfM3/ofZ15yDzFgHcaYsA7FWZFAHmnM3eYKwtNrAd5/z7x+8mA/kLTo7PQBCjCtRoiHPMafq/GuEUMLUxrq2vXN8BSbqePc5LC47J21IuXIvRU2vWzlDSup1KG9BRdv49L0wZdo1L44y7eZ+VA30/NfVZpdB6zsGtUTmlcI1UyS8gcgDxhHjIhvMd16VVrp/PLVO2JlMaUZtQWoAzV3klD7Z2Er6lDnpQuQFlSJB0tQLvEC0pmjd5OJ+tgp7NGb6eDn6JsRoNOj1qM9kOO8O0KC1g7P+HtagtYu4Dzk4WlL1gdepbqUNpQh9LwNaK904baOw1fU4c8LeX8DjoB3CDnt/fpmV4dDkyvPj3TC19rN/PrB8f5/6Exp6AGG8EtHZyZNTYIX5wY1HNHWlrXc+92wM/Ee8B2wiYoNuV2XZ9iE6hV0G7IKhCdYLajZsHYENM73jUOnr8SbXKIb7L4IeFwB6g5V1CbXEG9gWNelj81SFL8EG+znXnPTrJBiomH3GfiIZyJdWVopg6Z2uWn98P0RGtUqBobCjInREEthhpUUnfFmfRpy1PJPifDTP/I07tXanHGsOKZYLsrqHlXUF9FMtygIXOMVXs6i+zU8nD7JLGwBmXbJ189tePaCRL22kRivrKXYcXfdaCBiu3uldnskAYqilbhjtJMkDxenArSbDUjVR1OheoX13LtkMvUkDGZGgyyEubIxO6mopp4aw7suTYRPrsOsOvC/RUZ3l8BwEoeC9HtasvqrBd+xA0BtNGqkbYQUHNpBFxMJwh4P52ACT+nTkXjGiH0dWoHrQkqguWYoQiWY/A1dchjUt1QZz6AA3Hu1DyAvH9M/H5dlb5z5wEd506VFcDRKhb3KC9aWXMBHFkdkc66vnxl3RfprI5It8OuUdv/VxsyLQDkdeYha8xD3kAVygwYOlAKEAybJRi23XWGbccZNmuIYdtp5ajs2s06Mrbaoa3VEdToZBa3tJitBlle3gz/sMW38fbShtpLE/yaAbFY45ofzbbJykpN3iFYM7KF5cct6BawvBBUIOPqwpRtETBkWzAXFk92e1oJ1NUlAooydJfdYk35xsmfOHkBIjzOkFOfda6b8HW4+gwbUp91ZI4BXiFRUEigXoFn6snEeAryOopb2gxxS5szE77NiQkfdic0rmaH+yb8DmcmfI+LlegcSNeUV6LDN8hhcjdba36DfB2VodRvKEGpH76mDtnvRLpq3Nkgh8+4L11nnEoXQcKAIRIyl6lg0lwy3e5Hm0VMtxrGkBDkOS77VQu8DyR34HkIlVXIo9o9z1s1wvGaJS4DWKqOyyUut1dOicswMbndlBkSVqk5gx5GBdgSl9WKlmuALnEJYZASlwGMP9GMIUR6oxBTlG+17DErB5fIceMyVEGtCEweiAzVbrpXxT3Ja+QZquLNTpRWV0XoEUtJXdKQ5ah0wGGy4EeU0coiNfoEUSgpzLMMyrQ17AFqldISLyAw6DpWQ0R1xOJyYsveIidygO9ZWEqJWjXWC4t7NQR7BdX2R0pq+/jZc49aFZGuOigMVoM+aSDWAVTvXlXRu+paeEJARkjFJC8QjDFigJ3Yj5Um9kRvf+9ArzW1ow6mthqfplGNafLtF2i/OC1EplO/UMFcKq8Q2XakGt/kFCLLXKLqf7Ua2kEyrxHtBQy1x1QLwyDRrQXhFa4rLHuv/Jq1umsWGoKKFs+IODmgiInKkRFzrVS+jZhrdHWLO+l9UlTrDgyEyJVMOun9sSntPXWnTJxQ5EnXFTmRrR13L1s7bmYjGkFSed3eiO6tnI1oiphcfiOaBB9yphTkYJkpFWE3onHYhB03CQlGbkQhDLIRjWD8ifc1aQvg/CUIgQujdtEIPLu5XCiDCb7JaZTge535bNyceci8ecgm85D1xiDHnx31AX1AH3BqAKkK/2ky+udhal/RauhMn3ltstvDwjtKR1b/hTaL7CstjP3CayaWW2Xrlv0PdUIXp+YCjfRKK5TkfrPwHvpl/6tQkjtcZqZLssLuoa+XVONQPxCSl+TOqJbkFnmGM4XltcBDr82SNPWLXBlRoH7aPerXO6F+fZnUD5PU16mFJT8VSJPUZ67FE0nn8pyc+tgZekxC/XBh+SwF6te7R/2wlPppOl5KQ2GAaaHqLtVpeChjUurXk9RnigoKpXOxc9mvk8v+sqnV/HLZjzmR/bSIUGBaqDDkWg3NL/eZxlQvPgoLyz8tX0NdxhAnV7MUBMc4+gWJShLyTV1h+Xr5xUdhmnIuXXyURIK1EmaPWhKOw0ciUp6hL/CI0DxTpM0m4jwfcpx+mHO9627qevfDnOt1wpwjpIhFnC0aYbfPG/ciEYgunzc6iHztJvJ7w/LYwTRRl8mhbRCmNl98Tbw0VMdOCvThmSu0Es4Wlh+aWsM9K12820nHhXpCVjucFqrIQL2G0GfKNNyZvaTQcL9HcfHOOrujt57cjOCBE/XAwWFfH+BMi9eHDmJ9mOKyDR2TU7ahjIJjY69D2yynilfEFdR2V1Bv8OuO+HVHqI46rTviV0IsRzG93hVh73AFNTBJiskvheiXQqTalJVCpPipzhg/1THvUW02G2uzWZWHtSNiyKJlzQIVZ7KpIXAGaJ/HYRXa6dY5rGPew/ZX1onk8vfiLSPbyCy9SxkbLqx4woL/Darkg4S5RPw+BIFM6ezslLeptpO3lAQjGIJ9/Ip+iwAfQbGFjlqoioQego9PIK/oI2eq1dhM2d4T+bT/3Bru75OdShnrVEqZZU4aa/OkCsuIUE86WgldutxgbEjzdoOx4Um/3gAI52Z8LbKqvK9YzXPAiIoojAg4YERRFEaEdxws/7IlCn9JdiptrFNp5j2qzdPG2jzNvKeBKr/sYOwyHRliUhRGNK87GLs86fcdQFW2WVB2mpOFldxLV6gNyFW9HUCDgw3IVWIDcsXUBuSqgIOvIGzzpWVMskL3xWP9fcf39D56oevMie6e8wN9Pf3j/IAnMIyNIixyNaqTwhAdQVvIjagdxow9SQ1dUD6Z+RZFfYpCPcajPgm/RVGfplDv41Gfgt8SpZ6vcPeiFT+1ZOM9+88yXAdRr1wjDnelB8QelaVUFEfF5FQwX18lvrtKfIdT5sq1r5grkcfYwQk2BaOF5f9urUz/xqmIEUrJXOaVzDJ+xpjZEx800JroSfddIU9OhiZ6ktZE9jl5iukfv4NlJUBHWp+iNsZPMSzqCuyoK7ACpx5LRqzRUUGjo1SjjA7g6DZqcFUNGV5VRydrVdUQgVFnfr2rjF/vyaBWV0eJVZDV0ax9sICxD4qWwa09/X0nft65g70PXey9MHCFMgzQR3h5h2uqCXv0lF4G4rWVgXmDMGIwg/noZZ2CBrRef9p9WXh6MvT603p6/Rmmf7x2gc/fgjb6jKDRZyilBWDbXUEljLtyYG+gbb8r5taSK8yL/HJcuaz81CSxsg59n3Km1p9m1PozQa2uPqWo1p+m7NxNAjsXwpRMXeoQdoS8Ceoyvitn/c+8jwsCltxcQmfzzdYLzToFwjVjaxzcL9zhfoFwutY3Ma0dsgujTB2sQdS4K6g56tByl6H4m10KcyOA3OUkODDrjruv/aL7l5te1LxX3jrLEUr2trLL+s8g7r8gy89XU0wVxk8/kENLi7VE9XnGhgordluRld8ljla4Cj3tJRpi8bLZMuNl/xiPly35X0NarvVhR15wuHoJLxmEvKuRRFc69OpGJ7HYZddmUeFatCFH0W8jwrFCxuCmEExxjU5vsvIp7HBvBuVx26IDxqyzGZRddTnCrFI6IeHWFKKrJBm+zUSdCrTMYGHF/VT8djXJGmGIXtLbOrmqNhYBT0DDpYsx7AoYqO5erN2ZfLtUfEwvfA2DHHetMx7nzdCQ5ud65rUYFG7tqtJj+FM69zMFdbG1rdmgvTtB2DPU0oUdW7cW79jx2z/zzdpPvQatUBDkKRuUCnCI/6gXsEOZBSB7UV0XYp8E+Vm0FBa0OMYTEJN8z0K6PdOZRdAKJyHg6QlnpKEgcQVJY04YdYABgZRNRaSbfhQbZRAOF1a8RV6xUbQ81ZVtWmXJ+SsaWfh53gh/Cslc0SwYaXERsapIr3iODN8Qheuxfgn06AMhQulo7w7xoeGKJ4FZjtqGI2VaNl2EhT0qN22u0KcNemcbcG542+aqGs8LkC/LrZsR0roZs+07hKz0Lsq+YbxKo5LsgWHAlE5sym7K4TUsD3/N8djV0inMI3yeK/0cEMxcvrDifXJt00QkvaJc1sp/1AT7ZRfoPPiUe9gEZxOTxqYyhTGCC2OrVBbbnWTv0umh1WQuWJ6M7G3lS2/DuX+ZBxftIeNHk8biR5NKulrg5AB0H3sTsRhu7XsY3+0SXw6LQ5FHYA/Ei7S1J+1qpFfNx42ZHUUo+CLqkTGSPgDi6/ijBJMNgbnuxiNerbSBFWO4dYOt9YMMLwjoebmw4odWA5+jbQ0i6NPaLq4Xf/taZO36W6vtz1OO+814xkgpPunLtCE1TDWwSXLgU2pD7GP4ivXGfyBvfE1wtDhszq97bXkl0jpaSUnFDz5GMMYaplfXa7T9looZOVjmyhUlzMgRuRl5mY6B1gkrYueWl/ZRpZVgkNKMuBk5RJuRw6xiETrjv0eZkez8SJIhS6KgMcom1IhsEoEv/DSpq5JaFL+suIBf1kJl83ZRVqIpN8R2U7hf+4m8thi1G7R+ZxD8n1kLfm0Zu81bxOgrqxT2/ILdXtLEZo+MKrxKr4bDVGSyLcYXfvdWPoyW6YE08Pjnw0KHJLJnlMeEr/BXZCu8KHVt7EphZcOExK6cU37MZEDLH/A405BTLpE4YHDgK5ZIsJM2KhPp4qzNsmYto41v86QI8a+DVCFPc96m+uZrwYs6anIQVfyM9XoZmMF2grDLiCBDa+VChRpLreWZIjNHcVMk6WQTnSxzEx0nN9Hd/NMmhfWTuh2km7+eAQBOLNyv1nCbWFNwEJ03ZN2BHPaEgCfaCytb5AtPBzHaKh3rpgP2jCo3MEgz9xTwrsJJvbE6NVDik7KyRhT/djhhsm5ebCHVxvn3LOWiS1Lky2t50Kyf6KLXQZqOjFLgBaCjsHK7gt0o2o88XTZtA2RNIGJ3JIs0Oijefa/cq6D/y3WiJoit6KCjcBcYDajjSqPFBBqEHfSGR1BuiHFWq3vNA6iQMRSYELK5GkcE8nUyz3+Uo5gxA4drf5iD76n3MkfsMTPwNaK9PkPt9cHXbOTImXRxMn0njj36NCiXVxtY3j6wvMmBMX3H7kGwPLcr+1FJQRRamlJoTYWVb7Sgz1K1THOOWTuBU4Q7qrBk+xiqW3Nl6tYQrlubpKq1lfA2VTlbk/OkDwyt85Am2LnbtYWJmLycdPLypGpRn/E8nB7KvygoDZuAbatPrdKak56QpAW/rjGaTJn8k6aMyHbKiMy5tQeg7Jd2KZt0kJkFznZKaTqcoYlcb9o1jJO0dJvZiuhp9pSWV9WthZVPyreZ7U4YjN78N1E81EFxX34qDOSKZLBWct13xGDdvLHwImf94uZC2lp8rRUX6DTko4zdsDmhsFLlRXtL/vuMMLJm5W8QdxeAKURqU2eIkN8m17Mxm/Cw3oyhBLYmUt65ABxK46m4F1rJAB0KMmcM0jqtN97Hx6iNRcbQxiKjtrGoLHbNTwq76piA1kcaacNNMGu4NajRSWBaE9ugJg0WSUtP4ptIn1ya6ZxoY/cZuU8uTejzvFa/ROuBsFdjavo8Ldbn6UoVkLR7ApL29bkb+jxtSJ+nfX2Osasn9XlatEsRUO3dR1oUwuw0GKJVjyYL9Bmi1X2GoGlbbjp6I+CO9x4+e7DnRN8jV4VL8WuECqHdTdpmKpW2Gfdom5k02qa1aEsI9RENt1+a0PtH4Gu4mVL+AQHTdywapHRA8L+6BwRJ+oBglRV2tWomN69J2E1i0hOuXUcWwD1BGSceafl2pIn0SAckwTCURzqjESqj5JG2QmUWvAUfzaGLx2yHvm+CCKgy4L5rkm5p2omtQzcDJIiyWZWySP0PujzOjk7I5llHztV8mc5VMkurg4rvSaMi1V6mSC3wXARPk1xWLR0nZ23REDJlD6FVcjeM8eOCVSpXOXe4xyutjnilteyJbtKO9krD5tW1vlK0VxNYmAlRj2u020QYC3Fai2YKq9bLQ/AzCM8BvjkqBu9wlAcrD4Sk82DJsJtWzs0Evpw4NuAN9pcfFPn/Z/Q/PLrevtgJO9AqXuq2WERaRG0mHO1Tmoh9irbNrr1Pacf3KU2G9inttMiUWchwvpM9KFNbCBAScw9Y5vyqfbpCCmzRsUtiKT1koXfLT/pe1LI4M5bF+bCWLJcbQ0MoADIGIkmbWJhNhwaPlub+CWGk7Ko7FVIZyw3B/nDlGXDt9KKc0eBDeaGvVtU6Xxmx4USW+UoyxhNhSuiMKY/KVl4gW0WlQPB7XKPdjJopkTFvKTwktxTyTiwF2e68vOO78dbvhogOjsnuZigv2o0+QhyTwQgb8TGZQTezg3OHKXczcxFBULMSwZZNGqsPVewWQOaMQcqOyZz38TE6hsvMxiQPX9OwSKeUXZsmhV0dmbEax2St8JisPejELuumKw2he6CfexeFyjaPf1RaVAQ9uUslCgyHZrOpGaYkRpikJAR3xOXLdK7EKqyWUoBMA82QtlIraSs1ubcPOY5P0IQHexzv/tKzFD5BnNvbaeFZ3u/dLk45W/XrwPGN8UG3ZRy+Dx2w3DneIXZHWBe0rvoAtV/KUrl4OaIOwSBX+BB8eAKZlY9anfow1W4TETVjVeJd9XHirRPgLXQMHaxmoW2OLNMFKksX9y6x7bWS7almBOTtV93BXMpB4U13TGmScfXLvQQvTpCpaNtEsptIYjrYShZDcAyqbTFCTVkwHWS+gE7GcApVZinYr3EGbPwOJX6khKHs2U6OBS83Q60v3YQ0tQNFRWSNZfHB5Nmx5OBPNKuRU9tnFbQ9HYKZgmDCXdzfOD+xBKM6Iwb/onwHLWC4HWW62nKSdCOb6INhNMkkvwmlaxL/qJW1ME8oiUOO1RaMP161e3nYEqXhm3CmdKYOrNKTjX9DxVyklM3gNPyJRsdQEoR6QbKkBAVoCcoWVn1HLkFZNPGVlKAi+L/KJUhAo06pBNFJ4mnq3pQ8J0FgGFmZBGVRuiYpYcAkKI1/lGYlKKskdrbuZWBLnASlIDrKlGVmajbeqwGdlBr6GTkr7ha7Q38qZ0XBnRDyAsIC/s1SrJihNH0WUset+3Jik55iTLuMk6Q5nSEZN0cEBpR4sA3rWEzuXRedYMQKeStmL8/7NWKln3HK6ZHQNVnAt0GhyZJPOTJZYsZPBxmTxYHPTi/ATTRB4nP//Czq5CkOp4SKI2ylaJ6laJ7TDUOypuQO4VFafoHCcWfMvfr/U+Imy5NuMtQcjDlhuCZVhouJJXIVxXBMKXRqlxgD6kZ9dEpLtQU9/9tlqMm0WE22Wf2+VU9NZhTUJGaXZmg1mS3kb3Jkl8bKtEsztF2q3pGMlGvzJNcyNogoKTzfZURN5iiaJymaow6DnJzmIgMwV8jvnARFGa8w0ypDmlZZDVUiZ7msKsvFxDJ5SDEmJEcahDGgcFxTlL+NQcf5PXxAOnEJtbOLgGDaEoX83WD/Tt44GbcPLUEcCif1+L5K/1A4iR8KJwwdCguSOhJAoODNtS+Vbq492TuwpefchYv9xYm0XUcLaCG8kDY587LgztkW5HbZmVdQ/OuQi3C3IX/vRpFmXmEbFf+PvQyXfQWZ3BQxud1UGlOKc8CAFSMgc8AEWA9HgllPbLhJSDBmhEQPksgRSwDjT1SskZUqLhXpM5ZIf5PqRlw2VwnWhRSCKJzzE9cFmpn32/R1QRrXBSlDuiBNuILL0wVJsS5Ib9XRBVs1dAHgQ+xJjYv6QGMVSetuM01yTsI9zkkQwe6aucCdWrGkYNz47W3oCUNO1ULLii3o14s2sLKouazIP2pN34Sx9hphKfj8kPXCE9SSktCwAJJECB2zmuA3k3E3HNUSz+pKM2R7EoUN2541lPIUbE9iJbzxuVk9y2T5VMy/4wBK3beTwi0HJrGDChlIEaVPuokIBS4yBkSCihIM8j+2mPJZnRB/a4zHyILag44HeYy8VSqh01dYzJqSkuJ7aPVsI9euDRIykjDZUqIkcNg8DYtoav0Mk5cUXrvyyx6zw97TTtqnKfgZFgM0hFlNaAFHKwkq/wHUzJdVcRe5pVOF/Oct6N/CdxC28MA7mME4OgAo3TV3h9j//xH5cXc7qZ/Q9BzVSJZ28Z1e+d+BCQk2VkpBZUDxWasO97JJu9iHI+qXXiG33ub/kBgafaGGkgZLKFx8VyPean1K4UKrIXrrgE0bPd+COwChXh3RSgNTuHRuRP3SuSGEip+lHHSyNQrC40e2m4iSqx189RHARMRlxoO8KxbM+YQRFdPXgPSUFZWgdWNm/keaIj2sItIjDvn+GjH/ToHxRx0xvvi2b4rxmTusruh0R4Xzr6hzPnIDV/4bZjh/lGICkfIbVjHfRnEuIJbCsdFC/tsKJyKpX8ir44clV8ePaHg9zWrfFCKvPyjn4vgExC+pJPUxtqPnI+0i6A+UISU1Og6mlOsOppT7DqaUnoMpb8jBlCdPDlMkobGdvWqshPiSq9W15tMyJ5b3IGF1bEaryx0lbI4Eb3NgPpsc77OJUeYfuuSnhBfBJ+jlPlVYbYWFdQUIv9Ymwq+V5P1aYLpwz1aG92yBCeN8W2DKSt4tfkjVhdVzy3a9ziCu6M7o1J7Mun5YmnW/9mSWrF1QzgFJtfiAJOv2YemWyjkspWN4iKigHOfmARqoWnYAWI2Gg2c53CwkGOmMgjCIL6oa40/duO44xBTFda/Og8NSYiKYk9D60s+Ai4KenmaCjkRFZFM6gp5ychJajT6JTN5JaJbgnJxuHJk25+Rwzska4pwceZRXrqEac2ao5ohMyJxLUeSru8yX2Z8wdzYIWgwUVu+xXtjCrRdMbgjSeIAIeqsiA5MD/IYMt5yThHWXQu1jy9626qatfga1oQ3fdZlx+e7J0lELnhWedcYydDi5wYNcar+eJdRg+Q1lpcdyHcRydpA+TbZbLR3wPVUTqAMxgdpRE4iLMLWfxq3u0TWTgAYQp781vcMCP4GrCC54dTccD9Yn1Vpw4p6tPiU/kaNrlDjS8ZIMr6KO7ycOrZjbUgkeyzvLb8no1TkRc7ewpsfq88SoMlDAnagrLCGjA9pjouDv1a9wlJ3ZUSYTdDCKRsQEr5Rf8YQVfcnSgy6Cv8ZRQfSsdNC0Gy4L+UXohnudfNBZ+aEYQukn5IPuIG0VjTAWRqETu2y8BkcH6Qt3TUrfSnn7mevQ6SIqRLEIuClYt5aKM84hKxxjIzJg2ALzgkQII2Lb9wruvQS26CbCFs2QtV/wM+cssEdF8QOrf4Xf9gTMeSEDEmu+ONWg1+Pf71DPM2G/h8ImGus75WoBRmJAcOZiWiH4e6yZ/oKLEcYOXK9THmHsgkcmPY1crxmtPBWmurA7eSppqgCJep5KesrzVFZbVbC7qlFwJwlxaecJcenC6o/J9xNp4UIUZzhEBP0XlpL6XQ1ZjksHTG+h4oySF22h/oCoZZzhWUa15kw9REHFS0Bg0HVHyaIS1itakZ+SE1mwnZUnscbVWE+0ZYwXVn8G9gqq7Y+U1Pbxs+ceHdfbw8NXHfi60w684AFc715V0bvqWnhCQP6CVEzygyv8vIaZ2I+VJvZEb3/vQK81taNGjxFmjmpME3fCjtsvcdftlzhuv1Qbsl/ivM6rRhNKErBrVKSSzPhFmsPMpQuWuTQ87MSgERpSgZlODRrE1EKk6QuUBypqyOcfpbVubWH1V60OfWXiV/qd4lf/gef1anMbo2o+UqVCZazWPRmrdTU8I+72HmF75ewREsTk8nsExk60r3IgZEo3PKMWNmHHjWNyRPUgLg/PYPkT72ucXZGrIIKGLGpumQ/ry2LCfVlMkLJYro/ikMbWQnABrMjwTzgzw9O0wVs0w/8fv4pkpOfg9C05EyvMf7mc7qfEv+U3VIsfADPFQ3VojreWhK9NdnvSc80m9D7EtLNzzXSh6QkLPELV/0hNaEI8ASNBTZj2TY7g26D4RDapcHloudkXh8u5u1kSKKYRIwRmhTrNSGqk8aelW/mUqm5LCmOmm+bK3d0p9MJvkvhF8EYF4mfcI35KSvy0k9yvLLlCJcmAlToMtM5JneA0SfwkbFaoVlZSB3BMOo1A4wNwu0qpU9i2CQZcp7Ztm/z25Dofrb1bh+p8Im2trtD0oAW9nvIxNSAav47S+FEFjd+A9DtKC31DoWmTgtDXuSf0DVKhF+jZBqnQp0TyCWaFqtan4+OJSoW+jhR6iXujyFm75Bq/Tm6oBMXgexWI3+Ae8eukxI+SakCdY5h5pizGmEZP5IdGDarhXlGxcN6mqPHrSI0f1Yt9kOiMQKHpLuuMLaYhK3Wu+UOtJ3HEI3rIrEf0kJoHh/IJoyxTS7JMNa0vagtNx4hjN/i1+FggQLhJal13WdbibpKAITdJLel+xtMJBVmgdXBikeaq6agxV44FtouFoHpyjgWKvncdtVzeQh6gLKkUXZ2N2HVruwRStMos2u4XFVbapHsrbVq60mZIJ4vObvxFYh/icG8lL3WUVK10VCcs6tf0uOJKm5bsrdTHpFTeuU6+ZckQW1GHhAtQXqcsXRafiGhFxSonj1YOCqs/Nr1tal0WLtVPbyWTy7Jk6ktaw3kij9rOqEZti4OAmp5WFKscKVY6Y9K7CapJ24cKUNrFY36nBf7HehctdUByo2HcztIZxgYLTc87qysm96/K6rh1kCXUxoZ1eiNPrxgbVs2vEFcVGy40/aZiqHuGDHUvwmtlszCZH+iUyOm/W1zMr+nDCqWVMu5dNlEqgxjSZCQp/40IKyCBueGrE40wzKi+tirw36Aq/2UQQf0Div3YqaEsrAxQRI6S2BQu2l7d49/gYCwyPj5FNzhUUGS8Ozc4SG8liDu7wSFe9g0OcYw/dSPjoxBTFBnf9H+IGxxAN6KaNzjUQxQu2wnXBZpl0hzULSHKpCUN6YIUvfkyrwtS7tctSUxJ3RJR7HrT160V7O+Jkl2b5eXom5dNVuROkrjFpPyGUkqROxsMRdJsgK9hHiUTw2L6jtc+Kr+hTGn+1GNFLIk+qFcVC0lsFSwUYElRSGxNkqUb4vxxN1pVMylPs9ot9Jc132qB/xiPDqZKN2SdefKysp41/a88CyfpJB8qrZodlBR6gJuriCIHbPQudbm7jvcW9MidUMvmsPxwOim/GzEiZrF6ubsiSZawc0TIjJSQMfmg0/IYrIgYPCkfdIbgXocO3yTt8HXgeXZ4I2NSynLXu8lyc1xiuWw5LFccdKOiGzVOBragaiD+goQWEaF51rwYr4EAzLNNREXVNDDQRBEQzSvLTp2hUnbi6OJZfpqAA+cFkSYQdy9NIG5mw9Ig3rAk3HZebK0c5wVtVxC1lZPUhrxBtiFvYJ0XZCpQAhKMtEkhDGKTNmD8qew8CDiUxSl1JMbdcyTG0VgURo/Tlw0jzcUciX65IVkJsVqIuRyNoj4HDdLVO06u3g1w6oXL5HYiJAt+LQ7JihFiMKVZpDH3skhjqBgoZ2o3oDGZZHPuhGRtFQtBw9QIQYOTOOaYahxzg0AIYoXmw5QJWw0/nwgke2MZXous2L6/wzI3H9MLDstBVYuFeiDdytF2dL7QfI9829HkJMpHEEfSBPtlHyVTY1i9Izkp87SSzJOD3eMnqLXQ3Ku4/6FXxiaK5mmK5milmSY5zUVuqqZCc7/CYXzSvcP4JulZvJB5ZBzXLqoNDGZFcJUK4D51O0nOcnlVlkuKZfIVFMul4ZwInMwAvKRwHG0aOJuYh8bdu/W8B7ZWOnERtWpDtYJpixSaLwHvK6Xm6+0jixBmTtR1MyeKmzkRQ2aOIIEkYmbnXSu2LqJu77y3Vc7Ou4GY3G4qo66Bs8gjYGJlO+9aducdgU3YcZk0PnLnDWGQnXctxp+oVCMLVb1Uoi8TYQOgG/WyuYqwO/8QROGuasJ1QYOeOG7T1wUNuC6IGtIFDXQqhHld0LBVRxdsdbLRx4MDaiY1bKC20Pyr1qr7K0RKz+aJt1qqTVbbwBJczd1VHyf3b3ZlF4PWA50myD0FvhE8dIq7qx6EXwj9IT+1yPPrjjt0jDpDbdaYuTgRLdAMX8O9k+WHJTB9n9ob5VNk8mxYLwSPcVqSax5oI4WseUlMD6MeMysCovn3UKsMWRctDFHCf7TQbN2i3PwHuMGHXyWfdOZmSVK9KjpZPimPfYg5cf7EVZ0/iAf0z4jYB8YuIoS6QetIC/TIUZyJpO5u0Zc0Jj+IjiHMJbkbs0jIz8k9QjEyUtYRIRNSQn6e2hXLVDcAn1h5Z+jLJRQGkWR+yZLMH+vxWkqB1xQSQGvEgR1/7yiwQ54gK0vBNBTYIc/AzKpmYCKBHf9ohLUyFM3jdKktzUywFKWMM4Xm7yp4+KLu3WQ+JbW0UmS6VFrDNyJnuLQqw0XFEvkjiuHicE4ol3MUqBv10cVQD19MBP17ZUhEDVC2dvavVVB5UWFwUC2t8KKFliAeHAQ2YZvAJkxUoqaltuxCFFQAUC1akqbS3JB17rkhFQqz+G5Ip27IOoduSFh7RNMNydRXc+6GhDByN2SdkhuyzpkbsqgHrpff61Hn5Lgj6vy4o6jk5so3XGL9Wc9wiAi62dKMjRqyXC8dMF2Tqp5eNhsKLTeoRbNI08iiqD+YCN0QEBh03dGeWsJ6sULLCjmRa/meyeOK6tVYTxRQUV9oWT0Z93pEHbh7ayf7Xo9rokIoJhkj1hEHEy7e61Hnyr0elP1S77r9Uu++/VJP2i/coTLoGmckRxhKY4LtxFwqL1psm9iQqp2kAl792FzU8EpOXs8urKbkRNZ/uNDSRYUThOAexEb5MCEHU1rILuxeIbuwGTu+GmO/6RPIX0dMbje1i67jVqIwmFjNuzfCsAnqTg/ajg/zOwmiMGRYyY4PI3Z8jVSiDxLhBKAbNbK5CqOJBFr38NS5rgvq3L/7o26y7+Gpc00XAD6cfG3AM2x1oeXuspmGckDV+QacMQcUwqz102jhimg5oOqhLUy4f3QXrjrYhB23XnnhgjDyhas8B5Rk4So6oB505ICqNuUFqBZ7AR6S+ybqhQ6oGoZDRNBvsPbXAxpGaI2zAYv6VSvu1yOEA6qet3UIrylmQdRrBFRDm0UrpFqV9SKFltfIiVzN90zuCqxRY716Qa9qCi2vmwwHVK26gQBmcbIdUG8gFZOMEWsIU9ZFB1SNKw6oGsJ+Cbtuv4Rx+6XGkP0SJnReFb/1AF2jznB1KsjXTFG64mRVkL9FwwEVMuWACom3q1cpB1QA0sR3QJlyQIWmyAFVQZe/uuOACslWopAzB1SobAdUCOPPMhxQiES/QDigoEdZ0wFVBVHcc0AdnmYOKEQX1B3S0QWHjDigrCfBSXVBhQotv20Zmh+ysxawM618ltbrCadS+TkEzK04tobqTTZUD+L4bRoPHN1t0PCFRIjWNsDX8OTU8ofF9B3PfCu/oWhp/tRjyC255YtdshHcNtUZg++p3gUekxcWqiVTPUJcqkfLZ1CDBVkygNLfLcwna32FBf5ZjQCQ3XA8jjwDDXTPip6Bz8k9AxGCxnpRUSIKRsTBS58nEj7Iu0ijUPx1sidBj9ypYNLyJXnCB5Zl2wAXDyEhvyJPD4g4qV0UVWUwhJD/QAVJ0/ejsd5lnM7NGuFtUbVsvajLehW0aTDdE8921FHgkVJagqMkoAjU6aIkoJbvOReEmFQQ/kMuCHHa2nSWJUZYGAlqsYuUvdhFyljsfqy/2L2AJ60Ul7puC/qnGHSIyGtElW+thOfoXs1UicDk6Cv3DdHLLxMJKGLW1hCxzIWoZS6isMwJC4aAHjmK72VKVIjie1vr5dJd6+y26SIhG+TSXeskQTWiurYjhEwqLnMhcplDaRKS5dAEhRu/1hyeQwM2fpvAxk8UwtA6h3c7hMyFMIT4rlWo67PaPddnte/6dM/1We3Q9QlkRNf1WQ2bcO76hDBy12e1kuuz2pnrs6gHVslDGKqdHLHUOj9iKa4JzQqL+wsODs6L0FsszbjGaAhDXTkhDHWF1huJEAa9xC/MB12nEaPCxFGXG7QREgZttG6UEznE96zOVAhDnTCEobWrUkMYQpMdwnBNVAjFJA8Aww9DXAxhqHYlhIGyX2pct19q3Ldfakj7hTvIBl3jrN8wQ2lMsJ2YS+WFMGwXG1KhSQph6CjDCR0Rr2WHLFEd0HOpxhT2mnFn/pp4ofV2+Y4u4cRfI7xlE/SLqBSU1OhITLrC0HWCYrB7ojpBrfca8aAmKJpHKZrjdZOclL5KFFrvV6hrUuteXROryFFIi3Vk/Ca8yRHMCVVYOq5hXMoZLq7KcLViiXyIYrgonBOqbEgtUDeOXG6c85KHduK+BH0VqsnHrH6/vZLU5Gt9NUmryTe6ryYjFM2j+mrS+rlbrCjfNgmKMu4rSseK8mmK5SKkooyKFOXb3VOUn9HYzleZSjmpEm/l302FxDZBocWDg54vs8q6g31VBN9X1RvaV0WIeizl+YWrxNuZiNt+4Z2V4xemi90QB2xRKkuoSubZqGL9wmTKXAQSjPQLQxjEL1yF8Scq1chCVSeV6A8TIbHQpyibq3rWC8ToJPeueziirws8fd0Doguih3V0wWEnIbH16JNtkxoSW1Vo/ay16v4+J/uAZdE7Zap48lQRkTh5+BrRXrOh9poJ0QHWI3fzfRB2GQ8fwRyeR/lsLtAlLMOlB413PzpBpTU3T1ZEVmSyIrKIvUReI1wrpsZ1MeJawPKHFSPYxnChe1lEW5KMehl7s941qkn4nuqlK0lkRU5gq4R9yqq4QK3Wr+tGylWV4rBFESudH7agv4Wbo7ZArYNwLI728QmqV8Vd/L/Ij/kSxMLo0LvA7NWE/fouEajFmor49QYNznbE6EynVW9CTwnrF7f+BzEm0gfE3Aii6elKwTVfuKv+kaM71CNSv0OanOUU5elKa3TEYN3ppJhu/6von42Q/tkkVcu8WYNVU2pmSIq/kNjgupAi7Iy0yYbS0gUoI+IzWUh1VlWWxcXv10TlQZfYracZWiKThTVxuURmnUgkXQo+Q+nSHLe4ZuB7qit1Rn5VjO5KveY6xyv1HeKV+q0W9Gx8d+DgqpiI86tiIoU18x1lDlWVuVJXMfwlYtZFxKpWVe5KnSHXkIhb0r1czfpI0ffTYirdmV5IFdasluuFNLltVVcmaUovpKD+UO9IRsqLNN0yzKogolub4kpdRa7UKOWqhFGNaZpuVYU1N+FR4cA3sInwDSSIQ4cYEWkeJ/wDESJwKEnURUkBHwE/3EBhzTbeQ1hlLnqddOcEDblzgvA1LW7AnTaBSj1NCbh3mhJAo9RouzkKuVkkU537LS48SKnooEZnI2oMEVG0Nyw+gLwhWtmtiKyuWg3ndFDxLMW9q1odcOGUX9WKX97TQHrZItQkdxhisg4VJuMhO6QLvMb1te8vnW30nz0piOQc/2w3csC5BD2AFN9zWzpuAIcg67lDEPhwifgQAgv4nGztUEHt/UKV2hBs/S6i+hLd+lk/dwvz5zs3WOCPUH64iNyHy5sEeoExLyjl48QLa16tkKqBzMduhRFN3Bd87WwSdMX6uVncq9fx60vCnBWYoNJ3YxqB7SG1U5aQ4szyi35EmCm6Ztjis1+ihrLR0FA2wtc4wQK05PYg2EljFIJjR3glUX2Jdnmrnz0k1AiWqKT2NhpqbyN8zd1rp3Hixnni/qquDxT4+o8K3UqdKyzwd1EnBQl8Zjk97PDUitfDiCfsBQUPHTIfRxVGlBTp4Qith4u9eh+vh1Pm9HBKrN3eL9/SRMgIUkIlRgj9RflQQoQGi/MaDEq2pcOE7p3ft174KOWb6DLkm+iCr+Fuoc3E3Upd8hvY1x3Gw8bibIhdEP5EP0qwH8WVPopfk2KhWrpnsvTfCcrJ26lxUJkk2uuEr8nt3s/o6lvAhmfE+jZjgX+WvnSZIDBDqxScQvSjNMsVii2Na0IAUzJT0K9SdgYc/+S4MBlg7TprQv7a5QNOgtWAy3uHxhlJhmhvB3wNk6ESq30ZbRZhtQTNapnC2gUW+FepAadNTjvKFVmWKzLwJ/pRjv2IuU/b1umsSV4BDeXw3o0NomNKkfw3NojeSW6i9xnYe1tDOZMNWWC9Cgz+PYzBxwblHH5OwOFjg4U1/2XB/we1L0jrbMWSApNk7VG090P2I+r7FWzMsWHebB4bktrNYyNqhvM1KH6+irP0/4DpbBt2kSlLVuH4pP4UHzVCsyIKGKSoF0OFtbOtaZ3BUa3YdUA27umwkt4YG+FWLvjlCfHsrA1b/QqRLecEcwdfnECpo947AV7DBzLMqhg4O0UwUskM82MYVNNrQ7ZGB+lGc0z/qEazl96z/yzcIcFZHRu5tuOyR6yMMTRCwlrGRiCkLBuDm9QRZgDUvDBpHGMse6i3N8i0R60+RVhKvRcfo0qV8Hh08+oadq6ksSnhJMWP4NohekQjhKLlRgR1FiWSQ0CjkZaQI/MFtRc5FX9WYWnISeKMARivxXKFtUvl3pGcPDLmjBh8hTwyRsR5O6QnZwh1QdfsdLNpHTxqLifTBznCjKOMP2YbdkJJMjKsBskxg3VgBmfIJSCnsZVRUg4ZsF2Zvnu1tZuM79U6Z1jgXb9we7V4Ze/V4v5ezc7gh1zYq23+Gwv+Vqd7tU2KezVC/zJckIQ/RT7nta+1UO8mUqG53Ua85CfDQjBFpwzMtlQUebm2x3L4z6V84HsN+cD3wtc0xs+socKJfRV/XJLVLYWEywuHXRRjTXDtmCteU9j2W1hEFtO3dWvxvi1v7hj7euyZv9AxvUomspbttRcwBdffYb253IgWeSkabsyjoGA2xx+FmPYnhCAp6N2Qbu/0ZhM2xMkLfH7BKZlI1KQrqHGnqBMnli8KTNosYUluRg0ZKzV67TsoDbfHkIbbU76Gi4s13LNlHwivJQwnDjuni62t4AQGCugZqt5yitpt9Y1fbvr058MPaGRV5eS6TcC/eyjdpqk9mnHdNojqthyu2oZI1Tao2zmdqYTNUD6+C84IREEmzUPGnUFy+ow6c0oQlmkajq6k0YRHoM9ZL/yazkFFHI0ZS6JPUhBvotXfIgxmy96fgLyT0dmic8dft4DfS8xY2nrrNyl7/ZqTxRoM+FjBSVEE1thKMIES1DZDbUaFS8LvWi98eKojWIIEYyUgBLZOlyJYutnI9t9hqvYcOtVzvvfEod7j53sHRtBiOBlbNDleThyvUxxHnyTRJym82E855cSvbeps9Y/x0DrUAI2LbmZSClqMm6xVgukWB1BEwEvUUGZ+FL4mKLMCpot7CsS8YdL7Ko1GWjumm+laBccjynTd/CsW+Oeom+ji1JWXSYq5bzHE3Le4xNwUh9xikvUFzFYicMWx2tfMs1rpvPsbjlntiEbiVQMxG0coQZ/C9m411N6t8DV3y36BNgk1cMSQGjhCqAEBG/9At4qPhXFMmGyz6W8t6B9RwyWJ3GeIyH1+e1PS3gOG2ntgCoT0ASrIus9QkHUfZRu43Z5UKbQl9YO6CaWQLGz6ZQs6QysF9eHGQSweZXmpGwfx0iAIkqQoW6TBkC3SoNhe0lB7Uzo+9QAFi0L3UZ3MaBSXAcx3kYoqyFJsmzK0dKcoGy+uMEDN9jKK7U32+KKG2osqttdnqL0++Jo6D0ZxTRaHHKjurY3imoyJBdE4EYjiosf6xTVOUKOU8NnOEfEocQr2YTI+k4gNHSFhX0HGPhMBmpdJWD7Nn4m7vYzCjhL02s+Dwt+jKOgVsq+P8rDwGOYKCnuV6OsBHhQGKF1FQZ8k+3qeh2U+RmGfImH5u9SKUOBjFPZpEnbsjTzuU/BrFPcZEvcoD/s0/BiFfZaE3c3DPgM/RmHfTjACX0ipCAQ+5cJI3k4c+479it6ZYMJBYMuvELErbzdUTmjsVwSBBm9HvdBj72D6xwc3vENhuRp7h6DNd1AhE+9QWLLKQs25gkqsXGXBDrkDO+wO7Ig7sJfdgR11B/aKO7BX3YF90h3Yp9yBfdod2GfcgX120ncNk3Ru0+dyvLnlUZL7mt6om4JD3m6QK2x6yIL+ZXJTESdnSBThky21rE56hejSLJmKobGhSuHGwAhlIF1230C6TBhII6YMJME+qDTwKuI28ePnHz030NV7oaV1PX6XeHHRFRYOHBvF4yrGLo8q3awEiwrGhUUFr4gbj8eRKocHxe9n48gghuJXHPRK8okEkE+CGC60PWvJ71M6oV45XrX8LuXRw20dzcwouEfP6KY9jV2mPOeZQttL1mjeWbGjsSaeGZZoNC/IizFlKRnulvhobSmOTBqgyj14mfccOtXPNp4tOVKwHgtno1syG9lCm0JpKmFw+YiSe+9amrI9CZxJNFeZkOy7D5y3Mw+EwyMENxFRgFmLqT9GIGzmETgR/xihIuJEMHYKKAlRHGLbH1ovfKLMLn5aT4pugf211QKA/HxtFUG5eN/FfiZrKgsniLimUZEpruGjwS05Yr4ySkzxaWFkQdtfWS/8ORUecxzrdpRwOAk04XH4msZClIEQmJldYo9/o/zpxw1FfR8nyGM4hxIfPF+tse2L2lmU8ZKcCHMoN91jgf8dtXubtGlQvSaLF/8UPjmizEhGLQnnpu1b5WdzzCAqMFq5aiKxLGncf9INOYpSNI8XNlnVeNq+TSmGnE6se4aQ/qxoVP8mXkd+ZL3wfSqe/bihePbj8DWcGJsJHX1cvqat07ncQr6VzZHBLBqWUQO+/x2m9r96G9CZow72vyPE/nfY1P5XcLxYGnj5+98hZOt4uTATv3J4bER/B1wQ3E1O7IGrqPaz4m9y2D54ULIPxvpW1k4Yl1Rep8YZ4uL2VJHlSuIqKjC/Lmq9UE3pzS5DBlWXQ4OqAUJg8eYl3bSXMqjihgwqxpIoOwuxkXDybe172O7kg+3gcRGcjW6rjIZOBFeTKcVwnMwoQSaxR2yTrJtnES5H2WtdhrztXfA1jQUyQzAhb9Wv20m6nruc5pJTwxEWVzBo07IDsDc1ZLSpITCjRKRNnGB/ciUkPf/DBCopjW+i43ce14k2gn5rfn4eZ16UekLXNeNNIzZ3jp04UTHIjd+x8NdQonvNEYVHawrqIbqtrzHIFySX8l5bbm3FGWH5kp/XZiTCzbp0jnJKIiCR+qFLHyguPyf6BvrOnunpL3LCFUxWRJ/n8OT8YWtdG38Y1FvUSvfSfg/XFiHOG8VQSsUb9XLdKvsKAOiHa/kcoeV5w8vmW7U0PW7KRAlTJkNkUGeBMYMnJVcRSckNKsn267qJov1Bomh/gi/aDxoqle0nNrwRQxveCHyNaC9gqL0A85rgwol191sTcNekd4hob7uh9rbD19Qht0s39EH+owCyd1W9GW4Xsl/cpnczXNDBzXDbNG+Ge5llOm8X81Qfv8eImvPbRek7ThB6aV77FIGvTXZ7GKRwxY9RW5YiMR6zBPw8Ciw7II2JoS86un8zgh+PhojFSPmymonhvlpn1w6u6yp9L3KRrnu99cJrifVoM7+OjzdwCE0NPGQhP4sXUCnltAk6f48wn23dmy3gNzoqR3OIX7q5Lj/JmUYp2EFYMYq6xD6FFARnssgYMOKGFKaebxAioB8F2XqSwA55iOtT2skA08gAg+gADZW8ScDJLFENZ2HKI6907VORjYVq43nrhV+hNMBOQ6p1J3zNiUo4pCMYoFm58+9PqK1mxFD2YoQhPN7eTkPt7YSvYYczJvwuKWKyQ/xkfwgbXxpxKgBePC/g5HRh4xct8A9TnIwejQruPAVXuWHkULsyJCas2rHu4/Jq8jFkPs6r8KborDcGpUzYq9/nLca0OYsx7dCWiBL6tYEQ/RCxWY4Qwh+CaGaUH9MroT3z11aHPlNJG8B9htrbB19Th9xXSRvALe5vALeY2wAWeepveHEOmRNndINUZW2QimaTaB23G11A4OLjdhmmqWVbJLS2gaCISALfAUWhhsEQZRGcSY3TpwQenRmDik8rLOiYQl/SRF/uo+yUtEbsMFB/fM42sN91ijAAzIfpAF/1wwCA+QpjSfAA9BFzafCJUoSxuSR40NVHDSbBW309YDAFPgEtIkkKvP0k4TIV1zOqpyJrHcT1jBJxPZdNxfWI8lou47FOV5j+8aeHVxREX5T+X/yQOJO8oiD8ZaFmXUHNuYJKaICyYIfcgR12B3ZEaMzcZIXo3ljj0PA4LARuv2wB1zkEPiIEvnGVBYzWpqkC67YQ+lbOWAKWe3DcWMI8JjPLtv+q9JVbCNdtQUOqTbD5CqKKrRp2jeO8ambbIKLiQouK11EbpaChjRJzVEu0d6+h9u6Fr6lD3ivdmAVIIhndmI29Xm9nFnCwMyu24XBrVkFMc7+h9u53xjT3VxTTPD4JTPO4KaYBm8DDqMOQn7wYQcTD8DWivdWG2lsNX1OHPCxlGsF2enWZTLNbzAOxpcj7PUie9Qx9nlmqwzIzKMIlDBEuwbzGrZENhRu3WGvkTZQ39W5D3tS74WtOjpK4EhM1pXNn25MwbNb2rJY73bixjwpNY40v7k3o6EGOJ0PwbRZsyvkgUrhxD4hEsHcootChCBGmQHcoQrV3t6H27oavcYFuBo/UIgTTNfBMd6vuEVJDySHD0zFWaH/cgr6DqpMb0ThQS0oP1GJqB2pJYZdvvEf7QM2aAvl44g6O0+KFG4/z+6+EOf97wnFoDqf8rJ9RQv018OoPil9JAeILQNjQAhBmXhPt2h6xOnSGMohbDBnELYoGuCvHd+qQLVNxnIbYUlUb3D9O22DyOO3GV7p8nEbwTdgQ34QZPsVLOrjvWYp637PEBItSa3iNIfsjoiD12pCW4esD+oC/kIBYTJoJS53KfQmabCiIBwhEFNYJzdkLKxn5tu4fg6YhFohOGPnHmL4Jcs9v/HXLyEfLgUSRLc+AwogaRGZ+lDbzi96PUkUublcY4DdrH9TteQBOq2ha2o9Z4L9NRbKESPaNkm5lfn/NBOipW5NBguui8DV1yIh0axkScZ1IfoLCUOkbPwH4jnDJTFhNqmHtlia6l9BRnKHVoGfrhPQNrQbc0AoZMrQayA0fnijYwHNNTLp0aPq5vADozqpj8LYsjoTGoMopb2xXYsCD+CBGmwQR0CSgzYPwNUqlPkjecBQi2KibTFXfTOdzmfHAMMuKfNH7mmLOm2jRiwh18vqvWuD8vZcwRoKajQbKlorR12li3OLAhkgUbvwOr+eT5nwLSUWbw6LbixJD7F+tyf+phtiESgxMTC16OpAkfFPdlGgTiWY/x0S6gRU5CJVZ4yCE1ziw0hNDGtMaJfQCMwuUNgqQ2ihKrkERmT6yeKWSBFUWvh0RSur64MRw1qc1GDWEb98SCnKaIlhfcvEgyvoplvWZbkwB6yekrJ8kw+bp6wmds36iDNaPAl6peNY/JmX92dZwVjph/fuMs/59Putfm4TKZv2VFHcHKe5uoLg7RnFTxJAxT5WvSRB79KTre/QkvkdPGNqjJ0mfobq4ggl+8eb+nuOnbz77yKWXus9e6O07cfZMa3fv+QcvDvRcK0V1GfJwEPwnFSTZOFQGG0dJNt6ksV8i8smo4/cIwUdR18O1ozgfRQzxUZTmI3im/FLpTPlk78CWnnMXLvb34mVaQ+Kj4qig2qqoeuz4ue8VFP865Ih6H3p0jSGVDq/HfYTC/7HH1Owr6o60iNI2q4HzZMLzTJknM8R6MiOM4rfhMr4CMgIOwsgj4Fj+xPsaZVf7sV+GEAbDuCbFe8apiLjr1zDFcRURM6Qi4qT/E0/xj5M73usMWQEAsso8ZI0xSJmX2Qf0AX1AjwFSe5KYyO5F98aux5NNcnvSY4f1r1XJuxR6Fg4IQwDX/6kF/ToqfK52wnjBfT78gXoNJCLS7zDSbyt/4aCg3+HC+l+ynA/fRh0cgTIdHAncwRGWOjhqeT4IS/eaglPTWjgn1LZPJ2y2pmRQY3lrZIBBDcPcHH0ChfWj8sCWgJObTYvQTyqQPuwe6QNS0tfQIcfK/MLMMkd6wBg6sSVVUtLXkKRnkj15+tQU1r9LTnpMWwUp0he11XNTK/VVTkhfJSV9mCR9kFw0qp0knqKkryZJz7hZefpUF9Z/EJCeDval3FtoTkFQWKg2QDFNsLD+JSuaLaYxWVVyh84Fy6EjyBWwgK5Dn0SRvNy4U6eL2B0UV/O7VJHH246WiZB0mfhdIg4NpoSIo/erCC9C0HVHYxD3IlQZ8iIESb6kqtZTgZGBihADy/OIJKebFYKZtrdKmTHqmtyR/VYD553YUMQo8zlCZcOitjV2kWCMUpjxwvqCwipb494qG3cSMhKX0iZJVtyKkWeOOrZ1rEwDK0YrzaKB9UXFVTZOrrI6YwJRSZw1DABLu1TiJDNqyKPARDYJA+q+IS8jrxCtNyAG/0cgJA4imxyyaYA6ek5S0x6kIgsaqLqIMarAIRqSkRGFDYIPNwuvRl//fX4lz5oLG0Rrp6WRS48s15OoTHN7tcXx/4kCIwwmgV7/Xwo6OFGmDg7iOjgt1cGCophpKXMLql5m4JxwQp6FjK5+cJ2S6uAEqYNTjA0siBxqn0np4CCcE0oHJ0mPTkgtCrH9XkXms7yJcJ5EfF1rQV+vQf4kfkrruCIqipiBPIIelGbZg1KmG5hUJd0LiypPqgTBsMwsUGyYINkwTbJhSpENr6+o5UcWDJsSrj/tjdZwmjUYNVkKOSQZFUHMkXGgZNlelPVzLOsz3ZgC1s9IWV+4NliTQK0MuTJYP1MG66cBr1Q86x+Tsv6N1nB2OGH9+4yz/n0+6wuDYSuK9Xe4w/pxivV1ar+niS1kEr6GrdUC32LG9WDYDO5bTBvyLVIWnI4BDyZYIxg2A4Nhs8Gp2OMknVhjSTVrLETKZVLfGsNbZS55lW4JQg6dOyGQ+Uhm5BPV1YIablOV46A4uYdrYKZP4OdsPwUPH/CLm8MaMX5xtVAP1WsveBodEA/ljCNvlNyhreuNiiso6QTqlrZ+Dog33QMKTpGoe/c1l5fVopNgkISzwjESs0xSBz10unaDRni7ko6IykuCCCVd5quJyxnmvFgs3iAXi5QTkqVFLifQL0Is0vTVfBhbp8pk6/oK8/U1kGZtnDzXSBOXRMZADVFiP3JIY6gZQqcfgq8R7a021N5q+Jo65CEn1HKp5HRmtV7J6ayDktOryys5nYG6wAzhEiqEQ/RckjorKG7cP22Zfe+a9KGIqia3vzCFVZNFBa3a31dRHSouTB+qzLrSY5cNNTjG4KOYeFHl+9D0MKLe2n0MkIgRfldeVFl8C95+hfEIiyqDtUlcVLn9DyuyqHKUuHYmRhRcThEFl0NEwWX+UrM0w7TjGu6vqQPwgxq7XqoW0EGiy4qXvXOThz2hCvVjT2phVzFrrkdtzmoNzVkt85roWqqvWx36QiVdCHvKUHun4GvqkKekptkkVrDe734F6/0mK1i3f8vlCtYaVQwjrgecRtyvYhghhb6czPYqMQtF3M5s31M5me1RMsKaMMuiVNJ4lSyzvcpeoxMuq3i+ehWd2Q5hkMz2Kow/8b5GbJntb1ATxnLT0aPmoBoIFaGZXN6gryJiuIpoMKQiKBdeFXGxfYw8uggacrLHoc1lHLLGPGTYGKRlLfqAPmAlAFJHEw1kQPdFqt5QrYahHFTbsQTlqdc3zUGblZ3Z7Rfmpd203YKeT+U+pZHUa6YCk/1hNZxWLA0B6Tf4duyNwgyEmxYrHMQFyzyxaMBPLGqkJxbClErZRkuYsg2mheIgnZyqaumJV5A82ZZc8VtkrWYqOjkE54SSQu08TJpviv1qc5SKWSPfgZSbihlBstCiZrPQomobhYCTtO2gato2wjMdRCom/FqcihkgzN4pTcUMuJeKGUDNXuVUTEdJWG6lYu5BvEJTnYpZLaqKIVPmNSK9C+aSWE5rqOU0ROVpomstXuaE1pnhwk37FdbaavfWWnmlkwYngUV0yFeN5IYIdRmVVzqpVq10EhTWPLjpDsW1NkyutUEneocKxgkCw9XOsWNDpd8HsIbHhviWix/i9vQB5j2qzdXG2lzNvKeBekDKoWPDkxYSMTa0RC8mYmzYQVDEkvKCIiABa4wRsEaZaRLG2kyoMY3wHFhyxDw2VLjplZbknfPmYWUafZJBn2TRJznYVduzsUF+n/2uKeECURzLTY9XWBzLTU9UWBzLTW/241imIo7lpiuVF8dy0zPeuBw8De0vTr+9WLI3OQ1n/UwROo6PYykqOci1qJoLQTwza0OOeU1wgH7Th6wOvVBJQRl3GWrvLviaOuRdlRSUsd39oIztJoMybvpw2cERlCKIUHyTM8Q3OUU+vc1Qe7fB1/AqZ9qH01xDTN8NlooXxOuXLDs8X6xGI1YiqraNIMv1h8XeS4OH9sFpdGgfNX8cfp15yAzFgHcaYsA7FWZFAHmnM0eZKwtNtAd5/z7x+7GA/kLTo7PQBCjC5QwRLgdfw2/cGDeJoYlpbXjt+qYB2n70SU9MeJJW2hZ3X8Lvii3X2nZwzpLANVXckKaia/txKdyga1R6f9DFu64caPypuesqgc5jCnaNyjcNaqRRpgipA5AnzEM2CO94venH1l7n36i6FHGNKU2qLUFJqr2Thto7CV9ThzwpXYJSpEg6WoJ2iZeU5Bq9vU7KwV5njd5eBz9h2YwGpB6dYLSOo7wzc1BhDRsbFDgzB9VWsWvvcdwfK3TUW9z/M7JTCWOdSjDvUW2eNtbmaeY9DdTT8gOhITpV3KAcjA326dliY0MOjLE+PWMMX3s38+sJJwm36UxrriT3FNtcOzGy2V5jw8yrEwN77khL63r+5SH4oXhrWOI2gaVQbM3tSkDFJlBbAQywPGNBdNYJxcw+JyNM/3ivOXj+SrTNEUGbI5QvHqCmXUHNuoJ6A8/Dw0paSkSUYarRQeZFO9GGKUYecZ+RRwhGHjbFyCM0I2OfXaanWqOw1dhIkDk/Cmp1dVhR8Y341BWQyT4nrECSh3uv1GKNy4pHhoRwlwObcQX1VTTLDRuz0WzqT2vBnWJOHpwkTtah7+AU6KlBQk8Ns3OJudRexkW+G0JDHYtNu1apsxQvEtJalIdKs0Ez+4jMnDUmYkPORewX2aYdkovYiDkRGw6yAufM/O4mA6J4Qy9Z+rmJcPRd2zxZezPcy5EkYttTwM8hut6p46z1wl3U1ZE5jUSIgJoXJKCToKCZPR/Q5/iQ+wkKIZ0EhRrYNeo0NagRX1+jdkDbQMXeHzOU3HdMYQgCyGNS/RAyH/iBOIGCDyDvHxO/H6rSdwE9oOMCsi746XhKLO7nedFKmQv8SOmIdMr1RSzlvkindEQaWhIp2jnwanN2BkC9zhXUkCuoN1BVOAOGTqQCBO+mKAts0H0LbBDn3pQpA2yQVpXq7uCUM/NrkDG/hoI6HU3h1he7GSFr2JvhI7bCN95ewlB7CYJvkyCsa3wxGEWbldWzvEOwjKQKG65Y0E+CFYcgAxmiF6HMjYAhc4NNvJrk9rSytKtKBBSlAXd81Jryd0/+xNnOZ0B7yA2wVEGuGtet+hr3C3LVkAHfeKnFGrL+fFCjbkKYoF4Yrv4Et7QZ4pY2Z1Z9m3TVoafZZJRdcIeeVV/jwKrf4cyq/zM0RazS9sxB9/bMwfL3zNXm98zXUdki/YayRfoVrG4BZL8T6Qq6s2cOnXFfus44lS6ChAFDJGRubMGkuWS6fRZtFjHdgowhIbgXt+NzFvhfgjwRomZCzpC05OBrRHsBQ+0xl2FjkOg0EhZwTaHji/J7K2quVXVEUNGkw1onO7KIqPwGMddhaHurd0ReqSHqpPcxUTg4GAiRRRpz0vtjU9r7Gth7vMhluUkuDkLHiSSXqHtJLlFkmdEsXluLZEC4Xbx2b+UUr40Tk8v7SEC1ljiVj1UrK15byxavjcIm7LgxSDCyeC2EQYrX1mL8ifc1ZjvQ/iUI4V7F2bg5KINZEclplBVxnfkUhrR5yIx5yKx5yLAxyPFnR31AH9AHnBpAquRZgjzpeJjaV+QM+S9z8LXJbg9zZVvb8w1L0WaRfaWFsV9YS3DDqyzoFZQ3IkrNBXqqhd3rCb4de7PwYs8NTQo1DkNlxv0lK+xiz7AkhVHdIRSW7pyTZI1D5oYmnj7JwoabQI1DbZakqV/kyo0K1E+4R/2wE+qHy6R+iKR+RMMXE5JSP0FSn7kPRCidO+XUx/yFEQn1Q4UNexSoH3aP+iEp9RP02ZCGwgDTQiWr12h4KCNS6odJ6kdgs0LpvNW57NfIZf+OqdX8ctmPOJH9hIhQYFqokItqDc0v95lGVKvbhoQlEDecoKrbRsnVLA7BMY5+QaKShHxTU9jQJ68kH6Ip51Il+RhyMJUwW0Q7oea1C4l89zKeqSF5RnLRX5E2Z4lK8pDj9EM6wq67qcPuh3SEdUI6akkRq3W2aIRcEwPLby0+bXW5kryDU/5usnSk9Jw0QeSuO7QNQtTmiy8kkoDq2ElVEzxKj1bCqcKGN0yt4Z6SLt5kZKdWCCoMHk7S+VZhDcFPlmm8M/tJofE+pLiAp5zdUhYmNyR46lAYODm4sgxwrpGqDEPEKjHVGWxDk5TBVkZVhrHXaeW/qZY6qHUFlciiNlyXwU/G9JMxzSZj+uVjylRUr3dHpQy5AhuYLEXlF5DxC8iUWUCG4qkaYyxVw7xHtdlsrM1mVS7WDpchqzs0C/ScyaZGwAGhfR4vq9BOtzhMDfMetvkqHVd+EW8Z2WOm6O3L2OXCRisfacPfUblvEuYS8fsIBDKlt1NT3qbaNt/SEoxgCDb5G99hEQD1/6fEVYyBLhK6D749gbzxWXKmcsZmKse+JygSu8EqErvh38hOxY11Kq7MMieNtXlShWVEqCcdLYUulYsdG9GsFzt2edILxgLh3IyvRVadzI338hwwqiIKowIOGFUUhVFhxdiNVsXYDT8jO5Uw1qkE8x7V5mljbZ5m3tNAVagYe4UOGzEpCqO6FWOvTHrFWKjKNguK9XGycBf30pPUFuQp3UtP9bcgTxFbkCdNbUGeEnDwkwjbfGkZk8nQffFYf9/xPb2PXug6c6K75/xAX0//OD/g2Q1jVxEWeSqqk98QHUFbSI+ondSMPU0NXbCleQp+i6I+Q6Ee41Gfht+iqM9SqPfxqM/Ab4m6eE9yd00UP7Vk4z37zzJcB1GfvEYczpv+JKS0LN+iOCom4YL5+iniu6eI73DKPHntK+aeubGr7Lj5TcHVwsaFloqYz6mIUUrJXOGVzB38jDE9RA4gSE30tPvOkKcnQxM9TWsi+5w8w/SP38GyEqAjrc9QG+NnGBZ1BfaqK7ACxx7DemijVwWNXqUaZXQAR7erBlfVkOFV9epkraoaInDVmWPvKcax93RQq6tXiVWQ1dGsfbCAsQ+KlsGtPf19J37euYO9D13svTBwhTIM0EdP4Y+exh89o5eeeG1lYN4gjJgnEfv36GWySS29/qz7svDsZOj1Z/X0+tuZ/vHaBT5/C9ro2wWNvp1SWhB20B3YZ1yBvYE2/p40t5g8ybzIr8eVy8vPTBIv69D3GWd6/VlGr789qNXVZxT1+rOUobtJYOhCmJKtSx3FjpIF9K/g23LWAc07uSBgyc8l9DZfsF7o0SqZqBlz4+DOtmIT7pdMpIsfUjM7JK2zb+yUGMAGXUFNk2eXu4wF5uxSmh8B6i5HMYQpl1x/gxcn4bKoi5o3d1onO0Ixf7j8qqcziFLBdF3OKpK9IvhxCHKKWeIxUTmfseIsvNIKwvwucdjCFfQpAd+Hxtemyoyv/WPiOoTL8gDbUfpMWcMxPsZGk/AK4gqj7dSz7koHYd34rRKXXZxGhVslRpyFx40KRwt5g5tFJqFBozsphUkccm8SFWK9LzuK9RYzMM2JbOCRxgoA4wjRhZMM+LaFqArUzXBh41NUzHcVyR8RBr6kxXWSXG2MAp6AlkvVg+3KGOjxXqzdmXy7VOxML3wNgxx3uzPe6M3QxuYne+a1+BRuJavS4/pTOnXtg7rY2nZukMiICaiV5Fy3Fu/Y8ds/883aT73mvzAy0BVh1TN8egE72PtarTeJvURmKvMkyM+ipbVA4xOZi8myq6r2as0iaIWTEPD0hDPSUJC4lqQxJyw8wICUFQd+uxUFpx/hRpmGlwsbPyEv9Shao2rKtrFS5PwVrS38rG+UP6FkjWnBUEcLGz9prSd/Q8Z2iGL5mIvD8HMRzEK/QpKheKL4aWCho/bNaJn2TRdhJF6VGzhP0kcRegcfcG54C+cpNaYXIF+RWzijtIVzhRVMISv9NWXhMH6Pq5JEgMuAKZ1Ylt2UM+yyPDY27aSiRwbh83Tp54Bg5jKFjV+Rq5ssUWUC5bIc/1EW9ssu0BnwKfcwC2cTk8ZsmcIYwYUxJ5fFQSeJv7LE0hCdO5YhQ39zRLZleoIP132I1PpxY6tmXFGBcD4PGJf4JmJt29r3MLFrw78cfUGmdHKIzvkPy3BrpJevx43FJhah4Iv8CYBlvhvILxgFQUZY2IyRhsBcd+M5E1Zewcaf6q/3IwwvCJf8TUsmGtg0g47DuIKzobVnXC/+9rWitq8UNtVYbQfLjZLcVE9bS6NUA5vUjnyKbQgdm5ui1huLkDfiAk/vqEFP7ygZMS9wBI+xx0YoaTHWGqXX2GvUzagYkyNlrl9Rwpi8Il/ArlK2W5WmDQpnhz6kvqzlAh2VG5OXaWOSdSoLt2CbGkljclBiKg8xLZTEQWOcOdSYzInA1zWT+ipuLGwszryng8qKI8pMNO1s2yOedk8WNuXl1cnGnsREGToyEfxma9GvdYI/Pre3IOhrFDb/T9HpNBpha08xXSOjDZ6mV8RRjUBg+N1b1WJtcfCfDwsdEu2pf9rpKv+UbJUX5beNPVXYtNlSB/vKDxIOaG3wH2cacsolI/SU4cBPWSLBTtqTMpEuztoea9a2a+Oz4bNi/F2QKuQp49tU33wteFFHTY6gip8xYq4CU5g6uhbtXOKFTYcUyjQVYcoyR2aO4uZIXG6NDDlScuKiItbvKO0a6iaT4tBVlL4Ig7vmAQCOE7Htn3S8CtY0HMQnD49LKP1+QiQNQ4VNxxSWoGFiyHq1W9iIJLKUyoiE1aeCk0sRTCHNYUtn6zJ9lB8X8DI7c2SG57AjluvmJZkh3zg/f5GjFCNHFBmzTl1lVS6en296hYJROULHBzskcxVdxeCyfmzSUEl/iDfor1ZYHXJl7lUThEiNOIrsgNntTkM7hqShHZJcfe5xlmE0dVd5FSpxVZAIEwL3RvRcwMkyKvD3ZyiOZO5/Ifz6KY1eZohdKHOFDdFen6H2+uBrNnJkTDpCmb4TZyB9GpTLqg0sax9Y1uTAmL5LLxDf9A5UUmQXiIt0Wq6w6WMW9DupkqgZx6zdgFOEO9CwZPsYql4zZarXUOUdZWVpT1kSw00SLN3t2vpETGBGOoFZUr1ozHoWzg/piBQE7jXA1tUnV2nlSVorT1JnPCYq7RKW5bX4RMK0zLi2QyDNGYVgX4O1MIdplmGKKFHrD34QkiMiPPEt6SCiudnTXYFBOljY9GmFHemQI26T+AtydMm8YYoZs1NiO1cqs12TMMo2dsRtVDxxTm5MJK2l2VqPga6TxjePf3RCYQ3Linag/PeiI4dsYdPfEbcnwMAYcf4ylSSXcz3jM+d+ilxOK0NukFSAap4I7XLPgwpLsRNU6+TfjZ4+RkdhmdmBpNR2IJXFudlJ4VwtO9H6SiNNOcdkKQ8GtSL5LBVM7JhyGkwiv/cgp3rvQVa8B/wfuQ8vSSj3rFa/RIuDsFc/VVPuyK0HyUoVkaR7IpL0lbvLyj1pSLknfeWOca5HlXtStIsR0O3dR1oUgvg0WEI3F3yBPk8Um3CdKST0LbuKRSNgkfcePnuw50TfI1eFa/NrxHqB3f2apnCqcimccpHCqcmjcFKTwoSAH9FwGiaJVeAIfA23X8o/ZGD6jkWcWIcMm5t0Dxni9CHDZiu4a3MrN69x2E1i0htQr1GyTK9RoJxU+qyTnQqdAVQlCbah/NkpjVAcJX+2FYqz9gf4aA5dPGaztt4EEXCFwH2Yk252xoaIXUU3gyQK4tm81aL2P+iyOaMs3iRm9R3OPLLZsj2yghghNqqFiiBKuleoYoEHQ4RycsG1FJ4Cn4848mZIhiCLCbvsxoHDZpU7qK8Fg7jGMoPOWGaw7PnO6UeVJZkOqK8FSkFlObBcE4If1Wg3R5gQUVqzpgqb++Th/9j9qWC9OSoG75er1ZyjyEvhiT7oGHWPziDnlwKfThw6CMz5l58UxeBn9D8iuN++CIqleBBZAwcsUi0itxuOtjI5aiujbdPrb2WI2oM5U1uZIVp4yr1ybb6jzSp7uSKkJ+ZOKJn8r9EVWXhEeUkss2+w0C/Jzwxf1LJKrZpIa7822bE6lEKgoyziEhMMNfzweNXS7yfE8bmb36qSX1luGPiHK9HGE8asMoRTZ8pSGAC+Lxmkg6mHGONPaFyRtcjirIFF2Bo6A8ui0pYVSFtRTRDsH9VoN6VmaqTMWxLvdlTVI1r2nr6808Dx1u+GiA5O3e5mKC/av/46ceoGY3jEp24mHdVOqmhPvaOaDzti1CwV6JnTWpSGqPMsphKKQVTpyVs5PX2MDhozs4/Jwtd0LNep5d7c5HCvM3tXpwD8IHP6NhR0ZL51U2e016YR2zf93FUp1MFZ/KPSWiPoyl0qgWc4NJsAzjAnMcQ4JSlJ18pAxcrzyww588tI/J6S+ugp2pIaJC2pnHv7ljFimia84uOA95ceJohZ4p3wCkbriJozXZz+VzQIvwy86ShLdFv241fwUav43IcRf4Z1Ee3mr5F7rDSZMpgh/C0jfBlH8OUJZHb+2erXt8iWc1S8zjXX/TjKt6n3ToDX8IEM20pOSOyTNNsPMsuY8FbZGh2kG1VPXMhyd/wxF1kL7/hjaDSuoLmX4D5yWFpqwz6p7C6Umhe2RAfLHurtsYfYZDj5MJ3boJX8nEBVXoLp3ITOO0QKJyl+BNcO0SMacbYedZMiOQQ0GpH7lsaHlGVHlIE/0dxMTsWfVVga6OjQBAQT7Qg7q50fmIJRnRGD1yoclwo4b0fZjryMLF3KphHAUHIyfZBDaRsneHyQtU1PKElGhtUgrPNftYNZ2BS1BORw1nSmHDKWbthExX4klC3oJPyJRulQcoRyVJqUoypajtKFztlyOUqjSbykHBXB58nlSECjTqkY0QnvfMBOGnKVXYbAMNIyGUqjdI1T0oCJUBL/KMmKUFpJ7mzdS8GWqKva0xqhY3r5pms+owEdl+4MUnJW3C10sHaulrOioJBzTMqKAv5NU6xI1kJIQ+pg++W0e/tll1KlaSd0nDS1UyTjZohQhBIP/irWsSjJ3shHDQgPRqlww4ZCZ6ecA2N8f+RXZ8RFbAt6ZWeyBjhb9ofgywjKgbEyOTBeTqWxBKE3qjSUTQLSnHK3NJB37MQJLWjV1l1zkZto8BpaF7CKYE9Bn8mrNUB77Ybaa1cwTwSQ7VJqCa4UCYCPDN68V7Uceb9b/H5wpv69e8t17t2bOcEynbe7eKlQlf4xQBA/BQgYOgXQIPtLzJ3YW3rOXbjY34tfLV2FUfOy8MJqhDT4NdvXIVy0E+UuDGmm3vXaLxOLeQWZ3BAxufzBBXPVkN1ghnpGZjBXsRZpADZhxw1CgjEjJHoQRHxlVRh/YhMUQJb1OkYZcgt7oNB5yopbq0bB+c2d3NAIqnnBRb0KFjr75Ru7oPAmhTqGQ0TQVrHUzrMaslwnHXCI3MvWMUYR169QofMCESUQ4lkGZdogu/dqhSioeAkIDLqOfFatOmIRkasLnY/KiVzF90x+PU21GuuFxL16NewVVNsfKant42fPPTqut4eHr6prVrggIU/qiXUA1btXVfSuuhaeEJDXkopJxogBlBFt6+HHShN7ore/d6DXmtpRB1MbwKdpVGOafPsF2i/43T5B3rQOOTOtFcylC5a5JDCWFQwasRk906lBg1nBQmlKz8PmIiIPvBPVc4gUOq0zk07+YqUIs5VzUkxQfgKxTVhDqPOKo8wC+S1fksyCjCSERb0rmXJDU+HRhjgytfPtVGRqFE4LlZyYo+ieog/StE+exiflDvG507sVwqIj7l1hOFWlJjN0BB4aZBdxwnZZVa6LiCXz/RTTMeGz1JlVBKgd9dEp+d4t6DXXlaEuE2J1+VGr31/QU5dJBXWp4N3fJvbu/54j775cXZbl3VfviLyYUka1mFJaeGtk5yeNqMo0RfMYRfO4/uEi4U0vHi3++SSoSqJwY1qqKoWsU+7BJhVEk9JQJHKGS6kyXEQskf+HYrgYnBMqEjIC1I1barL16+WxySPIFe02h9L4X2eUGrHmbeKDQufXuF2KtZNRu5z9y3/6w799aXfrg/yFexOs98LB3oGL58+U29DsT/T+1eavfOcrrjf0y63BxOAd+3a63tBf1fzfH3z2z04Ou97Qt8Ld26o+8tb5rjf04bZVN0VvX/K4vKFxzT3+5+qSLhVyds0LvFeouqTb7HxdU+j8T0uOf8hq61CpqfE3uqqQN7RLzgTFH9TaPwiUPmBariu9wPy9HtP943+OCKbHwqrlpidS6JppI0C49NmEdrS3HRa3XWcfXB225kwA2j+oL30wQbMfY4wY0vScGOLrH4aGvrDti2/5gusC9PQP9re9/rpF33O9oeiffvzA1//73BLXG7r6qfzO793yr/Ncb+gNW/4k/41//vBj8obEKgYV0hArjGFESGslWqBOIKQWVg0npHWFrjmYlgzbhbS29Iqw7bB9cGGJkHIqq5YT0q6MIcK96Rs/++JbX3n9v7nOIaHg7GcaP3jfXtcben/9X9/8+78Wvkfa0P8PHONjw6aCCgA=",
      "custom_attributes": [
        "abi_utility"
      ],
      "debug_symbols": "VL3Lsms7r6T3LqftxiRBEKBfxQ2HrxUVUVEV4UurXt5LyAFkunP2l+dfmx/HkJBT0uLW/O//8b//H//r//uf/uf//F//z//2f//H//g//ff/+F//r//8X/7Lf/5P//N/+W//2//y//zn//Zf//1///t//P3+j//7v/Y//Iev//gf/d8/Nv5h+MfBPxz/uPhH4B+Jf7z6x/3DP7DKxSoXq1yscrHKxSoXq1yscrFKYJXAKoFVAqsEVgmsElglsEpglcAqiVUSqyRWSaySWCWxSmKVxCqJVRKrPKzysMrDKg+rPKzysMrDKg+rPKzysMr6+/v+ub5/7u+f9v3zfP/075/3+2d8/8zvn99661tvfeutb731rbe+9da33vrWW99661tvfevtb739rbe/9fa33v7W2996+1tvf+vtb739rWffevatZ9969q1n33r2rWffevatZ9969q13vvXOt9751jvfeudb73zrnW+98613vvXOt55/633P9/U94df3jF/fU359z/n1PenX96xf39N+fc/79T3x1/fMX7+nfvz+ad8/z/dP//75b721fhAN2fBvyXX+wW8MVv5gNewGazgN3vBv5V3/ejRkw/vgNxr7t83fcAB2w2/l+4PT4A3/Vrb616MhG94Hv3EBrIbdYA2nwRt65dcrv175N0D2z75/EwRYDbvBGk6DN9yGaMiGXnn1yqtXXr3y6pVXr/wbKHs/uA3RkA3vg99UAVbDbrCG09Ar715598q7V969svXK1itbr2y9svXK1itbr2y9svXK1iufXvn0yqdXPr3y6ZVPr3x65dMrn1759MreK3uv7L2y98reK3uv7L2y98reK3uvfHvl2yvfXvn2yrdXvr3y7ZVvr3x75dsrR68cvXL0ytErR68cvXL0ytErR68cvXL2ytkrZ6+cvXL2ytkrZ6+cvXL2ytkrv1759cqvV3698uuVX6/8euXXK79e+X0r299fw2rYDdZwGrzhNkRDNvTKvxk86werYTdYw2nwhtsQDdnwPti98u6Vd6+8e+XdK+9eeffKu1fevfLula1Xtl7ZemXrla1Xtl7ZemXrla1Xtl759MqnVz698umVT698euXTK59e+fTKp1f2Xtl7Ze+VvVf2Xtl7Ze+VvVf2Xtl75dsr31759sq3V7698u2Vb698e+XbK99eOXrl6JWjV45eOXrl6JWj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",
      "is_unconstrained": true,
      "name": "sync_state"
    }
  ],
  "name": "Vault",
  "noir_version": "1.0.0-beta.18+190931435915a6ef908d9be090036d98356237b3",
  "outputs": {
    "globals": {
      "storage": [
        {
          "fields": [
            {
              "name": "contract_name",
              "value": {
                "kind": "string",
                "value": "Token"
              }
            },
            {
              "name": "fields",
              "value": {
                "fields": [
                  {
                    "name": "name",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000001"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "symbol",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000003"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "decimals",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000005"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "private_balances",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000007"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "total_supply",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000008"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "public_balances",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000009"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "minter",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "000000000000000000000000000000000000000000000000000000000000000a"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  }
                ],
                "kind": "struct"
              }
            }
          ],
          "kind": "struct"
        },
        {
          "fields": [
            {
              "name": "contract_name",
              "value": {
                "kind": "string",
                "value": "Vault"
              }
            },
            {
              "name": "fields",
              "value": {
                "fields": [
                  {
                    "name": "admin",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000001"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "asset",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000003"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "shares",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000005"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  },
                  {
                    "name": "vault_offset",
                    "value": {
                      "fields": [
                        {
                          "name": "slot",
                          "value": {
                            "kind": "integer",
                            "sign": false,
                            "value": "0000000000000000000000000000000000000000000000000000000000000007"
                          }
                        }
                      ],
                      "kind": "struct"
                    }
                  }
                ],
                "kind": "struct"
              }
            }
          ],
          "kind": "struct"
        }
      ]
    },
    "structs": {
      "functions": [
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [],
                "kind": "struct",
                "path": "Vault::admin_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "fields": [
                  {
                    "name": "inner",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::admin_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [],
                "kind": "struct",
                "path": "Vault::asset_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "fields": [
                  {
                    "name": "inner",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::asset_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_admin",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_asset",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_vault_offset",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::constructor_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::constructor_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::convert_to_assets_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::convert_to_assets_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::convert_to_shares_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::convert_to_shares_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_private_to_private_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_private_to_private_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_private_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_private_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_private_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_private_to_public_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_public_to_private_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_public_to_private_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_public_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_public_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::deposit_public_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::deposit_public_to_public_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [],
                "kind": "struct",
                "path": "Vault::get_vault_offset_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::get_vault_offset_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::issue_private_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::issue_private_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::issue_private_to_public_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::issue_private_to_public_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::issue_public_to_private_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::issue_public_to_private_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::issue_public_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::issue_public_to_public_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "__receiver",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::max_deposit_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::max_deposit_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "__receiver",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::max_issue_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::max_issue_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_owner",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::max_redeem_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::max_redeem_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_owner",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::max_withdraw_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::max_withdraw_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "messages",
                    "type": {
                      "fields": [
                        {
                          "name": "storage",
                          "type": {
                            "kind": "array",
                            "length": 16,
                            "type": {
                              "fields": [
                                {
                                  "name": "ciphertext",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "storage",
                                        "type": {
                                          "kind": "array",
                                          "length": 15,
                                          "type": {
                                            "kind": "field"
                                          }
                                        }
                                      },
                                      {
                                        "name": "len",
                                        "type": {
                                          "kind": "integer",
                                          "sign": "unsigned",
                                          "width": 32
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "std::collections::bounded_vec::BoundedVec"
                                  }
                                },
                                {
                                  "name": "recipient",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "inner",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                  }
                                },
                                {
                                  "name": "tx_hash",
                                  "type": {
                                    "fields": [
                                      {
                                        "name": "_is_some",
                                        "type": {
                                          "kind": "boolean"
                                        }
                                      },
                                      {
                                        "name": "_value",
                                        "type": {
                                          "kind": "field"
                                        }
                                      }
                                    ],
                                    "kind": "struct",
                                    "path": "std::option::Option"
                                  }
                                },
                                {
                                  "name": "anchor_block_timestamp",
                                  "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                  }
                                }
                              ],
                              "kind": "struct",
                              "path": "aztec::messages::processing::offchain::OffchainMessage"
                            }
                          }
                        },
                        {
                          "name": "len",
                          "type": {
                            "kind": "integer",
                            "sign": "unsigned",
                            "width": 32
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "std::collections::bounded_vec::BoundedVec"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::offchain_receive_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::offchain_receive_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::preview_deposit_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::preview_deposit_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::preview_issue_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::preview_issue_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::preview_redeem_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::preview_redeem_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::preview_withdraw_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::preview_withdraw_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::redeem_private_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::redeem_private_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::redeem_private_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::redeem_private_to_public_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::redeem_public_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::redeem_public_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::redeem_public_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::redeem_public_to_public_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_shares",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::set_shares_token_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::set_shares_token_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_shares",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_initial_deposit",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_depositor",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::set_shares_token_with_initial_deposit_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::set_shares_token_with_initial_deposit_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_deposit_private_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_deposit_private_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_deposit_private_to_private_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_deposit_private_to_private_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_deposit_private_to_public_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_deposit_private_to_public_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_deposit_public_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_deposit_public_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_deposit_public_to_private_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_deposit_public_to_private_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_asset_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_issue_private_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_issue_private_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_asset_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_issue_private_to_public_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_issue_private_to_public_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_issue_public_to_private_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_issue_public_to_private_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_asset_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_redeem_private_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_redeem_private_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_redeem_private_to_public_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_redeem_private_to_public_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_asset_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_min_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_redeem_public_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_redeem_public_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_withdraw_private_to_private_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_withdraw_private_to_private_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_withdraw_private_to_private_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_withdraw_private_to_private_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_commitment",
                    "type": {
                      "kind": "field"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_withdraw_private_to_public_exact_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_withdraw_private_to_public_exact_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::settle_withdraw_public_to_private_internal_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::settle_withdraw_public_to_private_internal_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [],
                "kind": "struct",
                "path": "Vault::shares_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "fields": [
                  {
                    "name": "inner",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::shares_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "scope",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::sync_state_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::sync_state_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [],
                "kind": "struct",
                "path": "Vault::total_assets_parameters"
              }
            },
            {
              "name": "return_type",
              "type": {
                "kind": "integer",
                "sign": "unsigned",
                "width": 128
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::total_assets_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::withdraw_private_to_private_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::withdraw_private_to_private_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::withdraw_private_to_private_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::withdraw_private_to_private_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_max_shares",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::withdraw_private_to_public_exact_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::withdraw_private_to_public_exact_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::withdraw_public_to_private_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::withdraw_public_to_private_abi"
        },
        {
          "fields": [
            {
              "name": "parameters",
              "type": {
                "fields": [
                  {
                    "name": "_from",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_to",
                    "type": {
                      "fields": [
                        {
                          "name": "inner",
                          "type": {
                            "kind": "field"
                          }
                        }
                      ],
                      "kind": "struct",
                      "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                    }
                  },
                  {
                    "name": "_assets",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 128
                    }
                  },
                  {
                    "name": "_nonce",
                    "type": {
                      "kind": "field"
                    }
                  }
                ],
                "kind": "struct",
                "path": "Vault::withdraw_public_to_public_parameters"
              }
            }
          ],
          "kind": "struct",
          "path": "Vault::withdraw_public_to_public_abi"
        }
      ]
    }
  },
  "transpiled": true
}
