diff --git a/.github/benchmark_projects.yml b/.github/benchmark_projects.yml index df00c3f8cec..f7f86db4822 100644 --- a/.github/benchmark_projects.yml +++ b/.github/benchmark_projects.yml @@ -56,7 +56,7 @@ projects: cannot_execute: true num_runs: 5 timeout: 60 - compilation-timeout: 25 + compilation-timeout: 30 compilation-memory-limit: 1500 rollup-block-root-single-tx: repo: AztecProtocol/aztec-packages diff --git a/Cargo.lock b/Cargo.lock index 2d5bebb0518..19ce4bc5fd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3171,6 +3171,7 @@ name = "nargo" version = "1.0.0-beta.11" dependencies = [ "acvm", + "brillig", "fm", "iter-extended", "jsonrpsee", diff --git a/acvm-repo/acvm/src/compiler/mod.rs b/acvm-repo/acvm/src/compiler/mod.rs index 8f4c9887f33..0e0963645aa 100644 --- a/acvm-repo/acvm/src/compiler/mod.rs +++ b/acvm-repo/acvm/src/compiler/mod.rs @@ -1,8 +1,11 @@ -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use acir::{ AcirField, - circuit::{AcirOpcodeLocation, AssertionPayload, Circuit, ExpressionWidth, OpcodeLocation}, + circuit::{ + AcirOpcodeLocation, AssertionPayload, Circuit, ExpressionWidth, OpcodeLocation, + brillig::BrilligFunctionId, + }, }; // The various passes that we can use over ACIR @@ -92,13 +95,15 @@ fn transform_assert_messages( pub fn compile( acir: Circuit, expression_width: ExpressionWidth, + brillig_side_effects: &BTreeMap, ) -> (Circuit, AcirTransformationMap) { let acir_opcode_positions = (0..acir.opcodes.len()).collect::>(); - let (acir, acir_opcode_positions) = optimize_internal(acir, acir_opcode_positions); + let (acir, acir_opcode_positions) = + optimize_internal(acir, acir_opcode_positions, brillig_side_effects); let (mut acir, acir_opcode_positions) = - transform_internal(acir, expression_width, acir_opcode_positions); + transform_internal(acir, expression_width, acir_opcode_positions, brillig_side_effects); let transformation_map = AcirTransformationMap::new(&acir_opcode_positions); acir.assert_messages = transform_assert_messages(acir.assert_messages, &transformation_map); diff --git a/acvm-repo/acvm/src/compiler/optimizers/mod.rs b/acvm-repo/acvm/src/compiler/optimizers/mod.rs index 63518be236a..fbd79dd2354 100644 --- a/acvm-repo/acvm/src/compiler/optimizers/mod.rs +++ b/acvm-repo/acvm/src/compiler/optimizers/mod.rs @@ -1,6 +1,8 @@ +use std::collections::BTreeMap; + use acir::{ AcirField, - circuit::{Circuit, Opcode}, + circuit::{Circuit, Opcode, brillig::BrilligFunctionId}, }; mod general; @@ -18,12 +20,16 @@ use self::unused_memory::UnusedMemoryOptimizer; use super::{AcirTransformationMap, transform_assert_messages}; /// Applies backend independent optimizations to a [`Circuit`]. -pub fn optimize(acir: Circuit) -> (Circuit, AcirTransformationMap) { +pub fn optimize( + acir: Circuit, + brillig_side_effects: &BTreeMap, +) -> (Circuit, AcirTransformationMap) { // Track original acir opcode positions throughout the transformation passes of the compilation // by applying the modifications done to the circuit opcodes and also to the opcode_positions (delete and insert) let acir_opcode_positions = (0..acir.opcodes.len()).collect(); - let (mut acir, new_opcode_positions) = optimize_internal(acir, acir_opcode_positions); + let (mut acir, new_opcode_positions) = + optimize_internal(acir, acir_opcode_positions, brillig_side_effects); let transformation_map = AcirTransformationMap::new(&new_opcode_positions); @@ -39,6 +45,7 @@ pub fn optimize(acir: Circuit) -> (Circuit, AcirTransformati pub(super) fn optimize_internal( acir: Circuit, acir_opcode_positions: Vec, + brillig_side_effects: &BTreeMap, ) -> (Circuit, Vec) { if acir.opcodes.len() == 1 && matches!(acir.opcodes[0], Opcode::BrilligCall { .. }) { info!("Program is fully unconstrained, skipping optimization pass"); @@ -70,7 +77,7 @@ pub(super) fn optimize_internal( // ConstantBackpropagationOptimizer::backpropagate_constants(acir, acir_opcode_positions); // Range optimization pass - let range_optimizer = RangeOptimizer::new(acir); + let range_optimizer = RangeOptimizer::new(acir, brillig_side_effects); let (acir, acir_opcode_positions) = range_optimizer.replace_redundant_ranges(acir_opcode_positions); diff --git a/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs b/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs index 73a3aaab7e1..e256a03d478 100644 --- a/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs +++ b/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs @@ -50,44 +50,62 @@ //! it would result in a read past the end of the array, which is invalid. We can then remove the explicit //! range constraint on `index` as the usage as an array index more tightly constrains its value. //! +//! # Side effects +//! +//! The pass will keep range constraints where, should the constraint have failed, removing it +//! would allow potentially side effecting Brillig calls to be executed, before another constraint +//! further down the line would have stopped the circuit. +//! //! [BlackBoxFunc::Range]: acir::circuit::black_box_functions::BlackBoxFunc::RANGE use acir::{ AcirField, circuit::{ Circuit, Opcode, + brillig::BrilligFunctionId, opcodes::{BlackBoxFuncCall, BlockId, ConstantOrWitnessEnum, MemOp}, }, native_types::Witness, }; -use std::collections::{BTreeMap, HashMap, HashSet}; +use std::collections::{BTreeMap, BTreeSet, HashMap}; + +/// Information gathered about witnesses which are subject to range constraints. +struct RangeInfo { + /// Opcode positions at which stricter bit size information becomes available. + switch_points: BTreeSet, + /// Strictest constraint on bit size so far. + num_bits: u32, + /// Indicate whether the bit size comes from an assertion, in which case we + /// can save an equivalent range constraint. + is_implied: bool, +} -pub(crate) struct RangeOptimizer { - /// Maps witnesses to their lowest known bit sizes. - lists: BTreeMap, +pub(crate) struct RangeOptimizer<'a, F: AcirField> { + /// Maps witnesses to their bit size switch points. + infos: BTreeMap, + /// The next potential side effect for each opcode. + brillig_side_effects: &'a BTreeMap, circuit: Circuit, } -impl RangeOptimizer { +impl<'a, F: AcirField> RangeOptimizer<'a, F> { /// Creates a new `RangeOptimizer` by collecting all known range /// constraints from `Circuit`. - pub(crate) fn new(circuit: Circuit) -> Self { - let range_list = Self::collect_ranges(&circuit); - Self { circuit, lists: range_list } + pub(crate) fn new( + circuit: Circuit, + brillig_side_effects: &'a BTreeMap, + ) -> Self { + let infos = Self::collect_ranges(&circuit); + Self { circuit, infos, brillig_side_effects } } - /// Stores the lowest bit range, that a witness - /// has been constrained to be. - /// For example, if we constrain a witness `x` to be - /// both 32 bits and 16 bits. This function will - /// only store the fact that we have constrained it to - /// be 16 bits. - fn collect_ranges(circuit: &Circuit) -> BTreeMap { - let mut witness_to_bit_sizes: BTreeMap = BTreeMap::new(); + /// Collect range information about witnesses. + fn collect_ranges(circuit: &Circuit) -> BTreeMap { + let mut infos: BTreeMap = BTreeMap::new(); let mut memory_block_lengths_bit_size: HashMap = HashMap::new(); - for opcode in &circuit.opcodes { - let Some((witness, num_bits)) = (match opcode { + for (idx, opcode) in circuit.opcodes.iter().enumerate() { + let Some((witness, num_bits, is_implied)) = (match opcode { Opcode::AssertZero(expr) => { // If the opcode is constraining a witness to be equal to a value then it can be considered // as a range opcode for the number of bits required to hold that value. @@ -97,12 +115,10 @@ impl RangeOptimizer { let witness_value = -constant / k; if witness_value.is_zero() { - Some((witness, 0)) + Some((witness, 0, true)) } else { - // We subtract off 1 bit from the implied witness value to give the weakest range constraint - // which would be stricter than the constraint imposed by this opcode. - let implied_range_constraint_bits = witness_value.num_bits() - 1; - Some((witness, implied_range_constraint_bits)) + let implied_range_constraint_bits = witness_value.num_bits(); + Some((witness, implied_range_constraint_bits, true)) } } else { None @@ -111,7 +127,7 @@ impl RangeOptimizer { Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { input }) => { if let ConstantOrWitnessEnum::Witness(witness) = input.input() { - Some((witness, input.num_bits())) + Some((witness, input.num_bits(), false)) } else { None } @@ -130,6 +146,7 @@ impl RangeOptimizer { *memory_block_lengths_bit_size .get(block_id) .expect("memory must be initialized before any reads/writes"), + true, ) }) } @@ -141,83 +158,101 @@ impl RangeOptimizer { // Check if the witness has already been recorded and if the witness // size is more than the current one, we replace it - witness_to_bit_sizes + infos .entry(witness) - .and_modify(|old_range_bits| { - *old_range_bits = std::cmp::min(*old_range_bits, num_bits); + .and_modify(|info| { + if num_bits < info.num_bits + || num_bits == info.num_bits && is_implied && !info.is_implied + { + info.switch_points.insert(idx); + info.num_bits = num_bits; + info.is_implied = is_implied; + } }) - .or_insert(num_bits); + .or_insert_with(|| RangeInfo { + num_bits, + is_implied, + switch_points: BTreeSet::from_iter(std::iter::once(idx)), + }); } - witness_to_bit_sizes + infos } /// Returns a `Circuit` where each Witness is only range constrained - /// once to the lowest number `bit size` possible. + /// a minimal number of times that still allows us to avoid executing + /// any new side effects due to their removal. pub(crate) fn replace_redundant_ranges( self, order_list: Vec, ) -> (Circuit, Vec) { - let mut already_seen_witness = HashSet::new(); - let mut new_order_list = Vec::with_capacity(order_list.len()); let mut optimized_opcodes = Vec::with_capacity(self.circuit.opcodes.len()); - for (idx, opcode) in self.circuit.opcodes.into_iter().enumerate() { - let (witness, num_bits) = { - // If its not the range opcode, add it to the opcode - // list and continue; - let mut push_non_range_opcode = || { - optimized_opcodes.push(opcode.clone()); - new_order_list.push(order_list[idx]); - }; - - match opcode { - Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { input }) => { - match input.input() { - ConstantOrWitnessEnum::Witness(witness) => (witness, input.num_bits()), - _ => { - push_non_range_opcode(); - continue; - } - } + // Consider the index beyond the last as a pseudo size effect by which time all constraints need to be inserted. + let mut next_side_effect = self.circuit.opcodes.len(); + // Going in reverse so we can propagate the side effect information backwards. + for (idx, opcode) in self.circuit.opcodes.into_iter().enumerate().rev() { + let Some(witness) = (match opcode { + Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { input }) => { + match input.input() { + ConstantOrWitnessEnum::Witness(witness) => Some(witness), + _ => None, } - _ => { - push_non_range_opcode(); - continue; + } + Opcode::BrilligCall { id, .. } => { + // Assume that Brillig calls might have side effects, unless we know they don't. + if self.brillig_side_effects.get(&id).copied().unwrap_or(true) { + next_side_effect = idx; } + None } + _ => None, + }) else { + // If its not the range opcode, add it to the opcode list and continue. + optimized_opcodes.push(opcode.clone()); + new_order_list.push(order_list[idx]); + continue; }; - // If we've already applied the range constraint for this witness then skip this opcode. - let already_added = already_seen_witness.contains(&witness); - if already_added { + + let info = self.infos.get(&witness).expect("Could not find witness. This should never be the case if `collect_ranges` is called"); + + // If this is not a switch point, then we should have already added a range constraint at least as strict, if it was needed. + if !info.switch_points.contains(&idx) { continue; } - // Check if this is the lowest number of bits in the circuit - let stored_num_bits = self.lists.get(&witness).expect("Could not find witness. This should never be the case if `collect_ranges` is called"); - let is_lowest_bit_size = num_bits <= *stored_num_bits; + // Check if we have an even stricter point before the next side effect. + let has_stricter_before_next_side_effect = info + .switch_points + .iter() + .any(|switch_idx| *switch_idx > idx && *switch_idx < next_side_effect); - // If the opcode is associated with the lowest bit size - // and we have not added a duplicate of this opcode yet, - // then we should add retain this range opcode. - if is_lowest_bit_size { - already_seen_witness.insert(witness); - new_order_list.push(order_list[idx]); - optimized_opcodes.push(opcode.clone()); + // If there is something even stricter before the next side effect (or the end), we don't need this. + if has_stricter_before_next_side_effect { + continue; } + + new_order_list.push(order_list[idx]); + optimized_opcodes.push(opcode.clone()); } + // Restore forward order. + optimized_opcodes.reverse(); + new_order_list.reverse(); + (Circuit { opcodes: optimized_opcodes, ..self.circuit }, new_order_list) } } +/// Calculate the maximum number of bits required to index a memory block of a certain size. fn memory_block_implied_max_bits(init: &[Witness]) -> u32 { let array_len = init.len() as u32; - 32 - array_len.leading_zeros() + let max_index = array_len.saturating_sub(1); + 32 - max_index.leading_zeros() } #[cfg(test)] mod tests { - use std::collections::BTreeSet; + use std::collections::{BTreeMap, BTreeSet}; use crate::compiler::optimizers::redundant_range::{ RangeOptimizer, memory_block_implied_max_bits, @@ -226,6 +261,7 @@ mod tests { FieldElement, circuit::{ Circuit, ExpressionWidth, Opcode, PublicInputs, + brillig::{BrilligFunctionId, BrilligInputs}, opcodes::{BlackBoxFuncCall, BlockId, BlockType, FunctionInput, MemOp}, }, native_types::{Expression, Witness}, @@ -234,22 +270,22 @@ mod tests { #[test] fn correctly_calculates_memory_block_implied_max_bits() { assert_eq!(memory_block_implied_max_bits(&[]), 0); - assert_eq!(memory_block_implied_max_bits(&[Witness(0); 1]), 1); - assert_eq!(memory_block_implied_max_bits(&[Witness(0); 2]), 2); + assert_eq!(memory_block_implied_max_bits(&[Witness(0); 1]), 0); + assert_eq!(memory_block_implied_max_bits(&[Witness(0); 2]), 1); assert_eq!(memory_block_implied_max_bits(&[Witness(0); 3]), 2); - assert_eq!(memory_block_implied_max_bits(&[Witness(0); 4]), 3); - assert_eq!(memory_block_implied_max_bits(&[Witness(0); 8]), 4); + assert_eq!(memory_block_implied_max_bits(&[Witness(0); 4]), 2); + assert_eq!(memory_block_implied_max_bits(&[Witness(0); 8]), 3); assert_eq!(memory_block_implied_max_bits(&[Witness(0); u8::MAX as usize]), 8); assert_eq!(memory_block_implied_max_bits(&[Witness(0); u16::MAX as usize]), 16); } - fn test_circuit(ranges: Vec<(Witness, u32)>) -> Circuit { - fn test_range_constraint(witness: Witness, num_bits: u32) -> Opcode { - Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { - input: FunctionInput::witness(witness, num_bits), - }) - } + fn test_range_constraint(witness: Witness, num_bits: u32) -> Opcode { + Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { + input: FunctionInput::witness(witness, num_bits), + }) + } + fn test_circuit(ranges: Vec<(Witness, u32)>) -> Circuit { let opcodes: Vec<_> = ranges .into_iter() .map(|(witness, num_bits)| test_range_constraint(witness, num_bits)) @@ -271,14 +307,15 @@ mod tests { // The optimizer should keep the lowest bit size range constraint let circuit = test_circuit(vec![(Witness(1), 32), (Witness(1), 16)]); let acir_opcode_positions = circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); - let optimizer = RangeOptimizer::new(circuit); + let brillig_side_effects = BTreeMap::new(); + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); - let range_size = *optimizer - .lists + let info = optimizer + .infos .get(&Witness(1)) .expect("Witness(1) was inserted, but it is missing from the map"); assert_eq!( - range_size, 16, + info.num_bits, 16, "expected a range size of 16 since that was the lowest bit size provided" ); @@ -304,7 +341,8 @@ mod tests { (Witness(2), 23), ]); let acir_opcode_positions = circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); - let optimizer = RangeOptimizer::new(circuit); + let brillig_side_effects = BTreeMap::new(); + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); let (optimized_circuit, _) = optimizer.replace_redundant_ranges(acir_opcode_positions); assert_eq!(optimized_circuit.opcodes.len(), 2); @@ -333,7 +371,8 @@ mod tests { circuit.opcodes.push(Opcode::AssertZero(Expression::default())); circuit.opcodes.push(Opcode::AssertZero(Expression::default())); let acir_opcode_positions = circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); - let optimizer = RangeOptimizer::new(circuit); + let brillig_side_effects = BTreeMap::new(); + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); let (optimized_circuit, _) = optimizer.replace_redundant_ranges(acir_opcode_positions); assert_eq!(optimized_circuit.opcodes.len(), 5); } @@ -345,12 +384,69 @@ mod tests { circuit.opcodes.push(Opcode::AssertZero(Witness(1).into())); let acir_opcode_positions = circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); - let optimizer = RangeOptimizer::new(circuit); + let brillig_side_effects = BTreeMap::new(); + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); let (optimized_circuit, _) = optimizer.replace_redundant_ranges(acir_opcode_positions); assert_eq!(optimized_circuit.opcodes.len(), 1); assert_eq!(optimized_circuit.opcodes[0], Opcode::AssertZero(Witness(1).into())); } + #[test] + fn potential_side_effects() { + // The optimizer should not remove range constraints if doing so might allow invalid side effects to go through. + let mut circuit = test_circuit(vec![(Witness(1), 32)]); + + // Call brillig with w2 + circuit.opcodes.push(Opcode::BrilligCall { + id: BrilligFunctionId(0), + inputs: vec![BrilligInputs::Single(Witness(2).into())], + outputs: vec![], + predicate: None, + }); + + circuit.opcodes.push(test_range_constraint(Witness(1), 16)); + + // Anther call + circuit.opcodes.push(Opcode::BrilligCall { + id: BrilligFunctionId(0), + inputs: vec![BrilligInputs::Single(Witness(2).into())], + outputs: vec![], + predicate: None, + }); + + // One more constraint, but this is redundant. + circuit.opcodes.push(test_range_constraint(Witness(1), 64)); + // assert w1 == 0 + circuit.opcodes.push(Opcode::AssertZero(Witness(1).into())); + + let acir_opcode_positions: Vec = + circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); + + // The last constraint is expected to be removed. + let expected_length = circuit.opcodes.len() - 1; + + // Consider the Brillig function to have a side effect. + let brillig_side_effects = BTreeMap::from_iter(vec![(BrilligFunctionId(0), true)]); + + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); + let (optimized_circuit, _) = + optimizer.replace_redundant_ranges(acir_opcode_positions.clone()); + + assert_eq!(optimized_circuit.opcodes.len(), expected_length); + assert_eq!( + optimized_circuit.opcodes[0], + Opcode::BlackBoxFuncCall(BlackBoxFuncCall::RANGE { + input: FunctionInput::witness(Witness(1), 32) // The minimum does not propagate backwards. + }) + ); + + // Applying again should have no effect (despite the range having the same bit size as the assert). + let optimizer = RangeOptimizer::new(optimized_circuit, &brillig_side_effects); + let (double_optimized_circuit, _) = + optimizer.replace_redundant_ranges(acir_opcode_positions); + assert_eq!(double_optimized_circuit.opcodes.len(), expected_length); + } + #[test] fn array_implied_ranges() { // The optimizer should use knowledge about array lengths and witnesses used to index these to remove range opcodes. @@ -370,7 +466,8 @@ mod tests { circuit.opcodes.push(mem_init.clone()); circuit.opcodes.push(mem_op.clone()); let acir_opcode_positions = circuit.opcodes.iter().enumerate().map(|(i, _)| i).collect(); - let optimizer = RangeOptimizer::new(circuit); + let brillig_side_effects = BTreeMap::new(); + let optimizer = RangeOptimizer::new(circuit, &brillig_side_effects); let (optimized_circuit, _) = optimizer.replace_redundant_ranges(acir_opcode_positions); assert_eq!(optimized_circuit.opcodes.len(), 2); assert_eq!(optimized_circuit.opcodes[0], mem_init); diff --git a/acvm-repo/acvm/src/compiler/transformers/mod.rs b/acvm-repo/acvm/src/compiler/transformers/mod.rs index cfed17f92de..66602dc94a0 100644 --- a/acvm-repo/acvm/src/compiler/transformers/mod.rs +++ b/acvm-repo/acvm/src/compiler/transformers/mod.rs @@ -1,8 +1,10 @@ +use std::collections::BTreeMap; + use acir::{ AcirField, circuit::{ self, Circuit, ExpressionWidth, Opcode, - brillig::{BrilligInputs, BrilligOutputs}, + brillig::{BrilligFunctionId, BrilligInputs, BrilligOutputs}, opcodes::{BlackBoxFuncCall, FunctionInput, MemOp}, }, native_types::{Expression, Witness}, @@ -29,13 +31,14 @@ const MAX_TRANSFORMER_PASSES: usize = 3; pub fn transform( acir: Circuit, expression_width: ExpressionWidth, + brillig_side_effects: &BTreeMap, ) -> (Circuit, AcirTransformationMap) { // Track original acir opcode positions throughout the transformation passes of the compilation // by applying the modifications done to the circuit opcodes and also to the opcode_positions (delete and insert) let acir_opcode_positions = acir.opcodes.iter().enumerate().map(|(i, _)| i).collect(); let (mut acir, acir_opcode_positions) = - transform_internal(acir, expression_width, acir_opcode_positions); + transform_internal(acir, expression_width, acir_opcode_positions, brillig_side_effects); let transformation_map = AcirTransformationMap::new(&acir_opcode_positions); @@ -54,6 +57,7 @@ pub(super) fn transform_internal( mut acir: Circuit, expression_width: ExpressionWidth, mut acir_opcode_positions: Vec, + brillig_side_effects: &BTreeMap, ) -> (Circuit, Vec) { if acir.opcodes.len() == 1 && matches!(acir.opcodes[0], Opcode::BrilligCall { .. }) { info!("Program is fully unconstrained, skipping transformation pass"); @@ -67,8 +71,12 @@ pub(super) fn transform_internal( // don't stabilize unless we also repeat the backend agnostic optimizations. for _ in 0..MAX_TRANSFORMER_PASSES { info!("Number of opcodes {}", acir.opcodes.len()); - let (new_acir, new_acir_opcode_positions) = - transform_internal_once(acir, expression_width, acir_opcode_positions); + let (new_acir, new_acir_opcode_positions) = transform_internal_once( + acir, + expression_width, + acir_opcode_positions, + brillig_side_effects, + ); acir = new_acir; acir_opcode_positions = new_acir_opcode_positions; @@ -109,6 +117,7 @@ fn transform_internal_once( mut acir: Circuit, expression_width: ExpressionWidth, acir_opcode_positions: Vec, + brillig_side_effects: &BTreeMap, ) -> (Circuit, Vec) { // If the expression width is unbounded, we don't need to do anything. let mut transformer = match &expression_width { @@ -242,7 +251,7 @@ fn transform_internal_once( // 3. Remove redundant range constraints. // The `MergeOptimizer` can merge two witnesses which have range opcodes applied to them // so we run the `RangeOptimizer` afterwards to clear these up. - let range_optimizer = RangeOptimizer::new(acir); + let range_optimizer = RangeOptimizer::new(acir, brillig_side_effects); let (acir, new_acir_opcode_positions) = range_optimizer.replace_redundant_ranges(new_acir_opcode_positions); diff --git a/compiler/noirc_driver/src/lib.rs b/compiler/noirc_driver/src/lib.rs index 3c5a9a5cf2d..d90d73dfe63 100644 --- a/compiler/noirc_driver/src/lib.rs +++ b/compiler/noirc_driver/src/lib.rs @@ -491,7 +491,7 @@ pub fn compile_main( } if options.print_acir { - noirc_errors::println_to_stdout!("Compiled ACIR for main (unoptimized):"); + noirc_errors::println_to_stdout!("Compiled ACIR for main (non-transformed):"); noirc_errors::println_to_stdout!("{}", compiled_program.program); } @@ -550,7 +550,7 @@ pub fn compile_contract( } } println!( - "Compiled ACIR for {}::{} (unoptimized):", + "Compiled ACIR for {}::{} (non-transformed):", compiled_contract.name, contract_function.name ); println!("{}", contract_function.bytecode); diff --git a/compiler/noirc_evaluator/src/ssa/mod.rs b/compiler/noirc_evaluator/src/ssa/mod.rs index 9d03de192ba..0d96ac85615 100644 --- a/compiler/noirc_evaluator/src/ssa/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/mod.rs @@ -514,8 +514,11 @@ pub fn convert_generated_acir_into_circuit( brillig_procedure_locs, ); + // We don't have Brillig info available here yet. + let brillig_side_effects = BTreeMap::new(); // Perform any ACIR-level optimizations - let (optimized_circuit, transformation_map) = acvm::compiler::optimize(circuit); + let (optimized_circuit, transformation_map) = + acvm::compiler::optimize(circuit, &brillig_side_effects); debug_info.update_acir(transformation_map); SsaCircuitArtifact { diff --git a/test_programs/execution_success/strings/src/main.nr b/test_programs/execution_success/strings/src/main.nr index c4fa0539745..88960c0db38 100644 --- a/test_programs/execution_success/strings/src/main.nr +++ b/test_programs/execution_success/strings/src/main.nr @@ -2,6 +2,14 @@ global HELLO_WORLD: str<11> = "hello world"; fn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) { + assert(hex_as_string == "0x41"); + // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field + assert(hex_as_field == 0x41); + + // Single digit & odd length hex literals are valid + assert(hex_as_field == 0x041); + assert(hex_as_field != 0x1); + let mut bad_message = "hello world"; assert(message == "hello world"); @@ -29,14 +37,6 @@ fn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Fie let hash = std::hash::pedersen_commitment([x]); std::println(hash); std::print(hash); - - assert(hex_as_string == "0x41"); - // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field - assert(hex_as_field == 0x41); - - // Single digit & odd length hex literals are valid - assert(hex_as_field == 0x041); - assert(hex_as_field != 0x1); } #[test] diff --git a/test_programs/noir_test_success/regression_9335/Nargo.toml b/test_programs/noir_test_success/regression_9335/Nargo.toml new file mode 100644 index 00000000000..63e1d16911a --- /dev/null +++ b/test_programs/noir_test_success/regression_9335/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "regression_9335" +type = "bin" +authors = [""] + +[dependencies] \ No newline at end of file diff --git a/test_programs/noir_test_success/regression_9335/Prover.toml b/test_programs/noir_test_success/regression_9335/Prover.toml new file mode 100644 index 00000000000..489da0f067f --- /dev/null +++ b/test_programs/noir_test_success/regression_9335/Prover.toml @@ -0,0 +1 @@ +a = "0x000000000000000000000000000000000000000000000000000000006f3c2bda" diff --git a/test_programs/noir_test_success/regression_9335/src/main.nr b/test_programs/noir_test_success/regression_9335/src/main.nr new file mode 100644 index 00000000000..05c4298ce3a --- /dev/null +++ b/test_programs/noir_test_success/regression_9335/src/main.nr @@ -0,0 +1,12 @@ +global G_B: u64 = 2288862572; +fn main(a: u64) -> pub u64 { + let b = a * 18259827970668162041; + println(f"b = {b}"); + assert(b == G_B, "YHV"); + b +} + +#[test(should_fail_with = "attempt to multiply with overflow")] +fn fuzz_main(a: u8) -> u64 { + main((a as u64) + 1866214362) +} diff --git a/tooling/ast_fuzzer/src/compare/compiled.rs b/tooling/ast_fuzzer/src/compare/compiled.rs index 809539a592c..5743a284378 100644 --- a/tooling/ast_fuzzer/src/compare/compiled.rs +++ b/tooling/ast_fuzzer/src/compare/compiled.rs @@ -178,12 +178,24 @@ impl Comparable for NargoErrorWithTypes { // Looks like the workaround we have for comptime failures originating from overflows and similar assertion failures. true } + ( + AssertionFailed(ResolvedAssertionPayload::Raw(_), _, _), + AssertionFailed(ResolvedAssertionPayload::Raw(_), _, _), + ) if msg2.as_ref().is_some_and(|msg| msg.contains("overflow")) + && msg1.as_ref().is_some_and(|msg| { + msg.len() == crate::program::CONSTRAIN_MSG_LENGTH as usize + }) => + { + // This is the case where a randomly generated `assert x == const, "MSG"` in ACIR causes + // a preceding range constraint to be removed from the bytecode. + true + } (AssertionFailed(p1, _, _), AssertionFailed(p2, _, _)) => p1 == p2, (SolvingError(s1, _), SolvingError(s2, _)) => format!("{s1}") == format!("{s2}"), ( SolvingError(OpcodeResolutionError::UnsatisfiedConstrain { .. }, _), AssertionFailed(_, _, _), - ) => msg2.is_some_and(|msg| msg.contains("divide by zero")), + ) => msg2.as_ref().is_some_and(|msg| msg.contains("divide by zero")), ( AssertionFailed(_, _, _), SolvingError(OpcodeResolutionError::UnsatisfiedConstrain { .. }, _), diff --git a/tooling/ast_fuzzer/src/program/func.rs b/tooling/ast_fuzzer/src/program/func.rs index cc72ea495a5..5241d0e3351 100644 --- a/tooling/ast_fuzzer/src/program/func.rs +++ b/tooling/ast_fuzzer/src/program/func.rs @@ -36,7 +36,7 @@ use super::{ }; /// Use random strings to identify constraints. -const CONSTRAIN_MSG_TYPE: Type = Type::String(3); +const CONSTRAIN_MSG_TYPE: Type = Type::String(super::CONSTRAIN_MSG_LENGTH); /// We need to track whether expressions are coming from dynamic program inputs. type TrackedExpression = (Expression, bool); diff --git a/tooling/ast_fuzzer/src/program/mod.rs b/tooling/ast_fuzzer/src/program/mod.rs index d0c71eca620..aef96243cea 100644 --- a/tooling/ast_fuzzer/src/program/mod.rs +++ b/tooling/ast_fuzzer/src/program/mod.rs @@ -16,6 +16,9 @@ use noirc_frontend::{ use crate::Config; +/// Length of generated random constraint messages. +pub(crate) const CONSTRAIN_MSG_LENGTH: u32 = 3; + pub mod expr; pub(crate) mod freq; mod func; diff --git a/tooling/nargo/Cargo.toml b/tooling/nargo/Cargo.toml index 554c8ac1904..111b883c278 100644 --- a/tooling/nargo/Cargo.toml +++ b/tooling/nargo/Cargo.toml @@ -14,6 +14,7 @@ workspace = true [dependencies] acvm.workspace = true +brillig.workspace = true fm.workspace = true noirc_abi.workspace = true noirc_driver.workspace = true diff --git a/tooling/nargo/src/ops/optimize.rs b/tooling/nargo/src/ops/optimize.rs index 906309e36f8..db8eb2f54f0 100644 --- a/tooling/nargo/src/ops/optimize.rs +++ b/tooling/nargo/src/ops/optimize.rs @@ -1,4 +1,9 @@ -use acvm::{FieldElement, acir::circuit::Program}; +use std::collections::BTreeMap; + +use acvm::{ + FieldElement, + acir::circuit::{Program, brillig::BrilligFunctionId}, +}; use iter_extended::vecmap; use noirc_driver::{CompiledContract, CompiledProgram}; use noirc_errors::debug_info::DebugInfo; @@ -24,11 +29,14 @@ fn optimize_program_internal( ) -> Program { let functions = std::mem::take(&mut program.functions); + let brillig_side_effects = brillig_side_effects(&program); + let optimized_functions = functions .into_iter() .enumerate() .map(|(i, function)| { - let (optimized_circuit, location_map) = acvm::compiler::optimize(function); + let (optimized_circuit, location_map) = + acvm::compiler::optimize(function, &brillig_side_effects); debug[i].update_acir(location_map); optimized_circuit }) @@ -37,3 +45,22 @@ fn optimize_program_internal( program.functions = optimized_functions; program } + +/// Collect information whether Brillig functions might have side effects. +pub(super) fn brillig_side_effects( + program: &Program, +) -> BTreeMap { + program + .unconstrained_functions + .iter() + .enumerate() + .map(|(idx, f)| { + let id = BrilligFunctionId(idx as u32); + let has_side_effect = f + .bytecode + .iter() + .any(|opcode| matches!(opcode, brillig::Opcode::ForeignCall { .. })); + (id, has_side_effect) + }) + .collect() +} diff --git a/tooling/nargo/src/ops/transform.rs b/tooling/nargo/src/ops/transform.rs index 14aa7459117..e92b854695f 100644 --- a/tooling/nargo/src/ops/transform.rs +++ b/tooling/nargo/src/ops/transform.rs @@ -40,12 +40,14 @@ fn transform_program_internal( ) -> Program { let functions = std::mem::take(&mut program.functions); + let brillig_side_effects = super::optimize::brillig_side_effects(&program); + let optimized_functions = functions .into_iter() .enumerate() .map(|(i, function)| { let (optimized_circuit, location_map) = - acvm::compiler::compile(function, expression_width); + acvm::compiler::compile(function, expression_width, &brillig_side_effects); debug[i].update_acir(location_map); optimized_circuit }) diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 47bed4ef93d..0b19768dc0b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -211,199 +211,135 @@ expression: artifact "EXPR [ (1, _130, _131) (1, _132) -1 ]", "EXPR [ (1, _130, _132) 0 ]", "EXPR [ (-32, _132) (-1, _133) 32 ]", - "BLACKBOX::RANGE [(_133, 6)] []", "EXPR [ (-1, _134) 0 ]", "INIT (id: 3, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "INIT (id: 4, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "MEM (id: 4, write EXPR [ (1, _0) 0 ] at: EXPR [ (1, _133) 0 ]) ", "EXPR [ (32, _132) (-1, _135) 0 ]", - "BLACKBOX::RANGE [(_135, 6)] []", "MEM (id: 4, write EXPR [ (1, _32) 0 ] at: EXPR [ (1, _135) 0 ]) ", "EXPR [ (1, _133) (-1, _136) 1 ]", - "BLACKBOX::RANGE [(_136, 6)] []", "MEM (id: 4, write EXPR [ (1, _1) 0 ] at: EXPR [ (1, _136) 0 ]) ", "EXPR [ (1, _135) (-1, _137) 1 ]", - "BLACKBOX::RANGE [(_137, 6)] []", "MEM (id: 4, write EXPR [ (1, _33) 0 ] at: EXPR [ (1, _137) 0 ]) ", "EXPR [ (1, _133) (-1, _138) 2 ]", - "BLACKBOX::RANGE [(_138, 6)] []", "MEM (id: 4, write EXPR [ (1, _2) 0 ] at: EXPR [ (1, _138) 0 ]) ", "EXPR [ (1, _135) (-1, _139) 2 ]", - "BLACKBOX::RANGE [(_139, 6)] []", "MEM (id: 4, write EXPR [ (1, _34) 0 ] at: EXPR [ (1, _139) 0 ]) ", "EXPR [ (1, _133) (-1, _140) 3 ]", - "BLACKBOX::RANGE [(_140, 6)] []", "MEM (id: 4, write EXPR [ (1, _3) 0 ] at: EXPR [ (1, _140) 0 ]) ", "EXPR [ (1, _135) (-1, _141) 3 ]", - "BLACKBOX::RANGE [(_141, 6)] []", "MEM (id: 4, write EXPR [ (1, _35) 0 ] at: EXPR [ (1, _141) 0 ]) ", "EXPR [ (1, _133) (-1, _142) 4 ]", - "BLACKBOX::RANGE [(_142, 6)] []", "MEM (id: 4, write EXPR [ (1, _4) 0 ] at: EXPR [ (1, _142) 0 ]) ", "EXPR [ (1, _135) (-1, _143) 4 ]", - "BLACKBOX::RANGE [(_143, 6)] []", "MEM (id: 4, write EXPR [ (1, _36) 0 ] at: EXPR [ (1, _143) 0 ]) ", "EXPR [ (1, _133) (-1, _144) 5 ]", - "BLACKBOX::RANGE [(_144, 6)] []", "MEM (id: 4, write EXPR [ (1, _5) 0 ] at: EXPR [ (1, _144) 0 ]) ", "EXPR [ (1, _135) (-1, _145) 5 ]", - "BLACKBOX::RANGE [(_145, 6)] []", "MEM (id: 4, write EXPR [ (1, _37) 0 ] at: EXPR [ (1, _145) 0 ]) ", "EXPR [ (1, _133) (-1, _146) 6 ]", - "BLACKBOX::RANGE [(_146, 6)] []", "MEM (id: 4, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _146) 0 ]) ", "EXPR [ (1, _135) (-1, _147) 6 ]", - "BLACKBOX::RANGE [(_147, 6)] []", "MEM (id: 4, write EXPR [ (1, _38) 0 ] at: EXPR [ (1, _147) 0 ]) ", "EXPR [ (1, _133) (-1, _148) 7 ]", - "BLACKBOX::RANGE [(_148, 6)] []", "MEM (id: 4, write EXPR [ (1, _7) 0 ] at: EXPR [ (1, _148) 0 ]) ", "EXPR [ (1, _135) (-1, _149) 7 ]", - "BLACKBOX::RANGE [(_149, 6)] []", "MEM (id: 4, write EXPR [ (1, _39) 0 ] at: EXPR [ (1, _149) 0 ]) ", "EXPR [ (1, _133) (-1, _150) 8 ]", - "BLACKBOX::RANGE [(_150, 6)] []", "MEM (id: 4, write EXPR [ (1, _8) 0 ] at: EXPR [ (1, _150) 0 ]) ", "EXPR [ (1, _135) (-1, _151) 8 ]", - "BLACKBOX::RANGE [(_151, 6)] []", "MEM (id: 4, write EXPR [ (1, _40) 0 ] at: EXPR [ (1, _151) 0 ]) ", "EXPR [ (1, _133) (-1, _152) 9 ]", - "BLACKBOX::RANGE [(_152, 6)] []", "MEM (id: 4, write EXPR [ (1, _9) 0 ] at: EXPR [ (1, _152) 0 ]) ", "EXPR [ (1, _135) (-1, _153) 9 ]", - "BLACKBOX::RANGE [(_153, 6)] []", "MEM (id: 4, write EXPR [ (1, _41) 0 ] at: EXPR [ (1, _153) 0 ]) ", "EXPR [ (1, _133) (-1, _154) 10 ]", - "BLACKBOX::RANGE [(_154, 6)] []", "MEM (id: 4, write EXPR [ (1, _10) 0 ] at: EXPR [ (1, _154) 0 ]) ", "EXPR [ (1, _135) (-1, _155) 10 ]", - "BLACKBOX::RANGE [(_155, 6)] []", "MEM (id: 4, write EXPR [ (1, _42) 0 ] at: EXPR [ (1, _155) 0 ]) ", "EXPR [ (1, _133) (-1, _156) 11 ]", - "BLACKBOX::RANGE [(_156, 6)] []", "MEM (id: 4, write EXPR [ (1, _11) 0 ] at: EXPR [ (1, _156) 0 ]) ", "EXPR [ (1, _135) (-1, _157) 11 ]", - "BLACKBOX::RANGE [(_157, 6)] []", "MEM (id: 4, write EXPR [ (1, _43) 0 ] at: EXPR [ (1, _157) 0 ]) ", "EXPR [ (1, _133) (-1, _158) 12 ]", - "BLACKBOX::RANGE [(_158, 6)] []", "MEM (id: 4, write EXPR [ (1, _12) 0 ] at: EXPR [ (1, _158) 0 ]) ", "EXPR [ (1, _135) (-1, _159) 12 ]", - "BLACKBOX::RANGE [(_159, 6)] []", "MEM (id: 4, write EXPR [ (1, _44) 0 ] at: EXPR [ (1, _159) 0 ]) ", "EXPR [ (1, _133) (-1, _160) 13 ]", - "BLACKBOX::RANGE [(_160, 6)] []", "MEM (id: 4, write EXPR [ (1, _13) 0 ] at: EXPR [ (1, _160) 0 ]) ", "EXPR [ (1, _135) (-1, _161) 13 ]", - "BLACKBOX::RANGE [(_161, 6)] []", "MEM (id: 4, write EXPR [ (1, _45) 0 ] at: EXPR [ (1, _161) 0 ]) ", "EXPR [ (1, _133) (-1, _162) 14 ]", - "BLACKBOX::RANGE [(_162, 6)] []", "MEM (id: 4, write EXPR [ (1, _14) 0 ] at: EXPR [ (1, _162) 0 ]) ", "EXPR [ (1, _135) (-1, _163) 14 ]", - "BLACKBOX::RANGE [(_163, 6)] []", "MEM (id: 4, write EXPR [ (1, _46) 0 ] at: EXPR [ (1, _163) 0 ]) ", "EXPR [ (1, _133) (-1, _164) 15 ]", - "BLACKBOX::RANGE [(_164, 6)] []", "MEM (id: 4, write EXPR [ (1, _15) 0 ] at: EXPR [ (1, _164) 0 ]) ", "EXPR [ (1, _135) (-1, _165) 15 ]", - "BLACKBOX::RANGE [(_165, 6)] []", "MEM (id: 4, write EXPR [ (1, _47) 0 ] at: EXPR [ (1, _165) 0 ]) ", "EXPR [ (1, _133) (-1, _166) 16 ]", - "BLACKBOX::RANGE [(_166, 6)] []", "MEM (id: 4, write EXPR [ (1, _16) 0 ] at: EXPR [ (1, _166) 0 ]) ", "EXPR [ (1, _135) (-1, _167) 16 ]", - "BLACKBOX::RANGE [(_167, 6)] []", "MEM (id: 4, write EXPR [ (1, _48) 0 ] at: EXPR [ (1, _167) 0 ]) ", "EXPR [ (1, _133) (-1, _168) 17 ]", - "BLACKBOX::RANGE [(_168, 6)] []", "MEM (id: 4, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _168) 0 ]) ", "EXPR [ (1, _135) (-1, _169) 17 ]", - "BLACKBOX::RANGE [(_169, 6)] []", "MEM (id: 4, write EXPR [ (1, _49) 0 ] at: EXPR [ (1, _169) 0 ]) ", "EXPR [ (1, _133) (-1, _170) 18 ]", - "BLACKBOX::RANGE [(_170, 6)] []", "MEM (id: 4, write EXPR [ (1, _18) 0 ] at: EXPR [ (1, _170) 0 ]) ", "EXPR [ (1, _135) (-1, _171) 18 ]", - "BLACKBOX::RANGE [(_171, 6)] []", "MEM (id: 4, write EXPR [ (1, _50) 0 ] at: EXPR [ (1, _171) 0 ]) ", "EXPR [ (1, _133) (-1, _172) 19 ]", - "BLACKBOX::RANGE [(_172, 6)] []", "MEM (id: 4, write EXPR [ (1, _19) 0 ] at: EXPR [ (1, _172) 0 ]) ", "EXPR [ (1, _135) (-1, _173) 19 ]", - "BLACKBOX::RANGE [(_173, 6)] []", "MEM (id: 4, write EXPR [ (1, _51) 0 ] at: EXPR [ (1, _173) 0 ]) ", "EXPR [ (1, _133) (-1, _174) 20 ]", - "BLACKBOX::RANGE [(_174, 6)] []", "MEM (id: 4, write EXPR [ (1, _20) 0 ] at: EXPR [ (1, _174) 0 ]) ", "EXPR [ (1, _135) (-1, _175) 20 ]", - "BLACKBOX::RANGE [(_175, 6)] []", "MEM (id: 4, write EXPR [ (1, _52) 0 ] at: EXPR [ (1, _175) 0 ]) ", "EXPR [ (1, _133) (-1, _176) 21 ]", - "BLACKBOX::RANGE [(_176, 6)] []", "MEM (id: 4, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _176) 0 ]) ", "EXPR [ (1, _135) (-1, _177) 21 ]", - "BLACKBOX::RANGE [(_177, 6)] []", "MEM (id: 4, write EXPR [ (1, _53) 0 ] at: EXPR [ (1, _177) 0 ]) ", "EXPR [ (1, _133) (-1, _178) 22 ]", - "BLACKBOX::RANGE [(_178, 6)] []", "MEM (id: 4, write EXPR [ (1, _22) 0 ] at: EXPR [ (1, _178) 0 ]) ", "EXPR [ (1, _135) (-1, _179) 22 ]", - "BLACKBOX::RANGE [(_179, 6)] []", "MEM (id: 4, write EXPR [ (1, _54) 0 ] at: EXPR [ (1, _179) 0 ]) ", "EXPR [ (1, _133) (-1, _180) 23 ]", - "BLACKBOX::RANGE [(_180, 6)] []", "MEM (id: 4, write EXPR [ (1, _23) 0 ] at: EXPR [ (1, _180) 0 ]) ", "EXPR [ (1, _135) (-1, _181) 23 ]", - "BLACKBOX::RANGE [(_181, 6)] []", "MEM (id: 4, write EXPR [ (1, _55) 0 ] at: EXPR [ (1, _181) 0 ]) ", "EXPR [ (1, _133) (-1, _182) 24 ]", - "BLACKBOX::RANGE [(_182, 6)] []", "MEM (id: 4, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _182) 0 ]) ", "EXPR [ (1, _135) (-1, _183) 24 ]", - "BLACKBOX::RANGE [(_183, 6)] []", "MEM (id: 4, write EXPR [ (1, _56) 0 ] at: EXPR [ (1, _183) 0 ]) ", "EXPR [ (1, _133) (-1, _184) 25 ]", - "BLACKBOX::RANGE [(_184, 6)] []", "MEM (id: 4, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _184) 0 ]) ", "EXPR [ (1, _135) (-1, _185) 25 ]", - "BLACKBOX::RANGE [(_185, 6)] []", "MEM (id: 4, write EXPR [ (1, _57) 0 ] at: EXPR [ (1, _185) 0 ]) ", "EXPR [ (1, _133) (-1, _186) 26 ]", - "BLACKBOX::RANGE [(_186, 6)] []", "MEM (id: 4, write EXPR [ (1, _26) 0 ] at: EXPR [ (1, _186) 0 ]) ", "EXPR [ (1, _135) (-1, _187) 26 ]", - "BLACKBOX::RANGE [(_187, 6)] []", "MEM (id: 4, write EXPR [ (1, _58) 0 ] at: EXPR [ (1, _187) 0 ]) ", "EXPR [ (1, _133) (-1, _188) 27 ]", - "BLACKBOX::RANGE [(_188, 6)] []", "MEM (id: 4, write EXPR [ (1, _27) 0 ] at: EXPR [ (1, _188) 0 ]) ", "EXPR [ (1, _135) (-1, _189) 27 ]", - "BLACKBOX::RANGE [(_189, 6)] []", "MEM (id: 4, write EXPR [ (1, _59) 0 ] at: EXPR [ (1, _189) 0 ]) ", "EXPR [ (1, _133) (-1, _190) 28 ]", - "BLACKBOX::RANGE [(_190, 6)] []", "MEM (id: 4, write EXPR [ (1, _28) 0 ] at: EXPR [ (1, _190) 0 ]) ", "EXPR [ (1, _135) (-1, _191) 28 ]", - "BLACKBOX::RANGE [(_191, 6)] []", "MEM (id: 4, write EXPR [ (1, _60) 0 ] at: EXPR [ (1, _191) 0 ]) ", "EXPR [ (1, _133) (-1, _192) 29 ]", - "BLACKBOX::RANGE [(_192, 6)] []", "MEM (id: 4, write EXPR [ (1, _29) 0 ] at: EXPR [ (1, _192) 0 ]) ", "EXPR [ (1, _135) (-1, _193) 29 ]", - "BLACKBOX::RANGE [(_193, 6)] []", "MEM (id: 4, write EXPR [ (1, _61) 0 ] at: EXPR [ (1, _193) 0 ]) ", "EXPR [ (1, _133) (-1, _194) 30 ]", - "BLACKBOX::RANGE [(_194, 6)] []", "MEM (id: 4, write EXPR [ (1, _30) 0 ] at: EXPR [ (1, _194) 0 ]) ", "EXPR [ (1, _135) (-1, _195) 30 ]", - "BLACKBOX::RANGE [(_195, 6)] []", "MEM (id: 4, write EXPR [ (1, _62) 0 ] at: EXPR [ (1, _195) 0 ]) ", "EXPR [ (1, _133) (-1, _196) 31 ]", - "BLACKBOX::RANGE [(_196, 6)] []", "MEM (id: 4, write EXPR [ (1, _31) 0 ] at: EXPR [ (1, _196) 0 ]) ", "EXPR [ (1, _135) (-1, _197) 31 ]", - "BLACKBOX::RANGE [(_197, 6)] []", "MEM (id: 4, write EXPR [ (1, _63) 0 ] at: EXPR [ (1, _197) 0 ]) ", "MEM (id: 4, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _198) 0 ]) ", "EXPR [ (-1, _199) 1 ]", @@ -545,196 +481,132 @@ expression: artifact "EXPR [ (1, _360, _361) (1, _362) -1 ]", "EXPR [ (1, _360, _362) 0 ]", "EXPR [ (-32, _362) (-1, _363) 32 ]", - "BLACKBOX::RANGE [(_363, 6)] []", "MEM (id: 3, write EXPR [ (1, _325) 0 ] at: EXPR [ (1, _363) 0 ]) ", "EXPR [ (32, _362) (-1, _364) 0 ]", - "BLACKBOX::RANGE [(_364, 6)] []", "MEM (id: 3, write EXPR [ (1, _64) 0 ] at: EXPR [ (1, _364) 0 ]) ", "EXPR [ (1, _363) (-1, _365) 1 ]", - "BLACKBOX::RANGE [(_365, 6)] []", "MEM (id: 3, write EXPR [ (1, _326) 0 ] at: EXPR [ (1, _365) 0 ]) ", "EXPR [ (1, _364) (-1, _366) 1 ]", - "BLACKBOX::RANGE [(_366, 6)] []", "MEM (id: 3, write EXPR [ (1, _65) 0 ] at: EXPR [ (1, _366) 0 ]) ", "EXPR [ (1, _363) (-1, _367) 2 ]", - "BLACKBOX::RANGE [(_367, 6)] []", "MEM (id: 3, write EXPR [ (1, _327) 0 ] at: EXPR [ (1, _367) 0 ]) ", "EXPR [ (1, _364) (-1, _368) 2 ]", - "BLACKBOX::RANGE [(_368, 6)] []", "MEM (id: 3, write EXPR [ (1, _66) 0 ] at: EXPR [ (1, _368) 0 ]) ", "EXPR [ (1, _363) (-1, _369) 3 ]", - "BLACKBOX::RANGE [(_369, 6)] []", "MEM (id: 3, write EXPR [ (1, _328) 0 ] at: EXPR [ (1, _369) 0 ]) ", "EXPR [ (1, _364) (-1, _370) 3 ]", - "BLACKBOX::RANGE [(_370, 6)] []", "MEM (id: 3, write EXPR [ (1, _67) 0 ] at: EXPR [ (1, _370) 0 ]) ", "EXPR [ (1, _363) (-1, _371) 4 ]", - "BLACKBOX::RANGE [(_371, 6)] []", "MEM (id: 3, write EXPR [ (1, _329) 0 ] at: EXPR [ (1, _371) 0 ]) ", "EXPR [ (1, _364) (-1, _372) 4 ]", - "BLACKBOX::RANGE [(_372, 6)] []", "MEM (id: 3, write EXPR [ (1, _68) 0 ] at: EXPR [ (1, _372) 0 ]) ", "EXPR [ (1, _363) (-1, _373) 5 ]", - "BLACKBOX::RANGE [(_373, 6)] []", "MEM (id: 3, write EXPR [ (1, _330) 0 ] at: EXPR [ (1, _373) 0 ]) ", "EXPR [ (1, _364) (-1, _374) 5 ]", - "BLACKBOX::RANGE [(_374, 6)] []", "MEM (id: 3, write EXPR [ (1, _69) 0 ] at: EXPR [ (1, _374) 0 ]) ", "EXPR [ (1, _363) (-1, _375) 6 ]", - "BLACKBOX::RANGE [(_375, 6)] []", "MEM (id: 3, write EXPR [ (1, _331) 0 ] at: EXPR [ (1, _375) 0 ]) ", "EXPR [ (1, _364) (-1, _376) 6 ]", - "BLACKBOX::RANGE [(_376, 6)] []", "MEM (id: 3, write EXPR [ (1, _70) 0 ] at: EXPR [ (1, _376) 0 ]) ", "EXPR [ (1, _363) (-1, _377) 7 ]", - "BLACKBOX::RANGE [(_377, 6)] []", "MEM (id: 3, write EXPR [ (1, _332) 0 ] at: EXPR [ (1, _377) 0 ]) ", "EXPR [ (1, _364) (-1, _378) 7 ]", - "BLACKBOX::RANGE [(_378, 6)] []", "MEM (id: 3, write EXPR [ (1, _71) 0 ] at: EXPR [ (1, _378) 0 ]) ", "EXPR [ (1, _363) (-1, _379) 8 ]", - "BLACKBOX::RANGE [(_379, 6)] []", "MEM (id: 3, write EXPR [ (1, _333) 0 ] at: EXPR [ (1, _379) 0 ]) ", "EXPR [ (1, _364) (-1, _380) 8 ]", - "BLACKBOX::RANGE [(_380, 6)] []", "MEM (id: 3, write EXPR [ (1, _72) 0 ] at: EXPR [ (1, _380) 0 ]) ", "EXPR [ (1, _363) (-1, _381) 9 ]", - "BLACKBOX::RANGE [(_381, 6)] []", "MEM (id: 3, write EXPR [ (1, _334) 0 ] at: EXPR [ (1, _381) 0 ]) ", "EXPR [ (1, _364) (-1, _382) 9 ]", - "BLACKBOX::RANGE [(_382, 6)] []", "MEM (id: 3, write EXPR [ (1, _73) 0 ] at: EXPR [ (1, _382) 0 ]) ", "EXPR [ (1, _363) (-1, _383) 10 ]", - "BLACKBOX::RANGE [(_383, 6)] []", "MEM (id: 3, write EXPR [ (1, _335) 0 ] at: EXPR [ (1, _383) 0 ]) ", "EXPR [ (1, _364) (-1, _384) 10 ]", - "BLACKBOX::RANGE [(_384, 6)] []", "MEM (id: 3, write EXPR [ (1, _74) 0 ] at: EXPR [ (1, _384) 0 ]) ", "EXPR [ (1, _363) (-1, _385) 11 ]", - "BLACKBOX::RANGE [(_385, 6)] []", "MEM (id: 3, write EXPR [ (1, _336) 0 ] at: EXPR [ (1, _385) 0 ]) ", "EXPR [ (1, _364) (-1, _386) 11 ]", - "BLACKBOX::RANGE [(_386, 6)] []", "MEM (id: 3, write EXPR [ (1, _75) 0 ] at: EXPR [ (1, _386) 0 ]) ", "EXPR [ (1, _363) (-1, _387) 12 ]", - "BLACKBOX::RANGE [(_387, 6)] []", "MEM (id: 3, write EXPR [ (1, _337) 0 ] at: EXPR [ (1, _387) 0 ]) ", "EXPR [ (1, _364) (-1, _388) 12 ]", - "BLACKBOX::RANGE [(_388, 6)] []", "MEM (id: 3, write EXPR [ (1, _76) 0 ] at: EXPR [ (1, _388) 0 ]) ", "EXPR [ (1, _363) (-1, _389) 13 ]", - "BLACKBOX::RANGE [(_389, 6)] []", "MEM (id: 3, write EXPR [ (1, _338) 0 ] at: EXPR [ (1, _389) 0 ]) ", "EXPR [ (1, _364) (-1, _390) 13 ]", - "BLACKBOX::RANGE [(_390, 6)] []", "MEM (id: 3, write EXPR [ (1, _77) 0 ] at: EXPR [ (1, _390) 0 ]) ", "EXPR [ (1, _363) (-1, _391) 14 ]", - "BLACKBOX::RANGE [(_391, 6)] []", "MEM (id: 3, write EXPR [ (1, _339) 0 ] at: EXPR [ (1, _391) 0 ]) ", "EXPR [ (1, _364) (-1, _392) 14 ]", - "BLACKBOX::RANGE [(_392, 6)] []", "MEM (id: 3, write EXPR [ (1, _78) 0 ] at: EXPR [ (1, _392) 0 ]) ", "EXPR [ (1, _363) (-1, _393) 15 ]", - "BLACKBOX::RANGE [(_393, 6)] []", "MEM (id: 3, write EXPR [ (1, _340) 0 ] at: EXPR [ (1, _393) 0 ]) ", "EXPR [ (1, _364) (-1, _394) 15 ]", - "BLACKBOX::RANGE [(_394, 6)] []", "MEM (id: 3, write EXPR [ (1, _79) 0 ] at: EXPR [ (1, _394) 0 ]) ", "EXPR [ (1, _363) (-1, _395) 16 ]", - "BLACKBOX::RANGE [(_395, 6)] []", "MEM (id: 3, write EXPR [ (1, _341) 0 ] at: EXPR [ (1, _395) 0 ]) ", "EXPR [ (1, _364) (-1, _396) 16 ]", - "BLACKBOX::RANGE [(_396, 6)] []", "MEM (id: 3, write EXPR [ (1, _80) 0 ] at: EXPR [ (1, _396) 0 ]) ", "EXPR [ (1, _363) (-1, _397) 17 ]", - "BLACKBOX::RANGE [(_397, 6)] []", "MEM (id: 3, write EXPR [ (1, _342) 0 ] at: EXPR [ (1, _397) 0 ]) ", "EXPR [ (1, _364) (-1, _398) 17 ]", - "BLACKBOX::RANGE [(_398, 6)] []", "MEM (id: 3, write EXPR [ (1, _81) 0 ] at: EXPR [ (1, _398) 0 ]) ", "EXPR [ (1, _363) (-1, _399) 18 ]", - "BLACKBOX::RANGE [(_399, 6)] []", "MEM (id: 3, write EXPR [ (1, _343) 0 ] at: EXPR [ (1, _399) 0 ]) ", "EXPR [ (1, _364) (-1, _400) 18 ]", - "BLACKBOX::RANGE [(_400, 6)] []", "MEM (id: 3, write EXPR [ (1, _82) 0 ] at: EXPR [ (1, _400) 0 ]) ", "EXPR [ (1, _363) (-1, _401) 19 ]", - "BLACKBOX::RANGE [(_401, 6)] []", "MEM (id: 3, write EXPR [ (1, _344) 0 ] at: EXPR [ (1, _401) 0 ]) ", "EXPR [ (1, _364) (-1, _402) 19 ]", - "BLACKBOX::RANGE [(_402, 6)] []", "MEM (id: 3, write EXPR [ (1, _83) 0 ] at: EXPR [ (1, _402) 0 ]) ", "EXPR [ (1, _363) (-1, _403) 20 ]", - "BLACKBOX::RANGE [(_403, 6)] []", "MEM (id: 3, write EXPR [ (1, _345) 0 ] at: EXPR [ (1, _403) 0 ]) ", "EXPR [ (1, _364) (-1, _404) 20 ]", - "BLACKBOX::RANGE [(_404, 6)] []", "MEM (id: 3, write EXPR [ (1, _84) 0 ] at: EXPR [ (1, _404) 0 ]) ", "EXPR [ (1, _363) (-1, _405) 21 ]", - "BLACKBOX::RANGE [(_405, 6)] []", "MEM (id: 3, write EXPR [ (1, _346) 0 ] at: EXPR [ (1, _405) 0 ]) ", "EXPR [ (1, _364) (-1, _406) 21 ]", - "BLACKBOX::RANGE [(_406, 6)] []", "MEM (id: 3, write EXPR [ (1, _85) 0 ] at: EXPR [ (1, _406) 0 ]) ", "EXPR [ (1, _363) (-1, _407) 22 ]", - "BLACKBOX::RANGE [(_407, 6)] []", "MEM (id: 3, write EXPR [ (1, _347) 0 ] at: EXPR [ (1, _407) 0 ]) ", "EXPR [ (1, _364) (-1, _408) 22 ]", - "BLACKBOX::RANGE [(_408, 6)] []", "MEM (id: 3, write EXPR [ (1, _86) 0 ] at: EXPR [ (1, _408) 0 ]) ", "EXPR [ (1, _363) (-1, _409) 23 ]", - "BLACKBOX::RANGE [(_409, 6)] []", "MEM (id: 3, write EXPR [ (1, _348) 0 ] at: EXPR [ (1, _409) 0 ]) ", "EXPR [ (1, _364) (-1, _410) 23 ]", - "BLACKBOX::RANGE [(_410, 6)] []", "MEM (id: 3, write EXPR [ (1, _87) 0 ] at: EXPR [ (1, _410) 0 ]) ", "EXPR [ (1, _363) (-1, _411) 24 ]", - "BLACKBOX::RANGE [(_411, 6)] []", "MEM (id: 3, write EXPR [ (1, _349) 0 ] at: EXPR [ (1, _411) 0 ]) ", "EXPR [ (1, _364) (-1, _412) 24 ]", - "BLACKBOX::RANGE [(_412, 6)] []", "MEM (id: 3, write EXPR [ (1, _88) 0 ] at: EXPR [ (1, _412) 0 ]) ", "EXPR [ (1, _363) (-1, _413) 25 ]", - "BLACKBOX::RANGE [(_413, 6)] []", "MEM (id: 3, write EXPR [ (1, _350) 0 ] at: EXPR [ (1, _413) 0 ]) ", "EXPR [ (1, _364) (-1, _414) 25 ]", - "BLACKBOX::RANGE [(_414, 6)] []", "MEM (id: 3, write EXPR [ (1, _89) 0 ] at: EXPR [ (1, _414) 0 ]) ", "EXPR [ (1, _363) (-1, _415) 26 ]", - "BLACKBOX::RANGE [(_415, 6)] []", "MEM (id: 3, write EXPR [ (1, _351) 0 ] at: EXPR [ (1, _415) 0 ]) ", "EXPR [ (1, _364) (-1, _416) 26 ]", - "BLACKBOX::RANGE [(_416, 6)] []", "MEM (id: 3, write EXPR [ (1, _90) 0 ] at: EXPR [ (1, _416) 0 ]) ", "EXPR [ (1, _363) (-1, _417) 27 ]", - "BLACKBOX::RANGE [(_417, 6)] []", "MEM (id: 3, write EXPR [ (1, _352) 0 ] at: EXPR [ (1, _417) 0 ]) ", "EXPR [ (1, _364) (-1, _418) 27 ]", - "BLACKBOX::RANGE [(_418, 6)] []", "MEM (id: 3, write EXPR [ (1, _91) 0 ] at: EXPR [ (1, _418) 0 ]) ", "EXPR [ (1, _363) (-1, _419) 28 ]", - "BLACKBOX::RANGE [(_419, 6)] []", "MEM (id: 3, write EXPR [ (1, _353) 0 ] at: EXPR [ (1, _419) 0 ]) ", "EXPR [ (1, _364) (-1, _420) 28 ]", - "BLACKBOX::RANGE [(_420, 6)] []", "MEM (id: 3, write EXPR [ (1, _92) 0 ] at: EXPR [ (1, _420) 0 ]) ", "EXPR [ (1, _363) (-1, _421) 29 ]", - "BLACKBOX::RANGE [(_421, 6)] []", "MEM (id: 3, write EXPR [ (1, _354) 0 ] at: EXPR [ (1, _421) 0 ]) ", "EXPR [ (1, _364) (-1, _422) 29 ]", - "BLACKBOX::RANGE [(_422, 6)] []", "MEM (id: 3, write EXPR [ (1, _93) 0 ] at: EXPR [ (1, _422) 0 ]) ", "EXPR [ (1, _363) (-1, _423) 30 ]", - "BLACKBOX::RANGE [(_423, 6)] []", "MEM (id: 3, write EXPR [ (1, _355) 0 ] at: EXPR [ (1, _423) 0 ]) ", "EXPR [ (1, _364) (-1, _424) 30 ]", - "BLACKBOX::RANGE [(_424, 6)] []", "MEM (id: 3, write EXPR [ (1, _94) 0 ] at: EXPR [ (1, _424) 0 ]) ", "EXPR [ (1, _363) (-1, _425) 31 ]", - "BLACKBOX::RANGE [(_425, 6)] []", "MEM (id: 3, write EXPR [ (1, _356) 0 ] at: EXPR [ (1, _425) 0 ]) ", "EXPR [ (1, _364) (-1, _426) 31 ]", - "BLACKBOX::RANGE [(_426, 6)] []", "MEM (id: 3, write EXPR [ (1, _95) 0 ] at: EXPR [ (1, _426) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _427) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _199) 0 ], value: EXPR [ (1, _428) 0 ]) ", @@ -838,7 +710,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(21), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(20), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(21), offset_address: Direct(20) }, Const { destination: Direct(2), bit_size: Field, value: 0 }, BinaryFieldOp { destination: Direct(3), op: Equals, lhs: Direct(0), rhs: Direct(2) }, JumpIf { condition: Direct(3), location: 8 }, Const { destination: Direct(1), bit_size: Field, value: 1 }, BinaryFieldOp { destination: Direct(0), op: Div, lhs: Direct(1), rhs: Direct(0) }, Stop { return_data: HeapVector { pointer: Direct(20), size: Direct(21) } }]" ], - "debug_symbols": "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", + "debug_symbols": "nZjLbhtHEEX/hWstpqv69sO/EgSGLNOGAEISaClAYPjfM8O5h7YXChKuumxWHx4JvLoDfj98Pn56+/rx8enL87fDhz++Hz6dH0+nx68fT88P96+Pz0/r/37/cXfgnx9fz8fj+l+HX15fb73cn49Pr4cPT2+n093hr/vT22Xp28v90+V8vT+vry53h+PT5/VcgV8eT8dt+nH38/by/tVefbeUcr2t36+X96/nEr6fS95yvyX3e9x0//r+fdxwX8l91VveX+V6P+Yt93vj/rzp/XW932/5/Svy6n/T76/16/vf4t+u79/0/v1/AZRshU9w9nZFlPmfFTrxaWO54UfoSYR6ff8jUN8HxFKmCbHEzx9B/4OQy5WQ41fCn+s/7h8ez7/93TmUmGti7g4lF5/FZ/jMw4e6ndWnfLaVup19/XVt5/A597MuPlde386VN7Zz5c3trH595ZVlG5oXuhcMrNMLWvYFlX1BsS8oWahekBeaFzoLwwtzX2h2bMULzZLNks2SDclmyWbJZsmGZLdkt2S3ZEeyW7JbsluyI9kt2S05LDmQHJYclhyWHEgOSw5LDksOJKclpyWnJSeS05LTktOSE8lpyblLxrJLrh/gfWH9+F4W1g+hF6oXxELzQvfC8IIlo+ySUXbJKLtklGShekFeaF7oLAwvWDIsGUiGJcOSYclAMiwZlgxLBpJpybRkWjKRTEumJdOSiWRaMi3p3ERF0sEJByccnCA44eCEgxMOThCccHDCwQkHJwhOODjh4ISDEwQnHJxwcMLBCYITDk44OOHgBMEJBye24GxNGVty9mF62KKzD4UhGJKhMoihMUDukDvkAXlAHpAH5AF5QB6QB+QBeUCekCfkCXlCnpAn5Al5Qp6Qp8m5LAyFIRiSoTKIoTF0hsEAuUAukAvkArlALpAL5AK5QC6QA3JADsgBOSAH5IAckANyQE7ICTkhJ+SEnJATckJOyAm5Qq6QK+QKuUKukCvkCrlCrpAFWZAFWZAFWZAFWZAFWZAb5Aa5QW6QG+QGuUEmg0kGkwwmGUwymGQwyWCSwSSDSQaTDCYZTDKYZDDJYJLBJINJBpMMJhlMMphkMMlgksEkg0kGkwwmGcxLBnMbGkNnGAz7I1FdFp/FZ/jcH4nqUn3K5/5IVJf9kahu0evbOS9/++oWvLmdZX/9ErtlG9IL1QvyQmOhe2F4YX/IqpfAbQtb4LaFLW/bwha3y0JlQV5oXrDjJWqXBUumJdOSiWRaMi2Zlkwk05JpST8J1opktWS1ZLVkRbJaslqyWrIiWS0pS8qSQlKWlCVlSSEpS8qSsmRDslmyWbJZsiHZLNks2SzZkGyW7JbsluxIdkt2S3ZLdiS7JbsluyUHksOSw5LDkgPJYclhyWHJgeSw5LTktOREclpyWnJaciI5LTktOXdJLZbUsktq2SW1pBcqC/JC80L3wmBhl5SDIwdHBEcOjhwcOTgiOHJw5ODIwRHBkYMjB0cOjgiOHBw5OHJwRHDk4MjBkYMjgiMHR/ST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4lnRPGMKJ4RxTOiLs+Ia+G0S9QuQ2EIhmSoDGJoDJ1hMEAukAvkArlALpAL5AK5QC6QC+SAHJADckAOyAE5IAfkgByQL8+I9cf25cj58f7T6fht/2L1y9vTwy/fs77+/cIrfBP7cn5+OH5+Ox+370Yur63flvwD", "file_map": { "19": { "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(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3(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(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment(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(\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(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(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 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)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\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 EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation(_input: [Field; N], _state_length: u32) -> [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(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(_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;\n\nimpl BuildHasher for BuildHasherDefault\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 Default for BuildHasherDefault\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash(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(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(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(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(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(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(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(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(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(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(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(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(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl Hash for [T]\nwhere\n T: Hash,\n{\n fn hash(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 Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash(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 Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash(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 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(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", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap index 47bed4ef93d..0b19768dc0b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap @@ -211,199 +211,135 @@ expression: artifact "EXPR [ (1, _130, _131) (1, _132) -1 ]", "EXPR [ (1, _130, _132) 0 ]", "EXPR [ (-32, _132) (-1, _133) 32 ]", - "BLACKBOX::RANGE [(_133, 6)] []", "EXPR [ (-1, _134) 0 ]", "INIT (id: 3, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "INIT (id: 4, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "MEM (id: 4, write EXPR [ (1, _0) 0 ] at: EXPR [ (1, _133) 0 ]) ", "EXPR [ (32, _132) (-1, _135) 0 ]", - "BLACKBOX::RANGE [(_135, 6)] []", "MEM (id: 4, write EXPR [ (1, _32) 0 ] at: EXPR [ (1, _135) 0 ]) ", "EXPR [ (1, _133) (-1, _136) 1 ]", - "BLACKBOX::RANGE [(_136, 6)] []", "MEM (id: 4, write EXPR [ (1, _1) 0 ] at: EXPR [ (1, _136) 0 ]) ", "EXPR [ (1, _135) (-1, _137) 1 ]", - "BLACKBOX::RANGE [(_137, 6)] []", "MEM (id: 4, write EXPR [ (1, _33) 0 ] at: EXPR [ (1, _137) 0 ]) ", "EXPR [ (1, _133) (-1, _138) 2 ]", - "BLACKBOX::RANGE [(_138, 6)] []", "MEM (id: 4, write EXPR [ (1, _2) 0 ] at: EXPR [ (1, _138) 0 ]) ", "EXPR [ (1, _135) (-1, _139) 2 ]", - "BLACKBOX::RANGE [(_139, 6)] []", "MEM (id: 4, write EXPR [ (1, _34) 0 ] at: EXPR [ (1, _139) 0 ]) ", "EXPR [ (1, _133) (-1, _140) 3 ]", - "BLACKBOX::RANGE [(_140, 6)] []", "MEM (id: 4, write EXPR [ (1, _3) 0 ] at: EXPR [ (1, _140) 0 ]) ", "EXPR [ (1, _135) (-1, _141) 3 ]", - "BLACKBOX::RANGE [(_141, 6)] []", "MEM (id: 4, write EXPR [ (1, _35) 0 ] at: EXPR [ (1, _141) 0 ]) ", "EXPR [ (1, _133) (-1, _142) 4 ]", - "BLACKBOX::RANGE [(_142, 6)] []", "MEM (id: 4, write EXPR [ (1, _4) 0 ] at: EXPR [ (1, _142) 0 ]) ", "EXPR [ (1, _135) (-1, _143) 4 ]", - "BLACKBOX::RANGE [(_143, 6)] []", "MEM (id: 4, write EXPR [ (1, _36) 0 ] at: EXPR [ (1, _143) 0 ]) ", "EXPR [ (1, _133) (-1, _144) 5 ]", - "BLACKBOX::RANGE [(_144, 6)] []", "MEM (id: 4, write EXPR [ (1, _5) 0 ] at: EXPR [ (1, _144) 0 ]) ", "EXPR [ (1, _135) (-1, _145) 5 ]", - "BLACKBOX::RANGE [(_145, 6)] []", "MEM (id: 4, write EXPR [ (1, _37) 0 ] at: EXPR [ (1, _145) 0 ]) ", "EXPR [ (1, _133) (-1, _146) 6 ]", - "BLACKBOX::RANGE [(_146, 6)] []", "MEM (id: 4, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _146) 0 ]) ", "EXPR [ (1, _135) (-1, _147) 6 ]", - "BLACKBOX::RANGE [(_147, 6)] []", "MEM (id: 4, write EXPR [ (1, _38) 0 ] at: EXPR [ (1, _147) 0 ]) ", "EXPR [ (1, _133) (-1, _148) 7 ]", - "BLACKBOX::RANGE [(_148, 6)] []", "MEM (id: 4, write EXPR [ (1, _7) 0 ] at: EXPR [ (1, _148) 0 ]) ", "EXPR [ (1, _135) (-1, _149) 7 ]", - "BLACKBOX::RANGE [(_149, 6)] []", "MEM (id: 4, write EXPR [ (1, _39) 0 ] at: EXPR [ (1, _149) 0 ]) ", "EXPR [ (1, _133) (-1, _150) 8 ]", - "BLACKBOX::RANGE [(_150, 6)] []", "MEM (id: 4, write EXPR [ (1, _8) 0 ] at: EXPR [ (1, _150) 0 ]) ", "EXPR [ (1, _135) (-1, _151) 8 ]", - "BLACKBOX::RANGE [(_151, 6)] []", "MEM (id: 4, write EXPR [ (1, _40) 0 ] at: EXPR [ (1, _151) 0 ]) ", "EXPR [ (1, _133) (-1, _152) 9 ]", - "BLACKBOX::RANGE [(_152, 6)] []", "MEM (id: 4, write EXPR [ (1, _9) 0 ] at: EXPR [ (1, _152) 0 ]) ", "EXPR [ (1, _135) (-1, _153) 9 ]", - "BLACKBOX::RANGE [(_153, 6)] []", "MEM (id: 4, write EXPR [ (1, _41) 0 ] at: EXPR [ (1, _153) 0 ]) ", "EXPR [ (1, _133) (-1, _154) 10 ]", - "BLACKBOX::RANGE [(_154, 6)] []", "MEM (id: 4, write EXPR [ (1, _10) 0 ] at: EXPR [ (1, _154) 0 ]) ", "EXPR [ (1, _135) (-1, _155) 10 ]", - "BLACKBOX::RANGE [(_155, 6)] []", "MEM (id: 4, write EXPR [ (1, _42) 0 ] at: EXPR [ (1, _155) 0 ]) ", "EXPR [ (1, _133) (-1, _156) 11 ]", - "BLACKBOX::RANGE [(_156, 6)] []", "MEM (id: 4, write EXPR [ (1, _11) 0 ] at: EXPR [ (1, _156) 0 ]) ", "EXPR [ (1, _135) (-1, _157) 11 ]", - "BLACKBOX::RANGE [(_157, 6)] []", "MEM (id: 4, write EXPR [ (1, _43) 0 ] at: EXPR [ (1, _157) 0 ]) ", "EXPR [ (1, _133) (-1, _158) 12 ]", - "BLACKBOX::RANGE [(_158, 6)] []", "MEM (id: 4, write EXPR [ (1, _12) 0 ] at: EXPR [ (1, _158) 0 ]) ", "EXPR [ (1, _135) (-1, _159) 12 ]", - "BLACKBOX::RANGE [(_159, 6)] []", "MEM (id: 4, write EXPR [ (1, _44) 0 ] at: EXPR [ (1, _159) 0 ]) ", "EXPR [ (1, _133) (-1, _160) 13 ]", - "BLACKBOX::RANGE [(_160, 6)] []", "MEM (id: 4, write EXPR [ (1, _13) 0 ] at: EXPR [ (1, _160) 0 ]) ", "EXPR [ (1, _135) (-1, _161) 13 ]", - "BLACKBOX::RANGE [(_161, 6)] []", "MEM (id: 4, write EXPR [ (1, _45) 0 ] at: EXPR [ (1, _161) 0 ]) ", "EXPR [ (1, _133) (-1, _162) 14 ]", - "BLACKBOX::RANGE [(_162, 6)] []", "MEM (id: 4, write EXPR [ (1, _14) 0 ] at: EXPR [ (1, _162) 0 ]) ", "EXPR [ (1, _135) (-1, _163) 14 ]", - "BLACKBOX::RANGE [(_163, 6)] []", "MEM (id: 4, write EXPR [ (1, _46) 0 ] at: EXPR [ (1, _163) 0 ]) ", "EXPR [ (1, _133) (-1, _164) 15 ]", - "BLACKBOX::RANGE [(_164, 6)] []", "MEM (id: 4, write EXPR [ (1, _15) 0 ] at: EXPR [ (1, _164) 0 ]) ", "EXPR [ (1, _135) (-1, _165) 15 ]", - "BLACKBOX::RANGE [(_165, 6)] []", "MEM (id: 4, write EXPR [ (1, _47) 0 ] at: EXPR [ (1, _165) 0 ]) ", "EXPR [ (1, _133) (-1, _166) 16 ]", - "BLACKBOX::RANGE [(_166, 6)] []", "MEM (id: 4, write EXPR [ (1, _16) 0 ] at: EXPR [ (1, _166) 0 ]) ", "EXPR [ (1, _135) (-1, _167) 16 ]", - "BLACKBOX::RANGE [(_167, 6)] []", "MEM (id: 4, write EXPR [ (1, _48) 0 ] at: EXPR [ (1, _167) 0 ]) ", "EXPR [ (1, _133) (-1, _168) 17 ]", - "BLACKBOX::RANGE [(_168, 6)] []", "MEM (id: 4, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _168) 0 ]) ", "EXPR [ (1, _135) (-1, _169) 17 ]", - "BLACKBOX::RANGE [(_169, 6)] []", "MEM (id: 4, write EXPR [ (1, _49) 0 ] at: EXPR [ (1, _169) 0 ]) ", "EXPR [ (1, _133) (-1, _170) 18 ]", - "BLACKBOX::RANGE [(_170, 6)] []", "MEM (id: 4, write EXPR [ (1, _18) 0 ] at: EXPR [ (1, _170) 0 ]) ", "EXPR [ (1, _135) (-1, _171) 18 ]", - "BLACKBOX::RANGE [(_171, 6)] []", "MEM (id: 4, write EXPR [ (1, _50) 0 ] at: EXPR [ (1, _171) 0 ]) ", "EXPR [ (1, _133) (-1, _172) 19 ]", - "BLACKBOX::RANGE [(_172, 6)] []", "MEM (id: 4, write EXPR [ (1, _19) 0 ] at: EXPR [ (1, _172) 0 ]) ", "EXPR [ (1, _135) (-1, _173) 19 ]", - "BLACKBOX::RANGE [(_173, 6)] []", "MEM (id: 4, write EXPR [ (1, _51) 0 ] at: EXPR [ (1, _173) 0 ]) ", "EXPR [ (1, _133) (-1, _174) 20 ]", - "BLACKBOX::RANGE [(_174, 6)] []", "MEM (id: 4, write EXPR [ (1, _20) 0 ] at: EXPR [ (1, _174) 0 ]) ", "EXPR [ (1, _135) (-1, _175) 20 ]", - "BLACKBOX::RANGE [(_175, 6)] []", "MEM (id: 4, write EXPR [ (1, _52) 0 ] at: EXPR [ (1, _175) 0 ]) ", "EXPR [ (1, _133) (-1, _176) 21 ]", - "BLACKBOX::RANGE [(_176, 6)] []", "MEM (id: 4, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _176) 0 ]) ", "EXPR [ (1, _135) (-1, _177) 21 ]", - "BLACKBOX::RANGE [(_177, 6)] []", "MEM (id: 4, write EXPR [ (1, _53) 0 ] at: EXPR [ (1, _177) 0 ]) ", "EXPR [ (1, _133) (-1, _178) 22 ]", - "BLACKBOX::RANGE [(_178, 6)] []", "MEM (id: 4, write EXPR [ (1, _22) 0 ] at: EXPR [ (1, _178) 0 ]) ", "EXPR [ (1, _135) (-1, _179) 22 ]", - "BLACKBOX::RANGE [(_179, 6)] []", "MEM (id: 4, write EXPR [ (1, _54) 0 ] at: EXPR [ (1, _179) 0 ]) ", "EXPR [ (1, _133) (-1, _180) 23 ]", - "BLACKBOX::RANGE [(_180, 6)] []", "MEM (id: 4, write EXPR [ (1, _23) 0 ] at: EXPR [ (1, _180) 0 ]) ", "EXPR [ (1, _135) (-1, _181) 23 ]", - "BLACKBOX::RANGE [(_181, 6)] []", "MEM (id: 4, write EXPR [ (1, _55) 0 ] at: EXPR [ (1, _181) 0 ]) ", "EXPR [ (1, _133) (-1, _182) 24 ]", - "BLACKBOX::RANGE [(_182, 6)] []", "MEM (id: 4, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _182) 0 ]) ", "EXPR [ (1, _135) (-1, _183) 24 ]", - "BLACKBOX::RANGE [(_183, 6)] []", "MEM (id: 4, write EXPR [ (1, _56) 0 ] at: EXPR [ (1, _183) 0 ]) ", "EXPR [ (1, _133) (-1, _184) 25 ]", - "BLACKBOX::RANGE [(_184, 6)] []", "MEM (id: 4, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _184) 0 ]) ", "EXPR [ (1, _135) (-1, _185) 25 ]", - "BLACKBOX::RANGE [(_185, 6)] []", "MEM (id: 4, write EXPR [ (1, _57) 0 ] at: EXPR [ (1, _185) 0 ]) ", "EXPR [ (1, _133) (-1, _186) 26 ]", - "BLACKBOX::RANGE [(_186, 6)] []", "MEM (id: 4, write EXPR [ (1, _26) 0 ] at: EXPR [ (1, _186) 0 ]) ", "EXPR [ (1, _135) (-1, _187) 26 ]", - "BLACKBOX::RANGE [(_187, 6)] []", "MEM (id: 4, write EXPR [ (1, _58) 0 ] at: EXPR [ (1, _187) 0 ]) ", "EXPR [ (1, _133) (-1, _188) 27 ]", - "BLACKBOX::RANGE [(_188, 6)] []", "MEM (id: 4, write EXPR [ (1, _27) 0 ] at: EXPR [ (1, _188) 0 ]) ", "EXPR [ (1, _135) (-1, _189) 27 ]", - "BLACKBOX::RANGE [(_189, 6)] []", "MEM (id: 4, write EXPR [ (1, _59) 0 ] at: EXPR [ (1, _189) 0 ]) ", "EXPR [ (1, _133) (-1, _190) 28 ]", - "BLACKBOX::RANGE [(_190, 6)] []", "MEM (id: 4, write EXPR [ (1, _28) 0 ] at: EXPR [ (1, _190) 0 ]) ", "EXPR [ (1, _135) (-1, _191) 28 ]", - "BLACKBOX::RANGE [(_191, 6)] []", "MEM (id: 4, write EXPR [ (1, _60) 0 ] at: EXPR [ (1, _191) 0 ]) ", "EXPR [ (1, _133) (-1, _192) 29 ]", - "BLACKBOX::RANGE [(_192, 6)] []", "MEM (id: 4, write EXPR [ (1, _29) 0 ] at: EXPR [ (1, _192) 0 ]) ", "EXPR [ (1, _135) (-1, _193) 29 ]", - "BLACKBOX::RANGE [(_193, 6)] []", "MEM (id: 4, write EXPR [ (1, _61) 0 ] at: EXPR [ (1, _193) 0 ]) ", "EXPR [ (1, _133) (-1, _194) 30 ]", - "BLACKBOX::RANGE [(_194, 6)] []", "MEM (id: 4, write EXPR [ (1, _30) 0 ] at: EXPR [ (1, _194) 0 ]) ", "EXPR [ (1, _135) (-1, _195) 30 ]", - "BLACKBOX::RANGE [(_195, 6)] []", "MEM (id: 4, write EXPR [ (1, _62) 0 ] at: EXPR [ (1, _195) 0 ]) ", "EXPR [ (1, _133) (-1, _196) 31 ]", - "BLACKBOX::RANGE [(_196, 6)] []", "MEM (id: 4, write EXPR [ (1, _31) 0 ] at: EXPR [ (1, _196) 0 ]) ", "EXPR [ (1, _135) (-1, _197) 31 ]", - "BLACKBOX::RANGE [(_197, 6)] []", "MEM (id: 4, write EXPR [ (1, _63) 0 ] at: EXPR [ (1, _197) 0 ]) ", "MEM (id: 4, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _198) 0 ]) ", "EXPR [ (-1, _199) 1 ]", @@ -545,196 +481,132 @@ expression: artifact "EXPR [ (1, _360, _361) (1, _362) -1 ]", "EXPR [ (1, _360, _362) 0 ]", "EXPR [ (-32, _362) (-1, _363) 32 ]", - "BLACKBOX::RANGE [(_363, 6)] []", "MEM (id: 3, write EXPR [ (1, _325) 0 ] at: EXPR [ (1, _363) 0 ]) ", "EXPR [ (32, _362) (-1, _364) 0 ]", - "BLACKBOX::RANGE [(_364, 6)] []", "MEM (id: 3, write EXPR [ (1, _64) 0 ] at: EXPR [ (1, _364) 0 ]) ", "EXPR [ (1, _363) (-1, _365) 1 ]", - "BLACKBOX::RANGE [(_365, 6)] []", "MEM (id: 3, write EXPR [ (1, _326) 0 ] at: EXPR [ (1, _365) 0 ]) ", "EXPR [ (1, _364) (-1, _366) 1 ]", - "BLACKBOX::RANGE [(_366, 6)] []", "MEM (id: 3, write EXPR [ (1, _65) 0 ] at: EXPR [ (1, _366) 0 ]) ", "EXPR [ (1, _363) (-1, _367) 2 ]", - "BLACKBOX::RANGE [(_367, 6)] []", "MEM (id: 3, write EXPR [ (1, _327) 0 ] at: EXPR [ (1, _367) 0 ]) ", "EXPR [ (1, _364) (-1, _368) 2 ]", - "BLACKBOX::RANGE [(_368, 6)] []", "MEM (id: 3, write EXPR [ (1, _66) 0 ] at: EXPR [ (1, _368) 0 ]) ", "EXPR [ (1, _363) (-1, _369) 3 ]", - "BLACKBOX::RANGE [(_369, 6)] []", "MEM (id: 3, write EXPR [ (1, _328) 0 ] at: EXPR [ (1, _369) 0 ]) ", "EXPR [ (1, _364) (-1, _370) 3 ]", - "BLACKBOX::RANGE [(_370, 6)] []", "MEM (id: 3, write EXPR [ (1, _67) 0 ] at: EXPR [ (1, _370) 0 ]) ", "EXPR [ (1, _363) (-1, _371) 4 ]", - "BLACKBOX::RANGE [(_371, 6)] []", "MEM (id: 3, write EXPR [ (1, _329) 0 ] at: EXPR [ (1, _371) 0 ]) ", "EXPR [ (1, _364) (-1, _372) 4 ]", - "BLACKBOX::RANGE [(_372, 6)] []", "MEM (id: 3, write EXPR [ (1, _68) 0 ] at: EXPR [ (1, _372) 0 ]) ", "EXPR [ (1, _363) (-1, _373) 5 ]", - "BLACKBOX::RANGE [(_373, 6)] []", "MEM (id: 3, write EXPR [ (1, _330) 0 ] at: EXPR [ (1, _373) 0 ]) ", "EXPR [ (1, _364) (-1, _374) 5 ]", - "BLACKBOX::RANGE [(_374, 6)] []", "MEM (id: 3, write EXPR [ (1, _69) 0 ] at: EXPR [ (1, _374) 0 ]) ", "EXPR [ (1, _363) (-1, _375) 6 ]", - "BLACKBOX::RANGE [(_375, 6)] []", "MEM (id: 3, write EXPR [ (1, _331) 0 ] at: EXPR [ (1, _375) 0 ]) ", "EXPR [ (1, _364) (-1, _376) 6 ]", - "BLACKBOX::RANGE [(_376, 6)] []", "MEM (id: 3, write EXPR [ (1, _70) 0 ] at: EXPR [ (1, _376) 0 ]) ", "EXPR [ (1, _363) (-1, _377) 7 ]", - "BLACKBOX::RANGE [(_377, 6)] []", "MEM (id: 3, write EXPR [ (1, _332) 0 ] at: EXPR [ (1, _377) 0 ]) ", "EXPR [ (1, _364) (-1, _378) 7 ]", - "BLACKBOX::RANGE [(_378, 6)] []", "MEM (id: 3, write EXPR [ (1, _71) 0 ] at: EXPR [ (1, _378) 0 ]) ", "EXPR [ (1, _363) (-1, _379) 8 ]", - "BLACKBOX::RANGE [(_379, 6)] []", "MEM (id: 3, write EXPR [ (1, _333) 0 ] at: EXPR [ (1, _379) 0 ]) ", "EXPR [ (1, _364) (-1, _380) 8 ]", - "BLACKBOX::RANGE [(_380, 6)] []", "MEM (id: 3, write EXPR [ (1, _72) 0 ] at: EXPR [ (1, _380) 0 ]) ", "EXPR [ (1, _363) (-1, _381) 9 ]", - "BLACKBOX::RANGE [(_381, 6)] []", "MEM (id: 3, write EXPR [ (1, _334) 0 ] at: EXPR [ (1, _381) 0 ]) ", "EXPR [ (1, _364) (-1, _382) 9 ]", - "BLACKBOX::RANGE [(_382, 6)] []", "MEM (id: 3, write EXPR [ (1, _73) 0 ] at: EXPR [ (1, _382) 0 ]) ", "EXPR [ (1, _363) (-1, _383) 10 ]", - "BLACKBOX::RANGE [(_383, 6)] []", "MEM (id: 3, write EXPR [ (1, _335) 0 ] at: EXPR [ (1, _383) 0 ]) ", "EXPR [ (1, _364) (-1, _384) 10 ]", - "BLACKBOX::RANGE [(_384, 6)] []", "MEM (id: 3, write EXPR [ (1, _74) 0 ] at: EXPR [ (1, _384) 0 ]) ", "EXPR [ (1, _363) (-1, _385) 11 ]", - "BLACKBOX::RANGE [(_385, 6)] []", "MEM (id: 3, write EXPR [ (1, _336) 0 ] at: EXPR [ (1, _385) 0 ]) ", "EXPR [ (1, _364) (-1, _386) 11 ]", - "BLACKBOX::RANGE [(_386, 6)] []", "MEM (id: 3, write EXPR [ (1, _75) 0 ] at: EXPR [ (1, _386) 0 ]) ", "EXPR [ (1, _363) (-1, _387) 12 ]", - "BLACKBOX::RANGE [(_387, 6)] []", "MEM (id: 3, write EXPR [ (1, _337) 0 ] at: EXPR [ (1, _387) 0 ]) ", "EXPR [ (1, _364) (-1, _388) 12 ]", - "BLACKBOX::RANGE [(_388, 6)] []", "MEM (id: 3, write EXPR [ (1, _76) 0 ] at: EXPR [ (1, _388) 0 ]) ", "EXPR [ (1, _363) (-1, _389) 13 ]", - "BLACKBOX::RANGE [(_389, 6)] []", "MEM (id: 3, write EXPR [ (1, _338) 0 ] at: EXPR [ (1, _389) 0 ]) ", "EXPR [ (1, _364) (-1, _390) 13 ]", - "BLACKBOX::RANGE [(_390, 6)] []", "MEM (id: 3, write EXPR [ (1, _77) 0 ] at: EXPR [ (1, _390) 0 ]) ", "EXPR [ (1, _363) (-1, _391) 14 ]", - "BLACKBOX::RANGE [(_391, 6)] []", "MEM (id: 3, write EXPR [ (1, _339) 0 ] at: EXPR [ (1, _391) 0 ]) ", "EXPR [ (1, _364) (-1, _392) 14 ]", - "BLACKBOX::RANGE [(_392, 6)] []", "MEM (id: 3, write EXPR [ (1, _78) 0 ] at: EXPR [ (1, _392) 0 ]) ", "EXPR [ (1, _363) (-1, _393) 15 ]", - "BLACKBOX::RANGE [(_393, 6)] []", "MEM (id: 3, write EXPR [ (1, _340) 0 ] at: EXPR [ (1, _393) 0 ]) ", "EXPR [ (1, _364) (-1, _394) 15 ]", - "BLACKBOX::RANGE [(_394, 6)] []", "MEM (id: 3, write EXPR [ (1, _79) 0 ] at: EXPR [ (1, _394) 0 ]) ", "EXPR [ (1, _363) (-1, _395) 16 ]", - "BLACKBOX::RANGE [(_395, 6)] []", "MEM (id: 3, write EXPR [ (1, _341) 0 ] at: EXPR [ (1, _395) 0 ]) ", "EXPR [ (1, _364) (-1, _396) 16 ]", - "BLACKBOX::RANGE [(_396, 6)] []", "MEM (id: 3, write EXPR [ (1, _80) 0 ] at: EXPR [ (1, _396) 0 ]) ", "EXPR [ (1, _363) (-1, _397) 17 ]", - "BLACKBOX::RANGE [(_397, 6)] []", "MEM (id: 3, write EXPR [ (1, _342) 0 ] at: EXPR [ (1, _397) 0 ]) ", "EXPR [ (1, _364) (-1, _398) 17 ]", - "BLACKBOX::RANGE [(_398, 6)] []", "MEM (id: 3, write EXPR [ (1, _81) 0 ] at: EXPR [ (1, _398) 0 ]) ", "EXPR [ (1, _363) (-1, _399) 18 ]", - "BLACKBOX::RANGE [(_399, 6)] []", "MEM (id: 3, write EXPR [ (1, _343) 0 ] at: EXPR [ (1, _399) 0 ]) ", "EXPR [ (1, _364) (-1, _400) 18 ]", - "BLACKBOX::RANGE [(_400, 6)] []", "MEM (id: 3, write EXPR [ (1, _82) 0 ] at: EXPR [ (1, _400) 0 ]) ", "EXPR [ (1, _363) (-1, _401) 19 ]", - "BLACKBOX::RANGE [(_401, 6)] []", "MEM (id: 3, write EXPR [ (1, _344) 0 ] at: EXPR [ (1, _401) 0 ]) ", "EXPR [ (1, _364) (-1, _402) 19 ]", - "BLACKBOX::RANGE [(_402, 6)] []", "MEM (id: 3, write EXPR [ (1, _83) 0 ] at: EXPR [ (1, _402) 0 ]) ", "EXPR [ (1, _363) (-1, _403) 20 ]", - "BLACKBOX::RANGE [(_403, 6)] []", "MEM (id: 3, write EXPR [ (1, _345) 0 ] at: EXPR [ (1, _403) 0 ]) ", "EXPR [ (1, _364) (-1, _404) 20 ]", - "BLACKBOX::RANGE [(_404, 6)] []", "MEM (id: 3, write EXPR [ (1, _84) 0 ] at: EXPR [ (1, _404) 0 ]) ", "EXPR [ (1, _363) (-1, _405) 21 ]", - "BLACKBOX::RANGE [(_405, 6)] []", "MEM (id: 3, write EXPR [ (1, _346) 0 ] at: EXPR [ (1, _405) 0 ]) ", "EXPR [ (1, _364) (-1, _406) 21 ]", - "BLACKBOX::RANGE [(_406, 6)] []", "MEM (id: 3, write EXPR [ (1, _85) 0 ] at: EXPR [ (1, _406) 0 ]) ", "EXPR [ (1, _363) (-1, _407) 22 ]", - "BLACKBOX::RANGE [(_407, 6)] []", "MEM (id: 3, write EXPR [ (1, _347) 0 ] at: EXPR [ (1, _407) 0 ]) ", "EXPR [ (1, _364) (-1, _408) 22 ]", - "BLACKBOX::RANGE [(_408, 6)] []", "MEM (id: 3, write EXPR [ (1, _86) 0 ] at: EXPR [ (1, _408) 0 ]) ", "EXPR [ (1, _363) (-1, _409) 23 ]", - "BLACKBOX::RANGE [(_409, 6)] []", "MEM (id: 3, write EXPR [ (1, _348) 0 ] at: EXPR [ (1, _409) 0 ]) ", "EXPR [ (1, _364) (-1, _410) 23 ]", - "BLACKBOX::RANGE [(_410, 6)] []", "MEM (id: 3, write EXPR [ (1, _87) 0 ] at: EXPR [ (1, _410) 0 ]) ", "EXPR [ (1, _363) (-1, _411) 24 ]", - "BLACKBOX::RANGE [(_411, 6)] []", "MEM (id: 3, write EXPR [ (1, _349) 0 ] at: EXPR [ (1, _411) 0 ]) ", "EXPR [ (1, _364) (-1, _412) 24 ]", - "BLACKBOX::RANGE [(_412, 6)] []", "MEM (id: 3, write EXPR [ (1, _88) 0 ] at: EXPR [ (1, _412) 0 ]) ", "EXPR [ (1, _363) (-1, _413) 25 ]", - "BLACKBOX::RANGE [(_413, 6)] []", "MEM (id: 3, write EXPR [ (1, _350) 0 ] at: EXPR [ (1, _413) 0 ]) ", "EXPR [ (1, _364) (-1, _414) 25 ]", - "BLACKBOX::RANGE [(_414, 6)] []", "MEM (id: 3, write EXPR [ (1, _89) 0 ] at: EXPR [ (1, _414) 0 ]) ", "EXPR [ (1, _363) (-1, _415) 26 ]", - "BLACKBOX::RANGE [(_415, 6)] []", "MEM (id: 3, write EXPR [ (1, _351) 0 ] at: EXPR [ (1, _415) 0 ]) ", "EXPR [ (1, _364) (-1, _416) 26 ]", - "BLACKBOX::RANGE [(_416, 6)] []", "MEM (id: 3, write EXPR [ (1, _90) 0 ] at: EXPR [ (1, _416) 0 ]) ", "EXPR [ (1, _363) (-1, _417) 27 ]", - "BLACKBOX::RANGE [(_417, 6)] []", "MEM (id: 3, write EXPR [ (1, _352) 0 ] at: EXPR [ (1, _417) 0 ]) ", "EXPR [ (1, _364) (-1, _418) 27 ]", - "BLACKBOX::RANGE [(_418, 6)] []", "MEM (id: 3, write EXPR [ (1, _91) 0 ] at: EXPR [ (1, _418) 0 ]) ", "EXPR [ (1, _363) (-1, _419) 28 ]", - "BLACKBOX::RANGE [(_419, 6)] []", "MEM (id: 3, write EXPR [ (1, _353) 0 ] at: EXPR [ (1, _419) 0 ]) ", "EXPR [ (1, _364) (-1, _420) 28 ]", - "BLACKBOX::RANGE [(_420, 6)] []", "MEM (id: 3, write EXPR [ (1, _92) 0 ] at: EXPR [ (1, _420) 0 ]) ", "EXPR [ (1, _363) (-1, _421) 29 ]", - "BLACKBOX::RANGE [(_421, 6)] []", "MEM (id: 3, write EXPR [ (1, _354) 0 ] at: EXPR [ (1, _421) 0 ]) ", "EXPR [ (1, _364) (-1, _422) 29 ]", - "BLACKBOX::RANGE [(_422, 6)] []", "MEM (id: 3, write EXPR [ (1, _93) 0 ] at: EXPR [ (1, _422) 0 ]) ", "EXPR [ (1, _363) (-1, _423) 30 ]", - "BLACKBOX::RANGE [(_423, 6)] []", "MEM (id: 3, write EXPR [ (1, _355) 0 ] at: EXPR [ (1, _423) 0 ]) ", "EXPR [ (1, _364) (-1, _424) 30 ]", - "BLACKBOX::RANGE [(_424, 6)] []", "MEM (id: 3, write EXPR [ (1, _94) 0 ] at: EXPR [ (1, _424) 0 ]) ", "EXPR [ (1, _363) (-1, _425) 31 ]", - "BLACKBOX::RANGE [(_425, 6)] []", "MEM (id: 3, write EXPR [ (1, _356) 0 ] at: EXPR [ (1, _425) 0 ]) ", "EXPR [ (1, _364) (-1, _426) 31 ]", - "BLACKBOX::RANGE [(_426, 6)] []", "MEM (id: 3, write EXPR [ (1, _95) 0 ] at: EXPR [ (1, _426) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _427) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _199) 0 ], value: EXPR [ (1, _428) 0 ]) ", @@ -838,7 +710,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(21), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(20), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(21), offset_address: Direct(20) }, Const { destination: Direct(2), bit_size: Field, value: 0 }, BinaryFieldOp { destination: Direct(3), op: Equals, lhs: Direct(0), rhs: Direct(2) }, JumpIf { condition: Direct(3), location: 8 }, Const { destination: Direct(1), bit_size: Field, value: 1 }, BinaryFieldOp { destination: Direct(0), op: Div, lhs: Direct(1), rhs: Direct(0) }, Stop { return_data: HeapVector { pointer: Direct(20), size: Direct(21) } }]" ], - "debug_symbols": "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", + "debug_symbols": "nZjLbhtHEEX/hWstpqv69sO/EgSGLNOGAEISaClAYPjfM8O5h7YXChKuumxWHx4JvLoDfj98Pn56+/rx8enL87fDhz++Hz6dH0+nx68fT88P96+Pz0/r/37/cXfgnx9fz8fj+l+HX15fb73cn49Pr4cPT2+n093hr/vT22Xp28v90+V8vT+vry53h+PT5/VcgV8eT8dt+nH38/by/tVefbeUcr2t36+X96/nEr6fS95yvyX3e9x0//r+fdxwX8l91VveX+V6P+Yt93vj/rzp/XW932/5/Svy6n/T76/16/vf4t+u79/0/v1/AZRshU9w9nZFlPmfFTrxaWO54UfoSYR6ff8jUN8HxFKmCbHEzx9B/4OQy5WQ41fCn+s/7h8ez7/93TmUmGti7g4lF5/FZ/jMw4e6ndWnfLaVup19/XVt5/A597MuPlde386VN7Zz5c3trH595ZVlG5oXuhcMrNMLWvYFlX1BsS8oWahekBeaFzoLwwtzX2h2bMULzZLNks2SDclmyWbJZsmGZLdkt2S3ZEeyW7JbsluyI9kt2S05LDmQHJYclhyWHEgOSw5LDksOJKclpyWnJSeS05LTktOSE8lpyblLxrJLrh/gfWH9+F4W1g+hF6oXxELzQvfC8IIlo+ySUXbJKLtklGShekFeaF7oLAwvWDIsGUiGJcOSYclAMiwZlgxLBpJpybRkWjKRTEumJdOSiWRaMi3p3ERF0sEJByccnCA44eCEgxMOThCccHDCwQkHJwhOODjh4ISDEwQnHJxwcMLBCYITDk44OOHgBMEJBye24GxNGVty9mF62KKzD4UhGJKhMoihMUDukDvkAXlAHpAH5AF5QB6QB+QBeUCekCfkCXlCnpAn5Al5Qp6Qp8m5LAyFIRiSoTKIoTF0hsEAuUAukAvkArlALpAL5AK5QC6QA3JADsgBOSAH5IAckANyQE7ICTkhJ+SEnJATckJOyAm5Qq6QK+QKuUKukCvkCrlCrpAFWZAFWZAFWZAFWZAFWZAb5Aa5QW6QG+QGuUEmg0kGkwwmGUwymGQwyWCSwSSDSQaTDCYZTDKYZDDJYJLBJINJBpMMJhlMMphkMMlgksEkg0kGkwwmGcxLBnMbGkNnGAz7I1FdFp/FZ/jcH4nqUn3K5/5IVJf9kahu0evbOS9/++oWvLmdZX/9ErtlG9IL1QvyQmOhe2F4YX/IqpfAbQtb4LaFLW/bwha3y0JlQV5oXrDjJWqXBUumJdOSiWRaMi2Zlkwk05JpST8J1opktWS1ZLVkRbJaslqyWrIiWS0pS8qSQlKWlCVlSSEpS8qSsmRDslmyWbJZsiHZLNks2SzZkGyW7JbsluxIdkt2S3ZLdiS7JbsluyUHksOSw5LDkgPJYclhyWHJgeSw5LTktOREclpyWnJaciI5LTktOXdJLZbUsktq2SW1pBcqC/JC80L3wmBhl5SDIwdHBEcOjhwcOTgiOHJw5ODIwRHBkYMjB0cOjgiOHBw5OHJwRHDk4MjBkYMjgiMHR/ST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4lnRPGMKJ4RxTOiLs+Ia+G0S9QuQ2EIhmSoDGJoDJ1hMEAukAvkArlALpAL5AK5QC6QC+SAHJADckAOyAE5IAfkgByQL8+I9cf25cj58f7T6fht/2L1y9vTwy/fs77+/cIrfBP7cn5+OH5+Ox+370Yur63flvwD", "file_map": { "19": { "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(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3(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(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment(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(\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(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(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 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)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\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 EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation(_input: [Field; N], _state_length: u32) -> [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(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(_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;\n\nimpl BuildHasher for BuildHasherDefault\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 Default for BuildHasherDefault\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash(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(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(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(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(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(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(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(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(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(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(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(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(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl Hash for [T]\nwhere\n T: Hash,\n{\n fn hash(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 Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash(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 Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash(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 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(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", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 47bed4ef93d..0b19768dc0b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -211,199 +211,135 @@ expression: artifact "EXPR [ (1, _130, _131) (1, _132) -1 ]", "EXPR [ (1, _130, _132) 0 ]", "EXPR [ (-32, _132) (-1, _133) 32 ]", - "BLACKBOX::RANGE [(_133, 6)] []", "EXPR [ (-1, _134) 0 ]", "INIT (id: 3, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "INIT (id: 4, len: 64, witnesses: [_134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134, _134])", "MEM (id: 4, write EXPR [ (1, _0) 0 ] at: EXPR [ (1, _133) 0 ]) ", "EXPR [ (32, _132) (-1, _135) 0 ]", - "BLACKBOX::RANGE [(_135, 6)] []", "MEM (id: 4, write EXPR [ (1, _32) 0 ] at: EXPR [ (1, _135) 0 ]) ", "EXPR [ (1, _133) (-1, _136) 1 ]", - "BLACKBOX::RANGE [(_136, 6)] []", "MEM (id: 4, write EXPR [ (1, _1) 0 ] at: EXPR [ (1, _136) 0 ]) ", "EXPR [ (1, _135) (-1, _137) 1 ]", - "BLACKBOX::RANGE [(_137, 6)] []", "MEM (id: 4, write EXPR [ (1, _33) 0 ] at: EXPR [ (1, _137) 0 ]) ", "EXPR [ (1, _133) (-1, _138) 2 ]", - "BLACKBOX::RANGE [(_138, 6)] []", "MEM (id: 4, write EXPR [ (1, _2) 0 ] at: EXPR [ (1, _138) 0 ]) ", "EXPR [ (1, _135) (-1, _139) 2 ]", - "BLACKBOX::RANGE [(_139, 6)] []", "MEM (id: 4, write EXPR [ (1, _34) 0 ] at: EXPR [ (1, _139) 0 ]) ", "EXPR [ (1, _133) (-1, _140) 3 ]", - "BLACKBOX::RANGE [(_140, 6)] []", "MEM (id: 4, write EXPR [ (1, _3) 0 ] at: EXPR [ (1, _140) 0 ]) ", "EXPR [ (1, _135) (-1, _141) 3 ]", - "BLACKBOX::RANGE [(_141, 6)] []", "MEM (id: 4, write EXPR [ (1, _35) 0 ] at: EXPR [ (1, _141) 0 ]) ", "EXPR [ (1, _133) (-1, _142) 4 ]", - "BLACKBOX::RANGE [(_142, 6)] []", "MEM (id: 4, write EXPR [ (1, _4) 0 ] at: EXPR [ (1, _142) 0 ]) ", "EXPR [ (1, _135) (-1, _143) 4 ]", - "BLACKBOX::RANGE [(_143, 6)] []", "MEM (id: 4, write EXPR [ (1, _36) 0 ] at: EXPR [ (1, _143) 0 ]) ", "EXPR [ (1, _133) (-1, _144) 5 ]", - "BLACKBOX::RANGE [(_144, 6)] []", "MEM (id: 4, write EXPR [ (1, _5) 0 ] at: EXPR [ (1, _144) 0 ]) ", "EXPR [ (1, _135) (-1, _145) 5 ]", - "BLACKBOX::RANGE [(_145, 6)] []", "MEM (id: 4, write EXPR [ (1, _37) 0 ] at: EXPR [ (1, _145) 0 ]) ", "EXPR [ (1, _133) (-1, _146) 6 ]", - "BLACKBOX::RANGE [(_146, 6)] []", "MEM (id: 4, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _146) 0 ]) ", "EXPR [ (1, _135) (-1, _147) 6 ]", - "BLACKBOX::RANGE [(_147, 6)] []", "MEM (id: 4, write EXPR [ (1, _38) 0 ] at: EXPR [ (1, _147) 0 ]) ", "EXPR [ (1, _133) (-1, _148) 7 ]", - "BLACKBOX::RANGE [(_148, 6)] []", "MEM (id: 4, write EXPR [ (1, _7) 0 ] at: EXPR [ (1, _148) 0 ]) ", "EXPR [ (1, _135) (-1, _149) 7 ]", - "BLACKBOX::RANGE [(_149, 6)] []", "MEM (id: 4, write EXPR [ (1, _39) 0 ] at: EXPR [ (1, _149) 0 ]) ", "EXPR [ (1, _133) (-1, _150) 8 ]", - "BLACKBOX::RANGE [(_150, 6)] []", "MEM (id: 4, write EXPR [ (1, _8) 0 ] at: EXPR [ (1, _150) 0 ]) ", "EXPR [ (1, _135) (-1, _151) 8 ]", - "BLACKBOX::RANGE [(_151, 6)] []", "MEM (id: 4, write EXPR [ (1, _40) 0 ] at: EXPR [ (1, _151) 0 ]) ", "EXPR [ (1, _133) (-1, _152) 9 ]", - "BLACKBOX::RANGE [(_152, 6)] []", "MEM (id: 4, write EXPR [ (1, _9) 0 ] at: EXPR [ (1, _152) 0 ]) ", "EXPR [ (1, _135) (-1, _153) 9 ]", - "BLACKBOX::RANGE [(_153, 6)] []", "MEM (id: 4, write EXPR [ (1, _41) 0 ] at: EXPR [ (1, _153) 0 ]) ", "EXPR [ (1, _133) (-1, _154) 10 ]", - "BLACKBOX::RANGE [(_154, 6)] []", "MEM (id: 4, write EXPR [ (1, _10) 0 ] at: EXPR [ (1, _154) 0 ]) ", "EXPR [ (1, _135) (-1, _155) 10 ]", - "BLACKBOX::RANGE [(_155, 6)] []", "MEM (id: 4, write EXPR [ (1, _42) 0 ] at: EXPR [ (1, _155) 0 ]) ", "EXPR [ (1, _133) (-1, _156) 11 ]", - "BLACKBOX::RANGE [(_156, 6)] []", "MEM (id: 4, write EXPR [ (1, _11) 0 ] at: EXPR [ (1, _156) 0 ]) ", "EXPR [ (1, _135) (-1, _157) 11 ]", - "BLACKBOX::RANGE [(_157, 6)] []", "MEM (id: 4, write EXPR [ (1, _43) 0 ] at: EXPR [ (1, _157) 0 ]) ", "EXPR [ (1, _133) (-1, _158) 12 ]", - "BLACKBOX::RANGE [(_158, 6)] []", "MEM (id: 4, write EXPR [ (1, _12) 0 ] at: EXPR [ (1, _158) 0 ]) ", "EXPR [ (1, _135) (-1, _159) 12 ]", - "BLACKBOX::RANGE [(_159, 6)] []", "MEM (id: 4, write EXPR [ (1, _44) 0 ] at: EXPR [ (1, _159) 0 ]) ", "EXPR [ (1, _133) (-1, _160) 13 ]", - "BLACKBOX::RANGE [(_160, 6)] []", "MEM (id: 4, write EXPR [ (1, _13) 0 ] at: EXPR [ (1, _160) 0 ]) ", "EXPR [ (1, _135) (-1, _161) 13 ]", - "BLACKBOX::RANGE [(_161, 6)] []", "MEM (id: 4, write EXPR [ (1, _45) 0 ] at: EXPR [ (1, _161) 0 ]) ", "EXPR [ (1, _133) (-1, _162) 14 ]", - "BLACKBOX::RANGE [(_162, 6)] []", "MEM (id: 4, write EXPR [ (1, _14) 0 ] at: EXPR [ (1, _162) 0 ]) ", "EXPR [ (1, _135) (-1, _163) 14 ]", - "BLACKBOX::RANGE [(_163, 6)] []", "MEM (id: 4, write EXPR [ (1, _46) 0 ] at: EXPR [ (1, _163) 0 ]) ", "EXPR [ (1, _133) (-1, _164) 15 ]", - "BLACKBOX::RANGE [(_164, 6)] []", "MEM (id: 4, write EXPR [ (1, _15) 0 ] at: EXPR [ (1, _164) 0 ]) ", "EXPR [ (1, _135) (-1, _165) 15 ]", - "BLACKBOX::RANGE [(_165, 6)] []", "MEM (id: 4, write EXPR [ (1, _47) 0 ] at: EXPR [ (1, _165) 0 ]) ", "EXPR [ (1, _133) (-1, _166) 16 ]", - "BLACKBOX::RANGE [(_166, 6)] []", "MEM (id: 4, write EXPR [ (1, _16) 0 ] at: EXPR [ (1, _166) 0 ]) ", "EXPR [ (1, _135) (-1, _167) 16 ]", - "BLACKBOX::RANGE [(_167, 6)] []", "MEM (id: 4, write EXPR [ (1, _48) 0 ] at: EXPR [ (1, _167) 0 ]) ", "EXPR [ (1, _133) (-1, _168) 17 ]", - "BLACKBOX::RANGE [(_168, 6)] []", "MEM (id: 4, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _168) 0 ]) ", "EXPR [ (1, _135) (-1, _169) 17 ]", - "BLACKBOX::RANGE [(_169, 6)] []", "MEM (id: 4, write EXPR [ (1, _49) 0 ] at: EXPR [ (1, _169) 0 ]) ", "EXPR [ (1, _133) (-1, _170) 18 ]", - "BLACKBOX::RANGE [(_170, 6)] []", "MEM (id: 4, write EXPR [ (1, _18) 0 ] at: EXPR [ (1, _170) 0 ]) ", "EXPR [ (1, _135) (-1, _171) 18 ]", - "BLACKBOX::RANGE [(_171, 6)] []", "MEM (id: 4, write EXPR [ (1, _50) 0 ] at: EXPR [ (1, _171) 0 ]) ", "EXPR [ (1, _133) (-1, _172) 19 ]", - "BLACKBOX::RANGE [(_172, 6)] []", "MEM (id: 4, write EXPR [ (1, _19) 0 ] at: EXPR [ (1, _172) 0 ]) ", "EXPR [ (1, _135) (-1, _173) 19 ]", - "BLACKBOX::RANGE [(_173, 6)] []", "MEM (id: 4, write EXPR [ (1, _51) 0 ] at: EXPR [ (1, _173) 0 ]) ", "EXPR [ (1, _133) (-1, _174) 20 ]", - "BLACKBOX::RANGE [(_174, 6)] []", "MEM (id: 4, write EXPR [ (1, _20) 0 ] at: EXPR [ (1, _174) 0 ]) ", "EXPR [ (1, _135) (-1, _175) 20 ]", - "BLACKBOX::RANGE [(_175, 6)] []", "MEM (id: 4, write EXPR [ (1, _52) 0 ] at: EXPR [ (1, _175) 0 ]) ", "EXPR [ (1, _133) (-1, _176) 21 ]", - "BLACKBOX::RANGE [(_176, 6)] []", "MEM (id: 4, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _176) 0 ]) ", "EXPR [ (1, _135) (-1, _177) 21 ]", - "BLACKBOX::RANGE [(_177, 6)] []", "MEM (id: 4, write EXPR [ (1, _53) 0 ] at: EXPR [ (1, _177) 0 ]) ", "EXPR [ (1, _133) (-1, _178) 22 ]", - "BLACKBOX::RANGE [(_178, 6)] []", "MEM (id: 4, write EXPR [ (1, _22) 0 ] at: EXPR [ (1, _178) 0 ]) ", "EXPR [ (1, _135) (-1, _179) 22 ]", - "BLACKBOX::RANGE [(_179, 6)] []", "MEM (id: 4, write EXPR [ (1, _54) 0 ] at: EXPR [ (1, _179) 0 ]) ", "EXPR [ (1, _133) (-1, _180) 23 ]", - "BLACKBOX::RANGE [(_180, 6)] []", "MEM (id: 4, write EXPR [ (1, _23) 0 ] at: EXPR [ (1, _180) 0 ]) ", "EXPR [ (1, _135) (-1, _181) 23 ]", - "BLACKBOX::RANGE [(_181, 6)] []", "MEM (id: 4, write EXPR [ (1, _55) 0 ] at: EXPR [ (1, _181) 0 ]) ", "EXPR [ (1, _133) (-1, _182) 24 ]", - "BLACKBOX::RANGE [(_182, 6)] []", "MEM (id: 4, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _182) 0 ]) ", "EXPR [ (1, _135) (-1, _183) 24 ]", - "BLACKBOX::RANGE [(_183, 6)] []", "MEM (id: 4, write EXPR [ (1, _56) 0 ] at: EXPR [ (1, _183) 0 ]) ", "EXPR [ (1, _133) (-1, _184) 25 ]", - "BLACKBOX::RANGE [(_184, 6)] []", "MEM (id: 4, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _184) 0 ]) ", "EXPR [ (1, _135) (-1, _185) 25 ]", - "BLACKBOX::RANGE [(_185, 6)] []", "MEM (id: 4, write EXPR [ (1, _57) 0 ] at: EXPR [ (1, _185) 0 ]) ", "EXPR [ (1, _133) (-1, _186) 26 ]", - "BLACKBOX::RANGE [(_186, 6)] []", "MEM (id: 4, write EXPR [ (1, _26) 0 ] at: EXPR [ (1, _186) 0 ]) ", "EXPR [ (1, _135) (-1, _187) 26 ]", - "BLACKBOX::RANGE [(_187, 6)] []", "MEM (id: 4, write EXPR [ (1, _58) 0 ] at: EXPR [ (1, _187) 0 ]) ", "EXPR [ (1, _133) (-1, _188) 27 ]", - "BLACKBOX::RANGE [(_188, 6)] []", "MEM (id: 4, write EXPR [ (1, _27) 0 ] at: EXPR [ (1, _188) 0 ]) ", "EXPR [ (1, _135) (-1, _189) 27 ]", - "BLACKBOX::RANGE [(_189, 6)] []", "MEM (id: 4, write EXPR [ (1, _59) 0 ] at: EXPR [ (1, _189) 0 ]) ", "EXPR [ (1, _133) (-1, _190) 28 ]", - "BLACKBOX::RANGE [(_190, 6)] []", "MEM (id: 4, write EXPR [ (1, _28) 0 ] at: EXPR [ (1, _190) 0 ]) ", "EXPR [ (1, _135) (-1, _191) 28 ]", - "BLACKBOX::RANGE [(_191, 6)] []", "MEM (id: 4, write EXPR [ (1, _60) 0 ] at: EXPR [ (1, _191) 0 ]) ", "EXPR [ (1, _133) (-1, _192) 29 ]", - "BLACKBOX::RANGE [(_192, 6)] []", "MEM (id: 4, write EXPR [ (1, _29) 0 ] at: EXPR [ (1, _192) 0 ]) ", "EXPR [ (1, _135) (-1, _193) 29 ]", - "BLACKBOX::RANGE [(_193, 6)] []", "MEM (id: 4, write EXPR [ (1, _61) 0 ] at: EXPR [ (1, _193) 0 ]) ", "EXPR [ (1, _133) (-1, _194) 30 ]", - "BLACKBOX::RANGE [(_194, 6)] []", "MEM (id: 4, write EXPR [ (1, _30) 0 ] at: EXPR [ (1, _194) 0 ]) ", "EXPR [ (1, _135) (-1, _195) 30 ]", - "BLACKBOX::RANGE [(_195, 6)] []", "MEM (id: 4, write EXPR [ (1, _62) 0 ] at: EXPR [ (1, _195) 0 ]) ", "EXPR [ (1, _133) (-1, _196) 31 ]", - "BLACKBOX::RANGE [(_196, 6)] []", "MEM (id: 4, write EXPR [ (1, _31) 0 ] at: EXPR [ (1, _196) 0 ]) ", "EXPR [ (1, _135) (-1, _197) 31 ]", - "BLACKBOX::RANGE [(_197, 6)] []", "MEM (id: 4, write EXPR [ (1, _63) 0 ] at: EXPR [ (1, _197) 0 ]) ", "MEM (id: 4, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _198) 0 ]) ", "EXPR [ (-1, _199) 1 ]", @@ -545,196 +481,132 @@ expression: artifact "EXPR [ (1, _360, _361) (1, _362) -1 ]", "EXPR [ (1, _360, _362) 0 ]", "EXPR [ (-32, _362) (-1, _363) 32 ]", - "BLACKBOX::RANGE [(_363, 6)] []", "MEM (id: 3, write EXPR [ (1, _325) 0 ] at: EXPR [ (1, _363) 0 ]) ", "EXPR [ (32, _362) (-1, _364) 0 ]", - "BLACKBOX::RANGE [(_364, 6)] []", "MEM (id: 3, write EXPR [ (1, _64) 0 ] at: EXPR [ (1, _364) 0 ]) ", "EXPR [ (1, _363) (-1, _365) 1 ]", - "BLACKBOX::RANGE [(_365, 6)] []", "MEM (id: 3, write EXPR [ (1, _326) 0 ] at: EXPR [ (1, _365) 0 ]) ", "EXPR [ (1, _364) (-1, _366) 1 ]", - "BLACKBOX::RANGE [(_366, 6)] []", "MEM (id: 3, write EXPR [ (1, _65) 0 ] at: EXPR [ (1, _366) 0 ]) ", "EXPR [ (1, _363) (-1, _367) 2 ]", - "BLACKBOX::RANGE [(_367, 6)] []", "MEM (id: 3, write EXPR [ (1, _327) 0 ] at: EXPR [ (1, _367) 0 ]) ", "EXPR [ (1, _364) (-1, _368) 2 ]", - "BLACKBOX::RANGE [(_368, 6)] []", "MEM (id: 3, write EXPR [ (1, _66) 0 ] at: EXPR [ (1, _368) 0 ]) ", "EXPR [ (1, _363) (-1, _369) 3 ]", - "BLACKBOX::RANGE [(_369, 6)] []", "MEM (id: 3, write EXPR [ (1, _328) 0 ] at: EXPR [ (1, _369) 0 ]) ", "EXPR [ (1, _364) (-1, _370) 3 ]", - "BLACKBOX::RANGE [(_370, 6)] []", "MEM (id: 3, write EXPR [ (1, _67) 0 ] at: EXPR [ (1, _370) 0 ]) ", "EXPR [ (1, _363) (-1, _371) 4 ]", - "BLACKBOX::RANGE [(_371, 6)] []", "MEM (id: 3, write EXPR [ (1, _329) 0 ] at: EXPR [ (1, _371) 0 ]) ", "EXPR [ (1, _364) (-1, _372) 4 ]", - "BLACKBOX::RANGE [(_372, 6)] []", "MEM (id: 3, write EXPR [ (1, _68) 0 ] at: EXPR [ (1, _372) 0 ]) ", "EXPR [ (1, _363) (-1, _373) 5 ]", - "BLACKBOX::RANGE [(_373, 6)] []", "MEM (id: 3, write EXPR [ (1, _330) 0 ] at: EXPR [ (1, _373) 0 ]) ", "EXPR [ (1, _364) (-1, _374) 5 ]", - "BLACKBOX::RANGE [(_374, 6)] []", "MEM (id: 3, write EXPR [ (1, _69) 0 ] at: EXPR [ (1, _374) 0 ]) ", "EXPR [ (1, _363) (-1, _375) 6 ]", - "BLACKBOX::RANGE [(_375, 6)] []", "MEM (id: 3, write EXPR [ (1, _331) 0 ] at: EXPR [ (1, _375) 0 ]) ", "EXPR [ (1, _364) (-1, _376) 6 ]", - "BLACKBOX::RANGE [(_376, 6)] []", "MEM (id: 3, write EXPR [ (1, _70) 0 ] at: EXPR [ (1, _376) 0 ]) ", "EXPR [ (1, _363) (-1, _377) 7 ]", - "BLACKBOX::RANGE [(_377, 6)] []", "MEM (id: 3, write EXPR [ (1, _332) 0 ] at: EXPR [ (1, _377) 0 ]) ", "EXPR [ (1, _364) (-1, _378) 7 ]", - "BLACKBOX::RANGE [(_378, 6)] []", "MEM (id: 3, write EXPR [ (1, _71) 0 ] at: EXPR [ (1, _378) 0 ]) ", "EXPR [ (1, _363) (-1, _379) 8 ]", - "BLACKBOX::RANGE [(_379, 6)] []", "MEM (id: 3, write EXPR [ (1, _333) 0 ] at: EXPR [ (1, _379) 0 ]) ", "EXPR [ (1, _364) (-1, _380) 8 ]", - "BLACKBOX::RANGE [(_380, 6)] []", "MEM (id: 3, write EXPR [ (1, _72) 0 ] at: EXPR [ (1, _380) 0 ]) ", "EXPR [ (1, _363) (-1, _381) 9 ]", - "BLACKBOX::RANGE [(_381, 6)] []", "MEM (id: 3, write EXPR [ (1, _334) 0 ] at: EXPR [ (1, _381) 0 ]) ", "EXPR [ (1, _364) (-1, _382) 9 ]", - "BLACKBOX::RANGE [(_382, 6)] []", "MEM (id: 3, write EXPR [ (1, _73) 0 ] at: EXPR [ (1, _382) 0 ]) ", "EXPR [ (1, _363) (-1, _383) 10 ]", - "BLACKBOX::RANGE [(_383, 6)] []", "MEM (id: 3, write EXPR [ (1, _335) 0 ] at: EXPR [ (1, _383) 0 ]) ", "EXPR [ (1, _364) (-1, _384) 10 ]", - "BLACKBOX::RANGE [(_384, 6)] []", "MEM (id: 3, write EXPR [ (1, _74) 0 ] at: EXPR [ (1, _384) 0 ]) ", "EXPR [ (1, _363) (-1, _385) 11 ]", - "BLACKBOX::RANGE [(_385, 6)] []", "MEM (id: 3, write EXPR [ (1, _336) 0 ] at: EXPR [ (1, _385) 0 ]) ", "EXPR [ (1, _364) (-1, _386) 11 ]", - "BLACKBOX::RANGE [(_386, 6)] []", "MEM (id: 3, write EXPR [ (1, _75) 0 ] at: EXPR [ (1, _386) 0 ]) ", "EXPR [ (1, _363) (-1, _387) 12 ]", - "BLACKBOX::RANGE [(_387, 6)] []", "MEM (id: 3, write EXPR [ (1, _337) 0 ] at: EXPR [ (1, _387) 0 ]) ", "EXPR [ (1, _364) (-1, _388) 12 ]", - "BLACKBOX::RANGE [(_388, 6)] []", "MEM (id: 3, write EXPR [ (1, _76) 0 ] at: EXPR [ (1, _388) 0 ]) ", "EXPR [ (1, _363) (-1, _389) 13 ]", - "BLACKBOX::RANGE [(_389, 6)] []", "MEM (id: 3, write EXPR [ (1, _338) 0 ] at: EXPR [ (1, _389) 0 ]) ", "EXPR [ (1, _364) (-1, _390) 13 ]", - "BLACKBOX::RANGE [(_390, 6)] []", "MEM (id: 3, write EXPR [ (1, _77) 0 ] at: EXPR [ (1, _390) 0 ]) ", "EXPR [ (1, _363) (-1, _391) 14 ]", - "BLACKBOX::RANGE [(_391, 6)] []", "MEM (id: 3, write EXPR [ (1, _339) 0 ] at: EXPR [ (1, _391) 0 ]) ", "EXPR [ (1, _364) (-1, _392) 14 ]", - "BLACKBOX::RANGE [(_392, 6)] []", "MEM (id: 3, write EXPR [ (1, _78) 0 ] at: EXPR [ (1, _392) 0 ]) ", "EXPR [ (1, _363) (-1, _393) 15 ]", - "BLACKBOX::RANGE [(_393, 6)] []", "MEM (id: 3, write EXPR [ (1, _340) 0 ] at: EXPR [ (1, _393) 0 ]) ", "EXPR [ (1, _364) (-1, _394) 15 ]", - "BLACKBOX::RANGE [(_394, 6)] []", "MEM (id: 3, write EXPR [ (1, _79) 0 ] at: EXPR [ (1, _394) 0 ]) ", "EXPR [ (1, _363) (-1, _395) 16 ]", - "BLACKBOX::RANGE [(_395, 6)] []", "MEM (id: 3, write EXPR [ (1, _341) 0 ] at: EXPR [ (1, _395) 0 ]) ", "EXPR [ (1, _364) (-1, _396) 16 ]", - "BLACKBOX::RANGE [(_396, 6)] []", "MEM (id: 3, write EXPR [ (1, _80) 0 ] at: EXPR [ (1, _396) 0 ]) ", "EXPR [ (1, _363) (-1, _397) 17 ]", - "BLACKBOX::RANGE [(_397, 6)] []", "MEM (id: 3, write EXPR [ (1, _342) 0 ] at: EXPR [ (1, _397) 0 ]) ", "EXPR [ (1, _364) (-1, _398) 17 ]", - "BLACKBOX::RANGE [(_398, 6)] []", "MEM (id: 3, write EXPR [ (1, _81) 0 ] at: EXPR [ (1, _398) 0 ]) ", "EXPR [ (1, _363) (-1, _399) 18 ]", - "BLACKBOX::RANGE [(_399, 6)] []", "MEM (id: 3, write EXPR [ (1, _343) 0 ] at: EXPR [ (1, _399) 0 ]) ", "EXPR [ (1, _364) (-1, _400) 18 ]", - "BLACKBOX::RANGE [(_400, 6)] []", "MEM (id: 3, write EXPR [ (1, _82) 0 ] at: EXPR [ (1, _400) 0 ]) ", "EXPR [ (1, _363) (-1, _401) 19 ]", - "BLACKBOX::RANGE [(_401, 6)] []", "MEM (id: 3, write EXPR [ (1, _344) 0 ] at: EXPR [ (1, _401) 0 ]) ", "EXPR [ (1, _364) (-1, _402) 19 ]", - "BLACKBOX::RANGE [(_402, 6)] []", "MEM (id: 3, write EXPR [ (1, _83) 0 ] at: EXPR [ (1, _402) 0 ]) ", "EXPR [ (1, _363) (-1, _403) 20 ]", - "BLACKBOX::RANGE [(_403, 6)] []", "MEM (id: 3, write EXPR [ (1, _345) 0 ] at: EXPR [ (1, _403) 0 ]) ", "EXPR [ (1, _364) (-1, _404) 20 ]", - "BLACKBOX::RANGE [(_404, 6)] []", "MEM (id: 3, write EXPR [ (1, _84) 0 ] at: EXPR [ (1, _404) 0 ]) ", "EXPR [ (1, _363) (-1, _405) 21 ]", - "BLACKBOX::RANGE [(_405, 6)] []", "MEM (id: 3, write EXPR [ (1, _346) 0 ] at: EXPR [ (1, _405) 0 ]) ", "EXPR [ (1, _364) (-1, _406) 21 ]", - "BLACKBOX::RANGE [(_406, 6)] []", "MEM (id: 3, write EXPR [ (1, _85) 0 ] at: EXPR [ (1, _406) 0 ]) ", "EXPR [ (1, _363) (-1, _407) 22 ]", - "BLACKBOX::RANGE [(_407, 6)] []", "MEM (id: 3, write EXPR [ (1, _347) 0 ] at: EXPR [ (1, _407) 0 ]) ", "EXPR [ (1, _364) (-1, _408) 22 ]", - "BLACKBOX::RANGE [(_408, 6)] []", "MEM (id: 3, write EXPR [ (1, _86) 0 ] at: EXPR [ (1, _408) 0 ]) ", "EXPR [ (1, _363) (-1, _409) 23 ]", - "BLACKBOX::RANGE [(_409, 6)] []", "MEM (id: 3, write EXPR [ (1, _348) 0 ] at: EXPR [ (1, _409) 0 ]) ", "EXPR [ (1, _364) (-1, _410) 23 ]", - "BLACKBOX::RANGE [(_410, 6)] []", "MEM (id: 3, write EXPR [ (1, _87) 0 ] at: EXPR [ (1, _410) 0 ]) ", "EXPR [ (1, _363) (-1, _411) 24 ]", - "BLACKBOX::RANGE [(_411, 6)] []", "MEM (id: 3, write EXPR [ (1, _349) 0 ] at: EXPR [ (1, _411) 0 ]) ", "EXPR [ (1, _364) (-1, _412) 24 ]", - "BLACKBOX::RANGE [(_412, 6)] []", "MEM (id: 3, write EXPR [ (1, _88) 0 ] at: EXPR [ (1, _412) 0 ]) ", "EXPR [ (1, _363) (-1, _413) 25 ]", - "BLACKBOX::RANGE [(_413, 6)] []", "MEM (id: 3, write EXPR [ (1, _350) 0 ] at: EXPR [ (1, _413) 0 ]) ", "EXPR [ (1, _364) (-1, _414) 25 ]", - "BLACKBOX::RANGE [(_414, 6)] []", "MEM (id: 3, write EXPR [ (1, _89) 0 ] at: EXPR [ (1, _414) 0 ]) ", "EXPR [ (1, _363) (-1, _415) 26 ]", - "BLACKBOX::RANGE [(_415, 6)] []", "MEM (id: 3, write EXPR [ (1, _351) 0 ] at: EXPR [ (1, _415) 0 ]) ", "EXPR [ (1, _364) (-1, _416) 26 ]", - "BLACKBOX::RANGE [(_416, 6)] []", "MEM (id: 3, write EXPR [ (1, _90) 0 ] at: EXPR [ (1, _416) 0 ]) ", "EXPR [ (1, _363) (-1, _417) 27 ]", - "BLACKBOX::RANGE [(_417, 6)] []", "MEM (id: 3, write EXPR [ (1, _352) 0 ] at: EXPR [ (1, _417) 0 ]) ", "EXPR [ (1, _364) (-1, _418) 27 ]", - "BLACKBOX::RANGE [(_418, 6)] []", "MEM (id: 3, write EXPR [ (1, _91) 0 ] at: EXPR [ (1, _418) 0 ]) ", "EXPR [ (1, _363) (-1, _419) 28 ]", - "BLACKBOX::RANGE [(_419, 6)] []", "MEM (id: 3, write EXPR [ (1, _353) 0 ] at: EXPR [ (1, _419) 0 ]) ", "EXPR [ (1, _364) (-1, _420) 28 ]", - "BLACKBOX::RANGE [(_420, 6)] []", "MEM (id: 3, write EXPR [ (1, _92) 0 ] at: EXPR [ (1, _420) 0 ]) ", "EXPR [ (1, _363) (-1, _421) 29 ]", - "BLACKBOX::RANGE [(_421, 6)] []", "MEM (id: 3, write EXPR [ (1, _354) 0 ] at: EXPR [ (1, _421) 0 ]) ", "EXPR [ (1, _364) (-1, _422) 29 ]", - "BLACKBOX::RANGE [(_422, 6)] []", "MEM (id: 3, write EXPR [ (1, _93) 0 ] at: EXPR [ (1, _422) 0 ]) ", "EXPR [ (1, _363) (-1, _423) 30 ]", - "BLACKBOX::RANGE [(_423, 6)] []", "MEM (id: 3, write EXPR [ (1, _355) 0 ] at: EXPR [ (1, _423) 0 ]) ", "EXPR [ (1, _364) (-1, _424) 30 ]", - "BLACKBOX::RANGE [(_424, 6)] []", "MEM (id: 3, write EXPR [ (1, _94) 0 ] at: EXPR [ (1, _424) 0 ]) ", "EXPR [ (1, _363) (-1, _425) 31 ]", - "BLACKBOX::RANGE [(_425, 6)] []", "MEM (id: 3, write EXPR [ (1, _356) 0 ] at: EXPR [ (1, _425) 0 ]) ", "EXPR [ (1, _364) (-1, _426) 31 ]", - "BLACKBOX::RANGE [(_426, 6)] []", "MEM (id: 3, write EXPR [ (1, _95) 0 ] at: EXPR [ (1, _426) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _134) 0 ], value: EXPR [ (1, _427) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _199) 0 ], value: EXPR [ (1, _428) 0 ]) ", @@ -838,7 +710,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(21), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(20), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(21), offset_address: Direct(20) }, Const { destination: Direct(2), bit_size: Field, value: 0 }, BinaryFieldOp { destination: Direct(3), op: Equals, lhs: Direct(0), rhs: Direct(2) }, JumpIf { condition: Direct(3), location: 8 }, Const { destination: Direct(1), bit_size: Field, value: 1 }, BinaryFieldOp { destination: Direct(0), op: Div, lhs: Direct(1), rhs: Direct(0) }, Stop { return_data: HeapVector { pointer: Direct(20), size: Direct(21) } }]" ], - "debug_symbols": "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", + "debug_symbols": "nZjLbhtHEEX/hWstpqv69sO/EgSGLNOGAEISaClAYPjfM8O5h7YXChKuumxWHx4JvLoDfj98Pn56+/rx8enL87fDhz++Hz6dH0+nx68fT88P96+Pz0/r/37/cXfgnx9fz8fj+l+HX15fb73cn49Pr4cPT2+n093hr/vT22Xp28v90+V8vT+vry53h+PT5/VcgV8eT8dt+nH38/by/tVefbeUcr2t36+X96/nEr6fS95yvyX3e9x0//r+fdxwX8l91VveX+V6P+Yt93vj/rzp/XW932/5/Svy6n/T76/16/vf4t+u79/0/v1/AZRshU9w9nZFlPmfFTrxaWO54UfoSYR6ff8jUN8HxFKmCbHEzx9B/4OQy5WQ41fCn+s/7h8ez7/93TmUmGti7g4lF5/FZ/jMw4e6ndWnfLaVup19/XVt5/A597MuPlde386VN7Zz5c3trH595ZVlG5oXuhcMrNMLWvYFlX1BsS8oWahekBeaFzoLwwtzX2h2bMULzZLNks2SDclmyWbJZsmGZLdkt2S3ZEeyW7JbsluyI9kt2S05LDmQHJYclhyWHEgOSw5LDksOJKclpyWnJSeS05LTktOSE8lpyblLxrJLrh/gfWH9+F4W1g+hF6oXxELzQvfC8IIlo+ySUXbJKLtklGShekFeaF7oLAwvWDIsGUiGJcOSYclAMiwZlgxLBpJpybRkWjKRTEumJdOSiWRaMi3p3ERF0sEJByccnCA44eCEgxMOThCccHDCwQkHJwhOODjh4ISDEwQnHJxwcMLBCYITDk44OOHgBMEJBye24GxNGVty9mF62KKzD4UhGJKhMoihMUDukDvkAXlAHpAH5AF5QB6QB+QBeUCekCfkCXlCnpAn5Al5Qp6Qp8m5LAyFIRiSoTKIoTF0hsEAuUAukAvkArlALpAL5AK5QC6QA3JADsgBOSAH5IAckANyQE7ICTkhJ+SEnJATckJOyAm5Qq6QK+QKuUKukCvkCrlCrpAFWZAFWZAFWZAFWZAFWZAb5Aa5QW6QG+QGuUEmg0kGkwwmGUwymGQwyWCSwSSDSQaTDCYZTDKYZDDJYJLBJINJBpMMJhlMMphkMMlgksEkg0kGkwwmGcxLBnMbGkNnGAz7I1FdFp/FZ/jcH4nqUn3K5/5IVJf9kahu0evbOS9/++oWvLmdZX/9ErtlG9IL1QvyQmOhe2F4YX/IqpfAbQtb4LaFLW/bwha3y0JlQV5oXrDjJWqXBUumJdOSiWRaMi2Zlkwk05JpST8J1opktWS1ZLVkRbJaslqyWrIiWS0pS8qSQlKWlCVlSSEpS8qSsmRDslmyWbJZsiHZLNks2SzZkGyW7JbsluxIdkt2S3ZLdiS7JbsluyUHksOSw5LDkgPJYclhyWHJgeSw5LTktOREclpyWnJaciI5LTktOXdJLZbUsktq2SW1pBcqC/JC80L3wmBhl5SDIwdHBEcOjhwcOTgiOHJw5ODIwRHBkYMjB0cOjgiOHBw5OHJwRHDk4MjBkYMjgiMHR/ST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4l+Ev0k+kn0k+gn0U+in0Q/iX4S/ST6SfST6CfRT6KfRD+JfhL9JPpJ9JPoJ9FPop9EP4lnRPGMKJ4RxTOiLs+Ia+G0S9QuQ2EIhmSoDGJoDJ1hMEAukAvkArlALpAL5AK5QC6QC+SAHJADckAOyAE5IAfkgByQL8+I9cf25cj58f7T6fht/2L1y9vTwy/fs77+/cIrfBP7cn5+OH5+Ox+370Yur63flvwD", "file_map": { "19": { "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(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3(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(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment(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(\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(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(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 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)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\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 EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation(_input: [Field; N], _state_length: u32) -> [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(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(_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;\n\nimpl BuildHasher for BuildHasherDefault\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 Default for BuildHasherDefault\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash(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(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(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(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(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(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(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(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(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(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(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(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(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl Hash for [T]\nwhere\n T: Hash,\n{\n fn hash(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 Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash(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 Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash(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 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(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", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 5adb374ad94..c35e8de77ad 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -44,7 +44,6 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : [_1]", "return value indices : []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _2) 3 ]", "EXPR [ (-1, _3) 2 ]", "EXPR [ (-1, _4) 1 ]", @@ -95,7 +94,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUM5n3Y5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT3df35XIl+dxaBq6Jd76yfWsh6Yfxamfuq4SX3U3pYc+n3WfdKwH6pWVaPobKQHvbdfE1ne1uuW2FcGxGcEvdvPPfoOa/QZdiV/LxS9L/Bay35a83yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EarqyUQS9jCL4slEot4wCCydil3TubOl9hFkmYrarch/hV0TYLEwFOwgLISPs295C+x8IXIrTWrmF2J2IhaW0LJStiAW5IuxhhFJlCFwRCGUIvaYT1XFEWXVaa9ZFLUzn8tejpjuMcD9z8Zuu6ms7/DirCEm1WgkQJ9oYKkWdIqZoUrQpuhQ91WklQopAZpo0wCxqFj0LAeijAUSg/QI2fkZJCQJEAR8HSBpmVZIVWBWrZiVaPNIowxp5xFWO1bOGWbVkBVbiKSo0rVmR1bASL/6yNfFUzIFnDbOiZIX5OVSskUfjw8ij92BMWEz7Vz209aVr+Dx4n/rr2/Fw/PPMPfkA+Rwe1+Y2DU1cntRHC/YX", + "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUA8z7b5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT09f35XIt+dxaBp6JN7ayfWsh6Yfxamfuq4SX3U3pZc+n3WfdKwHapWVaPobKQHvbdfEq+9qdcttK4JjM4Jf7Oaf/QY1+w26Er+Wi1+W+C1kvy3p3yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EunRlowh6GUXwZaNQbhkFFk7ELunc2dL7CLNMxGxX5T7Cr4iwWZgKdhAWQkbYt72F9j8QuBSntXILsTsRC0tpWShbEQtyRdjDCKXKELgiEMoQek0nquOIsuq01qyLWpjO5a9Hl+4wwv3MxW+6q6/t8OOsIqQ40ZaAFFWKOkVM0aRoU3RUoZXwKQZCkkvOArOoWchPXwsgAG0UMPH7SUoMiB25ODJSzxpmVZIVWBUr0eJZRiFr5BFXWVbH6lnDrFqyEk9RhWnFqlmRlXjxX62Jp+LkHatnDbOinN9DYI08Gh9GHvWDMV8x31/10NaXruGD4H3qr2/nwvHPM7fkk+NzeFyb2zQ0cV1SG63UXw==", "file_map": { "46": { "source": "use crate::append::Append;\n\nimpl [T] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Push a new element to the end of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_back)]\n pub fn push_back(self, elem: T) -> Self {}\n\n /// Push a new element to the front of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_front)]\n pub fn push_front(self, elem: T) -> Self {}\n\n /// Remove the last element of the slice, returning the\n /// popped slice and the element in a tuple\n #[builtin(slice_pop_back)]\n pub fn pop_back(self) -> (Self, T) {}\n\n /// Remove the first element of the slice, returning the\n /// element and the popped slice in a tuple\n #[builtin(slice_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(slice_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 slice and\n /// the removed element\n #[builtin(slice_remove)]\n pub fn remove(self, index: u32) -> (Self, T) {}\n\n /// Append each element of the `other` slice to the end of `self`.\n /// This returns a new slice and leaves both input slices 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(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 slice, returning a new slice\n // containing the mapped elements.\n pub fn map(self, f: fn[Env](T) -> U) -> [U] {\n let mut ret = &[];\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 slice with its index, returning a\n // new slice containing the mapped elements.\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U] {\n let mut ret = &[];\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 slice\n pub fn for_each(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 slice with its index\n pub fn for_eachi(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 slice 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(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 slice and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given slice as its starting accumulator value.\n pub fn reduce(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 slice containing only elements for which the given predicate\n // returns true.\n pub fn filter(self, predicate: fn[Env](T) -> bool) -> Self {\n let mut ret = &[];\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 slice 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 slice satisfy the predicate\n pub fn all(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 slice satisfies the predicate\n pub fn any(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(&[].map(|x| x + 1), &[]);\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_slice: [Field] = &[];\n empty_slice.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_slice: [Field] = &[];\n empty_slice.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 = &[];\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]);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = &[1, 2, 3];\n let mut b = &[];\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]);\n }\n\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_0.snap index 5adb374ad94..c35e8de77ad 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_0.snap @@ -44,7 +44,6 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : [_1]", "return value indices : []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _2) 3 ]", "EXPR [ (-1, _3) 2 ]", "EXPR [ (-1, _4) 1 ]", @@ -95,7 +94,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUM5n3Y5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT3df35XIl+dxaBq6Jd76yfWsh6Yfxamfuq4SX3U3pYc+n3WfdKwH6pWVaPobKQHvbdfE1ne1uuW2FcGxGcEvdvPPfoOa/QZdiV/LxS9L/Bay35a83yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EarqyUQS9jCL4slEot4wCCydil3TubOl9hFkmYrarch/hV0TYLEwFOwgLISPs295C+x8IXIrTWrmF2J2IhaW0LJStiAW5IuxhhFJlCFwRCGUIvaYT1XFEWXVaa9ZFLUzn8tejpjuMcD9z8Zuu6ms7/DirCEm1WgkQJ9oYKkWdIqZoUrQpuhQ91WklQopAZpo0wCxqFj0LAeijAUSg/QI2fkZJCQJEAR8HSBpmVZIVWBWrZiVaPNIowxp5xFWO1bOGWbVkBVbiKSo0rVmR1bASL/6yNfFUzIFnDbOiZIX5OVSskUfjw8ij92BMWEz7Vz209aVr+Dx4n/rr2/Fw/PPMPfkA+Rwe1+Y2DU1cntRHC/YX", + "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUA8z7b5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT09f35XIt+dxaBp6JN7ayfWsh6Yfxamfuq4SX3U3pZc+n3WfdKwHapWVaPobKQHvbdfEq+9qdcttK4JjM4Jf7Oaf/QY1+w26Er+Wi1+W+C1kvy3p3yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EunRlowh6GUXwZaNQbhkFFk7ELunc2dL7CLNMxGxX5T7Cr4iwWZgKdhAWQkbYt72F9j8QuBSntXILsTsRC0tpWShbEQtyRdjDCKXKELgiEMoQek0nquOIsuq01qyLWpjO5a9Hl+4wwv3MxW+6q6/t8OOsIqQ40ZaAFFWKOkVM0aRoU3RUoZXwKQZCkkvOArOoWchPXwsgAG0UMPH7SUoMiB25ODJSzxpmVZIVWBUr0eJZRiFr5BFXWVbH6lnDrFqyEk9RhWnFqlmRlXjxX62Jp+LkHatnDbOinN9DYI08Gh9GHvWDMV8x31/10NaXruGD4H3qr2/nwvHPM7fkk+NzeFyb2zQ0cV1SG63UXw==", "file_map": { "46": { "source": "use crate::append::Append;\n\nimpl [T] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Push a new element to the end of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_back)]\n pub fn push_back(self, elem: T) -> Self {}\n\n /// Push a new element to the front of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_front)]\n pub fn push_front(self, elem: T) -> Self {}\n\n /// Remove the last element of the slice, returning the\n /// popped slice and the element in a tuple\n #[builtin(slice_pop_back)]\n pub fn pop_back(self) -> (Self, T) {}\n\n /// Remove the first element of the slice, returning the\n /// element and the popped slice in a tuple\n #[builtin(slice_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(slice_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 slice and\n /// the removed element\n #[builtin(slice_remove)]\n pub fn remove(self, index: u32) -> (Self, T) {}\n\n /// Append each element of the `other` slice to the end of `self`.\n /// This returns a new slice and leaves both input slices 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(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 slice, returning a new slice\n // containing the mapped elements.\n pub fn map(self, f: fn[Env](T) -> U) -> [U] {\n let mut ret = &[];\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 slice with its index, returning a\n // new slice containing the mapped elements.\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U] {\n let mut ret = &[];\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 slice\n pub fn for_each(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 slice with its index\n pub fn for_eachi(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 slice 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(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 slice and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given slice as its starting accumulator value.\n pub fn reduce(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 slice containing only elements for which the given predicate\n // returns true.\n pub fn filter(self, predicate: fn[Env](T) -> bool) -> Self {\n let mut ret = &[];\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 slice 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 slice satisfy the predicate\n pub fn all(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 slice satisfies the predicate\n pub fn any(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(&[].map(|x| x + 1), &[]);\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_slice: [Field] = &[];\n empty_slice.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_slice: [Field] = &[];\n empty_slice.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 = &[];\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]);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = &[1, 2, 3];\n let mut b = &[];\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]);\n }\n\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 5adb374ad94..c35e8de77ad 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_to_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -44,7 +44,6 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : [_1]", "return value indices : []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _2) 3 ]", "EXPR [ (-1, _3) 2 ]", "EXPR [ (-1, _4) 1 ]", @@ -95,7 +94,7 @@ expression: artifact "unconstrained func 1", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUM5n3Y5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT3df35XIl+dxaBq6Jd76yfWsh6Yfxamfuq4SX3U3pYc+n3WfdKwH6pWVaPobKQHvbdfE1ne1uuW2FcGxGcEvdvPPfoOa/QZdiV/LxS9L/Bay35a83yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EarqyUQS9jCL4slEot4wCCydil3TubOl9hFkmYrarch/hV0TYLEwFOwgLISPs295C+x8IXIrTWrmF2J2IhaW0LJStiAW5IuxhhFJlCFwRCGUIvaYT1XFEWXVaa9ZFLUzn8tejpjuMcD9z8Zuu6ms7/DirCEm1WgkQJ9oYKkWdIqZoUrQpuhQ91WklQopAZpo0wCxqFj0LAeijAUSg/QI2fkZJCQJEAR8HSBpmVZIVWBWrZiVaPNIowxp5xFWO1bOGWbVkBVbiKSo0rVmR1bASL/6yNfFUzIFnDbOiZIX5OVSskUfjw8ij92BMWEz7Vz209aVr+Dx4n/rr2/Fw/PPMPfkA+Rwe1+Y2DU1cntRHC/YX", + "debug_symbols": "pZZNjqMwEIXv4jULl13+y1VGo4gkpIWESERDS6Oo7z5lU4b0AjRjNvUA8z7b5TL4JW7NZfo4t/398SlOv17iMrRd136cu8e1HttHT09f35XIt+dxaBp6JN7ayfWsh6Yfxamfuq4SX3U3pZc+n3WfdKwHapWVaPobKQHvbdfEq+9qdcttK4JjM4Jf7Oaf/QY1+w26Er+Wi1+W+C1kvy3p3yvFfq/9MT/qY35rS/w+5y9IOOZXWOAP2me/Ccf8XpX4g2U/SHAHAUUVCKDzEgI4s0UA3EGgxYxAX4YwMm8EunRlowh6GUXwZaNQbhkFFk7ELunc2dL7CLNMxGxX5T7Cr4iwWZgKdhAWQkbYt72F9j8QuBSntXILsTsRC0tpWShbEQtyRdjDCKXKELgiEMoQek0nquOIsuq01qyLWpjO5a9Hl+4wwv3MxW+6q6/t8OOsIqQ40ZaAFFWKOkVM0aRoU3RUoZXwKQZCkkvOArOoWchPXwsgAG0UMPH7SUoMiB25ODJSzxpmVZIVWBUr0eJZRiFr5BFXWVbH6lnDrFqyEk9RhWnFqlmRlXjxX62Jp+LkHatnDbOinN9DYI08Gh9GHvWDMV8x31/10NaXruGD4H3qr2/nwvHPM7fkk+NzeFyb2zQ0cV1SG63UXw==", "file_map": { "46": { "source": "use crate::append::Append;\n\nimpl [T] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Push a new element to the end of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_back)]\n pub fn push_back(self, elem: T) -> Self {}\n\n /// Push a new element to the front of the slice, returning a\n /// new slice with a length one greater than the\n /// original unmodified slice.\n #[builtin(slice_push_front)]\n pub fn push_front(self, elem: T) -> Self {}\n\n /// Remove the last element of the slice, returning the\n /// popped slice and the element in a tuple\n #[builtin(slice_pop_back)]\n pub fn pop_back(self) -> (Self, T) {}\n\n /// Remove the first element of the slice, returning the\n /// element and the popped slice in a tuple\n #[builtin(slice_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(slice_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 slice and\n /// the removed element\n #[builtin(slice_remove)]\n pub fn remove(self, index: u32) -> (Self, T) {}\n\n /// Append each element of the `other` slice to the end of `self`.\n /// This returns a new slice and leaves both input slices 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(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 slice, returning a new slice\n // containing the mapped elements.\n pub fn map(self, f: fn[Env](T) -> U) -> [U] {\n let mut ret = &[];\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 slice with its index, returning a\n // new slice containing the mapped elements.\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U] {\n let mut ret = &[];\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 slice\n pub fn for_each(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 slice with its index\n pub fn for_eachi(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 slice 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(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 slice and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given slice as its starting accumulator value.\n pub fn reduce(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 slice containing only elements for which the given predicate\n // returns true.\n pub fn filter(self, predicate: fn[Env](T) -> bool) -> Self {\n let mut ret = &[];\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 slice 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 slice satisfy the predicate\n pub fn all(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 slice satisfies the predicate\n pub fn any(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(&[].map(|x| x + 1), &[]);\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_slice: [Field] = &[];\n empty_slice.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_slice: [Field] = &[];\n empty_slice.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 = &[];\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]);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = &[1, 2, 3];\n let mut b = &[];\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]);\n }\n\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index a7d5fb87d0f..df5c9f77649 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -89,7 +89,6 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _16) 0 ]) ", "EXPR [ (1, _15) (1, _16) (-1, _17) 0 ]", "BLACKBOX::RANGE [(_17, 32)] []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _18) 0 ]", "INIT (id: 6, len: 4, witnesses: [_18, _18, _18, _18])", "MEM (id: 6, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _0) 0 ]) ", @@ -97,16 +96,13 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _1) 0 ], value: EXPR [ (1, _20) 0 ]) ", "EXPR [ (1, _19) (1, _20) (-1, _21) 0 ]", "BLACKBOX::RANGE [(_21, 32)] []", - "BLACKBOX::RANGE [(_1, 2)] []", "MEM (id: 6, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _1) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _22) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _23) 0 ]) ", "EXPR [ (1, _22) (1, _23) (-1, _24) 0 ]", "BLACKBOX::RANGE [(_24, 32)] []", - "BLACKBOX::RANGE [(_2, 2)] []", "MEM (id: 6, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _2) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _3) 0 ], value: EXPR [ (1, _25) 0 ]) ", - "BLACKBOX::RANGE [(_3, 2)] []", "MEM (id: 6, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _3) 0 ]) ", "MEM (id: 6, read at: EXPR [ (1, _18) 0 ], value: EXPR [ (1, _26) 0 ]) ", "EXPR [ (-1, _27) 1 ]", @@ -121,7 +117,7 @@ expression: artifact "EXPR [ (1, _14) (-1, _32) 0 ]", "INIT RETURNDATA (id: 4, len: 4, witnesses: [_11, _12, _13, _14])" ], - "debug_symbols": "pZPNboQgEIDfZc4cEPBvX6VpDCpuSAgaVjdpzL57R2axu4cmDb34KTPfjI6ww2j67dpZP803uHzs0AfrnL12bh70amePq/uDQXrs1mAMLsFLHK1FB+NXuPjNOQZ37baYdFu0j1x1wChnYPyIxIKTdea4e7Afm/+uSplkKYtTL//u12Xy6zbDV1w+fcWz/EIkv2j+1z/Ll017vj/P6S/r5Kuc+SuV5q9KkdWfn/3f/U980oMNbzsWavxkBk28tigxKDihQA0hCJKg4FIhSkJFoBpFQ14bMwUnUBUhYqaQMVOomClKilWEmtBQJlZpGEhOwCr4W6QgSIIilISKUBOwyrH77jpY3TvzPJzT5oeXs7p+LSmSTvMS5sGMWzDHlGIM5/YN", + "debug_symbols": "pZPNboQgEIDfhTMH/lzRV2kag4obEoKG1U0as+/ekVns7qFJQy9+wsw3oxPYyWj77dq5MM030n7spI/Oe3ft/DyY1c0BdvcHJXnZrdFa2CIvcbAWE21YSRs27ym5G7+lpNtiQuJqIkQZJTaMQCg4OW+Ptwf9sdnvqpRZlpKfevV3v66yXzcFvmLy6StW5HORfa7/17/Il7o5v5+V9Jd19lXJ/JXK81eVKOrPzv7v/ieszODi24klNfwyJTo9G5Ao4QzBQQMIhCTtBaAQFeKSNF6joDGzSRAspQieUoRIKUJiTCGwioAqGgBVYPRCI5oEyRAcIRASAVWOE3Y30Zne2+cFnLYwvNzH9WvJkXxjlzgPdtyiPSaRYjCbbw==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap index a7d5fb87d0f..df5c9f77649 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap @@ -89,7 +89,6 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _16) 0 ]) ", "EXPR [ (1, _15) (1, _16) (-1, _17) 0 ]", "BLACKBOX::RANGE [(_17, 32)] []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _18) 0 ]", "INIT (id: 6, len: 4, witnesses: [_18, _18, _18, _18])", "MEM (id: 6, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _0) 0 ]) ", @@ -97,16 +96,13 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _1) 0 ], value: EXPR [ (1, _20) 0 ]) ", "EXPR [ (1, _19) (1, _20) (-1, _21) 0 ]", "BLACKBOX::RANGE [(_21, 32)] []", - "BLACKBOX::RANGE [(_1, 2)] []", "MEM (id: 6, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _1) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _22) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _23) 0 ]) ", "EXPR [ (1, _22) (1, _23) (-1, _24) 0 ]", "BLACKBOX::RANGE [(_24, 32)] []", - "BLACKBOX::RANGE [(_2, 2)] []", "MEM (id: 6, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _2) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _3) 0 ], value: EXPR [ (1, _25) 0 ]) ", - "BLACKBOX::RANGE [(_3, 2)] []", "MEM (id: 6, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _3) 0 ]) ", "MEM (id: 6, read at: EXPR [ (1, _18) 0 ], value: EXPR [ (1, _26) 0 ]) ", "EXPR [ (-1, _27) 1 ]", @@ -121,7 +117,7 @@ expression: artifact "EXPR [ (1, _14) (-1, _32) 0 ]", "INIT RETURNDATA (id: 4, len: 4, witnesses: [_11, _12, _13, _14])" ], - "debug_symbols": "pZPNboQgEIDfZc4cEPBvX6VpDCpuSAgaVjdpzL57R2axu4cmDb34KTPfjI6ww2j67dpZP803uHzs0AfrnL12bh70amePq/uDQXrs1mAMLsFLHK1FB+NXuPjNOQZ37baYdFu0j1x1wChnYPyIxIKTdea4e7Afm/+uSplkKYtTL//u12Xy6zbDV1w+fcWz/EIkv2j+1z/Ll017vj/P6S/r5Kuc+SuV5q9KkdWfn/3f/U980oMNbzsWavxkBk28tigxKDihQA0hCJKg4FIhSkJFoBpFQ14bMwUnUBUhYqaQMVOomClKilWEmtBQJlZpGEhOwCr4W6QgSIIilISKUBOwyrH77jpY3TvzPJzT5oeXs7p+LSmSTvMS5sGMWzDHlGIM5/YN", + "debug_symbols": "pZPNboQgEIDfhTMH/lzRV2kag4obEoKG1U0as+/ekVns7qFJQy9+wsw3oxPYyWj77dq5MM030n7spI/Oe3ft/DyY1c0BdvcHJXnZrdFa2CIvcbAWE21YSRs27ym5G7+lpNtiQuJqIkQZJTaMQCg4OW+Ptwf9sdnvqpRZlpKfevV3v66yXzcFvmLy6StW5HORfa7/17/Il7o5v5+V9Jd19lXJ/JXK81eVKOrPzv7v/ieszODi24klNfwyJTo9G5Ao4QzBQQMIhCTtBaAQFeKSNF6joDGzSRAspQieUoRIKUJiTCGwioAqGgBVYPRCI5oEyRAcIRASAVWOE3Y30Zne2+cFnLYwvNzH9WvJkXxjlzgPdtyiPSaRYjCbbw==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index a7d5fb87d0f..df5c9f77649 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -89,7 +89,6 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _16) 0 ]) ", "EXPR [ (1, _15) (1, _16) (-1, _17) 0 ]", "BLACKBOX::RANGE [(_17, 32)] []", - "BLACKBOX::RANGE [(_0, 2)] []", "EXPR [ (-1, _18) 0 ]", "INIT (id: 6, len: 4, witnesses: [_18, _18, _18, _18])", "MEM (id: 6, write EXPR [ (1, _17) 0 ] at: EXPR [ (1, _0) 0 ]) ", @@ -97,16 +96,13 @@ expression: artifact "MEM (id: 5, read at: EXPR [ (1, _1) 0 ], value: EXPR [ (1, _20) 0 ]) ", "EXPR [ (1, _19) (1, _20) (-1, _21) 0 ]", "BLACKBOX::RANGE [(_21, 32)] []", - "BLACKBOX::RANGE [(_1, 2)] []", "MEM (id: 6, write EXPR [ (1, _21) 0 ] at: EXPR [ (1, _1) 0 ]) ", "MEM (id: 3, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _22) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _23) 0 ]) ", "EXPR [ (1, _22) (1, _23) (-1, _24) 0 ]", "BLACKBOX::RANGE [(_24, 32)] []", - "BLACKBOX::RANGE [(_2, 2)] []", "MEM (id: 6, write EXPR [ (1, _24) 0 ] at: EXPR [ (1, _2) 0 ]) ", "MEM (id: 5, read at: EXPR [ (1, _3) 0 ], value: EXPR [ (1, _25) 0 ]) ", - "BLACKBOX::RANGE [(_3, 2)] []", "MEM (id: 6, write EXPR [ (1, _25) 0 ] at: EXPR [ (1, _3) 0 ]) ", "MEM (id: 6, read at: EXPR [ (1, _18) 0 ], value: EXPR [ (1, _26) 0 ]) ", "EXPR [ (-1, _27) 1 ]", @@ -121,7 +117,7 @@ expression: artifact "EXPR [ (1, _14) (-1, _32) 0 ]", "INIT RETURNDATA (id: 4, len: 4, witnesses: [_11, _12, _13, _14])" ], - "debug_symbols": "pZPNboQgEIDfZc4cEPBvX6VpDCpuSAgaVjdpzL57R2axu4cmDb34KTPfjI6ww2j67dpZP803uHzs0AfrnL12bh70amePq/uDQXrs1mAMLsFLHK1FB+NXuPjNOQZ37baYdFu0j1x1wChnYPyIxIKTdea4e7Afm/+uSplkKYtTL//u12Xy6zbDV1w+fcWz/EIkv2j+1z/Ll017vj/P6S/r5Kuc+SuV5q9KkdWfn/3f/U980oMNbzsWavxkBk28tigxKDihQA0hCJKg4FIhSkJFoBpFQ14bMwUnUBUhYqaQMVOomClKilWEmtBQJlZpGEhOwCr4W6QgSIIilISKUBOwyrH77jpY3TvzPJzT5oeXs7p+LSmSTvMS5sGMWzDHlGIM5/YN", + "debug_symbols": "pZPNboQgEIDfhTMH/lzRV2kag4obEoKG1U0as+/ekVns7qFJQy9+wsw3oxPYyWj77dq5MM030n7spI/Oe3ft/DyY1c0BdvcHJXnZrdFa2CIvcbAWE21YSRs27ym5G7+lpNtiQuJqIkQZJTaMQCg4OW+Ptwf9sdnvqpRZlpKfevV3v66yXzcFvmLy6StW5HORfa7/17/Il7o5v5+V9Jd19lXJ/JXK81eVKOrPzv7v/ieszODi24klNfwyJTo9G5Ao4QzBQQMIhCTtBaAQFeKSNF6joDGzSRAspQieUoRIKUJiTCGwioAqGgBVYPRCI5oEyRAcIRASAVWOE3Y30Zne2+cFnLYwvNzH9WvJkXxjlzgPdtyiPSaRYjCbbw==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 8390e614c6b..d47270299bd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -43,6 +43,7 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : []", "return value indices : []", + "BLACKBOX::RANGE [(_0, 32)] []", "EXPR [ (1, _0) (-1, _1) -1 ]", "EXPR [ (-1, _2) 22 ]", "EXPR [ (-1, _3) 23 ]", @@ -518,7 +519,6 @@ expression: artifact "EXPR [ (1, _207, _245) (-25, _245) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _245) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_124, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _124) 0 ], value: EXPR [ (1, _246) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _246) -7 ]], outputs: [_247]", "EXPR [ (1, _246, _247) (-7, _247) (1, _248) -1 ]", @@ -596,7 +596,6 @@ expression: artifact "EXPR [ (1, _246, _284) (-25, _284) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _284) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_84, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _84) 0 ], value: EXPR [ (1, _285) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _285) -7 ]], outputs: [_286]", "EXPR [ (1, _285, _286) (-7, _286) (1, _287) -1 ]", @@ -911,7 +910,6 @@ expression: artifact "EXPR [ (1, _406, _444) (-25, _444) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _444) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_0, 1)] []", "MEM (id: 3, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _445) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _445) -7 ]], outputs: [_446]", "EXPR [ (1, _445, _446) (-7, _446) (1, _447) -1 ]", @@ -1007,7 +1005,7 @@ expression: artifact "unconstrained func 4", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_0.snap index 8390e614c6b..d47270299bd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_0.snap @@ -43,6 +43,7 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : []", "return value indices : []", + "BLACKBOX::RANGE [(_0, 32)] []", "EXPR [ (1, _0) (-1, _1) -1 ]", "EXPR [ (-1, _2) 22 ]", "EXPR [ (-1, _3) 23 ]", @@ -518,7 +519,6 @@ expression: artifact "EXPR [ (1, _207, _245) (-25, _245) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _245) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_124, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _124) 0 ], value: EXPR [ (1, _246) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _246) -7 ]], outputs: [_247]", "EXPR [ (1, _246, _247) (-7, _247) (1, _248) -1 ]", @@ -596,7 +596,6 @@ expression: artifact "EXPR [ (1, _246, _284) (-25, _284) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _284) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_84, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _84) 0 ], value: EXPR [ (1, _285) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _285) -7 ]], outputs: [_286]", "EXPR [ (1, _285, _286) (-7, _286) (1, _287) -1 ]", @@ -911,7 +910,6 @@ expression: artifact "EXPR [ (1, _406, _444) (-25, _444) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _444) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_0, 1)] []", "MEM (id: 3, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _445) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _445) -7 ]], outputs: [_446]", "EXPR [ (1, _445, _446) (-7, _446) (1, _447) -1 ]", @@ -1007,7 +1005,7 @@ expression: artifact "unconstrained func 4", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 8390e614c6b..d47270299bd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/lambda_from_array/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -43,6 +43,7 @@ expression: artifact "private parameters indices : [_0]", "public parameters indices : []", "return value indices : []", + "BLACKBOX::RANGE [(_0, 32)] []", "EXPR [ (1, _0) (-1, _1) -1 ]", "EXPR [ (-1, _2) 22 ]", "EXPR [ (-1, _3) 23 ]", @@ -518,7 +519,6 @@ expression: artifact "EXPR [ (1, _207, _245) (-25, _245) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _245) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_124, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _124) 0 ], value: EXPR [ (1, _246) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _246) -7 ]], outputs: [_247]", "EXPR [ (1, _246, _247) (-7, _247) (1, _248) -1 ]", @@ -596,7 +596,6 @@ expression: artifact "EXPR [ (1, _246, _284) (-25, _284) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _284) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_84, 2)] []", "MEM (id: 1, read at: EXPR [ (1, _84) 0 ], value: EXPR [ (1, _285) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _285) -7 ]], outputs: [_286]", "EXPR [ (1, _285, _286) (-7, _286) (1, _287) -1 ]", @@ -911,7 +910,6 @@ expression: artifact "EXPR [ (1, _406, _444) (-25, _444) 0 ]", "BRILLIG CALL func 1: PREDICATE: EXPR [ (1, _444) 0 ]", "inputs: [EXPR [ 1 ], [EXPR [ 98 ], EXPR [ 105 ], EXPR [ 103 ]]], outputs: []", - "BLACKBOX::RANGE [(_0, 1)] []", "MEM (id: 3, read at: EXPR [ (1, _0) 0 ], value: EXPR [ (1, _445) 0 ]) ", "BRILLIG CALL func 3: inputs: [EXPR [ (1, _445) -7 ]], outputs: [_446]", "EXPR [ (1, _445, _446) (-7, _446) (1, _447) -1 ]", @@ -1007,7 +1005,7 @@ expression: artifact "unconstrained func 4", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index b1ea36610bb..ee77456e996 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -52,7 +52,6 @@ expression: artifact "EXPR [ (1, _4) -5 ]", "MEM (id: 0, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _5) 0 ]) ", "EXPR [ (1, _5) -10 ]", - "BLACKBOX::RANGE [(_2, 1)] []", "EXPR [ (-1, _6) 2 ]", "MEM (id: 0, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _2) 0 ]) ", "EXPR [ (-1, _7) 0 ]", @@ -74,7 +73,7 @@ expression: artifact "MEM (id: 2, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _19) 0 ]) ", "EXPR [ (1, _19) -2 ]" ], - "debug_symbols": "pZTbboQgEED/ZZ55EJSL/krTbFjFDQlBw2qTxvjvHdxxu/vQpNEXjzCcEYfLAp27zreLj/1wh+ZjgWvyIfjbJQytnfwQsXdZGezNy5Scwy54iaM12uTiBE2cQ2DwZcO8DbqPNm6cbMJowcDFDokJex9cflvZr138rSpOrlJPWf7blnK39RlbFwdso8mu5Sm7PmBzbkjn/JBf6Kd/ZPZc70vOjTjpH/m+KCvyRVWe9NVJ/0j9hVK7r8053/A3/xNbtvXp7ZwDx0IzEDicQQlNyaCCBn9BosRA4flhoPEcMDDbs8YNyoAXD6BdI0TeN8iSWBElURE10RDrB0VB5MScD+cjcj6ckaiIkpjzVWsuQvL2GhzdWP0c25cLbPoe98h+xY1paF03J5eLsMWwLD8=", + "debug_symbols": "pZTBboQgEED/Zc4cBBXQX2kag4obEoKG1SaN8d872HG7e2iy0YtPGN44ILBCb9vl1rgwjHeoP1Zoo/Pe3Ro/dmZ2Y8DedWNwNJs5Wotd8BRHazLRhhnqsHjP4Mv4ZR90n0zYOZuI0YyBDT0SEw7O2/S2sT87+1+VnFwpH3L5tl2Wh62u2Co7YWtFdlVesqsTNueadM5P+Zl6+Geq5+r45VyLi/6Z74u8IF8U+UVfXvTPrL+Q8vCVvuZr/uJ/Yst0Lr6cc+C40AwEDmeQQ50zKKDGKZQoMZB4Ahio/alxazKo9ifPcHsiko3FcEHMiQWxJEqiImpi9UuREVM+LESkfFiKyIkFMeUrtjT76EzrLV1VwxK6p5tr/p6OyHG3TXHsbL9Em2a/x3A9fgA=", "file_map": { "50": { "source": "fn main(mut array: [Field; 2], i: u32) {\n assert_eq(array[i - 1], 5);\n assert_eq(array[i], 10);\n\n array[i] = 2;\n\n let array2 = [array, array];\n\n assert_eq(array2[0][0], 5);\n assert_eq(array2[0][i], 2);\n assert_eq(array2[i][0], 5);\n assert_eq(array2[i][i], 2);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_0.snap index b1ea36610bb..ee77456e996 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_0.snap @@ -52,7 +52,6 @@ expression: artifact "EXPR [ (1, _4) -5 ]", "MEM (id: 0, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _5) 0 ]) ", "EXPR [ (1, _5) -10 ]", - "BLACKBOX::RANGE [(_2, 1)] []", "EXPR [ (-1, _6) 2 ]", "MEM (id: 0, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _2) 0 ]) ", "EXPR [ (-1, _7) 0 ]", @@ -74,7 +73,7 @@ expression: artifact "MEM (id: 2, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _19) 0 ]) ", "EXPR [ (1, _19) -2 ]" ], - "debug_symbols": "pZTbboQgEED/ZZ55EJSL/krTbFjFDQlBw2qTxvjvHdxxu/vQpNEXjzCcEYfLAp27zreLj/1wh+ZjgWvyIfjbJQytnfwQsXdZGezNy5Scwy54iaM12uTiBE2cQ2DwZcO8DbqPNm6cbMJowcDFDokJex9cflvZr138rSpOrlJPWf7blnK39RlbFwdso8mu5Sm7PmBzbkjn/JBf6Kd/ZPZc70vOjTjpH/m+KCvyRVWe9NVJ/0j9hVK7r8053/A3/xNbtvXp7ZwDx0IzEDicQQlNyaCCBn9BosRA4flhoPEcMDDbs8YNyoAXD6BdI0TeN8iSWBElURE10RDrB0VB5MScD+cjcj6ckaiIkpjzVWsuQvL2GhzdWP0c25cLbPoe98h+xY1paF03J5eLsMWwLD8=", + "debug_symbols": "pZTBboQgEED/Zc4cBBXQX2kag4obEoKG1SaN8d872HG7e2iy0YtPGN44ILBCb9vl1rgwjHeoP1Zoo/Pe3Ro/dmZ2Y8DedWNwNJs5Wotd8BRHazLRhhnqsHjP4Mv4ZR90n0zYOZuI0YyBDT0SEw7O2/S2sT87+1+VnFwpH3L5tl2Wh62u2Co7YWtFdlVesqsTNueadM5P+Zl6+Geq5+r45VyLi/6Z74u8IF8U+UVfXvTPrL+Q8vCVvuZr/uJ/Yst0Lr6cc+C40AwEDmeQQ50zKKDGKZQoMZB4Ahio/alxazKo9ifPcHsiko3FcEHMiQWxJEqiImpi9UuREVM+LESkfFiKyIkFMeUrtjT76EzrLV1VwxK6p5tr/p6OyHG3TXHsbL9Em2a/x3A9fgA=", "file_map": { "50": { "source": "fn main(mut array: [Field; 2], i: u32) {\n assert_eq(array[i - 1], 5);\n assert_eq(array[i], 10);\n\n array[i] = 2;\n\n let array2 = [array, array];\n\n assert_eq(array2[0][0], 5);\n assert_eq(array2[0][i], 2);\n assert_eq(array2[i][0], 5);\n assert_eq(array2[i][i], 2);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index b1ea36610bb..ee77456e996 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_dyn_array_regression_5782/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -52,7 +52,6 @@ expression: artifact "EXPR [ (1, _4) -5 ]", "MEM (id: 0, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _5) 0 ]) ", "EXPR [ (1, _5) -10 ]", - "BLACKBOX::RANGE [(_2, 1)] []", "EXPR [ (-1, _6) 2 ]", "MEM (id: 0, write EXPR [ (1, _6) 0 ] at: EXPR [ (1, _2) 0 ]) ", "EXPR [ (-1, _7) 0 ]", @@ -74,7 +73,7 @@ expression: artifact "MEM (id: 2, read at: EXPR [ (1, _2) 0 ], value: EXPR [ (1, _19) 0 ]) ", "EXPR [ (1, _19) -2 ]" ], - "debug_symbols": "pZTbboQgEED/ZZ55EJSL/krTbFjFDQlBw2qTxvjvHdxxu/vQpNEXjzCcEYfLAp27zreLj/1wh+ZjgWvyIfjbJQytnfwQsXdZGezNy5Scwy54iaM12uTiBE2cQ2DwZcO8DbqPNm6cbMJowcDFDokJex9cflvZr138rSpOrlJPWf7blnK39RlbFwdso8mu5Sm7PmBzbkjn/JBf6Kd/ZPZc70vOjTjpH/m+KCvyRVWe9NVJ/0j9hVK7r8053/A3/xNbtvXp7ZwDx0IzEDicQQlNyaCCBn9BosRA4flhoPEcMDDbs8YNyoAXD6BdI0TeN8iSWBElURE10RDrB0VB5MScD+cjcj6ckaiIkpjzVWsuQvL2GhzdWP0c25cLbPoe98h+xY1paF03J5eLsMWwLD8=", + "debug_symbols": "pZTBboQgEED/Zc4cBBXQX2kag4obEoKG1SaN8d872HG7e2iy0YtPGN44ILBCb9vl1rgwjHeoP1Zoo/Pe3Ro/dmZ2Y8DedWNwNJs5Wotd8BRHazLRhhnqsHjP4Mv4ZR90n0zYOZuI0YyBDT0SEw7O2/S2sT87+1+VnFwpH3L5tl2Wh62u2Co7YWtFdlVesqsTNueadM5P+Zl6+Geq5+r45VyLi/6Z74u8IF8U+UVfXvTPrL+Q8vCVvuZr/uJ/Yst0Lr6cc+C40AwEDmeQQ50zKKDGKZQoMZB4Ahio/alxazKo9ifPcHsiko3FcEHMiQWxJEqiImpi9UuREVM+LESkfFiKyIkFMeUrtjT76EzrLV1VwxK6p5tr/p6OyHG3TXHsbL9Em2a/x3A9fgA=", "file_map": { "50": { "source": "fn main(mut array: [Field; 2], i: u32) {\n assert_eq(array[i - 1], 5);\n assert_eq(array[i], 10);\n\n array[i] = 2;\n\n let array2 = [array, array];\n\n assert_eq(array2[0][0], 5);\n assert_eq(array2[0][i], 2);\n assert_eq(array2[i][0], 5);\n assert_eq(array2[i][i], 2);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index d9b3ac78ba9..730d0db2737 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -53,7 +53,6 @@ expression: artifact "BLACKBOX::RANGE [(_3, 1)] []", "BRILLIG CALL func 0: inputs: [EXPR [ (1, _0) 0 ], EXPR [ 3 ]], outputs: [_5, _6]", "BLACKBOX::RANGE [(_5, 31)] []", - "BLACKBOX::RANGE [(_6, 2)] []", "EXPR [ (1, _6) (-1, _7) 1 ]", "BLACKBOX::RANGE [(_7, 2)] []", "EXPR [ (1, _0) (-3, _5) (-1, _6) 0 ]", @@ -66,7 +65,7 @@ expression: artifact "unconstrained func 0", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZLfqsMgDMbfJdde6NTN9lUOh2JbOwSxxemBQ+m7L7V/tl0MRneTz+TzFwLJCK2p07WyvutvUP6MUAfrnL1Wrm90tL3H6jgR2NIqBmOwBE8+UoMOxkcofXKOwJ92KX+6DdpnjTqgSwkY36Jiw846M78m8qDpe5QrscJC8B2XH/NMnVf+JOUBnqti5XnBv+IFpYd4tfPH5pc7f/mOZ+KF/8VMNza8XAxINAmcc7zkqHIscmR0EQYlroWdcD8ofBGxCHZg0zxQsLp2Zr3DLvnm6Szj/7A52+EOoW9Mm4KZB8oejngH", + "debug_symbols": "pZLBqsMgEEX/ZdYutGpr8iuPRzCJKYKYYLVQQv69E5uk7aJQ0s1cneuRgbkjtKZO58r6rr9A+TdCHaxz9ly5vtHR9h6740RgvVYxGIMtePGRGnQwPkLpk3MErtql/OgyaJ816oAuJWB8i4ofdtaZ+TSRJ00/o1yJBRaCb7j8mmfquPAHKXfwXBULzwv+Ey8o3cWrjd83v9z40288E2/8P950Y8NbYkCiSeCY6ylXlWuRK6NQ4j4Yw8WgHB7CHyJQpnmSYHXtzBLALvnmJY/xNqzOmtgh9I1pUzDzJNnD2e4=", "file_map": { "50": { "source": "global G_A: [u16; 3] = [33700, 47314, 35095];\nglobal G_B: [u16; 3] = [59890, 17417, 14409];\nfn main(a: [u16; 3], b: [bool; 1]) -> pub bool {\n // Safety: testing context\n let res = unsafe { func_1(G_B, true) }[(((a[0] as u32) % (G_B[2] as u32)) % 1)];\n if res {\n // Safety: testing context\n let c = unsafe { func_1(a, b[0]) };\n b[0]\n } else {\n ((a[((a[0] as u32) % 3)] as u32) > ((24993 % G_A[1]) as u32))\n }\n}\nunconstrained fn func_1(a: [u16; 3], b: bool) -> [bool; 1] {\n [false]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_0.snap index d9b3ac78ba9..730d0db2737 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_0.snap @@ -53,7 +53,6 @@ expression: artifact "BLACKBOX::RANGE [(_3, 1)] []", "BRILLIG CALL func 0: inputs: [EXPR [ (1, _0) 0 ], EXPR [ 3 ]], outputs: [_5, _6]", "BLACKBOX::RANGE [(_5, 31)] []", - "BLACKBOX::RANGE [(_6, 2)] []", "EXPR [ (1, _6) (-1, _7) 1 ]", "BLACKBOX::RANGE [(_7, 2)] []", "EXPR [ (1, _0) (-3, _5) (-1, _6) 0 ]", @@ -66,7 +65,7 @@ expression: artifact "unconstrained func 0", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZLfqsMgDMbfJdde6NTN9lUOh2JbOwSxxemBQ+m7L7V/tl0MRneTz+TzFwLJCK2p07WyvutvUP6MUAfrnL1Wrm90tL3H6jgR2NIqBmOwBE8+UoMOxkcofXKOwJ92KX+6DdpnjTqgSwkY36Jiw846M78m8qDpe5QrscJC8B2XH/NMnVf+JOUBnqti5XnBv+IFpYd4tfPH5pc7f/mOZ+KF/8VMNza8XAxINAmcc7zkqHIscmR0EQYlroWdcD8ofBGxCHZg0zxQsLp2Zr3DLvnm6Szj/7A52+EOoW9Mm4KZB8oejngH", + "debug_symbols": "pZLBqsMgEEX/ZdYutGpr8iuPRzCJKYKYYLVQQv69E5uk7aJQ0s1cneuRgbkjtKZO58r6rr9A+TdCHaxz9ly5vtHR9h6740RgvVYxGIMtePGRGnQwPkLpk3MErtql/OgyaJ816oAuJWB8i4ofdtaZ+TSRJ00/o1yJBRaCb7j8mmfquPAHKXfwXBULzwv+Ey8o3cWrjd83v9z40288E2/8P950Y8NbYkCiSeCY6ylXlWuRK6NQ4j4Yw8WgHB7CHyJQpnmSYHXtzBLALvnmJY/xNqzOmtgh9I1pUzDzJNnD2e4=", "file_map": { "50": { "source": "global G_A: [u16; 3] = [33700, 47314, 35095];\nglobal G_B: [u16; 3] = [59890, 17417, 14409];\nfn main(a: [u16; 3], b: [bool; 1]) -> pub bool {\n // Safety: testing context\n let res = unsafe { func_1(G_B, true) }[(((a[0] as u32) % (G_B[2] as u32)) % 1)];\n if res {\n // Safety: testing context\n let c = unsafe { func_1(a, b[0]) };\n b[0]\n } else {\n ((a[((a[0] as u32) % 3)] as u32) > ((24993 % G_A[1]) as u32))\n }\n}\nunconstrained fn func_1(a: [u16; 3], b: bool) -> [bool; 1] {\n [false]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index d9b3ac78ba9..730d0db2737 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_8236/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -53,7 +53,6 @@ expression: artifact "BLACKBOX::RANGE [(_3, 1)] []", "BRILLIG CALL func 0: inputs: [EXPR [ (1, _0) 0 ], EXPR [ 3 ]], outputs: [_5, _6]", "BLACKBOX::RANGE [(_5, 31)] []", - "BLACKBOX::RANGE [(_6, 2)] []", "EXPR [ (1, _6) (-1, _7) 1 ]", "BLACKBOX::RANGE [(_7, 2)] []", "EXPR [ (1, _0) (-3, _5) (-1, _6) 0 ]", @@ -66,7 +65,7 @@ expression: artifact "unconstrained func 0", "[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data: HeapVector { pointer: Direct(11), size: Direct(10) } }]" ], - "debug_symbols": "pZLfqsMgDMbfJdde6NTN9lUOh2JbOwSxxemBQ+m7L7V/tl0MRneTz+TzFwLJCK2p07WyvutvUP6MUAfrnL1Wrm90tL3H6jgR2NIqBmOwBE8+UoMOxkcofXKOwJ92KX+6DdpnjTqgSwkY36Jiw846M78m8qDpe5QrscJC8B2XH/NMnVf+JOUBnqti5XnBv+IFpYd4tfPH5pc7f/mOZ+KF/8VMNza8XAxINAmcc7zkqHIscmR0EQYlroWdcD8ofBGxCHZg0zxQsLp2Zr3DLvnm6Szj/7A52+EOoW9Mm4KZB8oejngH", + "debug_symbols": "pZLBqsMgEEX/ZdYutGpr8iuPRzCJKYKYYLVQQv69E5uk7aJQ0s1cneuRgbkjtKZO58r6rr9A+TdCHaxz9ly5vtHR9h6740RgvVYxGIMtePGRGnQwPkLpk3MErtql/OgyaJ816oAuJWB8i4ofdtaZ+TSRJ00/o1yJBRaCb7j8mmfquPAHKXfwXBULzwv+Ey8o3cWrjd83v9z40288E2/8P950Y8NbYkCiSeCY6ylXlWuRK6NQ4j4Yw8WgHB7CHyJQpnmSYHXtzBLALvnmJY/xNqzOmtgh9I1pUzDzJNnD2e4=", "file_map": { "50": { "source": "global G_A: [u16; 3] = [33700, 47314, 35095];\nglobal G_B: [u16; 3] = [59890, 17417, 14409];\nfn main(a: [u16; 3], b: [bool; 1]) -> pub bool {\n // Safety: testing context\n let res = unsafe { func_1(G_B, true) }[(((a[0] as u32) % (G_B[2] as u32)) % 1)];\n if res {\n // Safety: testing context\n let c = unsafe { func_1(a, b[0]) };\n b[0]\n } else {\n ((a[((a[0] as u32) % 3)] as u32) > ((24993 % G_A[1]) as u32))\n }\n}\nunconstrained fn func_1(a: [u16; 3], b: bool) -> [bool; 1] {\n [false]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__expanded.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__expanded.snap index f84a3042503..c5972f1b5a4 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__expanded.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__expanded.snap @@ -5,6 +5,10 @@ expression: expanded_code global HELLO_WORLD: str<11> = "hello world"; fn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) { + assert(hex_as_string == "0x41"); + assert(hex_as_field == 65_Field); + assert(hex_as_field == 65_Field); + assert(hex_as_field != 1_Field); let mut bad_message: str<11> = "hello world"; assert(message == "hello world"); assert(message == HELLO_WORLD); @@ -27,10 +31,6 @@ fn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Fie let hash: std::embedded_curve_ops::EmbeddedCurvePoint = std::hash::pedersen_commitment([x]); println(hash); print(hash); - assert(hex_as_string == "0x41"); - assert(hex_as_field == 65_Field); - assert(hex_as_field == 65_Field); - assert(hex_as_field != 1_Field); } #[test] diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 339eae85911..48d2d75ed63 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -52,6 +52,11 @@ expression: artifact "private parameters indices : [_11, _12, _13, _14, _15, _16]", "public parameters indices : [_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10]", "return value indices : []", + "EXPR [ (1, _12) -48 ]", + "EXPR [ (1, _13) -120 ]", + "EXPR [ (1, _14) -52 ]", + "EXPR [ (1, _15) -49 ]", + "EXPR [ (1, _16) -65 ]", "EXPR [ (1, _0) -104 ]", "EXPR [ (1, _1) -101 ]", "EXPR [ (1, _2) -108 ]", @@ -76,11 +81,6 @@ expression: artifact "BRILLIG CALL func 2: inputs: [EXPR [ 0 ], [EXPR [ 104 ], EXPR [ 101 ], EXPR [ 108 ], EXPR [ 108 ], EXPR [ 0 ], EXPR [ 34 ], EXPR [ 119 ], EXPR [ 111 ], EXPR [ 114 ], EXPR [ 108 ], EXPR [ 100 ]]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 1 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 0 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", - "EXPR [ (1, _12) -48 ]", - "EXPR [ (1, _13) -120 ]", - "EXPR [ (1, _14) -52 ]", - "EXPR [ (1, _15) -49 ]", - "EXPR [ (1, _16) -65 ]", "unconstrained func 0", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 2 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32838), size_address: Relative(3), offset_address: Relative(4) }, Cast { destination: Direct(32838), source: Direct(32838), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32838) }, Mov { destination: Relative(2), source: Direct(32839) }, Call { location: 14 }, Call { location: 18 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 100 }, Return, Call { location: 68 }, Const { destination: Relative(3), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(4), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(11), source: Direct(1) }, Const { destination: Relative(12), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(12) }, IndirectConst { destination_pointer: Relative(11), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Mov { destination: Relative(13), source: Relative(12) }, Store { destination_pointer: Relative(13), source: Relative(3) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(5) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(7) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(8) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(9) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32835) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32836) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(10) }, Const { destination: Relative(3), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), HeapArray(HeapArray { pointer: Relative(4), size: 16 }), MemoryAddress(Relative(3))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 73 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]", "unconstrained func 1", @@ -90,14 +90,14 @@ expression: artifact "unconstrained func 3", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32840), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32840), source: Direct(32840), bit_size: Integer(U1) }, Cast { destination: Direct(32843), source: Direct(32843), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32840) }, Mov { destination: Relative(2), source: Direct(32841) }, Mov { destination: Relative(3), source: Direct(32842) }, Mov { destination: Relative(4), source: Direct(32843) }, Call { location: 17 }, Call { location: 23 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 100 }, Return, Call { location: 332 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(22), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(23), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(24), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(25), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 125 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 93 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 95 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(14) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(18) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(20) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(21) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(22) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(25) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(29) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, Const { destination: Relative(5), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(3)), MemoryAddress(Relative(4)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(5))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 337 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]" ], - "debug_symbols": "7Zndbts4EEbfxde58DdDilRfJQgKN3WLAIYTuEmBRZF3X1Jz6DbYVdDNwkAvcqNpEs0pRc3hn35sPu8/PX39eHf8cv9t8+H6x+bT6e5wuPv68XB/u3u8uz+23/7YbPtF8+aDrja2jaAIFsEjpAg5whShRKgRguJB8aB4UDwoHhQPigfFg+JB8aCkoKSgpKCkoKSgpKCkoKSgpKCkoOSg5KDkoOSg5KDkoOSg5KDkoOSgTEGZgjIFZQrK1CjWQo7QKPZ8tVHv1T+0tYrWKlrbQ1CmoExBKUEpQSlBKUEpQSlBKUEpQSlBKUGpQalBqUGpQalBqUGpQalBqUGpQZmDMgdlDsoclDkoc1DmoMxBmYMyB0XbLVFEIzoxETNxIhZiJcITPMETPMETPMETPMETPOwT+gn/hIDCQKGgcFBIKCwUGgoPhYjCRKGicFHIKGwUOgofhZDCSKGkcFJIKepcFLqodFHqotZFsYtqF+Uu6l0UvKh4UfKi5kXRi6oXZS/qXhS+qHxR+qL2RfELV7XI2mMh1pDXurzvvr379h98M3wzfDN86/XkvZ7e5893Q95npPcZKeK/zEhiRhIzkpiRlggPBYQDQgJhgdBAeCBEECYIFYQLQgZhg9BB+CCEEEYIJYQTQgphhdBCeCHEEGYINYQbQg5hh9BD89iPsCHBD8MPww/DD8MPww/DD8MPww/T2ODAww/DD8MPww/DD8MPww8b+6WxYTrvmOCNPdMY9MeoP4b9Me6PgR8/DD8MP8zHFgwefhh+GH4Yfhh+GH4Yfhh+GH5YGns6ePhh+GH4Yfhh+GH4Yfhh+GH4YXlMcvDww/DD8MPww/DD8MPww/DD8MOmMWvCww/DD8MPww/DD8MPww/DD8MPK2Mahocfhh+GH4Yfhh+GH4Yfhh+GH1bHvA4PPww/DD8MPww/DD8MPww/DD9sHguFsVJgqYAfjh+OH44fjh+OH44fjh+OH66x9ICHH44fjh+OH44fjh+OH44fjh9uYy0DDz8cPxw/HD8cP7z7YT3GCsuXFdZzW1KNI4yPj6f9vi+vfjnTaCcdD7vT/vi4+XB8OhyuNt93h6flpm8Pu+MSH3en9tft1WZ//NxiA365O+z7v56vfmZv11PbDF3JbpOxzgCz3yWUVACUun1Dft0a+dWmc77Ki3xfz59SIn/K/pb8qpFf65vyR/eX7er//8rzt7GZ/DbKnfPzyzdYXsnPNjqgDVvzT8ILQH0FsNU8ANtfXkH+3SdotpDvntaeQK+VwDxewWz+hhLyNF6B5/UG2CUt8Gk8gpdptQnpcn2QbPRBcl9twHTJPkg+6ii98hrqBftgOvdBWe0Du+homLcZQN6u1sFr+efXmO0t+dN2jCaT5dUuuGAdTn4eTlNdbcBF63CazyOy1vvggnVYbOSXtCqCX7QO69nFmstqE+xyfVAnHw0o82oD0kX7YB5NmLXqkk//d2r1csG5tZ2kzOdeSC878qb9tLu9O/3jO1hrkJarLVdfrmm55uU6LdeyXOtynSOL5L7KVT/uaNH7MUWLuR8v9IVNPxZoce7b+b586dvwFvt9fZXb7+ur3BKf4Xrz+6rZl+1hXyLElzjP8Smu939fNS9xIhZi43l/5u+7093u02HfH7B3wdPxdjxv+/Hxr4fxl/Fl8OF0f7v//HTa97755fNgu15P9ar4zfi21Zpy3drs+SYe/7qdTVy1c4ebcX7eb2iNSdP5hla17eDmZhyILr/05pJ7uXnur+Vv", + "debug_symbols": "7ZnbahtJEIbfRde60F81fZi8ijFBcZQgELJR7MAS/O7brfpaSdidkNUiyIVvpnxQf+qpqa9P8231cffh5fP7/fHT45fVu7tvqw+n/eGw//z+8Piwfd4/Httfv602/aJ59U7rlW0iKIJF8AhThBQhRygRaoSgeFA8KB4UD4oHxYPiQfGgeFA8KFNQpqBMQZmCMgVlCsoUlCkoU1CmoKSgpKCkoKSgpKCkoKSgpKCkoKSg5KDkoOSg5KDkRrEWUoRGsdf1Sj2rf2hvFb1V9LaHoOSg5KCUoJSglKCUoJSglKCUoJSglKCUoNSg1KDUoNSg1KDUoNSg1KDUoNSgzEGZgzIHZQ7KHJQ5KHNQ5qDMQZmDos2GKKIRnTgREzETC7ES4Qme4Ame4Ame4Ame4Ake9gn9hH9CQGGgUFA4KCQUFgoNhYdCRGGiUFG4KGQUNgodhY9CSGGkUFI4KaQUdS4KXVS6KHVR66LYRbWLchf1LgpeVLwoeVHzouhF1YuyF3UvCl9Uvih9Ufui+IWrOsvaYyHWkNe6vG++vfn2H3wzfDN8M3zr9eS9nt7mzzdD3maktxkp4r/MSGJGEjOSmJHOER4KCAeEBMICoYHwQIggTBAqCBeEDMIGoYPwQQghjBBKCCeEFMIKoYXwQoghzBBqCDeEHMIOoYfmsR9hQ4Ifhh+GH4Yfhh+GH4Yfhh+GH6axwYGHH4Yfhh+GH4Yfhh+GHzb2S2PDdNkxwRt7pjHoj1F/DPtj3B8DP34Yfhh+mI8tGDz8MPww/DD8MPww/DD8MPww/LBp7Ong4Yfhh+GH4Yfhh+GH4Yfhh+GHpTHJwcMPww/DD8MPww/DD8MPww/DD8tj1oSHH4Yfhh+GH4Yfhh+GH4Yfhh9WxjQMDz8MPww/DD8MPww/DD8MPww/rI55HR5+GH4Yfhh+GH4Yfhh+GH4Yftg8FgpjpcBSAT8cPxw/HD8cPxw/HD8cPxw/XGPpAQ8/HD8cPxw/HD8cPxw/HD8cP9zGWgYefjh+OH44fjh+ePfDeowVlp9XWK9tSTWOMN4/n3a7vrz64UyjnXQ8bU+74/Pq3fHlcFivvm4PL+cPfXnaHs/xeXtq/92sV7vjxxYb8NP+sOs/va6/t94sN20zdKV1m4x1AZj9LqFMBUCpmyva143Rvlq+tFf5qb0vt8/TRPuc/Jr2VaN9rVe1H+kvm8Xv/9UTKKP/bfa4tE8/P8Gy3L6NXQPQhq35O+EnQP0FYKN5ADY/PIL0u3fQbKN9q+ulO/hF+6RRAcnzUnvp/6agf8vNcpB1qcLlHPTPLGowjzKcza/QKHu+aLDcgXzLkSCnMRLkYotdqLfLQdHIQbF5qQN229HQ0+jC8mMwu2EO0iUHeTkH0y1zUDfjFtrYfsV4UC+Psdo17efLjDKbFlNwwzqcbYgwT9NSB/ymdTjXfAFoMQl+w0Js31suXZgWXfCblmI7MBg+trMCX+xEvmEe2ib60oWSFrtQr8vDfftt+7A//eNlWEu+zlc7X/18nTqhHWfFfJojlAg1whzhvILuUUQjOnEiwjqvoFPfkvclTd9K9wXN+vxGzhSv5MzjnZyleCnXNekraJvjtZwrzhXd42CxP7u+gvYSR4veB7Sv29N+++Gw6/fZM/FyfBi33X59/utp/Ge8JXw6PT7sPr6cdj1FP7wqbNe7XNfF78d7rtaVu9Y3T/dx/3ftnGLdntn9OEvvH2i1MuXLB1r5tkOc+3E4ev6jN63cy/1rfzp/Aw==", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } }, diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_0.snap index 339eae85911..48d2d75ed63 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_0.snap @@ -52,6 +52,11 @@ expression: artifact "private parameters indices : [_11, _12, _13, _14, _15, _16]", "public parameters indices : [_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10]", "return value indices : []", + "EXPR [ (1, _12) -48 ]", + "EXPR [ (1, _13) -120 ]", + "EXPR [ (1, _14) -52 ]", + "EXPR [ (1, _15) -49 ]", + "EXPR [ (1, _16) -65 ]", "EXPR [ (1, _0) -104 ]", "EXPR [ (1, _1) -101 ]", "EXPR [ (1, _2) -108 ]", @@ -76,11 +81,6 @@ expression: artifact "BRILLIG CALL func 2: inputs: [EXPR [ 0 ], [EXPR [ 104 ], EXPR [ 101 ], EXPR [ 108 ], EXPR [ 108 ], EXPR [ 0 ], EXPR [ 34 ], EXPR [ 119 ], EXPR [ 111 ], EXPR [ 114 ], EXPR [ 108 ], EXPR [ 100 ]]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 1 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 0 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", - "EXPR [ (1, _12) -48 ]", - "EXPR [ (1, _13) -120 ]", - "EXPR [ (1, _14) -52 ]", - "EXPR [ (1, _15) -49 ]", - "EXPR [ (1, _16) -65 ]", "unconstrained func 0", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 2 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32838), size_address: Relative(3), offset_address: Relative(4) }, Cast { destination: Direct(32838), source: Direct(32838), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32838) }, Mov { destination: Relative(2), source: Direct(32839) }, Call { location: 14 }, Call { location: 18 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 100 }, Return, Call { location: 68 }, Const { destination: Relative(3), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(4), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(11), source: Direct(1) }, Const { destination: Relative(12), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(12) }, IndirectConst { destination_pointer: Relative(11), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Mov { destination: Relative(13), source: Relative(12) }, Store { destination_pointer: Relative(13), source: Relative(3) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(5) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(7) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(8) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(9) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32835) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32836) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(10) }, Const { destination: Relative(3), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), HeapArray(HeapArray { pointer: Relative(4), size: 16 }), MemoryAddress(Relative(3))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 73 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]", "unconstrained func 1", @@ -90,14 +90,14 @@ expression: artifact "unconstrained func 3", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32840), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32840), source: Direct(32840), bit_size: Integer(U1) }, Cast { destination: Direct(32843), source: Direct(32843), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32840) }, Mov { destination: Relative(2), source: Direct(32841) }, Mov { destination: Relative(3), source: Direct(32842) }, Mov { destination: Relative(4), source: Direct(32843) }, Call { location: 17 }, Call { location: 23 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 100 }, Return, Call { location: 332 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(22), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(23), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(24), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(25), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 125 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 93 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 95 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(14) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(18) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(20) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(21) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(22) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(25) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(29) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, Const { destination: Relative(5), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(3)), MemoryAddress(Relative(4)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(5))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 337 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]" ], - "debug_symbols": "7Zndbts4EEbfxde58DdDilRfJQgKN3WLAIYTuEmBRZF3X1Jz6DbYVdDNwkAvcqNpEs0pRc3hn35sPu8/PX39eHf8cv9t8+H6x+bT6e5wuPv68XB/u3u8uz+23/7YbPtF8+aDrja2jaAIFsEjpAg5whShRKgRguJB8aB4UDwoHhQPigfFg+JB8aCkoKSgpKCkoKSgpKCkoKSgpKCkoOSg5KDkoOSg5KDkoOSg5KDkoOSgTEGZgjIFZQrK1CjWQo7QKPZ8tVHv1T+0tYrWKlrbQ1CmoExBKUEpQSlBKUEpQSlBKUEpQSlBKUGpQalBqUGpQalBqUGpQalBqUGpQZmDMgdlDsoclDkoc1DmoMxBmYMyB0XbLVFEIzoxETNxIhZiJcITPMETPMETPMETPMETPOwT+gn/hIDCQKGgcFBIKCwUGgoPhYjCRKGicFHIKGwUOgofhZDCSKGkcFJIKepcFLqodFHqotZFsYtqF+Uu6l0UvKh4UfKi5kXRi6oXZS/qXhS+qHxR+qL2RfELV7XI2mMh1pDXurzvvr379h98M3wzfDN86/XkvZ7e5893Q95npPcZKeK/zEhiRhIzkpiRlggPBYQDQgJhgdBAeCBEECYIFYQLQgZhg9BB+CCEEEYIJYQTQgphhdBCeCHEEGYINYQbQg5hh9BD89iPsCHBD8MPww/DD8MPww/DD8MPww/T2ODAww/DD8MPww/DD8MPww8b+6WxYTrvmOCNPdMY9MeoP4b9Me6PgR8/DD8MP8zHFgwefhh+GH4Yfhh+GH4Yfhh+GH5YGns6ePhh+GH4Yfhh+GH4Yfhh+GH4YXlMcvDww/DD8MPww/DD8MPww/DD8MOmMWvCww/DD8MPww/DD8MPww/DD8MPK2Mahocfhh+GH4Yfhh+GH4Yfhh+GH1bHvA4PPww/DD8MPww/DD8MPww/DD9sHguFsVJgqYAfjh+OH44fjh+OH44fjh+OH66x9ICHH44fjh+OH44fjh+OH44fjh9uYy0DDz8cPxw/HD8cP7z7YT3GCsuXFdZzW1KNI4yPj6f9vi+vfjnTaCcdD7vT/vi4+XB8OhyuNt93h6flpm8Pu+MSH3en9tft1WZ//NxiA365O+z7v56vfmZv11PbDF3JbpOxzgCz3yWUVACUun1Dft0a+dWmc77Ki3xfz59SIn/K/pb8qpFf65vyR/eX7er//8rzt7GZ/DbKnfPzyzdYXsnPNjqgDVvzT8ILQH0FsNU8ANtfXkH+3SdotpDvntaeQK+VwDxewWz+hhLyNF6B5/UG2CUt8Gk8gpdptQnpcn2QbPRBcl9twHTJPkg+6ii98hrqBftgOvdBWe0Du+homLcZQN6u1sFr+efXmO0t+dN2jCaT5dUuuGAdTn4eTlNdbcBF63CazyOy1vvggnVYbOSXtCqCX7QO69nFmstqE+xyfVAnHw0o82oD0kX7YB5NmLXqkk//d2r1csG5tZ2kzOdeSC878qb9tLu9O/3jO1hrkJarLVdfrmm55uU6LdeyXOtynSOL5L7KVT/uaNH7MUWLuR8v9IVNPxZoce7b+b586dvwFvt9fZXb7+ur3BKf4Xrz+6rZl+1hXyLElzjP8Smu939fNS9xIhZi43l/5u+7093u02HfH7B3wdPxdjxv+/Hxr4fxl/Fl8OF0f7v//HTa97755fNgu15P9ar4zfi21Zpy3drs+SYe/7qdTVy1c4ebcX7eb2iNSdP5hla17eDmZhyILr/05pJ7uXnur+Vv", + "debug_symbols": "7ZnbahtJEIbfRde60F81fZi8ijFBcZQgELJR7MAS/O7brfpaSdidkNUiyIVvpnxQf+qpqa9P8231cffh5fP7/fHT45fVu7tvqw+n/eGw//z+8Piwfd4/Httfv602/aJ59U7rlW0iKIJF8AhThBQhRygRaoSgeFA8KB4UD4oHxYPiQfGgeFA8KFNQpqBMQZmCMgVlCsoUlCkoU1CmoKSgpKCkoKSgpKCkoKSgpKCkoKSg5KDkoOSg5KDkRrEWUoRGsdf1Sj2rf2hvFb1V9LaHoOSg5KCUoJSglKCUoJSglKCUoJSglKCUoNSg1KDUoNSg1KDUoNSg1KDUoNSgzEGZgzIHZQ7KHJQ5KHNQ5qDMQZmDos2GKKIRnTgREzETC7ES4Qme4Ame4Ame4Ame4Ake9gn9hH9CQGGgUFA4KCQUFgoNhYdCRGGiUFG4KGQUNgodhY9CSGGkUFI4KaQUdS4KXVS6KHVR66LYRbWLchf1LgpeVLwoeVHzouhF1YuyF3UvCl9Uvih9Ufui+IWrOsvaYyHWkNe6vG++vfn2H3wzfDN8M3zr9eS9nt7mzzdD3maktxkp4r/MSGJGEjOSmJHOER4KCAeEBMICoYHwQIggTBAqCBeEDMIGoYPwQQghjBBKCCeEFMIKoYXwQoghzBBqCDeEHMIOoYfmsR9hQ4Ifhh+GH4Yfhh+GH4Yfhh+GH6axwYGHH4Yfhh+GH4Yfhh+GHzb2S2PDdNkxwRt7pjHoj1F/DPtj3B8DP34Yfhh+mI8tGDz8MPww/DD8MPww/DD8MPww/LBp7Ong4Yfhh+GH4Yfhh+GH4Yfhh+GHpTHJwcMPww/DD8MPww/DD8MPww/DD8tj1oSHH4Yfhh+GH4Yfhh+GH4Yfhh9WxjQMDz8MPww/DD8MPww/DD8MPww/rI55HR5+GH4Yfhh+GH4Yfhh+GH4Yftg8FgpjpcBSAT8cPxw/HD8cPxw/HD8cPxw/XGPpAQ8/HD8cPxw/HD8cPxw/HD8cP9zGWgYefjh+OH44fjh+ePfDeowVlp9XWK9tSTWOMN4/n3a7vrz64UyjnXQ8bU+74/Pq3fHlcFivvm4PL+cPfXnaHs/xeXtq/92sV7vjxxYb8NP+sOs/va6/t94sN20zdKV1m4x1AZj9LqFMBUCpmyva143Rvlq+tFf5qb0vt8/TRPuc/Jr2VaN9rVe1H+kvm8Xv/9UTKKP/bfa4tE8/P8Gy3L6NXQPQhq35O+EnQP0FYKN5ADY/PIL0u3fQbKN9q+ulO/hF+6RRAcnzUnvp/6agf8vNcpB1qcLlHPTPLGowjzKcza/QKHu+aLDcgXzLkSCnMRLkYotdqLfLQdHIQbF5qQN229HQ0+jC8mMwu2EO0iUHeTkH0y1zUDfjFtrYfsV4UC+Psdo17efLjDKbFlNwwzqcbYgwT9NSB/ymdTjXfAFoMQl+w0Js31suXZgWXfCblmI7MBg+trMCX+xEvmEe2ib60oWSFrtQr8vDfftt+7A//eNlWEu+zlc7X/18nTqhHWfFfJojlAg1whzhvILuUUQjOnEiwjqvoFPfkvclTd9K9wXN+vxGzhSv5MzjnZyleCnXNekraJvjtZwrzhXd42CxP7u+gvYSR4veB7Sv29N+++Gw6/fZM/FyfBi33X59/utp/Ge8JXw6PT7sPr6cdj1FP7wqbNe7XNfF78d7rtaVu9Y3T/dx/3ftnGLdntn9OEvvH2i1MuXLB1r5tkOc+3E4ev6jN63cy/1rfzp/Aw==", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } }, diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 339eae85911..48d2d75ed63 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -52,6 +52,11 @@ expression: artifact "private parameters indices : [_11, _12, _13, _14, _15, _16]", "public parameters indices : [_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10]", "return value indices : []", + "EXPR [ (1, _12) -48 ]", + "EXPR [ (1, _13) -120 ]", + "EXPR [ (1, _14) -52 ]", + "EXPR [ (1, _15) -49 ]", + "EXPR [ (1, _16) -65 ]", "EXPR [ (1, _0) -104 ]", "EXPR [ (1, _1) -101 ]", "EXPR [ (1, _2) -108 ]", @@ -76,11 +81,6 @@ expression: artifact "BRILLIG CALL func 2: inputs: [EXPR [ 0 ], [EXPR [ 104 ], EXPR [ 101 ], EXPR [ 108 ], EXPR [ 108 ], EXPR [ 0 ], EXPR [ 34 ], EXPR [ 119 ], EXPR [ 111 ], EXPR [ 114 ], EXPR [ 108 ], EXPR [ 100 ]]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 1 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", "BRILLIG CALL func 3: inputs: [EXPR [ 0 ], EXPR [ 11054869047818119882829115294070295577450608105332618660470768407791803762323 ], EXPR [ 10342258267264174240775423156252625971328954635747071949009099277443464742287 ], EXPR [ 0 ]], outputs: []", - "EXPR [ (1, _12) -48 ]", - "EXPR [ (1, _13) -120 ]", - "EXPR [ (1, _14) -52 ]", - "EXPR [ (1, _15) -49 ]", - "EXPR [ (1, _16) -65 ]", "unconstrained func 0", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 2 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32838), size_address: Relative(3), offset_address: Relative(4) }, Cast { destination: Direct(32838), source: Direct(32838), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32838) }, Mov { destination: Relative(2), source: Direct(32839) }, Call { location: 14 }, Call { location: 18 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32840 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 100 }, Return, Call { location: 68 }, Const { destination: Relative(3), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(4), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(11), source: Direct(1) }, Const { destination: Relative(12), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(12) }, IndirectConst { destination_pointer: Relative(11), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Mov { destination: Relative(13), source: Relative(12) }, Store { destination_pointer: Relative(13), source: Relative(3) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(5) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(7) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(8) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(9) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32835) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32836) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Direct(32837) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(4) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(10) }, Const { destination: Relative(3), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), HeapArray(HeapArray { pointer: Relative(4), size: 16 }), MemoryAddress(Relative(3))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 73 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]", "unconstrained func 1", @@ -90,14 +90,14 @@ expression: artifact "unconstrained func 3", "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32840), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32840), source: Direct(32840), bit_size: Integer(U1) }, Cast { destination: Direct(32843), source: Direct(32843), bit_size: Integer(U1) }, Mov { destination: Relative(1), source: Direct(32840) }, Mov { destination: Relative(2), source: Direct(32841) }, Mov { destination: Relative(3), source: Direct(32842) }, Mov { destination: Relative(4), source: Direct(32843) }, Call { location: 17 }, Call { location: 23 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32844 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, Const { destination: Direct(32835), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 100 }, Return, Call { location: 332 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(22), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(23), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(24), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(25), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 125 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 93 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 95 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(14) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(18) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(17) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(20) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(13) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(21) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(22) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(25) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(24) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(11) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(29) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(23) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(12) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(15) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(5) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(7) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32839) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(19) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(16) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(6) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(27) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(26) }, Const { destination: Relative(5), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(3)), MemoryAddress(Relative(4)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(5))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 337 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]" ], - "debug_symbols": "7Zndbts4EEbfxde58DdDilRfJQgKN3WLAIYTuEmBRZF3X1Jz6DbYVdDNwkAvcqNpEs0pRc3hn35sPu8/PX39eHf8cv9t8+H6x+bT6e5wuPv68XB/u3u8uz+23/7YbPtF8+aDrja2jaAIFsEjpAg5whShRKgRguJB8aB4UDwoHhQPigfFg+JB8aCkoKSgpKCkoKSgpKCkoKSgpKCkoOSg5KDkoOSg5KDkoOSg5KDkoOSgTEGZgjIFZQrK1CjWQo7QKPZ8tVHv1T+0tYrWKlrbQ1CmoExBKUEpQSlBKUEpQSlBKUEpQSlBKUGpQalBqUGpQalBqUGpQalBqUGpQZmDMgdlDsoclDkoc1DmoMxBmYMyB0XbLVFEIzoxETNxIhZiJcITPMETPMETPMETPMETPOwT+gn/hIDCQKGgcFBIKCwUGgoPhYjCRKGicFHIKGwUOgofhZDCSKGkcFJIKepcFLqodFHqotZFsYtqF+Uu6l0UvKh4UfKi5kXRi6oXZS/qXhS+qHxR+qL2RfELV7XI2mMh1pDXurzvvr379h98M3wzfDN86/XkvZ7e5893Q95npPcZKeK/zEhiRhIzkpiRlggPBYQDQgJhgdBAeCBEECYIFYQLQgZhg9BB+CCEEEYIJYQTQgphhdBCeCHEEGYINYQbQg5hh9BD89iPsCHBD8MPww/DD8MPww/DD8MPww/T2ODAww/DD8MPww/DD8MPww8b+6WxYTrvmOCNPdMY9MeoP4b9Me6PgR8/DD8MP8zHFgwefhh+GH4Yfhh+GH4Yfhh+GH5YGns6ePhh+GH4Yfhh+GH4Yfhh+GH4YXlMcvDww/DD8MPww/DD8MPww/DD8MOmMWvCww/DD8MPww/DD8MPww/DD8MPK2Mahocfhh+GH4Yfhh+GH4Yfhh+GH1bHvA4PPww/DD8MPww/DD8MPww/DD9sHguFsVJgqYAfjh+OH44fjh+OH44fjh+OH66x9ICHH44fjh+OH44fjh+OH44fjh9uYy0DDz8cPxw/HD8cP7z7YT3GCsuXFdZzW1KNI4yPj6f9vi+vfjnTaCcdD7vT/vi4+XB8OhyuNt93h6flpm8Pu+MSH3en9tft1WZ//NxiA365O+z7v56vfmZv11PbDF3JbpOxzgCz3yWUVACUun1Dft0a+dWmc77Ki3xfz59SIn/K/pb8qpFf65vyR/eX7er//8rzt7GZ/DbKnfPzyzdYXsnPNjqgDVvzT8ILQH0FsNU8ANtfXkH+3SdotpDvntaeQK+VwDxewWz+hhLyNF6B5/UG2CUt8Gk8gpdptQnpcn2QbPRBcl9twHTJPkg+6ii98hrqBftgOvdBWe0Du+homLcZQN6u1sFr+efXmO0t+dN2jCaT5dUuuGAdTn4eTlNdbcBF63CazyOy1vvggnVYbOSXtCqCX7QO69nFmstqE+xyfVAnHw0o82oD0kX7YB5NmLXqkk//d2r1csG5tZ2kzOdeSC878qb9tLu9O/3jO1hrkJarLVdfrmm55uU6LdeyXOtynSOL5L7KVT/uaNH7MUWLuR8v9IVNPxZoce7b+b586dvwFvt9fZXb7+ur3BKf4Xrz+6rZl+1hXyLElzjP8Smu939fNS9xIhZi43l/5u+7093u02HfH7B3wdPxdjxv+/Hxr4fxl/Fl8OF0f7v//HTa97755fNgu15P9ar4zfi21Zpy3drs+SYe/7qdTVy1c4ebcX7eb2iNSdP5hla17eDmZhyILr/05pJ7uXnur+Vv", + "debug_symbols": "7ZnbahtJEIbfRde60F81fZi8ijFBcZQgELJR7MAS/O7brfpaSdidkNUiyIVvpnxQf+qpqa9P8231cffh5fP7/fHT45fVu7tvqw+n/eGw//z+8Piwfd4/Httfv602/aJ59U7rlW0iKIJF8AhThBQhRygRaoSgeFA8KB4UD4oHxYPiQfGgeFA8KFNQpqBMQZmCMgVlCsoUlCkoU1CmoKSgpKCkoKSgpKCkoKSgpKCkoKSg5KDkoOSg5KDkRrEWUoRGsdf1Sj2rf2hvFb1V9LaHoOSg5KCUoJSglKCUoJSglKCUoJSglKCUoNSg1KDUoNSg1KDUoNSg1KDUoNSgzEGZgzIHZQ7KHJQ5KHNQ5qDMQZmDos2GKKIRnTgREzETC7ES4Qme4Ame4Ame4Ame4Ake9gn9hH9CQGGgUFA4KCQUFgoNhYdCRGGiUFG4KGQUNgodhY9CSGGkUFI4KaQUdS4KXVS6KHVR66LYRbWLchf1LgpeVLwoeVHzouhF1YuyF3UvCl9Uvih9Ufui+IWrOsvaYyHWkNe6vG++vfn2H3wzfDN8M3zr9eS9nt7mzzdD3maktxkp4r/MSGJGEjOSmJHOER4KCAeEBMICoYHwQIggTBAqCBeEDMIGoYPwQQghjBBKCCeEFMIKoYXwQoghzBBqCDeEHMIOoYfmsR9hQ4Ifhh+GH4Yfhh+GH4Yfhh+GH6axwYGHH4Yfhh+GH4Yfhh+GHzb2S2PDdNkxwRt7pjHoj1F/DPtj3B8DP34Yfhh+mI8tGDz8MPww/DD8MPww/DD8MPww/LBp7Ong4Yfhh+GH4Yfhh+GH4Yfhh+GHpTHJwcMPww/DD8MPww/DD8MPww/DD8tj1oSHH4Yfhh+GH4Yfhh+GH4Yfhh9WxjQMDz8MPww/DD8MPww/DD8MPww/rI55HR5+GH4Yfhh+GH4Yfhh+GH4Yftg8FgpjpcBSAT8cPxw/HD8cPxw/HD8cPxw/XGPpAQ8/HD8cPxw/HD8cPxw/HD8cP9zGWgYefjh+OH44fjh+ePfDeowVlp9XWK9tSTWOMN4/n3a7vrz64UyjnXQ8bU+74/Pq3fHlcFivvm4PL+cPfXnaHs/xeXtq/92sV7vjxxYb8NP+sOs/va6/t94sN20zdKV1m4x1AZj9LqFMBUCpmyva143Rvlq+tFf5qb0vt8/TRPuc/Jr2VaN9rVe1H+kvm8Xv/9UTKKP/bfa4tE8/P8Gy3L6NXQPQhq35O+EnQP0FYKN5ADY/PIL0u3fQbKN9q+ulO/hF+6RRAcnzUnvp/6agf8vNcpB1qcLlHPTPLGowjzKcza/QKHu+aLDcgXzLkSCnMRLkYotdqLfLQdHIQbF5qQN229HQ0+jC8mMwu2EO0iUHeTkH0y1zUDfjFtrYfsV4UC+Psdo17efLjDKbFlNwwzqcbYgwT9NSB/ymdTjXfAFoMQl+w0Js31suXZgWXfCblmI7MBg+trMCX+xEvmEe2ib60oWSFrtQr8vDfftt+7A//eNlWEu+zlc7X/18nTqhHWfFfJojlAg1whzhvILuUUQjOnEiwjqvoFPfkvclTd9K9wXN+vxGzhSv5MzjnZyleCnXNekraJvjtZwrzhXd42CxP7u+gvYSR4veB7Sv29N+++Gw6/fZM/FyfBi33X59/utp/Ge8JXw6PT7sPr6cdj1FP7wqbNe7XNfF78d7rtaVu9Y3T/dx/3ftnGLdntn9OEvvH2i1MuXLB1r5tkOc+3E4ev6jN63cy/1rfzp/Aw==", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n/// for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time.\n// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: T) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } }, diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 341e72c1364..96c46cea17d 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -58,9 +58,9 @@ expression: artifact "return value indices : []", "BRILLIG CALL func 0: inputs: [[EXPR [ (1, _0) 0 ], EXPR [ (1, _1) 0 ], EXPR [ (1, _2) 0 ], EXPR [ (1, _3) 0 ], EXPR [ (1, _4) 0 ], EXPR [ (1, _5) 0 ], EXPR [ (1, _6) 0 ], EXPR [ (1, _7) 0 ], EXPR [ (1, _8) 0 ], EXPR [ (1, _9) 0 ], EXPR [ (1, _10) 0 ]], EXPR [ (1, _11) 0 ], [EXPR [ (1, _12) 0 ], EXPR [ (1, _13) 0 ], EXPR [ (1, _14) 0 ], EXPR [ (1, _15) 0 ]], EXPR [ (1, _16) 0 ]], outputs: []", "unconstrained func 0", - "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32847), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32857), source: Direct(32857), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Cast { destination: Direct(32862), source: Direct(32862), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32847 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32858) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32859 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32863) }, Call { location: 63 }, Call { location: 102 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 0 }, Const { destination: Direct(32845), bit_size: Integer(U1), value: 1 }, Const { destination: Direct(32846), bit_size: Integer(U32), value: 1 }, Return, Call { location: 916 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(6) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Relative(7), source: Relative(6) }, Store { destination_pointer: Relative(7), source: Direct(32835) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32836) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32837) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32837) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32838) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32839) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32840) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32838) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32841) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32837) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(7), source: Direct(32842) }, Load { destination: Relative(6), source_pointer: Relative(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(6) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 136 }, Call { location: 922 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(6) }, Load { destination: Relative(6), source_pointer: Relative(5) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(8), rhs: Relative(6) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 144 }, Call { location: 922 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Relative(6) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 10 }, Mov { destination: Relative(10), source: Direct(0) }, Mov { destination: Relative(11), source: Relative(1) }, Mov { destination: Relative(12), source: Relative(5) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(9) }, Call { location: 925 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(6), source: Relative(11) }, JumpIf { condition: Relative(6), location: 157 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(5) } }, Load { destination: Relative(5), source_pointer: Relative(1) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(6), rhs: Relative(5) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 163 }, Call { location: 922 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(5) }, Load { destination: Relative(5), source_pointer: Direct(32843) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(9), rhs: Relative(5) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 171 }, Call { location: 922 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(5) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(11), source: Direct(0) }, Mov { destination: Relative(12), source: Relative(1) }, Mov { destination: Relative(13), source: Direct(32843) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(10) }, Call { location: 925 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(5), source: Relative(12) }, JumpIf { condition: Relative(5), location: 184 }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(10) } }, Const { destination: Relative(5), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(17), source: Direct(1) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(18) }, IndirectConst { destination_pointer: Relative(17), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(18), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, Mov { destination: Relative(19), source: Relative(18) }, Store { destination_pointer: Relative(19), source: Relative(5) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(11) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(13) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(14) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(15) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32836) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32837) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(16) }, Const { destination: Relative(18), bit_size: Field, value: 10 }, Const { destination: Relative(19), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(21), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(22), op: Equals, bit_size: U32, lhs: Relative(21), rhs: Relative(20) }, Not { destination: Relative(22), source: Relative(22), bit_size: U1 }, JumpIf { condition: Relative(22), location: 239 }, Call { location: 922 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(20) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 249 }, Call { location: 922 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, Const { destination: Relative(20), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(23), source_pointer: Relative(17) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(23) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 260 }, Call { location: 922 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(23), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(23) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(20) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 270 }, Call { location: 922 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(20) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 280 }, Call { location: 922 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(17), bit_size: Field, value: 1 }, Const { destination: Relative(18), bit_size: Field, value: 2 }, Const { destination: Relative(20), bit_size: Field, value: 3 }, Const { destination: Relative(26), bit_size: Field, value: 5 }, Const { destination: Relative(27), bit_size: Field, value: 8 }, Mov { destination: Relative(28), source: Direct(1) }, Const { destination: Relative(29), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(29) }, IndirectConst { destination_pointer: Relative(28), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Mov { destination: Relative(30), source: Relative(29) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(18) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(20) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(26) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(27) }, BinaryFieldOp { destination: Relative(17), op: Equals, lhs: Relative(2), rhs: Relative(26) }, JumpIf { condition: Relative(17), location: 308 }, Const { destination: Relative(18), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(18) } }, Load { destination: Relative(2), source_pointer: Relative(28) }, Const { destination: Relative(17), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(18), op: Equals, bit_size: U32, lhs: Relative(17), rhs: Relative(2) }, Not { destination: Relative(18), source: Relative(18), bit_size: U1 }, JumpIf { condition: Relative(18), location: 314 }, Call { location: 922 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(28), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(31), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(31), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Relative(5) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(18) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(26) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(18) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(30) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(5) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(15) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(30), size: 51 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(29), source_pointer: Relative(31) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(30), rhs: Relative(29) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 439 }, Call { location: 922 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(29) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(32), size: 51 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(28), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32840) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32841) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32842) }, Load { destination: Relative(28), source_pointer: Relative(29) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(28) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 478 }, Call { location: 922 }, BinaryIntOp { destination: Relative(28), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(28) }, Const { destination: Relative(28), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(32), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(33), source: Direct(1) }, Const { destination: Relative(34), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(34) }, IndirectConst { destination_pointer: Relative(33), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Mov { destination: Relative(35), source: Relative(34) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(11) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(12) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(13) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32842) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(14) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(28) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(27) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32841) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(12) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(13) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(26) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(20) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32837) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32836) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(13) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(26) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(27) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32835) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(14) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(32) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(32) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(16) }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(26), size: 11 }), HeapArray(HeapArray { pointer: Relative(34), size: 29 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(26), source_pointer: Relative(29) }, Const { destination: Relative(34), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(35), op: Equals, bit_size: U32, lhs: Relative(34), rhs: Relative(26) }, Not { destination: Relative(35), source: Relative(35), bit_size: U1 }, JumpIf { condition: Relative(35), location: 554 }, Call { location: 922 }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(26), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(26) }, Load { destination: Relative(26), source_pointer: Relative(33) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(36), op: Equals, bit_size: U32, lhs: Relative(35), rhs: Relative(26) }, Not { destination: Relative(36), source: Relative(36), bit_size: U1 }, JumpIf { condition: Relative(36), location: 562 }, Call { location: 922 }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(26), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(26) }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(26), size: 11 }), HeapArray(HeapArray { pointer: Relative(36), size: 29 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Const { destination: Relative(33), bit_size: Integer(U32), value: 36 }, Mov { destination: Relative(36), source: Direct(0) }, Mov { destination: Relative(37), source: Relative(1) }, Mov { destination: Relative(38), source: Relative(29) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(33) }, Call { location: 925 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(26), source: Relative(37) }, BinaryIntOp { destination: Relative(1), op: Equals, bit_size: U1, lhs: Relative(26), rhs: Relative(19) }, JumpIf { condition: Relative(1), location: 579 }, Const { destination: Relative(29), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(29) } }, Const { destination: Relative(1), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(33), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(36), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(37), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(38), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(39), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(40), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(41), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(42), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(43), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(44), source: Direct(1) }, Const { destination: Relative(45), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(45) }, IndirectConst { destination_pointer: Relative(44), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(45), op: Add, bit_size: U32, lhs: Relative(44), rhs: Direct(2) }, Mov { destination: Relative(46), source: Relative(45) }, Store { destination_pointer: Relative(46), source: Relative(5) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(11) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(28) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(27) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32841) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(33) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(36) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(27) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(2) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(37) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(1) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(37) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(38) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(39) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(33) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32841) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(40) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(29) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32838) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(27) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(15) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32837) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(28) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(41) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(41) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(42) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(5) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(11) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(15) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32837) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(16) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(43) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(41) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(18) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(5) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(11) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(15) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32837) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(16) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(43) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(41) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(28) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(26) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(15) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(27) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(20) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(5) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(11) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(12) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32842) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(14) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(38) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32838) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32838) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32837) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Direct(32836) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(2) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(13) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(10) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(16) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(43) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(43) }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(46), rhs: Direct(2) }, Store { destination_pointer: Relative(46), source: Relative(16) }, Const { destination: Relative(1), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(2), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(44), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(5), size: 137 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(5), source_pointer: Relative(44) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(11), op: Equals, bit_size: U32, lhs: Relative(10), rhs: Relative(5) }, Not { destination: Relative(11), source: Relative(11), bit_size: U1 }, JumpIf { condition: Relative(11), location: 880 }, Call { location: 922 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(44), source: Relative(5) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(44), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(5), size: 137 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Const { destination: Relative(1), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(2), bit_size: Integer(U8), value: 52 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(11) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Relative(12), source: Relative(11) }, Store { destination_pointer: Relative(12), source: Relative(1) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(42) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(2) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(32) }, Const { destination: Relative(2), bit_size: Integer(U32), value: 36 }, Mov { destination: Relative(36), source: Direct(0) }, Mov { destination: Relative(37), source: Relative(3) }, Mov { destination: Relative(38), source: Relative(5) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(2) }, Call { location: 950 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(1), source: Relative(37) }, JumpIf { condition: Relative(1), location: 910 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(2) } }, Const { destination: Relative(1), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(2), op: Equals, lhs: Relative(4), rhs: Relative(1) }, JumpIf { condition: Relative(2), location: 915 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 921 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, Call { location: 916 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 932 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 937 }, Jump { location: 935 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 932 }, Call { location: 916 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 957 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 962 }, Jump { location: 960 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 957 }]" + "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32847), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32857), source: Direct(32857), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Cast { destination: Direct(32862), source: Direct(32862), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32847 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32858) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32859 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32863) }, Call { location: 63 }, Call { location: 102 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 0 }, Const { destination: Direct(32845), bit_size: Integer(U1), value: 1 }, Const { destination: Direct(32846), bit_size: Integer(U32), value: 1 }, Return, Call { location: 916 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 52 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(9), source: Direct(1) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(10) }, IndirectConst { destination_pointer: Relative(9), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Mov { destination: Relative(11), source: Relative(10) }, Store { destination_pointer: Relative(11), source: Relative(5) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Store { destination_pointer: Relative(11), source: Relative(6) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Store { destination_pointer: Relative(11), source: Relative(7) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(11), rhs: Direct(2) }, Store { destination_pointer: Relative(11), source: Relative(8) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 10 }, Mov { destination: Relative(10), source: Direct(0) }, Mov { destination: Relative(11), source: Relative(3) }, Mov { destination: Relative(12), source: Relative(9) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(7) }, Call { location: 922 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(5), source: Relative(11) }, JumpIf { condition: Relative(5), location: 131 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Const { destination: Relative(3), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(5), op: Equals, lhs: Relative(4), rhs: Relative(3) }, JumpIf { condition: Relative(5), location: 136 }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(7) } }, Mov { destination: Relative(3), source: Direct(1) }, Const { destination: Relative(4), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(4) }, IndirectConst { destination_pointer: Relative(3), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Mov { destination: Relative(5), source: Relative(4) }, Store { destination_pointer: Relative(5), source: Direct(32835) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32836) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32838) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32839) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32840) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32838) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32841) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32842) }, Load { destination: Relative(4), source_pointer: Relative(1) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(7), op: Equals, bit_size: U32, lhs: Relative(5), rhs: Relative(4) }, Not { destination: Relative(7), source: Relative(7), bit_size: U1 }, JumpIf { condition: Relative(7), location: 169 }, Call { location: 947 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(4) }, Load { destination: Relative(4), source_pointer: Relative(3) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(4) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 177 }, Call { location: 947 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Relative(3), source: Relative(4) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 10 }, Mov { destination: Relative(10), source: Direct(0) }, Mov { destination: Relative(11), source: Relative(1) }, Mov { destination: Relative(12), source: Relative(3) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(9) }, Call { location: 950 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(4), source: Relative(11) }, JumpIf { condition: Relative(4), location: 190 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Load { destination: Relative(3), source_pointer: Relative(1) }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(4), rhs: Relative(3) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 196 }, Call { location: 947 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(3) }, Load { destination: Relative(3), source_pointer: Direct(32843) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 204 }, Call { location: 947 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(3) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(11), source: Direct(0) }, Mov { destination: Relative(12), source: Relative(1) }, Mov { destination: Relative(13), source: Direct(32843) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(10) }, Call { location: 950 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(3), source: Relative(12) }, JumpIf { condition: Relative(3), location: 217 }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(10) } }, Const { destination: Relative(3), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(17), source: Direct(1) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(18) }, IndirectConst { destination_pointer: Relative(17), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(18), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, Mov { destination: Relative(19), source: Relative(18) }, Store { destination_pointer: Relative(19), source: Relative(3) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(11) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(13) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(14) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(15) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32836) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32837) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(16) }, Const { destination: Relative(18), bit_size: Integer(U1), value: 0 }, Const { destination: Relative(19), bit_size: Field, value: 10 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(21), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(22), op: Equals, bit_size: U32, lhs: Relative(21), rhs: Relative(20) }, Not { destination: Relative(22), source: Relative(22), bit_size: U1 }, JumpIf { condition: Relative(22), location: 272 }, Call { location: 947 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(20) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 282 }, Call { location: 947 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, Const { destination: Relative(20), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(23), source_pointer: Relative(17) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(23) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 293 }, Call { location: 947 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(23), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(23) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(20) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 303 }, Call { location: 947 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(20) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 313 }, Call { location: 947 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(17), bit_size: Field, value: 1 }, Const { destination: Relative(19), bit_size: Field, value: 2 }, Const { destination: Relative(20), bit_size: Field, value: 3 }, Const { destination: Relative(26), bit_size: Field, value: 5 }, Const { destination: Relative(27), bit_size: Field, value: 8 }, Mov { destination: Relative(28), source: Direct(1) }, Const { destination: Relative(29), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(29) }, IndirectConst { destination_pointer: Relative(28), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Mov { destination: Relative(30), source: Relative(29) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(19) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(20) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(26) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(27) }, BinaryFieldOp { destination: Relative(17), op: Equals, lhs: Relative(2), rhs: Relative(26) }, JumpIf { condition: Relative(17), location: 341 }, Const { destination: Relative(19), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(19) } }, Load { destination: Relative(2), source_pointer: Relative(28) }, Const { destination: Relative(17), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(19), op: Equals, bit_size: U32, lhs: Relative(17), rhs: Relative(2) }, Not { destination: Relative(19), source: Relative(19), bit_size: U1 }, JumpIf { condition: Relative(19), location: 347 }, Call { location: 947 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(28), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(31), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(31), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Relative(3) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(19) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(26) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(19) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(30) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(3) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(15) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(30), size: 51 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(29), source_pointer: Relative(31) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(30), rhs: Relative(29) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 472 }, Call { location: 947 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(29) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(32), size: 51 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(28), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32840) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32841) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32842) }, Load { destination: Relative(28), source_pointer: Relative(29) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(28) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 511 }, Call { location: 947 }, BinaryIntOp { destination: Relative(28), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(28) }, Const { destination: Relative(28), bit_size: Integer(U8), value: 115 }, Mov { destination: Relative(32), source: Direct(1) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(33) }, IndirectConst { destination_pointer: Relative(32), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Mov { destination: Relative(34), source: Relative(33) }, Store { destination_pointer: Relative(34), source: Relative(3) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(26) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(20) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(26) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32835) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(8) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(8) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(16) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(8), size: 11 }), HeapArray(HeapArray { pointer: Relative(26), size: 29 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(8), source_pointer: Relative(29) }, Const { destination: Relative(26), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(26), rhs: Relative(8) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 586 }, Call { location: 947 }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(8) }, Load { destination: Relative(8), source_pointer: Relative(32) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(34), op: Equals, bit_size: U32, lhs: Relative(33), rhs: Relative(8) }, Not { destination: Relative(34), source: Relative(34), bit_size: U1 }, JumpIf { condition: Relative(34), location: 594 }, Call { location: 947 }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(8) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(8), size: 11 }), HeapArray(HeapArray { pointer: Relative(34), size: 29 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Const { destination: Relative(32), bit_size: Integer(U32), value: 34 }, Mov { destination: Relative(34), source: Direct(0) }, Mov { destination: Relative(35), source: Relative(1) }, Mov { destination: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(32) }, Call { location: 950 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(8), source: Relative(35) }, BinaryIntOp { destination: Relative(1), op: Equals, bit_size: U1, lhs: Relative(8), rhs: Relative(18) }, JumpIf { condition: Relative(1), location: 611 }, Const { destination: Relative(29), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(29) } }, Const { destination: Relative(1), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(32), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(34), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(35), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(36), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(37), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(38), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(39), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(40), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(41), source: Direct(1) }, Const { destination: Relative(42), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(42) }, IndirectConst { destination_pointer: Relative(41), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(42), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, Mov { destination: Relative(43), source: Relative(42) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32841) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(32) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(34) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(2) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(35) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(1) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(35) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(36) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(37) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(32) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32841) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(38) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(29) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(6) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(19) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(8) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(36) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(2) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, Const { destination: Relative(1), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(2), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(3), source_pointer: Relative(41) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(6), rhs: Relative(3) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 911 }, Call { location: 947 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Relative(41), source: Relative(3) }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 921 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, Call { location: 916 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 929 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 934 }, Jump { location: 932 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 929 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, Call { location: 916 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 957 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 962 }, Jump { location: 960 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 957 }]" ], - "debug_symbols": "tZrNTtxYEEbfhTUL37/66uZVoigiCRkhIRIxyUijiHcfl10HkoXRCKs3qUPAp+3LPepuN7+uvtx++vnXx7uHr9/+vnr3/tfVp8e7+/u7vz7ef/t88+Pu28P6v7+ulvindLt6V6/XqZyec+5zLDlLzpqz5exX70rMkdNyKqfnnPu0JWfJWXO2nOmz9Fn6LH2WPkuf0qf0KX1afT1mzzlyWk7l9Jxzn77kXH0tZs3Zcq4+xRw5Ladyes65z7nkLDlrzpYzfTN9M30zfTN9c/fVZclZctacLWfPOXJaTuX0nOkr6SvpK+kr6SvpK+kr6SvpK+kr6avpq+mr6avpq+mr6avpq+mr6aurz9fZlpwlZ80Z+6UEdGAABghwYCb0BYh9UwMqEOYR0IEBGCDAgZkQwewQZguoQAPCPAMGYIAAB2bCls4GBYgYl4AGrObaAgZggAAHZkJEtEMBwtwDGhDm+M1ESTsYIMCBmRA57VCAMMdvMIraIcxxOdHUDgYIcGAmRFg7FKACDcA8MU/ME/PEPNPclgUoQAUasJrbEjAAAwQ4MBMith0KUIEGYC6YI7nWAgQ4MBMiux0KUIEGdGAAmCvmirlibpgb5oa5YW6YG+aGuWFumBvmjrlj7pg75o65Y+6YO+aOuWMemAfmgXlgHpgH5oF5YB6YB2bDbJgNs2E2zIbZMBtmw2yYhVmYhVmYhVmYhVmYhVmYHbNjdsyO2TE7ZsfsmB2zY56YJ+aJeWKemCfmiXlinphnmvuyAAWoQAM6MAADBDiAuWAumAvmgrlgLphpsNNgp8FOg50GOw12Guw02Gmw02CnwU6DnQY7DfatwR5QgAqEWQEdGIABAhyYCVuDG4TZAyrQgDCPgAEYIMCBmbA1uEEBKtAAzAPzwDwwD8wDs2E2zIbZMBtmw2yYDbNhNszCLMzCLMzCLMzCLMzCLMzby8oSUIAKNKADAzBAgAMzYWKemCfmiXlinpgn5ol5Yp5pHssCFKACDejAAAwQ4ADmgrlgLpgL5oK5YC6YC+aCuWCumCvmirlirpgr5oq5Yq6YK+aGuWFumBvmhrlhbpgb5oa5Ye6YO+aOuWPumKPBXgMMEBC7bgbMhK3BDQpQgQZ0YABhHgECHJgJ0eAOBahAA+KcLWAABoTZAxyYCdHgDgWoQAM6EGYFGCDAgdU8YumiwR0KUIEGdGAABghwAPPEPDFPzBPzxDwxT8wT88Q802zLAhSgAg3owAAMEOAA5oK5YC6YC+aCuWAumAvmgrlgrpgr5oq5Yq6YK+aKuWKumCvmhrlhbpgb5oa5YW6YG+aGuWHumDvmjrlj7pg75o65Y+6YO+aBeWAemAfmgXlgHpgH5oF5YDbMhtkwG2bDbJgNs2E2zIZZmIVZmIVZmIVZmIVZmGnQaNBo0GjQaNBo0GjQaNBo0GjQaNBo0GjQaNBo0GjQaNBo0GjQaNBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigZFg6JB0aBoUDQoGhQNigadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBp0GnQadBn1rsAYUoAINCPMIGIABAhyYCVuDGxQgzBbQgDC3gAEYIMCBmbA1uEEBKtAAzBPzxDwxT8xbg+uL7bk1uEEBKtCADgzAgDArwIGZsDU4AwpQgQb0hAjElgABnhAVWAlYH91qgPif+JkWMBNiq++wPqj1gAo0YH1QswCEsdV3UELs5+3RYz/v0AAePbbo9sPGGcbO3B49duYOA7B89NiZOzgw83yEMHbmDmGuT0/XV3zK9/HH4+1tfMj328d+64eB328ebx9+XL17+Hl/f331z839z+2H/v5+87DNHzeP63fX0799+LLOVfj17v426On65ejl+NAan3FsB68fszwfPv48vrxy/IgPHHbB+l72xfC/T2A8Hy87OoF2wRNYb9Dn8eut8aMTGMfHr+3m8bO25+Nr/eN4Oz6+LI0TKIvKGwyKt86bYH25cHT8ayvQ2UDrjfajFZinr6AsF1WcXgXj99iON2JpJzdC6ecXoV9uEXplK6w3qw8XQeevwS+qOL0McW9tX4bjImo5uRdqPb0IrylOL4I97wUd7oU6zl+DXVRxdhnWu+V5/Hq7/GgZXjv+Oan11vUbjl9vEObx6/23wyfIs3uxnd+L7YJ70RrXsN61O1yE83ux2UUVp5dhspfWO0yHyzBP7oV+/om6X/CJWpVrWO8wHS1Cb+evoV9UcXoZxvPxmofLoAu+cvbnZ8n1Hf/hGZzdjeP8bhwX3I0ebwP3RTj+NYzzu3H0iypOL8NkGWY5fJYbl9yNZanzeRH6fMMz7flTmI6gzNnf8GZ4WbiGurS3vJteyovg95cb/1/Qlpcz8LNncHQJ9tpTdS3sxVLb8rvhw/rFzee7xz/+OPopVI93N5/ub/PLrz8fPv/23R//fuc7/HH198dvn2+//Hy8DdPLX1iv93nerzcKrX64vor7XO/XzXw9a4kvS3y5vt6etX94ilP5Dw==", + "debug_symbols": "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", "file_map": { "5": { "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 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 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 Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl 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 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 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 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 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 Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl 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 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 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 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(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(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};\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_slices() {\n let slice_1 = &[0, 1, 2, 3];\n let slice_2 = &[0, 1, 2];\n assert(!slice_1.eq(slice_2));\n }\n}\n", @@ -71,7 +71,7 @@ expression: artifact "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } }, diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_0.snap index aefdfaaa68d..ff891e1c401 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_0.snap @@ -58,9 +58,9 @@ expression: artifact "return value indices : []", "BRILLIG CALL func 0: inputs: [[EXPR [ (1, _0) 0 ], EXPR [ (1, _1) 0 ], EXPR [ (1, _2) 0 ], EXPR [ (1, _3) 0 ], EXPR [ (1, _4) 0 ], EXPR [ (1, _5) 0 ], EXPR [ (1, _6) 0 ], EXPR [ (1, _7) 0 ], EXPR [ (1, _8) 0 ], EXPR [ (1, _9) 0 ], EXPR [ (1, _10) 0 ]], EXPR [ (1, _11) 0 ], [EXPR [ (1, _12) 0 ], EXPR [ (1, _13) 0 ], EXPR [ (1, _14) 0 ], EXPR [ (1, _15) 0 ]], EXPR [ (1, _16) 0 ]], outputs: []", "unconstrained func 0", - "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32847), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32857), source: Direct(32857), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Cast { destination: Direct(32862), source: Direct(32862), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32847 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32858) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32859 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32863) }, Call { location: 63 }, Call { location: 102 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 0 }, Const { destination: Direct(32845), bit_size: Integer(U1), value: 1 }, Const { destination: Direct(32846), bit_size: Integer(U32), value: 1 }, Return, Call { location: 931 }, Mov { destination: Relative(6), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(6), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Mov { destination: Relative(8), source: Relative(7) }, Store { destination_pointer: Relative(8), source: Direct(32835) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32836) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32838) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32839) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32840) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32838) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32841) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32842) }, Load { destination: Relative(7), source_pointer: Relative(1) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(8), rhs: Relative(7) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 136 }, Call { location: 937 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(7) }, Load { destination: Relative(7), source_pointer: Relative(6) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(9), rhs: Relative(7) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 144 }, Call { location: 937 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Relative(7) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(11), source: Direct(0) }, Mov { destination: Relative(12), source: Relative(1) }, Mov { destination: Relative(13), source: Relative(6) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(10) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(7), source: Relative(12) }, JumpIf { condition: Relative(7), location: 157 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(6) } }, Load { destination: Relative(6), source_pointer: Relative(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(6) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 163 }, Call { location: 937 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(6) }, Load { destination: Relative(6), source_pointer: Direct(32843) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(11), op: Equals, bit_size: U32, lhs: Relative(10), rhs: Relative(6) }, Not { destination: Relative(11), source: Relative(11), bit_size: U1 }, JumpIf { condition: Relative(11), location: 171 }, Call { location: 937 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(6) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 12 }, Mov { destination: Relative(12), source: Direct(0) }, Mov { destination: Relative(13), source: Relative(1) }, Mov { destination: Relative(14), source: Direct(32843) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(11) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(6), source: Relative(13) }, JumpIf { condition: Relative(6), location: 184 }, Const { destination: Relative(11), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(11) } }, Const { destination: Relative(6), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(18), source: Direct(1) }, Const { destination: Relative(19), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(19) }, IndirectConst { destination_pointer: Relative(18), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, Mov { destination: Relative(20), source: Relative(19) }, Store { destination_pointer: Relative(20), source: Relative(6) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(11) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(12) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(13) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(14) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(11) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(15) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(11) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(16) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(13) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32836) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32837) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(11) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(17) }, Const { destination: Relative(19), bit_size: Field, value: 10 }, Const { destination: Relative(20), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(21) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 239 }, Call { location: 937 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(24), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(21) }, Not { destination: Relative(24), source: Relative(24), bit_size: U1 }, JumpIf { condition: Relative(24), location: 249 }, Call { location: 937 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, Const { destination: Relative(21), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(24), source_pointer: Relative(18) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(24) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 260 }, Call { location: 937 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(24), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(24) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(21) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 270 }, Call { location: 937 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(26), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(27), op: Equals, bit_size: U32, lhs: Relative(26), rhs: Relative(21) }, Not { destination: Relative(27), source: Relative(27), bit_size: U1 }, JumpIf { condition: Relative(27), location: 280 }, Call { location: 937 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(18), bit_size: Field, value: 1 }, Const { destination: Relative(19), bit_size: Field, value: 2 }, Const { destination: Relative(21), bit_size: Field, value: 3 }, Const { destination: Relative(27), bit_size: Field, value: 5 }, Const { destination: Relative(28), bit_size: Field, value: 8 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(30) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(31), source: Relative(30) }, Store { destination_pointer: Relative(31), source: Relative(18) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(19) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(21) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(27) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(28) }, BinaryFieldOp { destination: Relative(18), op: Equals, lhs: Relative(2), rhs: Relative(27) }, JumpIf { condition: Relative(18), location: 308 }, Const { destination: Relative(19), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(19) } }, Load { destination: Relative(2), source_pointer: Relative(29) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(19), op: Equals, bit_size: U32, lhs: Relative(18), rhs: Relative(2) }, Not { destination: Relative(19), source: Relative(19), bit_size: U1 }, JumpIf { condition: Relative(19), location: 314 }, Call { location: 937 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(31), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(32), source: Direct(1) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(33) }, IndirectConst { destination_pointer: Relative(32), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Mov { destination: Relative(34), source: Relative(33) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(19) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32835) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(30) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(19) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(31) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(16) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(31), size: 51 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(30), source_pointer: Relative(32) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(30) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 439 }, Call { location: 937 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(30) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(33), size: 51 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(29), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32840) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32838) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, Load { destination: Relative(29), source_pointer: Relative(30) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(32), rhs: Relative(29) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 478 }, Call { location: 937 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, Const { destination: Relative(29), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(33), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(34), source: Direct(1) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(35) }, IndirectConst { destination_pointer: Relative(34), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Mov { destination: Relative(36), source: Relative(35) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(12) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(13) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32841) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(13) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(27) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(27) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32835) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(11) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(33) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(33) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(27), size: 11 }), HeapArray(HeapArray { pointer: Relative(35), size: 29 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(27), source_pointer: Relative(30) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(36), op: Equals, bit_size: U32, lhs: Relative(35), rhs: Relative(27) }, Not { destination: Relative(36), source: Relative(36), bit_size: U1 }, JumpIf { condition: Relative(36), location: 554 }, Call { location: 937 }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(27), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(27) }, Load { destination: Relative(27), source_pointer: Relative(34) }, Const { destination: Relative(36), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(37), op: Equals, bit_size: U32, lhs: Relative(36), rhs: Relative(27) }, Not { destination: Relative(37), source: Relative(37), bit_size: U1 }, JumpIf { condition: Relative(37), location: 562 }, Call { location: 937 }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(27), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(37), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(27), size: 11 }), HeapArray(HeapArray { pointer: Relative(37), size: 29 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Const { destination: Relative(34), bit_size: Integer(U32), value: 37 }, Mov { destination: Relative(37), source: Direct(0) }, Mov { destination: Relative(38), source: Relative(1) }, Mov { destination: Relative(39), source: Relative(30) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(34) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(27), source: Relative(38) }, BinaryIntOp { destination: Relative(1), op: Equals, bit_size: U1, lhs: Relative(27), rhs: Relative(20) }, JumpIf { condition: Relative(1), location: 579 }, Const { destination: Relative(30), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(30) } }, Const { destination: Relative(1), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(34), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(37), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(38), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(39), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(40), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(41), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(42), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(43), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(44), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(45), source: Direct(1) }, Const { destination: Relative(46), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(46) }, IndirectConst { destination_pointer: Relative(45), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(46), op: Add, bit_size: U32, lhs: Relative(45), rhs: Direct(2) }, Mov { destination: Relative(47), source: Relative(46) }, Store { destination_pointer: Relative(47), source: Relative(6) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(12) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(29) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(28) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32841) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(34) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(37) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(28) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(2) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(38) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(1) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(38) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(39) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(40) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(34) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32841) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(41) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(30) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32838) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(28) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(16) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32837) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(29) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(42) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(42) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(43) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(6) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(12) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(16) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32837) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(17) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(44) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(42) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(19) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(6) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(12) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(16) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32837) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(17) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(44) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(42) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(29) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(27) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(16) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(28) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(21) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(6) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(12) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(13) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32842) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(15) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(39) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32838) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32838) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32837) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Direct(32836) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(2) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(14) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(11) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(17) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(44) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(44) }, BinaryIntOp { destination: Relative(47), op: Add, bit_size: U32, lhs: Relative(47), rhs: Direct(2) }, Store { destination_pointer: Relative(47), source: Relative(17) }, Const { destination: Relative(1), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(2), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(45), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(6), source_pointer: Relative(45) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(12), op: Equals, bit_size: U32, lhs: Relative(11), rhs: Relative(6) }, Not { destination: Relative(12), source: Relative(12), bit_size: U1 }, JumpIf { condition: Relative(12), location: 880 }, Call { location: 937 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(45), source: Relative(6) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(45), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Const { destination: Relative(1), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(2), bit_size: Integer(U8), value: 52 }, Mov { destination: Relative(6), source: Direct(1) }, Const { destination: Relative(12), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(12) }, IndirectConst { destination_pointer: Relative(6), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Mov { destination: Relative(13), source: Relative(12) }, Store { destination_pointer: Relative(13), source: Relative(1) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(43) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(2) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(13), rhs: Direct(2) }, Store { destination_pointer: Relative(13), source: Relative(33) }, Mov { destination: Relative(1), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Direct(32845) }, Const { destination: Relative(2), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(32844) }, Jump { location: 905 }, BinaryIntOp { destination: Relative(7), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(2) }, JumpIf { condition: Relative(7), location: 918 }, Jump { location: 908 }, Load { destination: Relative(2), source_pointer: Relative(1) }, JumpIf { condition: Relative(2), location: 912 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(1) } }, Const { destination: Relative(1), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(2), op: Equals, lhs: Relative(4), rhs: Relative(1) }, JumpIf { condition: Relative(2), location: 917 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Return, Load { destination: Relative(7), source_pointer: Relative(1) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(5) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(10), rhs: Relative(5) }, Load { destination: Relative(9), source_pointer: Relative(11) }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U8, lhs: Relative(8), rhs: Relative(9) }, BinaryIntOp { destination: Relative(8), op: Mul, bit_size: U1, lhs: Relative(7), rhs: Relative(10) }, Store { destination_pointer: Relative(1), source: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(32846) }, Mov { destination: Relative(5), source: Relative(7) }, Jump { location: 905 }, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 936 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, Call { location: 931 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 947 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 952 }, Jump { location: 950 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 947 }]" + "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32847), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32857), source: Direct(32857), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Cast { destination: Direct(32862), source: Direct(32862), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32847 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32858) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32859 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32863) }, Call { location: 63 }, Call { location: 102 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32864 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 0 }, Const { destination: Direct(32845), bit_size: Integer(U1), value: 1 }, Const { destination: Direct(32846), bit_size: Integer(U32), value: 1 }, Return, Call { location: 931 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 52 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(10), source: Direct(1) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(11) }, IndirectConst { destination_pointer: Relative(10), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(10), rhs: Direct(2) }, Mov { destination: Relative(12), source: Relative(11) }, Store { destination_pointer: Relative(12), source: Relative(6) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(7) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(8) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(9) }, Mov { destination: Relative(6), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32845) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(32844) }, Jump { location: 126 }, BinaryIntOp { destination: Relative(11), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(8) }, JumpIf { condition: Relative(11), location: 918 }, Jump { location: 129 }, Load { destination: Relative(3), source_pointer: Relative(6) }, JumpIf { condition: Relative(3), location: 133 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(5) } }, Const { destination: Relative(3), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(5), op: Equals, lhs: Relative(4), rhs: Relative(3) }, JumpIf { condition: Relative(5), location: 138 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(6) } }, Mov { destination: Relative(3), source: Direct(1) }, Const { destination: Relative(4), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(4) }, IndirectConst { destination_pointer: Relative(3), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Mov { destination: Relative(5), source: Relative(4) }, Store { destination_pointer: Relative(5), source: Direct(32835) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32836) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32838) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32839) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32840) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32838) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32841) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32837) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Direct(32842) }, Load { destination: Relative(4), source_pointer: Relative(1) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(6), op: Equals, bit_size: U32, lhs: Relative(5), rhs: Relative(4) }, Not { destination: Relative(6), source: Relative(6), bit_size: U1 }, JumpIf { condition: Relative(6), location: 171 }, Call { location: 937 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(4) }, Load { destination: Relative(4), source_pointer: Relative(3) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(6), rhs: Relative(4) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 179 }, Call { location: 937 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Relative(3), source: Relative(4) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 10 }, Mov { destination: Relative(10), source: Direct(0) }, Mov { destination: Relative(11), source: Relative(1) }, Mov { destination: Relative(12), source: Relative(3) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(8) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(4), source: Relative(11) }, JumpIf { condition: Relative(4), location: 192 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Load { destination: Relative(3), source_pointer: Relative(1) }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(4), rhs: Relative(3) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 198 }, Call { location: 937 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(3) }, Load { destination: Relative(3), source_pointer: Direct(32843) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 206 }, Call { location: 937 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(3) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(11), source: Direct(0) }, Mov { destination: Relative(12), source: Relative(1) }, Mov { destination: Relative(13), source: Direct(32843) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(10) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(3), source: Relative(12) }, JumpIf { condition: Relative(3), location: 219 }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(10) } }, Const { destination: Relative(3), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(17), source: Direct(1) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(18) }, IndirectConst { destination_pointer: Relative(17), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(18), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, Mov { destination: Relative(19), source: Relative(18) }, Store { destination_pointer: Relative(19), source: Relative(3) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(11) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(13) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(14) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(15) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(12) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32836) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32837) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Direct(32842) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(10) }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(19), rhs: Direct(2) }, Store { destination_pointer: Relative(19), source: Relative(16) }, Const { destination: Relative(18), bit_size: Integer(U1), value: 0 }, Const { destination: Relative(19), bit_size: Field, value: 10 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(21), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(22), op: Equals, bit_size: U32, lhs: Relative(21), rhs: Relative(20) }, Not { destination: Relative(22), source: Relative(22), bit_size: U1 }, JumpIf { condition: Relative(22), location: 274 }, Call { location: 937 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(20) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 284 }, Call { location: 937 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, Const { destination: Relative(20), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(23), source_pointer: Relative(17) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(23) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 295 }, Call { location: 937 }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(23), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(23) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(23), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(25), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(20) }, Not { destination: Relative(25), source: Relative(25), bit_size: U1 }, JumpIf { condition: Relative(25), location: 305 }, Call { location: 937 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(20), source_pointer: Relative(17) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(20) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 315 }, Call { location: 937 }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(17), source: Relative(20) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(17), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(20), size: 16 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(17), bit_size: Field, value: 1 }, Const { destination: Relative(19), bit_size: Field, value: 2 }, Const { destination: Relative(20), bit_size: Field, value: 3 }, Const { destination: Relative(26), bit_size: Field, value: 5 }, Const { destination: Relative(27), bit_size: Field, value: 8 }, Mov { destination: Relative(28), source: Direct(1) }, Const { destination: Relative(29), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(29) }, IndirectConst { destination_pointer: Relative(28), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Mov { destination: Relative(30), source: Relative(29) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(19) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(20) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(26) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(27) }, BinaryFieldOp { destination: Relative(17), op: Equals, lhs: Relative(2), rhs: Relative(26) }, JumpIf { condition: Relative(17), location: 343 }, Const { destination: Relative(19), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(19) } }, Load { destination: Relative(2), source_pointer: Relative(28) }, Const { destination: Relative(17), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(19), op: Equals, bit_size: U32, lhs: Relative(17), rhs: Relative(2) }, Not { destination: Relative(19), source: Relative(19), bit_size: U1 }, JumpIf { condition: Relative(19), location: 349 }, Call { location: 937 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(28), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(31), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(31), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Relative(3) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(19) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(26) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(20) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(27) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(19) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(30) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(3) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(11) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(13) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(14) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(15) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(12) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(10) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(16) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(30), size: 51 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(29), source_pointer: Relative(31) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(30), rhs: Relative(29) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 474 }, Call { location: 937 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(29) }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(29), size: 5 }), HeapArray(HeapArray { pointer: Relative(32), size: 51 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(28), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(31) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(32), source: Relative(31) }, Store { destination_pointer: Relative(32), source: Direct(32835) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32836) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(28) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(10) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32840) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32838) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32841) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32837) }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Direct(32842) }, Load { destination: Relative(28), source_pointer: Relative(29) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(32), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(28) }, Not { destination: Relative(32), source: Relative(32), bit_size: U1 }, JumpIf { condition: Relative(32), location: 513 }, Call { location: 937 }, BinaryIntOp { destination: Relative(28), op: Add, bit_size: U32, lhs: Relative(28), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(28) }, Const { destination: Relative(28), bit_size: Integer(U8), value: 115 }, Mov { destination: Relative(32), source: Direct(1) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(33) }, IndirectConst { destination_pointer: Relative(32), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Mov { destination: Relative(34), source: Relative(33) }, Store { destination_pointer: Relative(34), source: Relative(3) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(11) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(12) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(26) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(20) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(13) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(26) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32835) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(9) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(9) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(16) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(26), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), HeapArray(HeapArray { pointer: Relative(9), size: 11 }), HeapArray(HeapArray { pointer: Relative(26), size: 29 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(9), source_pointer: Relative(29) }, Const { destination: Relative(26), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(26), rhs: Relative(9) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 588 }, Call { location: 937 }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(9) }, Load { destination: Relative(9), source_pointer: Relative(32) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(34), op: Equals, bit_size: U32, lhs: Relative(33), rhs: Relative(9) }, Not { destination: Relative(34), source: Relative(34), bit_size: U1 }, JumpIf { condition: Relative(34), location: 596 }, Call { location: 937 }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(9), size: 11 }), HeapArray(HeapArray { pointer: Relative(34), size: 29 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Const { destination: Relative(32), bit_size: Integer(U32), value: 34 }, Mov { destination: Relative(34), source: Direct(0) }, Mov { destination: Relative(35), source: Relative(1) }, Mov { destination: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Direct(0), op: Add, bit_size: U32, lhs: Direct(0), rhs: Relative(32) }, Call { location: 940 }, Mov { destination: Direct(0), source: Relative(0) }, Mov { destination: Relative(9), source: Relative(35) }, BinaryIntOp { destination: Relative(1), op: Equals, bit_size: U1, lhs: Relative(9), rhs: Relative(18) }, JumpIf { condition: Relative(1), location: 613 }, Const { destination: Relative(29), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(29) } }, Const { destination: Relative(1), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(29), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(32), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(34), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(35), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(36), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(37), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(38), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(39), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(40), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(41), source: Direct(1) }, Const { destination: Relative(42), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(42) }, IndirectConst { destination_pointer: Relative(41), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(42), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, Mov { destination: Relative(43), source: Relative(42) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32841) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(32) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(34) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(2) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(35) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(1) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(35) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(36) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(37) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(32) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32841) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(38) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(29) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(7) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(19) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(39) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(28) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(9) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(15) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(27) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(20) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(3) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(11) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(12) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32842) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(14) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(36) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32838) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32837) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Direct(32836) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(2) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(13) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(10) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(40) }, BinaryIntOp { destination: Relative(43), op: Add, bit_size: U32, lhs: Relative(43), rhs: Direct(2) }, Store { destination_pointer: Relative(43), source: Relative(16) }, Const { destination: Relative(1), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(2), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Direct(32845)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(3), source_pointer: Relative(41) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(3) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 913 }, Call { location: 937 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Relative(41), source: Relative(3) }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(41), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(18)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(18)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(18))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Load { destination: Relative(11), source_pointer: Relative(6) }, BinaryIntOp { destination: Relative(13), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(13), rhs: Relative(5) }, Load { destination: Relative(12), source_pointer: Relative(14) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(10), rhs: Direct(2) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(14), rhs: Relative(5) }, Load { destination: Relative(13), source_pointer: Relative(15) }, BinaryIntOp { destination: Relative(14), op: Equals, bit_size: U8, lhs: Relative(12), rhs: Relative(13) }, BinaryIntOp { destination: Relative(12), op: Mul, bit_size: U1, lhs: Relative(11), rhs: Relative(14) }, Store { destination_pointer: Relative(6), source: Relative(12) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(32846) }, Mov { destination: Relative(5), source: Relative(11) }, Jump { location: 126 }, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 936 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, Call { location: 931 }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Direct(32845) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(3), source: Direct(32844) }, Jump { location: 947 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 952 }, Jump { location: 950 }, Load { destination: Relative(1), source_pointer: Relative(4) }, Return, Load { destination: Relative(6), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(8), rhs: Relative(3) }, Load { destination: Relative(7), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(3) }, Load { destination: Relative(8), source_pointer: Relative(10) }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U8, lhs: Relative(7), rhs: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(9) }, Store { destination_pointer: Relative(4), source: Relative(7) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(32846) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 947 }]" ], - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "5": { "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 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 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 Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl 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 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 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 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 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 Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl 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 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 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 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(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(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};\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_slices() {\n let slice_1 = &[0, 1, 2, 3];\n let slice_2 = &[0, 1, 2];\n assert(!slice_1.eq(slice_2));\n }\n}\n", @@ -71,7 +71,7 @@ expression: artifact "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } }, diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 4c669067c4f..78135000bf2 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/strings/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -58,9 +58,9 @@ expression: artifact "return value indices : []", "BRILLIG CALL func 0: inputs: [[EXPR [ (1, _0) 0 ], EXPR [ (1, _1) 0 ], EXPR [ (1, _2) 0 ], EXPR [ (1, _3) 0 ], EXPR [ (1, _4) 0 ], EXPR [ (1, _5) 0 ], EXPR [ (1, _6) 0 ], EXPR [ (1, _7) 0 ], EXPR [ (1, _8) 0 ], EXPR [ (1, _9) 0 ], EXPR [ (1, _10) 0 ]], EXPR [ (1, _11) 0 ], [EXPR [ (1, _12) 0 ], EXPR [ (1, _13) 0 ], EXPR [ (1, _14) 0 ], EXPR [ (1, _15) 0 ]], EXPR [ (1, _16) 0 ]], outputs: []", "unconstrained func 0", - "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32863 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32846), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32846), source: Direct(32846), bit_size: Integer(U8) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32858), source: Direct(32858), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32846 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32857) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32858 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32862) }, Call { location: 63 }, Call { location: 99 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32863 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Return, Call { location: 974 }, Mov { destination: Relative(6), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(6), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Mov { destination: Relative(8), source: Relative(7) }, Store { destination_pointer: Relative(8), source: Direct(32835) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32836) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32838) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32839) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32840) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32838) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32841) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32837) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(8), rhs: Direct(2) }, Store { destination_pointer: Relative(8), source: Direct(32842) }, Load { destination: Relative(7), source_pointer: Relative(1) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(8), rhs: Relative(7) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 133 }, Call { location: 980 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(7) }, Load { destination: Relative(7), source_pointer: Relative(6) }, Const { destination: Relative(9), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(9), rhs: Relative(7) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 141 }, Call { location: 980 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(7), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Relative(7) }, Mov { destination: Relative(7), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Const { destination: Relative(10), bit_size: Integer(U1), value: 1 }, Store { destination_pointer: Relative(7), source: Relative(10) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 0 }, Const { destination: Relative(12), bit_size: Integer(U32), value: 11 }, Const { destination: Relative(13), bit_size: Integer(U32), value: 1 }, Mov { destination: Relative(5), source: Relative(11) }, Jump { location: 152 }, BinaryIntOp { destination: Relative(8), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(12) }, JumpIf { condition: Relative(8), location: 961 }, Jump { location: 155 }, Load { destination: Relative(6), source_pointer: Relative(7) }, JumpIf { condition: Relative(6), location: 159 }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(7) } }, Load { destination: Relative(6), source_pointer: Relative(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(6) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 165 }, Call { location: 980 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(6) }, Load { destination: Relative(6), source_pointer: Direct(32843) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(9), op: Equals, bit_size: U32, lhs: Relative(8), rhs: Relative(6) }, Not { destination: Relative(9), source: Relative(9), bit_size: U1 }, JumpIf { condition: Relative(9), location: 173 }, Call { location: 980 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(6) }, Mov { destination: Relative(6), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Relative(10) }, Mov { destination: Relative(5), source: Relative(11) }, Jump { location: 180 }, BinaryIntOp { destination: Relative(7), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(12) }, JumpIf { condition: Relative(7), location: 948 }, Jump { location: 183 }, Load { destination: Relative(7), source_pointer: Relative(6) }, JumpIf { condition: Relative(7), location: 187 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(6) } }, Const { destination: Relative(6), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(18), source: Direct(1) }, Const { destination: Relative(19), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(19) }, IndirectConst { destination_pointer: Relative(18), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, Mov { destination: Relative(20), source: Relative(19) }, Store { destination_pointer: Relative(20), source: Relative(6) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(7) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(8) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(9) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(14) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(7) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(15) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(7) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(16) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(9) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32836) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32837) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(7) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(17) }, Const { destination: Relative(19), bit_size: Field, value: 10 }, Const { destination: Relative(20), bit_size: Integer(U1), value: 0 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(21) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 242 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(24), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(21) }, Not { destination: Relative(24), source: Relative(24), bit_size: U1 }, JumpIf { condition: Relative(24), location: 252 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, Const { destination: Relative(21), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(24), source_pointer: Relative(18) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(24) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 263 }, Call { location: 980 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(24), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(24) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(21) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 273 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(26), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(27), op: Equals, bit_size: U32, lhs: Relative(26), rhs: Relative(21) }, Not { destination: Relative(27), source: Relative(27), bit_size: U1 }, JumpIf { condition: Relative(27), location: 283 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(18), bit_size: Field, value: 1 }, Const { destination: Relative(19), bit_size: Field, value: 2 }, Const { destination: Relative(21), bit_size: Field, value: 3 }, Const { destination: Relative(27), bit_size: Field, value: 5 }, Const { destination: Relative(28), bit_size: Field, value: 8 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(30) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(31), source: Relative(30) }, Store { destination_pointer: Relative(31), source: Relative(18) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(19) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(21) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(27) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(28) }, BinaryFieldOp { destination: Relative(18), op: Equals, lhs: Relative(2), rhs: Relative(27) }, JumpIf { condition: Relative(18), location: 311 }, Const { destination: Relative(19), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(19) } }, Load { destination: Relative(2), source_pointer: Relative(29) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(19), op: Equals, bit_size: U32, lhs: Relative(18), rhs: Relative(2) }, Not { destination: Relative(19), source: Relative(19), bit_size: U1 }, JumpIf { condition: Relative(19), location: 317 }, Call { location: 980 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(31), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(32), source: Direct(1) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(33) }, IndirectConst { destination_pointer: Relative(32), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Mov { destination: Relative(34), source: Relative(33) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(8) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(9) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(19) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32835) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(30) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(19) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(31) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(8) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(9) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(16) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(9) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(7) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(31), size: 51 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(30), source_pointer: Relative(32) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(30) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 442 }, Call { location: 980 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(30) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(33), size: 51 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(29), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(7) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32840) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32838) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, Load { destination: Relative(29), source_pointer: Relative(30) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(32), rhs: Relative(29) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 481 }, Call { location: 980 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, Const { destination: Relative(29), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(33), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(34), source: Direct(1) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(35) }, IndirectConst { destination_pointer: Relative(34), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Mov { destination: Relative(36), source: Relative(35) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(8) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32841) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(27) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(27) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32835) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(33) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(33) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), HeapArray(HeapArray { pointer: Relative(27), size: 11 }), HeapArray(HeapArray { pointer: Relative(35), size: 29 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(27), source_pointer: Relative(30) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(36), op: Equals, bit_size: U32, lhs: Relative(35), rhs: Relative(27) }, Not { destination: Relative(36), source: Relative(36), bit_size: U1 }, JumpIf { condition: Relative(36), location: 557 }, Call { location: 980 }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(27), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(27) }, Load { destination: Relative(27), source_pointer: Relative(34) }, Const { destination: Relative(36), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(37), op: Equals, bit_size: U32, lhs: Relative(36), rhs: Relative(27) }, Not { destination: Relative(37), source: Relative(37), bit_size: U1 }, JumpIf { condition: Relative(37), location: 565 }, Call { location: 980 }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(27), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(37), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(27), size: 11 }), HeapArray(HeapArray { pointer: Relative(37), size: 29 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Mov { destination: Relative(27), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(27), source: Relative(10) }, Mov { destination: Relative(5), source: Relative(11) }, Jump { location: 575 }, BinaryIntOp { destination: Relative(18), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(12) }, JumpIf { condition: Relative(18), location: 935 }, Jump { location: 578 }, Load { destination: Relative(5), source_pointer: Relative(27) }, BinaryIntOp { destination: Relative(12), op: Equals, bit_size: U1, lhs: Relative(5), rhs: Relative(20) }, JumpIf { condition: Relative(12), location: 583 }, Const { destination: Relative(18), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(18) } }, Const { destination: Relative(5), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(22), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(23), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(24), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(25), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(26), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(31), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(32), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(34), source: Direct(1) }, Const { destination: Relative(35), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(35) }, IndirectConst { destination_pointer: Relative(34), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Mov { destination: Relative(36), source: Relative(35) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(8) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32841) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(22) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(23) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(2) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(24) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(5) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(24) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(25) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(26) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(22) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32841) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(27) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(18) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32838) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(16) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(30) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(30) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(31) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(8) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(16) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(32) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(30) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(19) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(8) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(16) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(32) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(30) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(29) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(12) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(16) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(28) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(21) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(6) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(8) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(9) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32842) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(15) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(25) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32838) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32838) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32837) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Direct(32836) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(2) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(14) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(7) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(32) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(32) }, BinaryIntOp { destination: Relative(36), op: Add, bit_size: U32, lhs: Relative(36), rhs: Direct(2) }, Store { destination_pointer: Relative(36), source: Relative(17) }, Const { destination: Relative(2), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(5), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(10)), MemoryAddress(Relative(2)), MemoryAddress(Relative(5)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(6), source_pointer: Relative(34) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(8), op: Equals, bit_size: U32, lhs: Relative(7), rhs: Relative(6) }, Not { destination: Relative(8), source: Relative(8), bit_size: U1 }, JumpIf { condition: Relative(8), location: 884 }, Call { location: 980 }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(20)), MemoryAddress(Relative(2)), MemoryAddress(Relative(5)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(6), size: 137 }), MemoryAddress(Relative(20))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Const { destination: Relative(2), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 52 }, Mov { destination: Relative(6), source: Direct(1) }, Const { destination: Relative(8), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(8) }, IndirectConst { destination_pointer: Relative(6), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Mov { destination: Relative(9), source: Relative(8) }, Store { destination_pointer: Relative(9), source: Relative(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(9), source: Relative(31) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(9), source: Relative(5) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(9), source: Relative(33) }, Mov { destination: Relative(2), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(2), source: Relative(10) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(1), source: Relative(11) }, Jump { location: 909 }, BinaryIntOp { destination: Relative(7), op: LessThan, bit_size: U32, lhs: Relative(1), rhs: Relative(5) }, JumpIf { condition: Relative(7), location: 922 }, Jump { location: 912 }, Load { destination: Relative(1), source_pointer: Relative(2) }, JumpIf { condition: Relative(1), location: 916 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(2) } }, Const { destination: Relative(1), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(2), op: Equals, lhs: Relative(4), rhs: Relative(1) }, JumpIf { condition: Relative(2), location: 921 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(3) } }, Return, Load { destination: Relative(7), source_pointer: Relative(2) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(1) }, Load { destination: Relative(8), source_pointer: Relative(11) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(11), rhs: Relative(1) }, Load { destination: Relative(9), source_pointer: Relative(12) }, BinaryIntOp { destination: Relative(11), op: Equals, bit_size: U8, lhs: Relative(8), rhs: Relative(9) }, BinaryIntOp { destination: Relative(8), op: Mul, bit_size: U1, lhs: Relative(7), rhs: Relative(11) }, Store { destination_pointer: Relative(2), source: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(1), rhs: Relative(13) }, Mov { destination: Relative(1), source: Relative(7) }, Jump { location: 909 }, Load { destination: Relative(18), source_pointer: Relative(27) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(23), rhs: Relative(5) }, Load { destination: Relative(22), source_pointer: Relative(24) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(25), op: Add, bit_size: U32, lhs: Relative(24), rhs: Relative(5) }, Load { destination: Relative(23), source_pointer: Relative(25) }, BinaryIntOp { destination: Relative(24), op: Equals, bit_size: U8, lhs: Relative(22), rhs: Relative(23) }, BinaryIntOp { destination: Relative(22), op: Mul, bit_size: U1, lhs: Relative(18), rhs: Relative(24) }, Store { destination_pointer: Relative(27), source: Relative(22) }, BinaryIntOp { destination: Relative(18), op: Add, bit_size: U32, lhs: Relative(5), rhs: Relative(13) }, Mov { destination: Relative(5), source: Relative(18) }, Jump { location: 575 }, Load { destination: Relative(7), source_pointer: Relative(6) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(9), rhs: Relative(5) }, Load { destination: Relative(8), source_pointer: Relative(14) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(14), rhs: Relative(5) }, Load { destination: Relative(9), source_pointer: Relative(15) }, BinaryIntOp { destination: Relative(14), op: Equals, bit_size: U8, lhs: Relative(8), rhs: Relative(9) }, BinaryIntOp { destination: Relative(8), op: Mul, bit_size: U1, lhs: Relative(7), rhs: Relative(14) }, Store { destination_pointer: Relative(6), source: Relative(8) }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Relative(13) }, Mov { destination: Relative(5), source: Relative(7) }, Jump { location: 180 }, Load { destination: Relative(8), source_pointer: Relative(7) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(14), rhs: Relative(5) }, Load { destination: Relative(9), source_pointer: Relative(15) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, BinaryIntOp { destination: Relative(16), op: Add, bit_size: U32, lhs: Relative(15), rhs: Relative(5) }, Load { destination: Relative(14), source_pointer: Relative(16) }, BinaryIntOp { destination: Relative(15), op: Equals, bit_size: U8, lhs: Relative(9), rhs: Relative(14) }, BinaryIntOp { destination: Relative(9), op: Mul, bit_size: U1, lhs: Relative(8), rhs: Relative(15) }, Store { destination_pointer: Relative(7), source: Relative(9) }, BinaryIntOp { destination: Relative(8), op: Add, bit_size: U32, lhs: Relative(5), rhs: Relative(13) }, Mov { destination: Relative(5), source: Relative(8) }, Jump { location: 152 }, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 979 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]" + "[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32863 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32846), size_address: Relative(5), offset_address: Relative(6) }, Cast { destination: Direct(32846), source: Direct(32846), bit_size: Integer(U8) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Cast { destination: Direct(32852), source: Direct(32852), bit_size: Integer(U8) }, Cast { destination: Direct(32853), source: Direct(32853), bit_size: Integer(U8) }, Cast { destination: Direct(32854), source: Direct(32854), bit_size: Integer(U8) }, Cast { destination: Direct(32855), source: Direct(32855), bit_size: Integer(U8) }, Cast { destination: Direct(32856), source: Direct(32856), bit_size: Integer(U8) }, Cast { destination: Direct(32858), source: Direct(32858), bit_size: Integer(U8) }, Cast { destination: Direct(32859), source: Direct(32859), bit_size: Integer(U8) }, Cast { destination: Direct(32860), source: Direct(32860), bit_size: Integer(U8) }, Cast { destination: Direct(32861), source: Direct(32861), bit_size: Integer(U8) }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32846 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(1) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(1), source: Relative(5) }, Mov { destination: Relative(2), source: Direct(32857) }, Const { destination: Relative(3), bit_size: Integer(U32), value: 32858 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 4 }, Mov { destination: Relative(5), source: Direct(1) }, Const { destination: Relative(7), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(7) }, IndirectConst { destination_pointer: Relative(5), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(7), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(3) }, Mov { destination: Direct(32772), source: Relative(7) }, Mov { destination: Direct(32773), source: Relative(6) }, Call { location: 52 }, Mov { destination: Relative(3), source: Relative(5) }, Mov { destination: Relative(4), source: Direct(32862) }, Call { location: 63 }, Call { location: 99 }, Const { destination: Relative(1), bit_size: Integer(U32), value: 32863 }, Const { destination: Relative(2), bit_size: Integer(U32), value: 0 }, Stop { return_data: HeapVector { pointer: Relative(1), size: Relative(2) } }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 62 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 55 }, Return, Const { destination: Direct(32835), bit_size: Integer(U8), value: 104 }, Const { destination: Direct(32836), bit_size: Integer(U8), value: 101 }, Const { destination: Direct(32837), bit_size: Integer(U8), value: 108 }, Const { destination: Direct(32838), bit_size: Integer(U8), value: 111 }, Const { destination: Direct(32839), bit_size: Integer(U8), value: 32 }, Const { destination: Direct(32840), bit_size: Integer(U8), value: 119 }, Const { destination: Direct(32841), bit_size: Integer(U8), value: 114 }, Const { destination: Direct(32842), bit_size: Integer(U8), value: 100 }, Mov { destination: Direct(32843), source: Direct(1) }, Const { destination: Direct(32844), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(32844) }, IndirectConst { destination_pointer: Direct(32843), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Direct(32844), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, Mov { destination: Direct(32845), source: Direct(32844) }, Store { destination_pointer: Direct(32845), source: Direct(32835) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32836) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32839) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32840) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32838) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32841) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32837) }, BinaryIntOp { destination: Direct(32845), op: Add, bit_size: U32, lhs: Direct(32845), rhs: Direct(2) }, Store { destination_pointer: Direct(32845), source: Direct(32842) }, Return, Call { location: 974 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 48 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 120 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 52 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 49 }, Mov { destination: Relative(10), source: Direct(1) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 5 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(11) }, IndirectConst { destination_pointer: Relative(10), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(10), rhs: Direct(2) }, Mov { destination: Relative(12), source: Relative(11) }, Store { destination_pointer: Relative(12), source: Relative(6) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(7) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(8) }, BinaryIntOp { destination: Relative(12), op: Add, bit_size: U32, lhs: Relative(12), rhs: Direct(2) }, Store { destination_pointer: Relative(12), source: Relative(9) }, Mov { destination: Relative(6), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Const { destination: Relative(8), bit_size: Integer(U1), value: 1 }, Store { destination_pointer: Relative(6), source: Relative(8) }, Const { destination: Relative(11), bit_size: Integer(U32), value: 0 }, Const { destination: Relative(12), bit_size: Integer(U32), value: 4 }, Const { destination: Relative(13), bit_size: Integer(U32), value: 1 }, Mov { destination: Relative(5), source: Relative(11) }, Jump { location: 126 }, BinaryIntOp { destination: Relative(14), op: LessThan, bit_size: U32, lhs: Relative(5), rhs: Relative(12) }, JumpIf { condition: Relative(14), location: 961 }, Jump { location: 129 }, Load { destination: Relative(5), source_pointer: Relative(6) }, JumpIf { condition: Relative(5), location: 133 }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(6) } }, Const { destination: Relative(5), bit_size: Field, value: 65 }, BinaryFieldOp { destination: Relative(6), op: Equals, lhs: Relative(4), rhs: Relative(5) }, JumpIf { condition: Relative(6), location: 138 }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(10) } }, Mov { destination: Relative(4), source: Direct(1) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(5) }, IndirectConst { destination_pointer: Relative(4), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Mov { destination: Relative(6), source: Relative(5) }, Store { destination_pointer: Relative(6), source: Direct(32835) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32836) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32837) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32837) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32838) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32839) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32840) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32838) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32841) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32837) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(6), rhs: Direct(2) }, Store { destination_pointer: Relative(6), source: Direct(32842) }, Load { destination: Relative(5), source_pointer: Relative(1) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(6), rhs: Relative(5) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 171 }, Call { location: 980 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(5) }, Load { destination: Relative(5), source_pointer: Relative(4) }, Const { destination: Relative(10), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(12), op: Equals, bit_size: U32, lhs: Relative(10), rhs: Relative(5) }, Not { destination: Relative(12), source: Relative(12), bit_size: U1 }, JumpIf { condition: Relative(12), location: 179 }, Call { location: 980 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(5), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Relative(5) }, Mov { destination: Relative(5), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(5), source: Relative(8) }, Const { destination: Relative(12), bit_size: Integer(U32), value: 11 }, Mov { destination: Relative(3), source: Relative(11) }, Jump { location: 187 }, BinaryIntOp { destination: Relative(6), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(12) }, JumpIf { condition: Relative(6), location: 948 }, Jump { location: 190 }, Load { destination: Relative(4), source_pointer: Relative(5) }, JumpIf { condition: Relative(4), location: 194 }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(5) } }, Load { destination: Relative(4), source_pointer: Relative(1) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(6), op: Equals, bit_size: U32, lhs: Relative(5), rhs: Relative(4) }, Not { destination: Relative(6), source: Relative(6), bit_size: U1 }, JumpIf { condition: Relative(6), location: 200 }, Call { location: 980 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Relative(1), source: Relative(4) }, Load { destination: Relative(4), source_pointer: Direct(32843) }, Const { destination: Relative(6), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(10), op: Equals, bit_size: U32, lhs: Relative(6), rhs: Relative(4) }, Not { destination: Relative(10), source: Relative(10), bit_size: U1 }, JumpIf { condition: Relative(10), location: 208 }, Call { location: 980 }, BinaryIntOp { destination: Relative(4), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, Store { destination_pointer: Direct(32843), source: Relative(4) }, Mov { destination: Relative(4), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(4), source: Relative(8) }, Mov { destination: Relative(3), source: Relative(11) }, Jump { location: 215 }, BinaryIntOp { destination: Relative(5), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(12) }, JumpIf { condition: Relative(5), location: 935 }, Jump { location: 218 }, Load { destination: Relative(5), source_pointer: Relative(4) }, JumpIf { condition: Relative(5), location: 222 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(4) } }, Const { destination: Relative(4), bit_size: Integer(U8), value: 123 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 34 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 105 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 58 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 102 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 125 }, Mov { destination: Relative(18), source: Direct(1) }, Const { destination: Relative(19), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(19) }, IndirectConst { destination_pointer: Relative(18), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(19), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, Mov { destination: Relative(20), source: Relative(19) }, Store { destination_pointer: Relative(20), source: Relative(4) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(5) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(6) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(10) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(14) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(5) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(15) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(5) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(16) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(10) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32836) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32837) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Direct(32842) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(5) }, BinaryIntOp { destination: Relative(20), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Store { destination_pointer: Relative(20), source: Relative(17) }, Const { destination: Relative(19), bit_size: Integer(U1), value: 0 }, Const { destination: Relative(20), bit_size: Field, value: 10 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(22), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U32, lhs: Relative(22), rhs: Relative(21) }, Not { destination: Relative(23), source: Relative(23), bit_size: U1 }, JumpIf { condition: Relative(23), location: 277 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(23), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(24), op: Equals, bit_size: U32, lhs: Relative(23), rhs: Relative(21) }, Not { destination: Relative(24), source: Relative(24), bit_size: U1 }, JumpIf { condition: Relative(24), location: 287 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, Const { destination: Relative(21), bit_size: Field, value: 50 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(24), source_pointer: Relative(18) }, Const { destination: Relative(25), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(25), rhs: Relative(24) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 298 }, Call { location: 980 }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(24), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(24) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(21)), HeapArray(HeapArray { pointer: Relative(24), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(24), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(26), op: Equals, bit_size: U32, lhs: Relative(24), rhs: Relative(21) }, Not { destination: Relative(26), source: Relative(26), bit_size: U1 }, JumpIf { condition: Relative(26), location: 308 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Load { destination: Relative(21), source_pointer: Relative(18) }, Const { destination: Relative(26), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(27), op: Equals, bit_size: U32, lhs: Relative(26), rhs: Relative(21) }, Not { destination: Relative(27), source: Relative(27), bit_size: U1 }, JumpIf { condition: Relative(27), location: 318 }, Call { location: 980 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(21), rhs: Direct(2) }, Store { destination_pointer: Relative(18), source: Relative(21) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(18), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(20)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Array { value_types: [Simple(Integer(U8))], size: 16 }, Simple(Integer(U1))] }, Const { destination: Relative(18), bit_size: Field, value: 1 }, Const { destination: Relative(20), bit_size: Field, value: 2 }, Const { destination: Relative(21), bit_size: Field, value: 3 }, Const { destination: Relative(27), bit_size: Field, value: 5 }, Const { destination: Relative(28), bit_size: Field, value: 8 }, Mov { destination: Relative(29), source: Direct(1) }, Const { destination: Relative(30), bit_size: Integer(U32), value: 6 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(30) }, IndirectConst { destination_pointer: Relative(29), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Mov { destination: Relative(31), source: Relative(30) }, Store { destination_pointer: Relative(31), source: Relative(18) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(20) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(21) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(27) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(31), rhs: Direct(2) }, Store { destination_pointer: Relative(31), source: Relative(28) }, BinaryFieldOp { destination: Relative(18), op: Equals, lhs: Relative(2), rhs: Relative(27) }, JumpIf { condition: Relative(18), location: 346 }, Const { destination: Relative(20), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(20) } }, Load { destination: Relative(2), source_pointer: Relative(29) }, Const { destination: Relative(18), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(20), op: Equals, bit_size: U32, lhs: Relative(18), rhs: Relative(2) }, Not { destination: Relative(20), source: Relative(20), bit_size: U1 }, JumpIf { condition: Relative(20), location: 352 }, Call { location: 980 }, BinaryIntOp { destination: Relative(2), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, Store { destination_pointer: Relative(29), source: Relative(2) }, Const { destination: Relative(2), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(20), bit_size: Integer(U8), value: 121 }, Const { destination: Relative(21), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(27), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(28), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(30), bit_size: Integer(U8), value: 53 }, Const { destination: Relative(31), bit_size: Integer(U8), value: 112 }, Mov { destination: Relative(32), source: Direct(1) }, Const { destination: Relative(33), bit_size: Integer(U32), value: 52 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(33) }, IndirectConst { destination_pointer: Relative(32), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, Mov { destination: Relative(34), source: Relative(33) }, Store { destination_pointer: Relative(34), source: Relative(4) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32841) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(2) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(20) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(27) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32835) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(30) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(21) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(28) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(20) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(31) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(4) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(6) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(14) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(15) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(16) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(10) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32836) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32837) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Direct(32842) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(5) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(34), rhs: Direct(2) }, Store { destination_pointer: Relative(34), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(31), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(31), size: 51 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Load { destination: Relative(30), source_pointer: Relative(32) }, Const { destination: Relative(31), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(31), rhs: Relative(30) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 477 }, Call { location: 980 }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(32), source: Relative(30) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(32), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(30), size: 5 }), HeapArray(HeapArray { pointer: Relative(33), size: 51 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Field)], size: 5 }, Array { value_types: [Simple(Integer(U8))], size: 51 }, Simple(Integer(U1))] }, Const { destination: Relative(29), bit_size: Integer(U8), value: 0 }, Mov { destination: Relative(30), source: Direct(1) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 12 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(32) }, IndirectConst { destination_pointer: Relative(30), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(32), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Mov { destination: Relative(33), source: Relative(32) }, Store { destination_pointer: Relative(33), source: Direct(32835) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32836) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(29) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(5) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32840) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32838) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32841) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32837) }, BinaryIntOp { destination: Relative(33), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Direct(32842) }, Load { destination: Relative(29), source_pointer: Relative(30) }, Const { destination: Relative(32), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(33), op: Equals, bit_size: U32, lhs: Relative(32), rhs: Relative(29) }, Not { destination: Relative(33), source: Relative(33), bit_size: U1 }, JumpIf { condition: Relative(33), location: 516 }, Call { location: 980 }, BinaryIntOp { destination: Relative(29), op: Add, bit_size: U32, lhs: Relative(29), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, Const { destination: Relative(29), bit_size: Integer(U8), value: 115 }, Mov { destination: Relative(33), source: Direct(1) }, Const { destination: Relative(34), bit_size: Integer(U32), value: 30 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(34) }, IndirectConst { destination_pointer: Relative(33), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(34), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, Mov { destination: Relative(35), source: Relative(34) }, Store { destination_pointer: Relative(35), source: Relative(4) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(6) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(14) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32842) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(15) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(29) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(28) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32841) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(10) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(14) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(27) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(21) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32837) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32836) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(14) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(27) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(28) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Direct(32835) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(5) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(15) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(9) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(9) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(35), rhs: Direct(2) }, Store { destination_pointer: Relative(35), source: Relative(17) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), HeapArray(HeapArray { pointer: Relative(9), size: 11 }), HeapArray(HeapArray { pointer: Relative(27), size: 29 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Load { destination: Relative(9), source_pointer: Relative(30) }, Const { destination: Relative(27), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(34), op: Equals, bit_size: U32, lhs: Relative(27), rhs: Relative(9) }, Not { destination: Relative(34), source: Relative(34), bit_size: U1 }, JumpIf { condition: Relative(34), location: 591 }, Call { location: 980 }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(9) }, Load { destination: Relative(9), source_pointer: Relative(33) }, Const { destination: Relative(34), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(35), op: Equals, bit_size: U32, lhs: Relative(34), rhs: Relative(9) }, Not { destination: Relative(35), source: Relative(35), bit_size: U1 }, JumpIf { condition: Relative(35), location: 599 }, Call { location: 980 }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(9), rhs: Direct(2) }, Store { destination_pointer: Relative(33), source: Relative(9) }, BinaryIntOp { destination: Relative(9), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(35), op: Add, bit_size: U32, lhs: Relative(33), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(9), size: 11 }), HeapArray(HeapArray { pointer: Relative(35), size: 29 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 11 }, Array { value_types: [Simple(Integer(U8))], size: 29 }, Simple(Integer(U1))] }, Mov { destination: Relative(9), source: Direct(1) }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Direct(2) }, Store { destination_pointer: Relative(9), source: Relative(8) }, Mov { destination: Relative(3), source: Relative(11) }, Jump { location: 609 }, BinaryIntOp { destination: Relative(11), op: LessThan, bit_size: U32, lhs: Relative(3), rhs: Relative(12) }, JumpIf { condition: Relative(11), location: 922 }, Jump { location: 612 }, Load { destination: Relative(1), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(3), op: Equals, bit_size: U1, lhs: Relative(1), rhs: Relative(19) }, JumpIf { condition: Relative(3), location: 617 }, Const { destination: Relative(9), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Relative(9) } }, Const { destination: Relative(1), bit_size: Integer(U8), value: 69 }, Const { destination: Relative(3), bit_size: Integer(U8), value: 95 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 80 }, Const { destination: Relative(11), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 99 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 109 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 98 }, Const { destination: Relative(22), bit_size: Integer(U8), value: 67 }, Const { destination: Relative(23), bit_size: Integer(U8), value: 118 }, Const { destination: Relative(24), bit_size: Integer(U8), value: 91 }, Const { destination: Relative(25), bit_size: Integer(U8), value: 93 }, Mov { destination: Relative(26), source: Direct(1) }, Const { destination: Relative(27), bit_size: Integer(U32), value: 138 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(27) }, IndirectConst { destination_pointer: Relative(26), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(27), op: Add, bit_size: U32, lhs: Relative(26), rhs: Direct(2) }, Mov { destination: Relative(30), source: Relative(27) }, Store { destination_pointer: Relative(30), source: Relative(4) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(6) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(28) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32841) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(11) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(12) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(28) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(2) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(13) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(1) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(13) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(18) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(22) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(11) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32841) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(23) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(9) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32838) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(28) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(16) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32837) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(24) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(24) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(7) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(4) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(6) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(16) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32837) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(25) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(24) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(20) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(4) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(6) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(16) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32837) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(25) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(24) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(29) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(3) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(16) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(28) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(21) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(4) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(6) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(10) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32842) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(15) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(18) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32838) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32838) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32837) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Direct(32836) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(2) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(14) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(5) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(17) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(25) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(25) }, BinaryIntOp { destination: Relative(30), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, Store { destination_pointer: Relative(30), source: Relative(17) }, Const { destination: Relative(1), bit_size: Field, value: 11054869047818119882829115294070295577450608105332618660470768407791803762323 }, Const { destination: Relative(2), bit_size: Field, value: 10342258267264174240775423156252625971328954635747071949009099277443464742287 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(26), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(8)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Load { destination: Relative(3), source_pointer: Relative(26) }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, BinaryIntOp { destination: Relative(5), op: Equals, bit_size: U32, lhs: Relative(4), rhs: Relative(3) }, Not { destination: Relative(5), source: Relative(5), bit_size: U1 }, JumpIf { condition: Relative(5), location: 917 }, Call { location: 980 }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Store { destination_pointer: Relative(26), source: Relative(3) }, BinaryIntOp { destination: Relative(3), op: Add, bit_size: U32, lhs: Relative(26), rhs: Direct(2) }, ForeignCall { function: \"print\", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(19)), MemoryAddress(Relative(1)), MemoryAddress(Relative(2)), MemoryAddress(Relative(19)), HeapArray(HeapArray { pointer: Relative(3), size: 137 }), MemoryAddress(Relative(19))], input_value_types: [Simple(Integer(U1)), Simple(Field), Simple(Field), Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 137 }, Simple(Integer(U1))] }, Return, Load { destination: Relative(11), source_pointer: Relative(9) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(22), rhs: Relative(3) }, Load { destination: Relative(18), source_pointer: Relative(23) }, BinaryIntOp { destination: Relative(23), op: Add, bit_size: U32, lhs: Relative(30), rhs: Direct(2) }, BinaryIntOp { destination: Relative(24), op: Add, bit_size: U32, lhs: Relative(23), rhs: Relative(3) }, Load { destination: Relative(22), source_pointer: Relative(24) }, BinaryIntOp { destination: Relative(23), op: Equals, bit_size: U8, lhs: Relative(18), rhs: Relative(22) }, BinaryIntOp { destination: Relative(18), op: Mul, bit_size: U1, lhs: Relative(11), rhs: Relative(23) }, Store { destination_pointer: Relative(9), source: Relative(18) }, BinaryIntOp { destination: Relative(11), op: Add, bit_size: U32, lhs: Relative(3), rhs: Relative(13) }, Mov { destination: Relative(3), source: Relative(11) }, Jump { location: 609 }, Load { destination: Relative(5), source_pointer: Relative(4) }, BinaryIntOp { destination: Relative(10), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(10), rhs: Relative(3) }, Load { destination: Relative(6), source_pointer: Relative(14) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Direct(32843), rhs: Direct(2) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(14), rhs: Relative(3) }, Load { destination: Relative(10), source_pointer: Relative(15) }, BinaryIntOp { destination: Relative(14), op: Equals, bit_size: U8, lhs: Relative(6), rhs: Relative(10) }, BinaryIntOp { destination: Relative(6), op: Mul, bit_size: U1, lhs: Relative(5), rhs: Relative(14) }, Store { destination_pointer: Relative(4), source: Relative(6) }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(3), rhs: Relative(13) }, Mov { destination: Relative(3), source: Relative(5) }, Jump { location: 215 }, Load { destination: Relative(6), source_pointer: Relative(5) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(1), rhs: Direct(2) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(14), rhs: Relative(3) }, Load { destination: Relative(10), source_pointer: Relative(15) }, BinaryIntOp { destination: Relative(15), op: Add, bit_size: U32, lhs: Relative(4), rhs: Direct(2) }, BinaryIntOp { destination: Relative(16), op: Add, bit_size: U32, lhs: Relative(15), rhs: Relative(3) }, Load { destination: Relative(14), source_pointer: Relative(16) }, BinaryIntOp { destination: Relative(15), op: Equals, bit_size: U8, lhs: Relative(10), rhs: Relative(14) }, BinaryIntOp { destination: Relative(10), op: Mul, bit_size: U1, lhs: Relative(6), rhs: Relative(15) }, Store { destination_pointer: Relative(5), source: Relative(10) }, BinaryIntOp { destination: Relative(6), op: Add, bit_size: U32, lhs: Relative(3), rhs: Relative(13) }, Mov { destination: Relative(3), source: Relative(6) }, Jump { location: 187 }, Load { destination: Relative(14), source_pointer: Relative(6) }, BinaryIntOp { destination: Relative(16), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, BinaryIntOp { destination: Relative(17), op: Add, bit_size: U32, lhs: Relative(16), rhs: Relative(5) }, Load { destination: Relative(15), source_pointer: Relative(17) }, BinaryIntOp { destination: Relative(17), op: Add, bit_size: U32, lhs: Relative(10), rhs: Direct(2) }, BinaryIntOp { destination: Relative(18), op: Add, bit_size: U32, lhs: Relative(17), rhs: Relative(5) }, Load { destination: Relative(16), source_pointer: Relative(18) }, BinaryIntOp { destination: Relative(17), op: Equals, bit_size: U8, lhs: Relative(15), rhs: Relative(16) }, BinaryIntOp { destination: Relative(15), op: Mul, bit_size: U1, lhs: Relative(14), rhs: Relative(17) }, Store { destination_pointer: Relative(6), source: Relative(15) }, BinaryIntOp { destination: Relative(14), op: Add, bit_size: U32, lhs: Relative(5), rhs: Relative(13) }, Mov { destination: Relative(5), source: Relative(14) }, Jump { location: 126 }, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 979 }, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 17843811134343075018 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return, IndirectConst { destination_pointer: Direct(1), bit_size: Integer(U64), value: 12049594436772143978 }, Trap { revert_data: HeapVector { pointer: Direct(1), size: Direct(2) } }, Return]" ], - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "5": { "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 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 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 Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl 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 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 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 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 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 Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl 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 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 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 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(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(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};\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_slices() {\n let slice_1 = &[0, 1, 2, 3];\n let slice_2 = &[0, 1, 2];\n assert(!slice_1.eq(slice_2));\n }\n}\n", @@ -71,7 +71,7 @@ expression: artifact "path": "std/lib.nr" }, "50": { - "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", + "source": "// Test global string literals\nglobal HELLO_WORLD: str<11> = \"hello world\";\n\nfn main(message: pub str<11>, y: Field, hex_as_string: str<4>, hex_as_field: Field) {\n assert(hex_as_string == \"0x41\");\n // assert(hex_as_string != 0x41); This will fail with a type mismatch between str[4] and Field\n assert(hex_as_field == 0x41);\n\n // Single digit & odd length hex literals are valid\n assert(hex_as_field == 0x041);\n assert(hex_as_field != 0x1);\n\n let mut bad_message = \"hello world\";\n\n assert(message == \"hello world\");\n assert(message == HELLO_WORLD);\n let x = 10;\n let z = x * 5;\n std::println(10);\n std::print(10);\n\n std::println(z); // x * 5 in println not yet supported\n std::print(z);\n std::println(x);\n std::print(x);\n\n let array = [1, 2, 3, 5, 8];\n assert(y == 5); // Change to y != 5 to see how the later print statements are not called\n std::println(array);\n std::print(array);\n\n bad_message = \"hell\\0\\\"world\";\n std::println(bad_message);\n std::print(bad_message);\n assert(message != bad_message);\n\n let hash = std::hash::pedersen_commitment([x]);\n std::println(hash);\n std::print(hash);\n}\n\n#[test]\nfn test_prints_strings() {\n let message = \"hello world!\";\n\n std::println(message);\n std::println(\"goodbye world\");\n\n std::print(message);\n std::print(\"\\n\");\n std::print(\"goodbye world\\n\");\n}\n\n#[test]\nfn test_prints_array() {\n let array = [1, 2, 3, 5, 8];\n\n let s = Test { a: 1, b: 2, c: [3, 4] };\n std::println(s);\n\n std::println(array);\n\n let hash = std::hash::pedersen_commitment(array);\n std::println(hash);\n}\n\nfn failed_constraint(hex_as_field: Field) {\n // When this method is called from a test method or with constant values\n // a `Failed constraint` compile error will be caught before this `println`\n // is executed as the input will be a constant.\n std::println(hex_as_field);\n assert(hex_as_field != 0x41);\n}\n\n#[test]\nfn test_failed_constraint() {\n failed_constraint(0x41);\n}\n\nstruct Test {\n a: Field,\n b: Field,\n c: [Field; 2],\n}\n", "path": "" } },