From 913bc9b4afe57ec981eb2ba0bf5200cda60f81f9 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 08:47:17 +0000 Subject: [PATCH 01/51] initial slices work on frontend --- .../test_data_ssa_refactor/slices/Nargo.toml | 5 +++++ .../test_data_ssa_refactor/slices/Prover.toml | 2 ++ .../test_data_ssa_refactor/slices/src/main.nr | 11 ++++++++++ crates/noirc_evaluator/src/ssa/context.rs | 1 + crates/noirc_evaluator/src/ssa/value.rs | 1 + .../src/ssa_refactor/acir_gen/mod.rs | 5 +++++ .../src/ssa_refactor/ir/dfg.rs | 11 ++++++++++ .../src/ssa_refactor/ir/printer.rs | 4 ++++ .../src/ssa_refactor/ir/value.rs | 4 ++++ .../src/ssa_refactor/opt/inlining.rs | 5 +++++ .../src/ssa_refactor/ssa_builder/mod.rs | 8 +++++++ .../src/ssa_refactor/ssa_gen/context.rs | 1 + crates/noirc_frontend/src/ast/mod.rs | 5 ++++- .../src/hir/resolution/resolver.rs | 9 ++++++++ .../noirc_frontend/src/hir/type_check/expr.rs | 2 ++ .../noirc_frontend/src/hir/type_check/stmt.rs | 1 + crates/noirc_frontend/src/hir_def/types.rs | 20 ++++++++++++++++++ .../src/monomorphization/ast.rs | 2 ++ .../src/monomorphization/mod.rs | 21 ++++++++++++++++--- crates/noirc_frontend/src/node_interner.rs | 5 +++-- crates/noirc_frontend/src/parser/parser.rs | 16 +++++++++++++- noir_stdlib/src/lib.nr | 1 + noir_stdlib/src/slice.nr | 15 +++++++++++++ 23 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/slices/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/slices/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr create mode 100644 noir_stdlib/src/slice.nr diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Prover.toml new file mode 100644 index 00000000000..f28f2f8cc48 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/Prover.toml @@ -0,0 +1,2 @@ +x = "5" +y = "10" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr new file mode 100644 index 00000000000..2c68da37f0e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr @@ -0,0 +1,11 @@ +fn main(x : Field, y : pub Field) { + + let mut slice: [Field] = [0; 2]; + + assert(slice[0] == 0); + assert(slice[0] != 1); + + slice[1] = y; + assert(x != slice[1]); +} + diff --git a/crates/noirc_evaluator/src/ssa/context.rs b/crates/noirc_evaluator/src/ssa/context.rs index 2efdd8ff304..da9897f0bd6 100644 --- a/crates/noirc_evaluator/src/ssa/context.rs +++ b/crates/noirc_evaluator/src/ssa/context.rs @@ -1211,6 +1211,7 @@ impl SsaContext { Type::Function(..) => ObjectType::Function, Type::Tuple(_) => todo!("Conversion to ObjectType is unimplemented for tuples"), Type::String(_) => todo!("Conversion to ObjectType is unimplemented for strings"), + Type::Slice(_) => todo!("Conversion to ObjectType is unimplemented for slices"), Type::Vec(_) => todo!("Conversion to ObjectType is unimplemented for Vecs"), } } diff --git a/crates/noirc_evaluator/src/ssa/value.rs b/crates/noirc_evaluator/src/ssa/value.rs index 915effe480b..ac8768d247a 100644 --- a/crates/noirc_evaluator/src/ssa/value.rs +++ b/crates/noirc_evaluator/src/ssa/value.rs @@ -96,6 +96,7 @@ impl Value { Type::Unit | Type::Function(..) | Type::Array(..) + | Type::Slice(..) | Type::Vec(..) | Type::String(..) | Type::Integer(..) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 3341991325c..3534f0fdee1 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -343,6 +343,11 @@ impl Context { let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } + Value::Slice { initial_array, .. } => { + let elements = + initial_array.iter().map(|element| self.convert_value(*element, dfg)); + AcirValue::Array(elements.collect()) + } Value::Intrinsic(..) => todo!(), Value::Function(..) => unreachable!("ICE: All functions should have been inlined"), Value::Instruction { .. } | Value::Param { .. } => { diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 6833e433cb6..b84cfd04130 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -195,6 +195,17 @@ impl DataFlowGraph { self.make_value(Value::Array { array, element_type }) } + /// Create a new slice value from the given elements + /// This is the initial slice for which the length will change + /// during program execution + pub(crate) fn make_slice( + &mut self, + initial_array: im::Vector, + element_type: Rc, + ) -> ValueId { + self.make_value(Value::Slice { initial_array, element_type }) + } + /// Gets or creates a ValueId for the given FunctionId. pub(crate) fn import_function(&mut self, function: FunctionId) -> ValueId { if let Some(existing) = self.functions.get(&function) { diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs index a8dceb6a8b4..60835b07212 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs @@ -72,6 +72,10 @@ fn value(function: &Function, id: ValueId) -> String { let elements = vecmap(array, |element| value(function, *element)); format!("[{}]", elements.join(", ")) } + Value::Slice { element_type, .. } => { + let elements = vecmap(element_type.as_slice(), |typ| ToString::to_string(typ)); + format!("{:?}", elements) + } Value::Param { .. } | Value::Instruction { .. } => id.to_string(), } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs index 30468a0a669..e51ee223221 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs @@ -40,6 +40,9 @@ pub(crate) enum Value { /// Represents a constant array value Array { array: im::Vector, element_type: Rc }, + /// Represents an compile-time array + Slice { initial_array: im::Vector, element_type: Rc }, + /// This Value refers to a function in the IR. /// Functions always have the type Type::Function. /// If the argument or return types are needed, users should retrieve @@ -60,6 +63,7 @@ impl Value { Value::Param { typ, .. } => typ.clone(), Value::NumericConstant { typ, .. } => typ.clone(), Value::Array { element_type, array } => Type::Array(element_type.clone(), array.len()), + Value::Slice { .. } => Type::Reference, Value::Function { .. } => Type::Function, Value::Intrinsic { .. } => Type::Function, } diff --git a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs index 80e491e79f1..2630f434c13 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs @@ -211,6 +211,11 @@ impl<'function> PerFunctionContext<'function> { let elements = array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.array_constant(elements, element_type.clone()) } + Value::Slice { initial_array, element_type } => { + let elements = + initial_array.iter().map(|value| self.translate_value(*value)).collect(); + self.context.builder.slice(elements, element_type.clone()) + } }; self.values.insert(id, new_value); diff --git a/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs index 49e68dad1f2..f411157820f 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs @@ -116,6 +116,14 @@ impl FunctionBuilder { self.current_function.dfg.make_array(elements, element_types) } + pub(crate) fn slice( + &mut self, + elements: im::Vector, + element_types: Rc, + ) -> ValueId { + self.current_function.dfg.make_slice(elements, element_types) + } + /// Returns the type of the given value. pub(crate) fn type_of_value(&self, value: ValueId) -> Type { self.current_function.dfg.type_of_value(value) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs index a154af45ecd..894720cdd73 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs @@ -201,6 +201,7 @@ impl<'a> FunctionContext<'a> { ast::Type::Unit => panic!("convert_non_tuple_type called on a unit type"), ast::Type::Tuple(_) => panic!("convert_non_tuple_type called on a tuple: {typ}"), ast::Type::Function(_, _) => Type::Function, + ast::Type::Slice(_) => Type::Reference, // How should we represent Vecs? // Are they a struct of array + length + capacity? diff --git a/crates/noirc_frontend/src/ast/mod.rs b/crates/noirc_frontend/src/ast/mod.rs index 24004e34ffa..2fb3e405781 100644 --- a/crates/noirc_frontend/src/ast/mod.rs +++ b/crates/noirc_frontend/src/ast/mod.rs @@ -30,7 +30,8 @@ use iter_extended::vecmap; pub enum UnresolvedType { FieldElement(CompTime), Array(Option, Box), // [4]Witness = Array(4, Witness) - Integer(CompTime, Signedness, u32), // u32 = Integer(unsigned, 32) + Slice(Box), + Integer(CompTime, Signedness, u32), // u32 = Integer(unsigned, 32) Bool(CompTime), Expression(UnresolvedTypeExpression), String(Option), @@ -39,6 +40,7 @@ pub enum UnresolvedType { /// A Named UnresolvedType can be a struct type or a type variable Named(Path, Vec), + // Slice(Box), /// A vector of some element type. /// It is expected the length of the generics is 1 so the inner Vec is technically unnecessary, /// but we keep them all around to verify generic count after parsing for better error messages. @@ -86,6 +88,7 @@ impl std::fmt::Display for UnresolvedType { None => write!(f, "[{typ}]"), Some(len) => write!(f, "[{typ}; {len}]"), }, + Slice(typ) => write!(f, "[{typ}]"), Integer(is_const, sign, num_bits) => match sign { Signedness::Signed => write!(f, "{is_const}i{num_bits}"), Signedness::Unsigned => write!(f, "{is_const}u{num_bits}"), diff --git a/crates/noirc_frontend/src/hir/resolution/resolver.rs b/crates/noirc_frontend/src/hir/resolution/resolver.rs index 67d0e2cf2a4..c66321a0b04 100644 --- a/crates/noirc_frontend/src/hir/resolution/resolver.rs +++ b/crates/noirc_frontend/src/hir/resolution/resolver.rs @@ -330,6 +330,9 @@ impl<'a> Resolver<'a> { let elem = Box::new(self.resolve_type_inner(*elem, new_variables)); Type::Array(Box::new(resolved_size), elem) } + UnresolvedType::Slice(elem) => { + Type::Slice(Box::new(self.resolve_type_inner(*elem, new_variables))) + } UnresolvedType::Expression(expr) => self.convert_expression_type(expr), UnresolvedType::Integer(comp_time, sign, bits) => Type::Integer(comp_time, sign, bits), UnresolvedType::Bool(comp_time) => Type::Bool(comp_time), @@ -349,6 +352,7 @@ impl<'a> Resolver<'a> { let ret = Box::new(self.resolve_type_inner(*ret, new_variables)); Type::Function(args, ret) } + // UnresolvedType::Slice(typ) => self.resolve_type_inner(*typ, new_variables), UnresolvedType::Vec(mut args, span) => { let arg = if args.len() != 1 { self.push_err(ResolverError::IncorrectGenericCount { @@ -759,6 +763,10 @@ impl<'a> Resolver<'a> { } } + Type::Slice(typ) => { + Self::find_numeric_generics_in_type(typ, found); + } + Type::Tuple(fields) => { for field in fields { Self::find_numeric_generics_in_type(field, found); @@ -781,6 +789,7 @@ impl<'a> Resolver<'a> { } } } + // Type::Slice(element) => Self::find_numeric_generics_in_type(element, found), Type::Vec(element) => Self::find_numeric_generics_in_type(element, found), } } diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index d0d3166a733..a51981acffd 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -273,6 +273,7 @@ impl<'interner> TypeChecker<'interner> { // XXX: We can check the array bounds here also, but it may be better to constant fold first // and have ConstId instead of ExprId for constants Type::Array(_, base_type) => *base_type, + Type::Slice(base_type) => *base_type, Type::Error => Type::Error, typ => { let span = self.interner.expr_span(&index_expr.collection); @@ -662,6 +663,7 @@ impl<'interner> TypeChecker<'interner> { other => match self.interner.lookup_primitive_method(other, method_name) { Some(method_id) => Some(method_id), None => { + dbg!("got here"); self.errors.push(TypeCheckError::Unstructured { span: self.interner.expr_span(expr_id), msg: format!("No method named '{method_name}' found for type '{other}'",), diff --git a/crates/noirc_frontend/src/hir/type_check/stmt.rs b/crates/noirc_frontend/src/hir/type_check/stmt.rs index e6ec71bfc10..34631fb3217 100644 --- a/crates/noirc_frontend/src/hir/type_check/stmt.rs +++ b/crates/noirc_frontend/src/hir/type_check/stmt.rs @@ -171,6 +171,7 @@ impl<'interner> TypeChecker<'interner> { let typ = match result { Type::Array(_, elem_type) => *elem_type, + Type::Slice(elem_type) => *elem_type, Type::Error => Type::Error, other => { // TODO: Need a better span here diff --git a/crates/noirc_frontend/src/hir_def/types.rs b/crates/noirc_frontend/src/hir_def/types.rs index 133d8a79055..e1d0ed2bdb3 100644 --- a/crates/noirc_frontend/src/hir_def/types.rs +++ b/crates/noirc_frontend/src/hir_def/types.rs @@ -20,6 +20,9 @@ pub enum Type { /// is either a type variable of some kind or a Type::Constant. Array(Box, Box), + /// Slice(E) is a slice with elements of type E. + Slice(Box), + /// A primitive integer type with the given sign, bit count, and whether it is known at compile-time. /// E.g. `u32` would be `Integer(CompTime::No(None), Unsigned, 32)` Integer(CompTime, Signedness, u32), @@ -575,6 +578,8 @@ impl Type { elem.contains_numeric_typevar(target_id) || named_generic_id_matches_target(length) } + Type::Slice(elem) => elem.contains_numeric_typevar(target_id), + Type::Tuple(fields) => { fields.iter().any(|field| field.contains_numeric_typevar(target_id)) } @@ -591,6 +596,7 @@ impl Type { } }) } + // Type::Slice(element) => element.contains_numeric_typevar(target_id), Type::Vec(element) => element.contains_numeric_typevar(target_id), } } @@ -603,6 +609,7 @@ impl std::fmt::Display for Type { write!(f, "{comp_time}Field") } Type::Array(len, typ) => write!(f, "[{typ}; {len}]"), + Type::Slice(typ) => write!(f, "[{typ}]"), Type::Integer(comp_time, sign, num_bits) => match sign { Signedness::Signed => write!(f, "{comp_time}i{num_bits}"), Signedness::Unsigned => write!(f, "{comp_time}u{num_bits}"), @@ -1051,6 +1058,12 @@ impl Type { elem_a.is_subtype_of(elem_b, span) } + (Slice(elem_a), Slice(elem_b)) => elem_a.is_subtype_of(elem_b, span), + + (Slice(elem_a), Array(_, elem_b)) => elem_a.is_subtype_of(elem_b, span), + + (Array(_, elem_a), Slice(elem_b)) => elem_a.is_subtype_of(elem_b, span), + (Tuple(elements_a), Tuple(elements_b)) => { if elements_a.len() != elements_b.len() { Err(SpanKind::None) @@ -1186,6 +1199,7 @@ impl Type { Type::NamedGeneric(..) => unreachable!(), Type::Forall(..) => unreachable!(), Type::Function(_, _) => unreachable!(), + Type::Slice(_) => unreachable!("slices cannot be used in the abi"), Type::Vec(_) => unreachable!("Vecs cannot be used in the abi"), } } @@ -1268,6 +1282,10 @@ impl Type { let element = Box::new(element.substitute(type_bindings)); Type::Array(size, element) } + Type::Slice(element) => { + let element = Box::new(element.substitute(type_bindings)); + Type::Slice(element) + } Type::String(size) => { let size = Box::new(size.substitute(type_bindings)); Type::String(size) @@ -1330,6 +1348,7 @@ impl Type { Type::Function(args, ret) => { args.iter().any(|arg| arg.occurs(target_id)) || ret.occurs(target_id) } + Type::Slice(element) => element.occurs(target_id), Type::Vec(element) => element.occurs(target_id), Type::FieldElement(_) @@ -1353,6 +1372,7 @@ impl Type { Array(size, elem) => { Array(Box::new(size.follow_bindings()), Box::new(elem.follow_bindings())) } + Slice(elem) => Slice(Box::new(elem.follow_bindings())), String(size) => String(Box::new(size.follow_bindings())), Struct(def, args) => { let args = vecmap(args, |arg| arg.follow_bindings()); diff --git a/crates/noirc_frontend/src/monomorphization/ast.rs b/crates/noirc_frontend/src/monomorphization/ast.rs index 61541c85fc0..a1f06ed9921 100644 --- a/crates/noirc_frontend/src/monomorphization/ast.rs +++ b/crates/noirc_frontend/src/monomorphization/ast.rs @@ -207,6 +207,7 @@ pub enum Type { String(/*len:*/ u64), // String(4) = str[4] Unit, Tuple(Vec), + Slice(Box), Vec(Box), Function(/*args:*/ Vec, /*ret:*/ Box), } @@ -320,6 +321,7 @@ impl std::fmt::Display for Type { let args = vecmap(args, ToString::to_string); write!(f, "fn({}) -> {}", args.join(", "), ret) } + Type::Slice(element) => write!(f, "[{element}"), Type::Vec(element) => write!(f, "Vec<{element}>"), } } diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index 0f8fb0ea059..ee148d975fd 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -402,7 +402,10 @@ impl<'interner> Monomorphizer<'interner> { }, )), - ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Vec(_) => { + ast::Type::Array(_, _) + | ast::Type::String(_) + | ast::Type::Vec(_) + | ast::Type::Slice(_) => { unreachable!("Nested arrays, arrays of strings, and Vecs are not supported") } } @@ -445,7 +448,10 @@ impl<'interner> Monomorphizer<'interner> { })) } - ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Vec(_) => { + ast::Type::Array(_, _) + | ast::Type::String(_) + | ast::Type::Vec(_) + | ast::Type::Slice(_) => { unreachable!("Nested arrays and arrays of strings or Vecs are not supported") } } @@ -661,6 +667,11 @@ impl<'interner> Monomorphizer<'interner> { Self::aos_to_soa_type(length, element) } + HirType::Slice(element) => { + let element = Self::convert_type(element.as_ref()); + ast::Type::Slice(Box::new(element)) + } + HirType::PolymorphicInteger(_, binding) | HirType::TypeVariable(binding) | HirType::NamedGeneric(binding, _) => { @@ -722,7 +733,10 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Tuple(vecmap(elements, |typ| Self::aos_to_soa_type(length, typ))) } - ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Vec(_) => { + ast::Type::Array(_, _) + | ast::Type::String(_) + | ast::Type::Vec(_) + | ast::Type::Slice(_) => { unreachable!("Nested arrays and arrays of strings are not supported") } } @@ -980,6 +994,7 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Function(parameter_types, ret_type) => { self.create_zeroed_function(parameter_types, ret_type) } + ast::Type::Slice(_) => panic!("Cannot create a zeroed slice value. This type is currently unimplemented and meant to be unusable outside of unconstrained functions"), ast::Type::Vec(_) => panic!("Cannot create a zeroed Vec value. This type is currently unimplemented and meant to be unusable outside of unconstrained functions"), } } diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index b61886a170a..9798f2760b4 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -598,7 +598,7 @@ enum TypeMethodKey { /// Fields and integers share methods for ease of use. These methods may still /// accept only fields or integers, it is just that their names may not clash. FieldOrInt, - Array, + ArrayOrSlice, Bool, String, Unit, @@ -612,7 +612,8 @@ fn get_type_method_key(typ: &Type) -> Option { let typ = typ.follow_bindings(); match &typ { Type::FieldElement(_) => Some(FieldOrInt), - Type::Array(_, _) => Some(Array), + Type::Array(_, _) => Some(ArrayOrSlice), + Type::Slice(_) => Some(ArrayOrSlice), Type::Integer(_, _, _) => Some(FieldOrInt), Type::PolymorphicInteger(_, _) => Some(FieldOrInt), Type::Bool(_) => Some(Bool), diff --git a/crates/noirc_frontend/src/parser/parser.rs b/crates/noirc_frontend/src/parser/parser.rs index deaa045ccf0..c7132331674 100644 --- a/crates/noirc_frontend/src/parser/parser.rs +++ b/crates/noirc_frontend/src/parser/parser.rs @@ -620,6 +620,7 @@ fn parse_type_inner( string_type(), named_type(recursive_type_parser.clone()), array_type(recursive_type_parser.clone()), + // slice_type(recursive_type_parser.clone()), tuple_type(recursive_type_parser.clone()), vec_type(recursive_type_parser.clone()), function_type(recursive_type_parser), @@ -709,9 +710,22 @@ fn array_type(type_parser: impl NoirParser) -> impl NoirParser) -> impl NoirParser { +// type_parser +// .delimited_by(just(Token::LeftBracket), just(Token::RightBracket)) +// .map(|element_type| UnresolvedType::Slice(Box::new(element_type))) +// } + fn type_expression() -> impl NoirParser { recursive(|expr| expression_with_precedence(Precedence::lowest_type_precedence(), expr, true)) .labelled(ParsingRuleLabel::TypeExpression) diff --git a/noir_stdlib/src/lib.nr b/noir_stdlib/src/lib.nr index b010eb31be3..94fe4ff31bb 100644 --- a/noir_stdlib/src/lib.nr +++ b/noir_stdlib/src/lib.nr @@ -1,5 +1,6 @@ mod hash; mod array; +// mod slice; mod merkle; mod schnorr; mod ecdsa_secp256k1; diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr new file mode 100644 index 00000000000..88b3a15d962 --- /dev/null +++ b/noir_stdlib/src/slice.nr @@ -0,0 +1,15 @@ + +// These methods are all stubs currently and aren't implemented internally yet. +// For a similar reason, no constructor for Vec is exposed yet since the type +// is still in-progress. +impl [] { + #[builtin(array_len)] + fn len(_self: Self) -> comptime Field {} + + /// Push a new element to the end of the slice, returning a + /// new slice with a length one greater than the + /// original unmodified vector. + #[builtin(slice_push_back)] + fn push_back(_self: Self, _elem: T) -> Self { } +} + From 5ec2c67f3a288d72dc50777ffd7e8a557a3b0d2c Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 08:48:50 +0000 Subject: [PATCH 02/51] cargo clippy --- crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs index 60835b07212..5e69b23663a 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs @@ -73,7 +73,7 @@ fn value(function: &Function, id: ValueId) -> String { format!("[{}]", elements.join(", ")) } Value::Slice { element_type, .. } => { - let elements = vecmap(element_type.as_slice(), |typ| ToString::to_string(typ)); + let elements = vecmap(element_type.as_slice(), ToString::to_string); format!("{:?}", elements) } Value::Param { .. } | Value::Instruction { .. } => id.to_string(), From 8a6f1884be9290e710a4f98029b2926c50b4fc68 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 08:51:25 +0000 Subject: [PATCH 03/51] develop comment cleanup --- crates/noirc_frontend/src/ast/mod.rs | 1 - crates/noirc_frontend/src/hir/resolution/resolver.rs | 2 -- crates/noirc_frontend/src/hir/type_check/expr.rs | 1 - crates/noirc_frontend/src/hir_def/types.rs | 1 - crates/noirc_frontend/src/parser/parser.rs | 8 -------- 5 files changed, 13 deletions(-) diff --git a/crates/noirc_frontend/src/ast/mod.rs b/crates/noirc_frontend/src/ast/mod.rs index 2fb3e405781..32ab2f8c304 100644 --- a/crates/noirc_frontend/src/ast/mod.rs +++ b/crates/noirc_frontend/src/ast/mod.rs @@ -40,7 +40,6 @@ pub enum UnresolvedType { /// A Named UnresolvedType can be a struct type or a type variable Named(Path, Vec), - // Slice(Box), /// A vector of some element type. /// It is expected the length of the generics is 1 so the inner Vec is technically unnecessary, /// but we keep them all around to verify generic count after parsing for better error messages. diff --git a/crates/noirc_frontend/src/hir/resolution/resolver.rs b/crates/noirc_frontend/src/hir/resolution/resolver.rs index c66321a0b04..40b88d9eeea 100644 --- a/crates/noirc_frontend/src/hir/resolution/resolver.rs +++ b/crates/noirc_frontend/src/hir/resolution/resolver.rs @@ -352,7 +352,6 @@ impl<'a> Resolver<'a> { let ret = Box::new(self.resolve_type_inner(*ret, new_variables)); Type::Function(args, ret) } - // UnresolvedType::Slice(typ) => self.resolve_type_inner(*typ, new_variables), UnresolvedType::Vec(mut args, span) => { let arg = if args.len() != 1 { self.push_err(ResolverError::IncorrectGenericCount { @@ -789,7 +788,6 @@ impl<'a> Resolver<'a> { } } } - // Type::Slice(element) => Self::find_numeric_generics_in_type(element, found), Type::Vec(element) => Self::find_numeric_generics_in_type(element, found), } } diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index a51981acffd..546c2c945a7 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -663,7 +663,6 @@ impl<'interner> TypeChecker<'interner> { other => match self.interner.lookup_primitive_method(other, method_name) { Some(method_id) => Some(method_id), None => { - dbg!("got here"); self.errors.push(TypeCheckError::Unstructured { span: self.interner.expr_span(expr_id), msg: format!("No method named '{method_name}' found for type '{other}'",), diff --git a/crates/noirc_frontend/src/hir_def/types.rs b/crates/noirc_frontend/src/hir_def/types.rs index e1d0ed2bdb3..0ace065dc7b 100644 --- a/crates/noirc_frontend/src/hir_def/types.rs +++ b/crates/noirc_frontend/src/hir_def/types.rs @@ -596,7 +596,6 @@ impl Type { } }) } - // Type::Slice(element) => element.contains_numeric_typevar(target_id), Type::Vec(element) => element.contains_numeric_typevar(target_id), } } diff --git a/crates/noirc_frontend/src/parser/parser.rs b/crates/noirc_frontend/src/parser/parser.rs index c7132331674..4b7a65f832d 100644 --- a/crates/noirc_frontend/src/parser/parser.rs +++ b/crates/noirc_frontend/src/parser/parser.rs @@ -620,7 +620,6 @@ fn parse_type_inner( string_type(), named_type(recursive_type_parser.clone()), array_type(recursive_type_parser.clone()), - // slice_type(recursive_type_parser.clone()), tuple_type(recursive_type_parser.clone()), vec_type(recursive_type_parser.clone()), function_type(recursive_type_parser), @@ -716,16 +715,9 @@ fn array_type(type_parser: impl NoirParser) -> impl NoirParser) -> impl NoirParser { -// type_parser -// .delimited_by(just(Token::LeftBracket), just(Token::RightBracket)) -// .map(|element_type| UnresolvedType::Slice(Box::new(element_type))) -// } - fn type_expression() -> impl NoirParser { recursive(|expr| expression_with_precedence(Precedence::lowest_type_precedence(), expr, true)) .labelled(ParsingRuleLabel::TypeExpression) From cf309a04d8316f69f04d91bd3b6592cd039dd1f1 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 11:47:05 +0000 Subject: [PATCH 04/51] working push_back and len slices commands --- .../test_data_ssa_refactor/slices/src/main.nr | 15 +++++- .../src/ssa_refactor/acir_gen/mod.rs | 12 ++++- .../src/ssa_refactor/ir/dfg.rs | 19 ++++++-- .../src/ssa_refactor/ir/instruction.rs | 47 +++++++++++++++++-- .../src/ssa_refactor/ir/value.rs | 4 +- .../src/ssa_refactor/opt/inlining.rs | 2 +- .../src/monomorphization/mod.rs | 22 ++++++--- crates/noirc_frontend/src/parser/errors.rs | 2 - crates/noirc_frontend/src/parser/parser.rs | 7 +-- noir_stdlib/src/lib.nr | 2 +- noir_stdlib/src/slice.nr | 5 +- 11 files changed, 103 insertions(+), 34 deletions(-) diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr index 2c68da37f0e..7f2a82e5e03 100644 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr @@ -1,3 +1,5 @@ +use dep::std::slice; + fn main(x : Field, y : pub Field) { let mut slice: [Field] = [0; 2]; @@ -5,7 +7,16 @@ fn main(x : Field, y : pub Field) { assert(slice[0] == 0); assert(slice[0] != 1); - slice[1] = y; - assert(x != slice[1]); + let slice_plus_10 = slice.push_back(10); + assert(slice_plus_10[2] == 10); + assert(slice_plus_10[2] != 8); + assert(slice_plus_10.len() == 3); + + // TODO + // let mut new_slice: [Field] = []; + // for i in 0..5 { + // new_slice = new_slice.push_back(0); + // } + // assert(new_slice.len() == 5); } diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 3534f0fdee1..87efebcc693 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -343,7 +343,7 @@ impl Context { let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } - Value::Slice { initial_array, .. } => { + Value::Slice { array: initial_array, .. } => { let elements = initial_array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) @@ -586,6 +586,16 @@ impl Context { } Vec::new() } + // Intrinsic::SlicePushBack => { + // let mut slice = self.convert_array_value(arguments[0], dfg); + // let elem = self.convert_value(arguments[1], dfg); + + // dbg!(slice.clone()); + // dbg!(elem.clone()); + // dbg!(self.convert_value(result_ids[0], dfg)); + // slice.push_back(elem); + // vec![AcirValue::Array(slice)] + // } _ => todo!("expected a black box function"), } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index b84cfd04130..387c6008145 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -200,10 +200,10 @@ impl DataFlowGraph { /// during program execution pub(crate) fn make_slice( &mut self, - initial_array: im::Vector, + array: im::Vector, element_type: Rc, ) -> ValueId { - self.make_value(Value::Slice { initial_array, element_type }) + self.make_value(Value::Slice { array, element_type }) } /// Gets or creates a ValueId for the given FunctionId. @@ -216,10 +216,16 @@ impl DataFlowGraph { /// Gets or creates a ValueId for the given Intrinsic. pub(crate) fn import_intrinsic(&mut self, intrinsic: Intrinsic) -> ValueId { - if let Some(existing) = self.intrinsics.get(&intrinsic) { + if let Some(existing) = self.get_intrinsic(intrinsic) { return *existing; } - self.values.insert(Value::Intrinsic(intrinsic)) + let intrinsic_value_id = self.values.insert(Value::Intrinsic(intrinsic)); + self.intrinsics.insert(intrinsic, intrinsic_value_id); + intrinsic_value_id + } + + pub(crate) fn get_intrinsic(&mut self, intrinsic: Intrinsic) -> Option<&ValueId> { + self.intrinsics.get(&intrinsic) } /// Attaches results to the instruction, clearing any previous results. @@ -333,7 +339,10 @@ impl DataFlowGraph { ) -> Option<(im::Vector, Rc)> { match &self.values[self.resolve(value)] { // Vectors are shared, so cloning them is cheap - Value::Array { array, element_type } => Some((array.clone(), element_type.clone())), + Value::Array { array, element_type } | Value::Slice { array, element_type } => { + Some((array.clone(), element_type.clone())) + } + // Value::Array { array, element_type } => Some((array.clone(), element_type.clone())), _ => None, } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index ac0b4b63a30..91066b6a29e 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -1,6 +1,8 @@ use acvm::{acir::BlackBoxFunc, FieldElement}; use iter_extended::vecmap; +use crate::ssa_refactor::ir::types::NumericType; + use super::{ basic_block::BasicBlockId, dfg::DataFlowGraph, @@ -27,6 +29,8 @@ pub(crate) type InstructionId = Id; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) enum Intrinsic { Sort, + ArrayLen, + SlicePushBack, Println, ToBits(Endian), ToRadix(Endian), @@ -38,6 +42,8 @@ impl std::fmt::Display for Intrinsic { match self { Intrinsic::Println => write!(f, "println"), Intrinsic::Sort => write!(f, "arraysort"), + Intrinsic::ArrayLen => write!(f, "array_len"), + Intrinsic::SlicePushBack => write!(f, "slice_push_back"), Intrinsic::ToBits(Endian::Big) => write!(f, "to_be_bits"), Intrinsic::ToBits(Endian::Little) => write!(f, "to_le_bits"), Intrinsic::ToRadix(Endian::Big) => write!(f, "to_be_radix"), @@ -54,6 +60,8 @@ impl Intrinsic { match name { "println" => Some(Intrinsic::Println), "arraysort" => Some(Intrinsic::Sort), + "array_len" => Some(Intrinsic::ArrayLen), + "slice_push_back" => Some(Intrinsic::SlicePushBack), "to_le_radix" => Some(Intrinsic::ToRadix(Endian::Little)), "to_be_radix" => Some(Intrinsic::ToRadix(Endian::Big)), "to_le_bits" => Some(Intrinsic::ToBits(Endian::Little)), @@ -276,7 +284,6 @@ impl Instruction { Instruction::ArrayGet { array, index } => { let array = dfg.get_array_constant(*array); let index = dfg.get_numeric_constant(*index); - if let (Some((array, _)), Some(index)) = (array, index) { let index = index.try_to_u64().expect("Expected array index to fit in u64") as usize; @@ -289,7 +296,6 @@ impl Instruction { Instruction::ArraySet { array, index, value } => { let array = dfg.get_array_constant(*array); let index = dfg.get_numeric_constant(*index); - if let (Some((array, element_type)), Some(index)) = (array, index) { let index = index.try_to_u64().expect("Expected array index to fit in u64") as usize; @@ -308,7 +314,41 @@ impl Instruction { None } } - Instruction::Call { .. } => None, + Instruction::Call { func, arguments } => { + let mut simplify_result = None; + Intrinsic::lookup("slice_push_back").map(|intrinsic| { + if let Some(intrinsic) = dfg.get_intrinsic(intrinsic) { + dbg!(intrinsic); + dbg!(func); + if func == intrinsic { + let slice = dfg.get_array_constant(arguments[0]); + if let (Some((mut slice, element_type)), elem) = (slice, arguments[1]) { + slice.push_back(elem); + let new_slice = dfg.make_slice(slice, element_type); + simplify_result = SimplifiedTo(new_slice); + } + } + } + }); + Intrinsic::lookup("array_len").map(|intrinsic| { + if let Some(intrinsic) = dfg.get_intrinsic(intrinsic) { + dbg!(intrinsic); + dbg!(func); + if func == intrinsic { + let slice = dfg.get_array_constant(arguments[0]); + if let Some((slice, _)) = slice { + dbg!(slice.len()); + let slice_len = dfg.make_constant( + FieldElement::from(slice.len() as u128), + Type::Numeric(NumericType::NativeField), + ); + simplify_result = SimplifiedTo(slice_len); + } + } + } + }); + simplify_result + } Instruction::Allocate { .. } => None, Instruction::Load { .. } => None, Instruction::Store { .. } => None, @@ -675,6 +715,7 @@ impl std::fmt::Display for BinaryOp { /// Contains the result to Instruction::simplify, specifying how the instruction /// should be simplified. +#[derive(Debug, Clone)] pub(crate) enum SimplifyResult { /// Replace this function's result with the given value SimplifiedTo(ValueId), diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs index e51ee223221..18f22c35a4e 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs @@ -40,8 +40,8 @@ pub(crate) enum Value { /// Represents a constant array value Array { array: im::Vector, element_type: Rc }, - /// Represents an compile-time array - Slice { initial_array: im::Vector, element_type: Rc }, + /// Represents a compile-time array + Slice { array: im::Vector, element_type: Rc }, /// This Value refers to a function in the IR. /// Functions always have the type Type::Function. diff --git a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs index 2630f434c13..069a7322b20 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs @@ -211,7 +211,7 @@ impl<'function> PerFunctionContext<'function> { let elements = array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.array_constant(elements, element_type.clone()) } - Value::Slice { initial_array, element_type } => { + Value::Slice { array: initial_array, element_type } => { let elements = initial_array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.slice(elements, element_type.clone()) diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index ee148d975fd..c4276df7baf 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -12,7 +12,10 @@ use acvm::FieldElement; use iter_extended::{btree_map, vecmap}; use noirc_abi::FunctionSignature; use noirc_errors::Location; -use std::collections::{BTreeMap, HashMap, VecDeque}; +use std::{ + collections::{BTreeMap, HashMap, VecDeque}, + result, +}; use crate::{ hir_def::{ @@ -22,7 +25,7 @@ use crate::{ }, node_interner::{self, DefinitionKind, NodeInterner, StmtId}, token::Attribute, - CompTime, FunctionKind, TypeBinding, TypeBindings, + CompTime, FunctionKind, Type, TypeBinding, TypeBindings, }; use self::ast::{Definition, FuncId, Function, LocalId, Program}; @@ -773,11 +776,16 @@ impl<'interner> Monomorphizer<'interner> { if let Definition::Builtin(opcode) = &ident.definition { if opcode == "array_len" { let typ = self.interner.id_type(arguments[0]); - let len = typ.evaluate_to_u64().unwrap(); - return Some(ast::Expression::Literal(ast::Literal::Integer( - (len as u128).into(), - ast::Type::Field, - ))); + match typ { + Type::Array(_, _) => { + let len = typ.evaluate_to_u64().unwrap(); + return Some(ast::Expression::Literal(ast::Literal::Integer( + (len as u128).into(), + ast::Type::Field, + ))); + } + _ => (), + } } else if opcode == "modulus_num_bits" { return Some(ast::Expression::Literal(ast::Literal::Integer( (FieldElement::max_num_bits() as u128).into(), diff --git a/crates/noirc_frontend/src/parser/errors.rs b/crates/noirc_frontend/src/parser/errors.rs index e788893c58d..50b84235d58 100644 --- a/crates/noirc_frontend/src/parser/errors.rs +++ b/crates/noirc_frontend/src/parser/errors.rs @@ -11,8 +11,6 @@ use super::labels::ParsingRuleLabel; #[derive(Debug, Clone, PartialEq, Eq, Error)] pub enum ParserErrorReason { - #[error("Arrays must have at least one element")] - ZeroSizedArray, #[error("Unexpected '{0}', expected a field name")] ExpectedFieldName(Token), #[error("Expected a ; separating these two statements")] diff --git a/crates/noirc_frontend/src/parser/parser.rs b/crates/noirc_frontend/src/parser/parser.rs index 4b7a65f832d..e0ee5d81fec 100644 --- a/crates/noirc_frontend/src/parser/parser.rs +++ b/crates/noirc_frontend/src/parser/parser.rs @@ -966,12 +966,7 @@ where { expression_list(expr_parser) .delimited_by(just(Token::LeftBracket), just(Token::RightBracket)) - .validate(|elements, span, emit| { - if elements.is_empty() { - emit(ParserError::with_reason(ParserErrorReason::ZeroSizedArray, span)); - } - ExpressionKind::array(elements) - }) + .validate(|elements, _span, _emit| ExpressionKind::array(elements)) } /// [a; N] diff --git a/noir_stdlib/src/lib.nr b/noir_stdlib/src/lib.nr index 94fe4ff31bb..e263a46fd2a 100644 --- a/noir_stdlib/src/lib.nr +++ b/noir_stdlib/src/lib.nr @@ -1,6 +1,6 @@ mod hash; mod array; -// mod slice; +mod slice; mod merkle; mod schnorr; mod ecdsa_secp256k1; diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index 88b3a15d962..baf04b65236 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -2,10 +2,7 @@ // These methods are all stubs currently and aren't implemented internally yet. // For a similar reason, no constructor for Vec is exposed yet since the type // is still in-progress. -impl [] { - #[builtin(array_len)] - fn len(_self: Self) -> comptime Field {} - +impl [T] { /// Push a new element to the end of the slice, returning a /// new slice with a length one greater than the /// original unmodified vector. From b442f88c0ddda256d8415e09d13dde69ea1ba936 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 12:08:02 +0000 Subject: [PATCH 05/51] cargo clippy --- .../src/ssa_refactor/ir/instruction.rs | 12 +++-------- .../src/monomorphization/mod.rs | 20 +++++++------------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 91066b6a29e..bbacf393cc1 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -316,10 +316,8 @@ impl Instruction { } Instruction::Call { func, arguments } => { let mut simplify_result = None; - Intrinsic::lookup("slice_push_back").map(|intrinsic| { + if let Some(intrinsic) = Intrinsic::lookup("slice_push_back") { if let Some(intrinsic) = dfg.get_intrinsic(intrinsic) { - dbg!(intrinsic); - dbg!(func); if func == intrinsic { let slice = dfg.get_array_constant(arguments[0]); if let (Some((mut slice, element_type)), elem) = (slice, arguments[1]) { @@ -329,15 +327,11 @@ impl Instruction { } } } - }); - Intrinsic::lookup("array_len").map(|intrinsic| { + } else if let Some(intrinsic) = Intrinsic::lookup("array_len") { if let Some(intrinsic) = dfg.get_intrinsic(intrinsic) { - dbg!(intrinsic); - dbg!(func); if func == intrinsic { let slice = dfg.get_array_constant(arguments[0]); if let Some((slice, _)) = slice { - dbg!(slice.len()); let slice_len = dfg.make_constant( FieldElement::from(slice.len() as u128), Type::Numeric(NumericType::NativeField), @@ -346,7 +340,7 @@ impl Instruction { } } } - }); + }; simplify_result } Instruction::Allocate { .. } => None, diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index c4276df7baf..0911ecb56a9 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -12,10 +12,7 @@ use acvm::FieldElement; use iter_extended::{btree_map, vecmap}; use noirc_abi::FunctionSignature; use noirc_errors::Location; -use std::{ - collections::{BTreeMap, HashMap, VecDeque}, - result, -}; +use std::collections::{BTreeMap, HashMap, VecDeque}; use crate::{ hir_def::{ @@ -776,15 +773,12 @@ impl<'interner> Monomorphizer<'interner> { if let Definition::Builtin(opcode) = &ident.definition { if opcode == "array_len" { let typ = self.interner.id_type(arguments[0]); - match typ { - Type::Array(_, _) => { - let len = typ.evaluate_to_u64().unwrap(); - return Some(ast::Expression::Literal(ast::Literal::Integer( - (len as u128).into(), - ast::Type::Field, - ))); - } - _ => (), + if let Type::Array(_, _) = typ { + let len = typ.evaluate_to_u64().unwrap(); + return Some(ast::Expression::Literal(ast::Literal::Integer( + (len as u128).into(), + ast::Type::Field, + ))); } } else if opcode == "modulus_num_bits" { return Some(ast::Expression::Literal(ast::Literal::Integer( From 59346449e26aeac5d53f083260a3de0ffe0e65a7 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 12:08:30 +0000 Subject: [PATCH 06/51] cleanup --- crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index bbacf393cc1..e97dd1999cc 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -1,13 +1,11 @@ use acvm::{acir::BlackBoxFunc, FieldElement}; use iter_extended::vecmap; -use crate::ssa_refactor::ir::types::NumericType; - use super::{ basic_block::BasicBlockId, dfg::DataFlowGraph, map::Id, - types::Type, + types::{NumericType, Type}, value::{Value, ValueId}, }; From f9d7921fe449c872d4f6f4f2945e5d131f94985e Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 12:47:26 +0000 Subject: [PATCH 07/51] fix clippy --- .../nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr | 2 +- crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr index 7f2a82e5e03..dc3db0a43a3 100644 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr @@ -15,7 +15,7 @@ fn main(x : Field, y : pub Field) { // TODO // let mut new_slice: [Field] = []; // for i in 0..5 { - // new_slice = new_slice.push_back(0); + // new_slice = new_slice.push_back(0); // } // assert(new_slice.len() == 5); } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index e97dd1999cc..0614149d687 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -5,7 +5,7 @@ use super::{ basic_block::BasicBlockId, dfg::DataFlowGraph, map::Id, - types::{NumericType, Type}, + types::{Type, NumericType}, value::{Value, ValueId}, }; From c253625850ffde59ba94e21a4f619e3ed3b6e467 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 12:58:26 +0000 Subject: [PATCH 08/51] empty slice being processed --- .../tests/test_data_ssa_refactor/slices/src/main.nr | 11 +++++------ .../noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 1 + .../src/ssa_refactor/ir/instruction.rs | 5 +++-- crates/noirc_frontend/src/monomorphization/mod.rs | 11 ++++++++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr index dc3db0a43a3..7b908797e9a 100644 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr @@ -12,11 +12,10 @@ fn main(x : Field, y : pub Field) { assert(slice_plus_10[2] != 8); assert(slice_plus_10.len() == 3); - // TODO - // let mut new_slice: [Field] = []; - // for i in 0..5 { - // new_slice = new_slice.push_back(0); - // } - // assert(new_slice.len() == 5); + let mut new_slice: [Field] = []; + for i in 0..5 { + new_slice = new_slice.push_back(0); + } + assert(new_slice.len() == 5); } diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 87efebcc693..0fd0b65186b 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -547,6 +547,7 @@ impl Context { allow_log_ops: bool, result_ids: &[ValueId], ) -> Vec { + dbg!(intrinsic.clone()); match intrinsic { Intrinsic::BlackBox(black_box) => { let inputs = vecmap(arguments, |arg| self.convert_value(*arg, dfg)); diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 0614149d687..063b6307966 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -5,7 +5,7 @@ use super::{ basic_block::BasicBlockId, dfg::DataFlowGraph, map::Id, - types::{Type, NumericType}, + types::{NumericType, Type}, value::{Value, ValueId}, }; @@ -325,7 +325,8 @@ impl Instruction { } } } - } else if let Some(intrinsic) = Intrinsic::lookup("array_len") { + } + if let Some(intrinsic) = Intrinsic::lookup("array_len") { if let Some(intrinsic) = dfg.get_intrinsic(intrinsic) { if func == intrinsic { let slice = dfg.get_array_constant(arguments[0]); diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index 0911ecb56a9..db15e5b45d8 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -269,7 +269,16 @@ impl<'interner> Monomorphizer<'interner> { Literal(Integer(value, typ)) } HirExpression::Literal(HirLiteral::Array(array)) => match array { - HirArrayLiteral::Standard(array) => self.standard_array(array), + HirArrayLiteral::Standard(array) => { + // Empty slice literal `[]` + if array.len() == 0 { + return ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { + contents: vec![], + element_type: ast::Type::Unit, + })); + } + self.standard_array(array) + } HirArrayLiteral::Repeated { repeated_element, length } => { self.repeated_array(repeated_element, length) } From 990121e3d74ae3aa221ccb2d5d350454772171f5 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 13:02:09 +0000 Subject: [PATCH 09/51] cargo clippy --- crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 1 - crates/noirc_frontend/src/monomorphization/mod.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 0fd0b65186b..87efebcc693 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -547,7 +547,6 @@ impl Context { allow_log_ops: bool, result_ids: &[ValueId], ) -> Vec { - dbg!(intrinsic.clone()); match intrinsic { Intrinsic::BlackBox(black_box) => { let inputs = vecmap(arguments, |arg| self.convert_value(*arg, dfg)); diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index db15e5b45d8..4236f61f3b6 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -271,7 +271,7 @@ impl<'interner> Monomorphizer<'interner> { HirExpression::Literal(HirLiteral::Array(array)) => match array { HirArrayLiteral::Standard(array) => { // Empty slice literal `[]` - if array.len() == 0 { + if array.is_empty() { return ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { contents: vec![], element_type: ast::Type::Unit, From 6717d9d77e43020f128316a266e8a78a21913503 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 13:18:40 +0000 Subject: [PATCH 10/51] delete old comment --- .../noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index c811c6d4f03..9b5e29d62e7 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -586,16 +586,6 @@ impl Context { } Vec::new() } - // Intrinsic::SlicePushBack => { - // let mut slice = self.convert_array_value(arguments[0], dfg); - // let elem = self.convert_value(arguments[1], dfg); - - // dbg!(slice.clone()); - // dbg!(elem.clone()); - // dbg!(self.convert_value(result_ids[0], dfg)); - // slice.push_back(elem); - // vec![AcirValue::Array(slice)] - // } _ => todo!("expected a black box function"), } } From 8f17fdabaff4c78817dc689c80513108228d7989 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 13:26:05 +0000 Subject: [PATCH 11/51] remove unused import --- crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 7d46a8e65e9..2c8b0a10edc 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -8,7 +8,7 @@ use super::{ basic_block::BasicBlockId, dfg::DataFlowGraph, map::Id, - types::{NumericType, Type}, + types::Type, value::{Value, ValueId}, }; From 3366bb9e3e2ecd0ce8d8fec5b1ad6d089c0eb1a9 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 14:57:56 +0000 Subject: [PATCH 12/51] add enable_slices flag to avoid slices in old SSA --- crates/nargo_cli/src/cli/check_cmd.rs | 9 +++- crates/nargo_cli/src/cli/mod.rs | 2 +- crates/nargo_cli/src/cli/test_cmd.rs | 6 ++- crates/noirc_driver/src/lib.rs | 12 +++-- crates/noirc_frontend/src/ast/mod.rs | 4 +- .../src/hir/def_collector/dc_crate.rs | 50 ++++++++++++++----- crates/noirc_frontend/src/hir/def_map/mod.rs | 3 +- .../src/hir/resolution/resolver.rs | 16 ++++-- .../noirc_frontend/src/hir/type_check/mod.rs | 2 +- crates/noirc_frontend/src/main.rs | 2 +- crates/noirc_frontend/src/parser/parser.rs | 8 +-- crates/wasm/src/compile.rs | 2 +- 12 files changed, 77 insertions(+), 39 deletions(-) diff --git a/crates/nargo_cli/src/cli/check_cmd.rs b/crates/nargo_cli/src/cli/check_cmd.rs index b464945d375..d7bb4be5b4f 100644 --- a/crates/nargo_cli/src/cli/check_cmd.rs +++ b/crates/nargo_cli/src/cli/check_cmd.rs @@ -34,7 +34,11 @@ fn check_from_path>( compile_options: &CompileOptions, ) -> Result<(), CliError> { let mut driver = setup_driver(backend, program_dir.as_ref())?; - check_crate_and_report_errors(&mut driver, compile_options.deny_warnings)?; + check_crate_and_report_errors( + &mut driver, + compile_options.deny_warnings, + compile_options.experimental_ssa, + )?; // XXX: We can have a --overwrite flag to determine if you want to overwrite the Prover/Verifier.toml files if let Some((parameters, return_type)) = driver.compute_function_signature() { @@ -211,7 +215,8 @@ d2 = ["", "", ""] pub(crate) fn check_crate_and_report_errors( driver: &mut noirc_driver::Driver, deny_warnings: bool, + enable_slices: bool, ) -> Result<(), ReportedErrors> { - let result = driver.check_crate(deny_warnings).map(|warnings| ((), warnings)); + let result = driver.check_crate(deny_warnings, enable_slices).map(|warnings| ((), warnings)); super::compile_cmd::report_errors(result, driver, deny_warnings) } diff --git a/crates/nargo_cli/src/cli/mod.rs b/crates/nargo_cli/src/cli/mod.rs index 77fea7e258d..feace864926 100644 --- a/crates/nargo_cli/src/cli/mod.rs +++ b/crates/nargo_cli/src/cli/mod.rs @@ -186,7 +186,7 @@ mod tests { driver.create_local_crate(&root_file, CrateType::Binary); crate::resolver::add_std_lib(&mut driver); - let result = driver.check_crate(false); + let result = driver.check_crate(false, false); let success = result.is_ok(); let errors = match result { diff --git a/crates/nargo_cli/src/cli/test_cmd.rs b/crates/nargo_cli/src/cli/test_cmd.rs index 4f4364144c2..d7e8a626386 100644 --- a/crates/nargo_cli/src/cli/test_cmd.rs +++ b/crates/nargo_cli/src/cli/test_cmd.rs @@ -41,7 +41,11 @@ fn run_tests( compile_options: &CompileOptions, ) -> Result<(), CliError> { let mut driver = setup_driver(backend, program_dir)?; - check_crate_and_report_errors(&mut driver, compile_options.deny_warnings)?; + check_crate_and_report_errors( + &mut driver, + compile_options.deny_warnings, + compile_options.experimental_ssa, + )?; let test_functions = driver.get_all_test_functions_in_crate_matching(test_name); println!("Running {} test functions...", test_functions.len()); diff --git a/crates/noirc_driver/src/lib.rs b/crates/noirc_driver/src/lib.rs index 2df60fa75b5..35ba7fcfe14 100644 --- a/crates/noirc_driver/src/lib.rs +++ b/crates/noirc_driver/src/lib.rs @@ -169,9 +169,13 @@ impl Driver { /// /// This returns a (possibly empty) vector of any warnings found on success. /// On error, this returns a non-empty vector of warnings and error messages, with at least one error. - pub fn check_crate(&mut self, deny_warnings: bool) -> Result { + pub fn check_crate( + &mut self, + deny_warnings: bool, + enable_slices: bool, + ) -> Result { let mut errors = vec![]; - CrateDefMap::collect_defs(LOCAL_CRATE, &mut self.context, &mut errors); + CrateDefMap::collect_defs(LOCAL_CRATE, &mut self.context, &mut errors, enable_slices); if Self::has_errors(&errors, deny_warnings) { Err(errors) @@ -198,7 +202,7 @@ impl Driver { &mut self, options: &CompileOptions, ) -> Result<(CompiledProgram, Warnings), ErrorsAndWarnings> { - let warnings = self.check_crate(options.deny_warnings)?; + let warnings = self.check_crate(options.deny_warnings, options.experimental_ssa)?; let main = match self.main_function() { Some(m) => m, @@ -226,7 +230,7 @@ impl Driver { &mut self, options: &CompileOptions, ) -> Result<(Vec, Warnings), ErrorsAndWarnings> { - let warnings = self.check_crate(options.deny_warnings)?; + let warnings = self.check_crate(options.deny_warnings, options.experimental_ssa)?; let contracts = self.get_all_contracts(); let mut compiled_contracts = vec![]; diff --git a/crates/noirc_frontend/src/ast/mod.rs b/crates/noirc_frontend/src/ast/mod.rs index 32ab2f8c304..24004e34ffa 100644 --- a/crates/noirc_frontend/src/ast/mod.rs +++ b/crates/noirc_frontend/src/ast/mod.rs @@ -30,8 +30,7 @@ use iter_extended::vecmap; pub enum UnresolvedType { FieldElement(CompTime), Array(Option, Box), // [4]Witness = Array(4, Witness) - Slice(Box), - Integer(CompTime, Signedness, u32), // u32 = Integer(unsigned, 32) + Integer(CompTime, Signedness, u32), // u32 = Integer(unsigned, 32) Bool(CompTime), Expression(UnresolvedTypeExpression), String(Option), @@ -87,7 +86,6 @@ impl std::fmt::Display for UnresolvedType { None => write!(f, "[{typ}]"), Some(len) => write!(f, "[{typ}; {len}]"), }, - Slice(typ) => write!(f, "[{typ}]"), Integer(is_const, sign, num_bits) => match sign { Signedness::Signed => write!(f, "{is_const}i{num_bits}"), Signedness::Unsigned => write!(f, "{is_const}u{num_bits}"), diff --git a/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs b/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs index ef2fb84db57..c2ede5f66f8 100644 --- a/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs +++ b/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs @@ -85,6 +85,7 @@ impl DefCollector { ast: ParsedModule, root_file_id: FileId, errors: &mut Vec, + enable_slices: bool, ) { let crate_id = def_map.krate; @@ -96,7 +97,7 @@ impl DefCollector { let crate_graph = &context.crate_graph[crate_id]; for dep in crate_graph.dependencies.clone() { - CrateDefMap::collect_defs(dep.crate_id, context, errors); + CrateDefMap::collect_defs(dep.crate_id, context, errors, enable_slices); let dep_def_root = context.def_map(dep.crate_id).expect("ice: def map was just created").root; @@ -155,14 +156,16 @@ impl DefCollector { let (integer_globals, other_globals) = filter_integer_globals(def_collector.collected_globals); - let mut file_global_ids = resolve_globals(context, integer_globals, crate_id, errors); + let mut file_global_ids = + resolve_globals(context, integer_globals, crate_id, errors, enable_slices); // Must resolve structs before we resolve globals. - resolve_structs(context, def_collector.collected_types, crate_id, errors); + resolve_structs(context, def_collector.collected_types, crate_id, errors, enable_slices); // We must wait to resolve non-integer globals until after we resolve structs since structs // globals will need to reference the struct type they're initialized to to ensure they are valid. - let mut more_global_ids = resolve_globals(context, other_globals, crate_id, errors); + let mut more_global_ids = + resolve_globals(context, other_globals, crate_id, errors, enable_slices); file_global_ids.append(&mut more_global_ids); @@ -170,7 +173,7 @@ impl DefCollector { // re-collect the methods within into their proper module. This cannot be // done before resolution since we need to be able to resolve the type of the // impl since that determines the module we should collect into. - collect_impls(context, crate_id, &def_collector.collected_impls, errors); + collect_impls(context, crate_id, &def_collector.collected_impls, errors, enable_slices); // Lower each function in the crate. This is now possible since imports have been resolved let file_func_ids = resolve_free_functions( @@ -180,6 +183,7 @@ impl DefCollector { def_collector.collected_functions, None, errors, + enable_slices, ); let file_method_ids = resolve_impls( @@ -188,6 +192,7 @@ impl DefCollector { &context.def_maps, def_collector.collected_impls, errors, + enable_slices, ); type_check_globals(&mut context.def_interner, file_global_ids, errors); @@ -205,6 +210,7 @@ fn collect_impls( crate_id: CrateId, collected_impls: &ImplMap, errors: &mut Vec, + enable_slices: bool, ) { let interner = &mut context.def_interner; let def_maps = &mut context.def_maps; @@ -216,7 +222,8 @@ fn collect_impls( let file = def_maps[&crate_id].module_file_id(*module_id); for (generics, span, unresolved) in methods { - let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file); + let mut resolver = + Resolver::new(interner, &path_resolver, def_maps, file, enable_slices); resolver.add_generics(generics); let typ = resolver.resolve_type(unresolved_type.clone()); @@ -279,6 +286,7 @@ fn resolve_globals( globals: Vec, crate_id: CrateId, errors: &mut Vec, + enable_slices: bool, ) -> Vec<(FileId, StmtId)> { vecmap(globals, |global| { let module_id = ModuleId { local_id: global.module_id, krate: crate_id }; @@ -290,6 +298,7 @@ fn resolve_globals( &path_resolver, &context.def_maps, global.file_id, + enable_slices, ); let name = global.stmt_def.pattern.name_ident().clone(); @@ -323,6 +332,7 @@ fn resolve_structs( structs: HashMap, crate_id: CrateId, errors: &mut Vec, + enable_slices: bool, ) { // We must first go through the struct list once to ensure all IDs are pushed to // the def_interner map. This lets structs refer to each other regardless of declaration order @@ -333,7 +343,8 @@ fn resolve_structs( } for (type_id, typ) in structs { - let (generics, fields) = resolve_struct_fields(context, crate_id, typ, errors); + let (generics, fields) = + resolve_struct_fields(context, crate_id, typ, errors, enable_slices); context.def_interner.update_struct(type_id, |struct_def| { struct_def.set_fields(fields); struct_def.generics = generics; @@ -346,15 +357,21 @@ fn resolve_struct_fields( krate: CrateId, unresolved: UnresolvedStruct, all_errors: &mut Vec, + enable_slices: bool, ) -> (Generics, Vec<(Ident, Type)>) { let path_resolver = StandardPathResolver::new(ModuleId { local_id: unresolved.module_id, krate }); let file = unresolved.file_id; - let (generics, fields, errors) = - Resolver::new(&mut context.def_interner, &path_resolver, &context.def_maps, file) - .resolve_struct_fields(unresolved.struct_def); + let (generics, fields, errors) = Resolver::new( + &mut context.def_interner, + &path_resolver, + &context.def_maps, + file, + enable_slices, + ) + .resolve_struct_fields(unresolved.struct_def); extend_errors(all_errors, unresolved.file_id, errors); (generics, fields) @@ -366,6 +383,7 @@ fn resolve_impls( def_maps: &HashMap, collected_impls: ImplMap, errors: &mut Vec, + enable_slices: bool, ) -> Vec<(FileId, FuncId)> { let mut file_method_ids = Vec::new(); @@ -376,7 +394,8 @@ fn resolve_impls( let file = def_maps[&crate_id].module_file_id(module_id); for (generics, _, functions) in methods { - let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file); + let mut resolver = + Resolver::new(interner, &path_resolver, def_maps, file, enable_slices); resolver.add_generics(&generics); let generics = resolver.get_generics().to_vec(); let self_type = resolver.resolve_type(unresolved_type.clone()); @@ -389,6 +408,7 @@ fn resolve_impls( Some(self_type.clone()), generics, errors, + enable_slices, ); if self_type != Type::Error { @@ -422,6 +442,7 @@ fn resolve_free_functions( collected_functions: Vec, self_type: Option, errors: &mut Vec, + enable_slices: bool, ) -> Vec<(FileId, FuncId)> { // Lower each function in the crate. This is now possible since imports have been resolved collected_functions @@ -435,11 +456,14 @@ fn resolve_free_functions( self_type.clone(), vec![], // no impl generics errors, + enable_slices, ) }) .collect() } +// Remove this attribute once we move to the new SSA pass and `enable_slices` is removed +#[allow(clippy::too_many_arguments)] fn resolve_function_set( interner: &mut NodeInterner, crate_id: CrateId, @@ -448,6 +472,7 @@ fn resolve_function_set( self_type: Option, impl_generics: Vec<(Rc, Shared, Span)>, errors: &mut Vec, + enable_slices: bool, ) -> Vec<(FileId, FuncId)> { let file_id = unresolved_functions.file_id; @@ -455,7 +480,8 @@ fn resolve_function_set( let path_resolver = StandardPathResolver::new(ModuleId { local_id: mod_id, krate: crate_id }); - let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file_id); + let mut resolver = + Resolver::new(interner, &path_resolver, def_maps, file_id, enable_slices); // Must use set_generics here to ensure we re-use the same generics from when // the impl was originally collected. Otherwise the function will be using different // TypeVariables for the same generic, causing it to instantiate incorrectly. diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index fdaf2dd3acc..d395b616fb3 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -65,6 +65,7 @@ impl CrateDefMap { crate_id: CrateId, context: &mut Context, errors: &mut Vec, + enable_slices: bool, ) { // Check if this Crate has already been compiled // XXX: There is probably a better alternative for this. @@ -92,7 +93,7 @@ impl CrateDefMap { }; // Now we want to populate the CrateDefMap using the DefCollector - DefCollector::collect(def_map, context, ast, root_file_id, errors); + DefCollector::collect(def_map, context, ast, root_file_id, errors, enable_slices); } pub fn root(&self) -> LocalModuleId { diff --git a/crates/noirc_frontend/src/hir/resolution/resolver.rs b/crates/noirc_frontend/src/hir/resolution/resolver.rs index 40b88d9eeea..725a46499a1 100644 --- a/crates/noirc_frontend/src/hir/resolution/resolver.rs +++ b/crates/noirc_frontend/src/hir/resolution/resolver.rs @@ -86,6 +86,10 @@ pub struct Resolver<'a> { /// is declared we push a scope and set this lambda_index to the scope index. /// Any variable from a scope less than that must be from the parent function. lambda_index: usize, + + /// This is technical debt that should be removed once we fully move over + /// to the new SSA pass which does have slices enabled + enable_slices: bool, } /// ResolverMetas are tagged onto each definition to track how many times they are used @@ -102,6 +106,7 @@ impl<'a> Resolver<'a> { path_resolver: &'a dyn PathResolver, def_maps: &'a HashMap, file: FileId, + enable_slices: bool, ) -> Resolver<'a> { Self { path_resolver, @@ -113,6 +118,7 @@ impl<'a> Resolver<'a> { errors: Vec::new(), lambda_index: 0, file, + enable_slices, } } @@ -326,13 +332,13 @@ impl<'a> Resolver<'a> { match typ { UnresolvedType::FieldElement(comp_time) => Type::FieldElement(comp_time), UnresolvedType::Array(size, elem) => { - let resolved_size = self.resolve_array_size(size, new_variables); let elem = Box::new(self.resolve_type_inner(*elem, new_variables)); + if self.enable_slices && size.is_none() { + return Type::Slice(elem); + } + let resolved_size = self.resolve_array_size(size, new_variables); Type::Array(Box::new(resolved_size), elem) } - UnresolvedType::Slice(elem) => { - Type::Slice(Box::new(self.resolve_type_inner(*elem, new_variables))) - } UnresolvedType::Expression(expr) => self.convert_expression_type(expr), UnresolvedType::Integer(comp_time, sign, bits) => Type::Integer(comp_time, sign, bits), UnresolvedType::Bool(comp_time) => Type::Bool(comp_time), @@ -1318,7 +1324,7 @@ mod test { for func in program.functions { let id = interner.push_fn(HirFunction::empty()); interner.push_function_definition(func.name().to_string(), id); - let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file); + let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file, false); let (_, _, err) = resolver.resolve_function(func, id); errors.extend(err); } diff --git a/crates/noirc_frontend/src/hir/type_check/mod.rs b/crates/noirc_frontend/src/hir/type_check/mod.rs index fa47477a94e..552b5c8b8b0 100644 --- a/crates/noirc_frontend/src/hir/type_check/mod.rs +++ b/crates/noirc_frontend/src/hir/type_check/mod.rs @@ -376,7 +376,7 @@ mod test { ); let func_meta = vecmap(program.functions, |nf| { - let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file); + let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file, false); let (hir_func, func_meta, resolver_errors) = resolver.resolve_function(nf, main_id); assert_eq!(resolver_errors, vec![]); (hir_func, func_meta) diff --git a/crates/noirc_frontend/src/main.rs b/crates/noirc_frontend/src/main.rs index 48c6c4b8b1a..1e417179977 100644 --- a/crates/noirc_frontend/src/main.rs +++ b/crates/noirc_frontend/src/main.rs @@ -34,7 +34,7 @@ fn main() { // With a CrateDefMap, we are sure that the imports are correct, and the modules declared are located // The modules are resolved and type checked! let mut errors = vec![]; - CrateDefMap::collect_defs(crate_id, &mut context, &mut errors); + CrateDefMap::collect_defs(crate_id, &mut context, &mut errors, false); assert_eq!(errors, vec![]); let def_map = context.def_map(crate_id).unwrap(); diff --git a/crates/noirc_frontend/src/parser/parser.rs b/crates/noirc_frontend/src/parser/parser.rs index e0ee5d81fec..28d2c7f8406 100644 --- a/crates/noirc_frontend/src/parser/parser.rs +++ b/crates/noirc_frontend/src/parser/parser.rs @@ -709,13 +709,7 @@ fn array_type(type_parser: impl NoirParser) -> impl NoirParser impl NoirParser { diff --git a/crates/wasm/src/compile.rs b/crates/wasm/src/compile.rs index f5a53ea402e..c3e7e59dd16 100644 --- a/crates/wasm/src/compile.rs +++ b/crates/wasm/src/compile.rs @@ -91,7 +91,7 @@ pub fn compile(args: JsValue) -> JsValue { // We are always adding std lib implicitly. It comes bundled with binary. add_noir_lib(&mut driver, "std"); - driver.check_crate(false).expect("Crate check failed"); + driver.check_crate(false, false).expect("Crate check failed"); if options.contracts { let compiled_contracts = driver From c8dd8cdd266b63c7ef363e9d5693426ccc7a70c5 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 15:12:43 +0000 Subject: [PATCH 13/51] add new SSA type for slices --- crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 7 +++++++ crates/noirc_evaluator/src/ssa_refactor/ir/types.rs | 7 +++++++ crates/noirc_evaluator/src/ssa_refactor/ir/value.rs | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 9b5e29d62e7..a761f5dfe0e 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -458,6 +458,9 @@ impl Context { (_, Type::Array(..)) | (Type::Array(..), _) => { unreachable!("Arrays are invalid in binary operations") } + (_, Type::Slice(..)) | (Type::Slice(..), _) => { + unreachable!("Arrays are invalid in binary operations") + } // If either side is a Field constant then, we coerce into the type // of the other operand (Type::Numeric(NumericType::NativeField), typ) @@ -598,6 +601,10 @@ impl Context { assert_eq!(elements.len(), 1); (&elements[0]).into() } + Type::Slice(elements) => { + assert_eq!(elements.len(), 1); + (&elements[0]).into() + } _ => unreachable!("Expected array type"), } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/types.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/types.rs index a9285531203..9bb90e0b96b 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/types.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/types.rs @@ -29,6 +29,9 @@ pub(crate) enum Type { /// An immutable array value with the given element type and length Array(Rc, usize), + /// An immutable slice value with a given element type + Slice(Rc), + /// A function that may be called directly Function, } @@ -74,6 +77,10 @@ impl std::fmt::Display for Type { let elements = vecmap(element.iter(), |element| element.to_string()); write!(f, "[{}; {length}]", elements.join(", ")) } + Type::Slice(element) => { + let elements = vecmap(element.iter(), |element| element.to_string()); + write!(f, "[{}]", elements.join(", ")) + } Type::Function => write!(f, "function"), } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs index 18f22c35a4e..99cf96ef0fd 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs @@ -63,7 +63,7 @@ impl Value { Value::Param { typ, .. } => typ.clone(), Value::NumericConstant { typ, .. } => typ.clone(), Value::Array { element_type, array } => Type::Array(element_type.clone(), array.len()), - Value::Slice { .. } => Type::Reference, + Value::Slice { element_type, .. } => Type::Slice(element_type.clone()), Value::Function { .. } => Type::Function, Value::Intrinsic { .. } => Type::Function, } From 88261b311b6d8741d052364c24e65b0002339c13 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 16 Jun 2023 15:22:02 +0000 Subject: [PATCH 14/51] missing Slice conversion --- crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs index 894720cdd73..c1029a8699d 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs @@ -201,7 +201,10 @@ impl<'a> FunctionContext<'a> { ast::Type::Unit => panic!("convert_non_tuple_type called on a unit type"), ast::Type::Tuple(_) => panic!("convert_non_tuple_type called on a tuple: {typ}"), ast::Type::Function(_, _) => Type::Function, - ast::Type::Slice(_) => Type::Reference, + ast::Type::Slice(element) => { + let element_types = Self::convert_type(element).flatten(); + Type::Slice(Rc::new(element_types)) + } // How should we represent Vecs? // Are they a struct of array + length + capacity? From 0f3e9fdb6f4a4a7a58ed8d8c17c8fcd54b58cbf6 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Fri, 16 Jun 2023 22:14:40 +0100 Subject: [PATCH 15/51] Update crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs Co-authored-by: jfecher --- crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index a761f5dfe0e..d1153645582 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -343,9 +343,9 @@ impl Context { let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } - Value::Slice { array: initial_array, .. } => { + Value::Slice { array, .. } => { let elements = - initial_array.iter().map(|element| self.convert_value(*element, dfg)); + array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } Value::Intrinsic(..) => todo!(), From e5e8eef13124497b5cc47232e943ceea9a2200d7 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 10:52:14 +0000 Subject: [PATCH 16/51] PR comments, fix slice/array subtyping --- .../test_data_ssa_refactor/slices/src/main.nr | 6 ++++-- .../src/ssa_refactor/acir_gen/mod.rs | 5 ++--- crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs | 1 - .../src/ssa_refactor/ir/instruction.rs | 1 - .../noirc_evaluator/src/ssa_refactor/ir/printer.rs | 6 +++--- crates/noirc_frontend/src/hir/type_check/expr.rs | 14 ++++++++++---- crates/noirc_frontend/src/hir_def/types.rs | 6 +++--- crates/noirc_frontend/src/monomorphization/mod.rs | 5 ++++- crates/noirc_frontend/src/node_interner.rs | 3 +-- noir_stdlib/src/array.nr | 8 ++++---- noir_stdlib/src/slice.nr | 9 ++++++--- 11 files changed, 37 insertions(+), 27 deletions(-) diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr index 7b908797e9a..2a7226ed6cf 100644 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/slices/src/main.nr @@ -6,15 +6,17 @@ fn main(x : Field, y : pub Field) { assert(slice[0] == 0); assert(slice[0] != 1); + slice[0] = x; + assert(slice[0] == x); - let slice_plus_10 = slice.push_back(10); + let slice_plus_10 = slice.push_back(y); assert(slice_plus_10[2] == 10); assert(slice_plus_10[2] != 8); assert(slice_plus_10.len() == 3); let mut new_slice: [Field] = []; for i in 0..5 { - new_slice = new_slice.push_back(0); + new_slice = new_slice.push_back(i); } assert(new_slice.len() == 5); } diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index a761f5dfe0e..8a7f3719293 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -343,9 +343,8 @@ impl Context { let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } - Value::Slice { array: initial_array, .. } => { - let elements = - initial_array.iter().map(|element| self.convert_value(*element, dfg)); + Value::Slice { array, .. } => { + let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } Value::Intrinsic(..) => todo!(), diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 387c6008145..6a9c2e16d7a 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -342,7 +342,6 @@ impl DataFlowGraph { Value::Array { array, element_type } | Value::Slice { array, element_type } => { Some((array.clone(), element_type.clone())) } - // Value::Array { array, element_type } => Some((array.clone(), element_type.clone())), _ => None, } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 2c8b0a10edc..e132835b2a4 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -729,7 +729,6 @@ impl std::fmt::Display for BinaryOp { /// Contains the result to Instruction::simplify, specifying how the instruction /// should be simplified. -#[derive(Debug, Clone)] pub(crate) enum SimplifyResult { /// Replace this function's result with the given value SimplifiedTo(ValueId), diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs index 5e69b23663a..b5424bb8f62 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs @@ -72,9 +72,9 @@ fn value(function: &Function, id: ValueId) -> String { let elements = vecmap(array, |element| value(function, *element)); format!("[{}]", elements.join(", ")) } - Value::Slice { element_type, .. } => { - let elements = vecmap(element_type.as_slice(), ToString::to_string); - format!("{:?}", elements) + Value::Slice { array, .. } => { + let elements = vecmap(array, |element| value(function, *element)); + format!("[{}]", elements.join(", ")) } Value::Param { .. } | Value::Instruction { .. } => id.to_string(), } diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index 546c2c945a7..11e0efc843c 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -40,10 +40,14 @@ impl<'interner> TypeChecker<'interner> { let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - let arr_type = Type::Array( - Box::new(Type::Constant(arr.len() as u64)), - Box::new(first_elem_type.clone()), - ); + let arr_type = if arr.is_empty() { + Type::Slice(Box::new(self.interner.next_type_variable())) + } else { + Type::Array( + Box::new(Type::Constant(arr.len() as u64)), + Box::new(first_elem_type.clone()), + ) + }; // Check if the array is homogeneous for (index, elem_type) in elem_types.iter().enumerate().skip(1) { @@ -709,6 +713,8 @@ impl<'interner> TypeChecker<'interner> { for (param, (arg, arg_span)) in parameters.iter().zip(args) { arg.make_subtype_of(param, arg_span, &mut self.errors, || { + dbg!(arg.clone()); + dbg!(param.clone()); TypeCheckError::TypeMismatch { expected_typ: param.to_string(), expr_typ: arg.to_string(), diff --git a/crates/noirc_frontend/src/hir_def/types.rs b/crates/noirc_frontend/src/hir_def/types.rs index 0ace065dc7b..574ad91001c 100644 --- a/crates/noirc_frontend/src/hir_def/types.rs +++ b/crates/noirc_frontend/src/hir_def/types.rs @@ -924,6 +924,8 @@ impl Type { elem_a.try_unify(elem_b, span) } + (Slice(elem_a), Slice(elem_b)) => elem_a.try_unify(elem_b, span), + (Tuple(elements_a), Tuple(elements_b)) => { if elements_a.len() != elements_b.len() { Err(SpanKind::None) @@ -1059,8 +1061,6 @@ impl Type { (Slice(elem_a), Slice(elem_b)) => elem_a.is_subtype_of(elem_b, span), - (Slice(elem_a), Array(_, elem_b)) => elem_a.is_subtype_of(elem_b, span), - (Array(_, elem_a), Slice(elem_b)) => elem_a.is_subtype_of(elem_b, span), (Tuple(elements_a), Tuple(elements_b)) => { @@ -1332,6 +1332,7 @@ impl Type { fn occurs(&self, target_id: TypeVariableId) -> bool { match self { Type::Array(len, elem) => len.occurs(target_id) || elem.occurs(target_id), + Type::Slice(element) => element.occurs(target_id), Type::String(len) => len.occurs(target_id), Type::Struct(_, generic_args) => generic_args.iter().any(|arg| arg.occurs(target_id)), Type::Tuple(fields) => fields.iter().any(|field| field.occurs(target_id)), @@ -1347,7 +1348,6 @@ impl Type { Type::Function(args, ret) => { args.iter().any(|arg| arg.occurs(target_id)) || ret.occurs(target_id) } - Type::Slice(element) => element.occurs(target_id), Type::Vec(element) => element.occurs(target_id), Type::FieldElement(_) diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index 4236f61f3b6..a713e2f4f29 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -360,6 +360,7 @@ impl<'interner> Monomorphizer<'interner> { fn standard_array(&mut self, array: Vec) -> ast::Expression { let element_type = Self::convert_type(&self.interner.id_type(array[0])); + dbg!(element_type.clone()); let contents = vecmap(array, |id| self.expr(id)); Self::aos_to_soa(contents, element_type) } @@ -663,6 +664,7 @@ impl<'interner> Monomorphizer<'interner> { /// Convert a non-tuple/struct type to a monomorphized type fn convert_type(typ: &HirType) -> ast::Type { + // dbg!(typ.clone()); match typ { HirType::FieldElement(_) => ast::Type::Field, HirType::Integer(_, sign, bits) => ast::Type::Integer(*sign, *bits), @@ -780,6 +782,7 @@ impl<'interner> Monomorphizer<'interner> { ) -> Option { if let ast::Expression::Ident(ident) = func { if let Definition::Builtin(opcode) = &ident.definition { + // TODO(#1736): Move this builtin to the SSA pass if opcode == "array_len" { let typ = self.interner.id_type(arguments[0]); if let Type::Array(_, _) = typ { @@ -1005,7 +1008,7 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Function(parameter_types, ret_type) => { self.create_zeroed_function(parameter_types, ret_type) } - ast::Type::Slice(_) => panic!("Cannot create a zeroed slice value. This type is currently unimplemented and meant to be unusable outside of unconstrained functions"), + ast::Type::Slice(element_type) => ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { contents: vec![], element_type: *element_type.clone() })), ast::Type::Vec(_) => panic!("Cannot create a zeroed Vec value. This type is currently unimplemented and meant to be unusable outside of unconstrained functions"), } } diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index 9798f2760b4..16669c4a62a 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -527,8 +527,7 @@ impl NodeInterner { } pub fn next_type_variable(&mut self) -> Type { - let binding = TypeBinding::Unbound(self.next_type_variable_id()); - Type::TypeVariable(Shared::new(binding)) + Type::type_variable(self.next_type_variable_id()) } pub fn store_instantiation_bindings( diff --git a/noir_stdlib/src/array.nr b/noir_stdlib/src/array.nr index 52c6b6c218c..4ab829b4591 100644 --- a/noir_stdlib/src/array.nr +++ b/noir_stdlib/src/array.nr @@ -1,10 +1,10 @@ impl [T; N] { - #[builtin(array_len)] - fn len(_array: Self) -> comptime Field {} + // #[builtin(array_len)] + // fn len(_array: Self) -> comptime Field {} - #[builtin(arraysort)] - fn sort(_array: Self) -> Self {} + // #[builtin(arraysort)] + // fn sort(_array: Self) -> Self {} // Sort with a custom sorting function. fn sort_via(mut a: Self, ordering: fn(T, T) -> bool) -> Self { diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index baf04b65236..c67e8fb8909 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -1,12 +1,15 @@ -// These methods are all stubs currently and aren't implemented internally yet. -// For a similar reason, no constructor for Vec is exposed yet since the type -// is still in-progress. impl [T] { /// Push a new element to the end of the slice, returning a /// new slice with a length one greater than the /// original unmodified vector. #[builtin(slice_push_back)] fn push_back(_self: Self, _elem: T) -> Self { } + + #[builtin(array_len)] + fn len(_self: Self) -> comptime Field {} + + #[builtin(arraysort)] + fn sort(_self: Self) -> Self {} } From 0f3fa79fc7a96f5122af7e93cf12b7263997f48e Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 14:58:34 +0000 Subject: [PATCH 17/51] hack to handle duplicate methods and mismatched types when compiling w/ old SSA pass that does not handle slices --- crates/noirc_driver/src/lib.rs | 3 + .../src/ssa_refactor/acir_gen/mod.rs | 3 +- crates/noirc_frontend/src/graph/mod.rs | 4 ++ crates/noirc_frontend/src/hir/def_map/mod.rs | 6 +- .../noirc_frontend/src/hir/type_check/expr.rs | 4 +- .../src/monomorphization/mod.rs | 4 +- crates/noirc_frontend/src/node_interner.rs | 12 +++- noir_stdlib/src/array.nr | 10 +-- noir_stdlib/src/slice.nr | 67 +++++++++++++++++++ 9 files changed, 97 insertions(+), 16 deletions(-) diff --git a/crates/noirc_driver/src/lib.rs b/crates/noirc_driver/src/lib.rs index 35ba7fcfe14..63a1c1f6e79 100644 --- a/crates/noirc_driver/src/lib.rs +++ b/crates/noirc_driver/src/lib.rs @@ -175,6 +175,9 @@ impl Driver { enable_slices: bool, ) -> Result { let mut errors = vec![]; + + self.context.def_interner.enable_slices = enable_slices; + CrateDefMap::collect_defs(LOCAL_CRATE, &mut self.context, &mut errors, enable_slices); if Self::has_errors(&errors, deny_warnings) { diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index d1153645582..8a7f3719293 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -344,8 +344,7 @@ impl Context { AcirValue::Array(elements.collect()) } Value::Slice { array, .. } => { - let elements = - array.iter().map(|element| self.convert_value(*element, dfg)); + let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } Value::Intrinsic(..) => todo!(), diff --git a/crates/noirc_frontend/src/graph/mod.rs b/crates/noirc_frontend/src/graph/mod.rs index 47426606da1..115829e7877 100644 --- a/crates/noirc_frontend/src/graph/mod.rs +++ b/crates/noirc_frontend/src/graph/mod.rs @@ -15,6 +15,10 @@ pub const LOCAL_CRATE: CrateId = CrateId(0); pub struct CrateId(usize); impl CrateId { + pub fn new(id: usize) -> CrateId { + CrateId(id) + } + pub fn dummy_id() -> CrateId { CrateId(std::usize::MAX) } diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index d395b616fb3..593245b6efd 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -78,7 +78,11 @@ impl CrateDefMap { // First parse the root file. let root_file_id = context.crate_graph[crate_id].root_file_id; - let ast = parse_file(&mut context.file_manager, root_file_id, errors); + let mut ast = parse_file(&mut context.file_manager, root_file_id, errors); + + if !context.def_interner.enable_slices && crate_id == CrateId::new(1) { + ast.module_decls.retain(|ident| ident.0.contents != "slice"); + } // Allocate a default Module for the root, giving it a ModuleId let mut modules: Arena = Arena::default(); diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index 11e0efc843c..da0531ac044 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -40,7 +40,7 @@ impl<'interner> TypeChecker<'interner> { let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - let arr_type = if arr.is_empty() { + let arr_type = if arr.is_empty() && self.interner.enable_slices { Type::Slice(Box::new(self.interner.next_type_variable())) } else { Type::Array( @@ -713,8 +713,6 @@ impl<'interner> TypeChecker<'interner> { for (param, (arg, arg_span)) in parameters.iter().zip(args) { arg.make_subtype_of(param, arg_span, &mut self.errors, || { - dbg!(arg.clone()); - dbg!(param.clone()); TypeCheckError::TypeMismatch { expected_typ: param.to_string(), expr_typ: arg.to_string(), diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index a713e2f4f29..3ef1d1c4f83 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -271,7 +271,7 @@ impl<'interner> Monomorphizer<'interner> { HirExpression::Literal(HirLiteral::Array(array)) => match array { HirArrayLiteral::Standard(array) => { // Empty slice literal `[]` - if array.is_empty() { + if array.is_empty() && self.interner.enable_slices { return ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { contents: vec![], element_type: ast::Type::Unit, @@ -360,7 +360,6 @@ impl<'interner> Monomorphizer<'interner> { fn standard_array(&mut self, array: Vec) -> ast::Expression { let element_type = Self::convert_type(&self.interner.id_type(array[0])); - dbg!(element_type.clone()); let contents = vecmap(array, |id| self.expr(id)); Self::aos_to_soa(contents, element_type) } @@ -664,7 +663,6 @@ impl<'interner> Monomorphizer<'interner> { /// Convert a non-tuple/struct type to a monomorphized type fn convert_type(typ: &HirType) -> ast::Type { - // dbg!(typ.clone()); match typ { HirType::FieldElement(_) => ast::Type::Field, HirType::Integer(_, sign, bits) => ast::Type::Integer(*sign, *bits), diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index 16669c4a62a..c9c27518339 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -70,6 +70,10 @@ pub struct NodeInterner { /// Methods on primitive types defined in the stdlib. primitive_methods: HashMap<(TypeMethodKey, String), FuncId>, + + /// This is technical debt that should be removed once we fully move over + /// to the new SSA pass which does have slices enabled + pub enable_slices: bool, } #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] @@ -249,6 +253,7 @@ impl Default for NodeInterner { globals: HashMap::new(), struct_methods: HashMap::new(), primitive_methods: HashMap::new(), + enable_slices: false, }; // An empty block expression is used often, we add this into the `node` on startup @@ -597,7 +602,8 @@ enum TypeMethodKey { /// Fields and integers share methods for ease of use. These methods may still /// accept only fields or integers, it is just that their names may not clash. FieldOrInt, - ArrayOrSlice, + Array, + Slice, Bool, String, Unit, @@ -611,8 +617,8 @@ fn get_type_method_key(typ: &Type) -> Option { let typ = typ.follow_bindings(); match &typ { Type::FieldElement(_) => Some(FieldOrInt), - Type::Array(_, _) => Some(ArrayOrSlice), - Type::Slice(_) => Some(ArrayOrSlice), + Type::Array(_, _) => Some(Array), + Type::Slice(_) => Some(Slice), Type::Integer(_, _, _) => Some(FieldOrInt), Type::PolymorphicInteger(_, _) => Some(FieldOrInt), Type::Bool(_) => Some(Bool), diff --git a/noir_stdlib/src/array.nr b/noir_stdlib/src/array.nr index 4ab829b4591..9e44aa03fcc 100644 --- a/noir_stdlib/src/array.nr +++ b/noir_stdlib/src/array.nr @@ -1,10 +1,12 @@ +// TODO: Once we fully move to the new SSA pass this module can be removed and replaced +// by the methods in the `slice` module impl [T; N] { - // #[builtin(array_len)] - // fn len(_array: Self) -> comptime Field {} + #[builtin(array_len)] + fn len(_self: Self) -> comptime Field {} - // #[builtin(arraysort)] - // fn sort(_array: Self) -> Self {} + #[builtin(arraysort)] + fn sort(_self: Self) -> Self {} // Sort with a custom sorting function. fn sort_via(mut a: Self, ordering: fn(T, T) -> bool) -> Self { diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index c67e8fb8909..ba3aab14092 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -11,5 +11,72 @@ impl [T] { #[builtin(arraysort)] fn sort(_self: Self) -> Self {} + + // Sort with a custom sorting function. + fn sort_via(mut a: Self, ordering: fn(T, T) -> bool) -> Self { + for i in 1 .. a.len() { + for j in 0..i { + if ordering(a[i], a[j]) { + let old_a_j = a[j]; + a[j] = a[i]; + a[i] = old_a_j; + } + } + } + a + } + + // Apply a function to each element of an array, returning a new array + // containing the mapped elements. + fn map(self, f: fn(T) -> U) -> [U] { + let first_elem = f(self[0]); + let mut ret: [U] = []; + ret = ret.push_back(first_elem); + + for i in 1 .. self.len() { + ret.push_back(f(self[i])); + } + + ret + } + + // Apply a function to each element of the array and an accumulator value, + // returning the final accumulated value. This function is also sometimes + // called `foldl`, `fold_left`, `reduce`, or `inject`. + fn fold(self, mut accumulator: U, f: fn(U, T) -> U) -> U { + for elem in self { + accumulator = f(accumulator, elem); + } + accumulator + } + + // Apply a function to each element of the array and an accumulator value, + // returning the final accumulated value. Unlike fold, reduce uses the first + // element of the given array as its starting accumulator value. + fn reduce(self, f: fn(T, T) -> T) -> T { + let mut accumulator = self[0]; + for i in 1 .. self.len() { + accumulator = f(accumulator, self[i]); + } + accumulator + } + + // Returns true if all elements in the array satisfy the predicate + fn all(self, predicate: fn(T) -> bool) -> bool { + let mut ret = true; + for elem in self { + ret &= predicate(elem); + } + ret + } + + // Returns true if any element in the array satisfies the predicate + fn any(self, predicate: fn(T) -> bool) -> bool { + let mut ret = false; + for elem in self { + ret |= predicate(elem); + } + ret + } } From fdd32669778b07f87722dd78dc47257057d7d4df Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 15:05:47 +0000 Subject: [PATCH 18/51] cleanup enable_slices tech debt to be part of the NodeInterner --- crates/noirc_driver/src/lib.rs | 2 +- .../src/hir/def_collector/dc_crate.rs | 50 +++++-------------- crates/noirc_frontend/src/hir/def_map/mod.rs | 3 +- .../src/hir/resolution/resolver.rs | 10 +--- .../noirc_frontend/src/hir/type_check/mod.rs | 2 +- crates/noirc_frontend/src/main.rs | 2 +- 6 files changed, 18 insertions(+), 51 deletions(-) diff --git a/crates/noirc_driver/src/lib.rs b/crates/noirc_driver/src/lib.rs index 63a1c1f6e79..6538df7d4e3 100644 --- a/crates/noirc_driver/src/lib.rs +++ b/crates/noirc_driver/src/lib.rs @@ -178,7 +178,7 @@ impl Driver { self.context.def_interner.enable_slices = enable_slices; - CrateDefMap::collect_defs(LOCAL_CRATE, &mut self.context, &mut errors, enable_slices); + CrateDefMap::collect_defs(LOCAL_CRATE, &mut self.context, &mut errors); if Self::has_errors(&errors, deny_warnings) { Err(errors) diff --git a/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs b/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs index c2ede5f66f8..ef2fb84db57 100644 --- a/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs +++ b/crates/noirc_frontend/src/hir/def_collector/dc_crate.rs @@ -85,7 +85,6 @@ impl DefCollector { ast: ParsedModule, root_file_id: FileId, errors: &mut Vec, - enable_slices: bool, ) { let crate_id = def_map.krate; @@ -97,7 +96,7 @@ impl DefCollector { let crate_graph = &context.crate_graph[crate_id]; for dep in crate_graph.dependencies.clone() { - CrateDefMap::collect_defs(dep.crate_id, context, errors, enable_slices); + CrateDefMap::collect_defs(dep.crate_id, context, errors); let dep_def_root = context.def_map(dep.crate_id).expect("ice: def map was just created").root; @@ -156,16 +155,14 @@ impl DefCollector { let (integer_globals, other_globals) = filter_integer_globals(def_collector.collected_globals); - let mut file_global_ids = - resolve_globals(context, integer_globals, crate_id, errors, enable_slices); + let mut file_global_ids = resolve_globals(context, integer_globals, crate_id, errors); // Must resolve structs before we resolve globals. - resolve_structs(context, def_collector.collected_types, crate_id, errors, enable_slices); + resolve_structs(context, def_collector.collected_types, crate_id, errors); // We must wait to resolve non-integer globals until after we resolve structs since structs // globals will need to reference the struct type they're initialized to to ensure they are valid. - let mut more_global_ids = - resolve_globals(context, other_globals, crate_id, errors, enable_slices); + let mut more_global_ids = resolve_globals(context, other_globals, crate_id, errors); file_global_ids.append(&mut more_global_ids); @@ -173,7 +170,7 @@ impl DefCollector { // re-collect the methods within into their proper module. This cannot be // done before resolution since we need to be able to resolve the type of the // impl since that determines the module we should collect into. - collect_impls(context, crate_id, &def_collector.collected_impls, errors, enable_slices); + collect_impls(context, crate_id, &def_collector.collected_impls, errors); // Lower each function in the crate. This is now possible since imports have been resolved let file_func_ids = resolve_free_functions( @@ -183,7 +180,6 @@ impl DefCollector { def_collector.collected_functions, None, errors, - enable_slices, ); let file_method_ids = resolve_impls( @@ -192,7 +188,6 @@ impl DefCollector { &context.def_maps, def_collector.collected_impls, errors, - enable_slices, ); type_check_globals(&mut context.def_interner, file_global_ids, errors); @@ -210,7 +205,6 @@ fn collect_impls( crate_id: CrateId, collected_impls: &ImplMap, errors: &mut Vec, - enable_slices: bool, ) { let interner = &mut context.def_interner; let def_maps = &mut context.def_maps; @@ -222,8 +216,7 @@ fn collect_impls( let file = def_maps[&crate_id].module_file_id(*module_id); for (generics, span, unresolved) in methods { - let mut resolver = - Resolver::new(interner, &path_resolver, def_maps, file, enable_slices); + let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file); resolver.add_generics(generics); let typ = resolver.resolve_type(unresolved_type.clone()); @@ -286,7 +279,6 @@ fn resolve_globals( globals: Vec, crate_id: CrateId, errors: &mut Vec, - enable_slices: bool, ) -> Vec<(FileId, StmtId)> { vecmap(globals, |global| { let module_id = ModuleId { local_id: global.module_id, krate: crate_id }; @@ -298,7 +290,6 @@ fn resolve_globals( &path_resolver, &context.def_maps, global.file_id, - enable_slices, ); let name = global.stmt_def.pattern.name_ident().clone(); @@ -332,7 +323,6 @@ fn resolve_structs( structs: HashMap, crate_id: CrateId, errors: &mut Vec, - enable_slices: bool, ) { // We must first go through the struct list once to ensure all IDs are pushed to // the def_interner map. This lets structs refer to each other regardless of declaration order @@ -343,8 +333,7 @@ fn resolve_structs( } for (type_id, typ) in structs { - let (generics, fields) = - resolve_struct_fields(context, crate_id, typ, errors, enable_slices); + let (generics, fields) = resolve_struct_fields(context, crate_id, typ, errors); context.def_interner.update_struct(type_id, |struct_def| { struct_def.set_fields(fields); struct_def.generics = generics; @@ -357,21 +346,15 @@ fn resolve_struct_fields( krate: CrateId, unresolved: UnresolvedStruct, all_errors: &mut Vec, - enable_slices: bool, ) -> (Generics, Vec<(Ident, Type)>) { let path_resolver = StandardPathResolver::new(ModuleId { local_id: unresolved.module_id, krate }); let file = unresolved.file_id; - let (generics, fields, errors) = Resolver::new( - &mut context.def_interner, - &path_resolver, - &context.def_maps, - file, - enable_slices, - ) - .resolve_struct_fields(unresolved.struct_def); + let (generics, fields, errors) = + Resolver::new(&mut context.def_interner, &path_resolver, &context.def_maps, file) + .resolve_struct_fields(unresolved.struct_def); extend_errors(all_errors, unresolved.file_id, errors); (generics, fields) @@ -383,7 +366,6 @@ fn resolve_impls( def_maps: &HashMap, collected_impls: ImplMap, errors: &mut Vec, - enable_slices: bool, ) -> Vec<(FileId, FuncId)> { let mut file_method_ids = Vec::new(); @@ -394,8 +376,7 @@ fn resolve_impls( let file = def_maps[&crate_id].module_file_id(module_id); for (generics, _, functions) in methods { - let mut resolver = - Resolver::new(interner, &path_resolver, def_maps, file, enable_slices); + let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file); resolver.add_generics(&generics); let generics = resolver.get_generics().to_vec(); let self_type = resolver.resolve_type(unresolved_type.clone()); @@ -408,7 +389,6 @@ fn resolve_impls( Some(self_type.clone()), generics, errors, - enable_slices, ); if self_type != Type::Error { @@ -442,7 +422,6 @@ fn resolve_free_functions( collected_functions: Vec, self_type: Option, errors: &mut Vec, - enable_slices: bool, ) -> Vec<(FileId, FuncId)> { // Lower each function in the crate. This is now possible since imports have been resolved collected_functions @@ -456,14 +435,11 @@ fn resolve_free_functions( self_type.clone(), vec![], // no impl generics errors, - enable_slices, ) }) .collect() } -// Remove this attribute once we move to the new SSA pass and `enable_slices` is removed -#[allow(clippy::too_many_arguments)] fn resolve_function_set( interner: &mut NodeInterner, crate_id: CrateId, @@ -472,7 +448,6 @@ fn resolve_function_set( self_type: Option, impl_generics: Vec<(Rc, Shared, Span)>, errors: &mut Vec, - enable_slices: bool, ) -> Vec<(FileId, FuncId)> { let file_id = unresolved_functions.file_id; @@ -480,8 +455,7 @@ fn resolve_function_set( let path_resolver = StandardPathResolver::new(ModuleId { local_id: mod_id, krate: crate_id }); - let mut resolver = - Resolver::new(interner, &path_resolver, def_maps, file_id, enable_slices); + let mut resolver = Resolver::new(interner, &path_resolver, def_maps, file_id); // Must use set_generics here to ensure we re-use the same generics from when // the impl was originally collected. Otherwise the function will be using different // TypeVariables for the same generic, causing it to instantiate incorrectly. diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index 593245b6efd..1cdcd9ec45c 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -65,7 +65,6 @@ impl CrateDefMap { crate_id: CrateId, context: &mut Context, errors: &mut Vec, - enable_slices: bool, ) { // Check if this Crate has already been compiled // XXX: There is probably a better alternative for this. @@ -97,7 +96,7 @@ impl CrateDefMap { }; // Now we want to populate the CrateDefMap using the DefCollector - DefCollector::collect(def_map, context, ast, root_file_id, errors, enable_slices); + DefCollector::collect(def_map, context, ast, root_file_id, errors); } pub fn root(&self) -> LocalModuleId { diff --git a/crates/noirc_frontend/src/hir/resolution/resolver.rs b/crates/noirc_frontend/src/hir/resolution/resolver.rs index 725a46499a1..de0cdd3542f 100644 --- a/crates/noirc_frontend/src/hir/resolution/resolver.rs +++ b/crates/noirc_frontend/src/hir/resolution/resolver.rs @@ -86,10 +86,6 @@ pub struct Resolver<'a> { /// is declared we push a scope and set this lambda_index to the scope index. /// Any variable from a scope less than that must be from the parent function. lambda_index: usize, - - /// This is technical debt that should be removed once we fully move over - /// to the new SSA pass which does have slices enabled - enable_slices: bool, } /// ResolverMetas are tagged onto each definition to track how many times they are used @@ -106,7 +102,6 @@ impl<'a> Resolver<'a> { path_resolver: &'a dyn PathResolver, def_maps: &'a HashMap, file: FileId, - enable_slices: bool, ) -> Resolver<'a> { Self { path_resolver, @@ -118,7 +113,6 @@ impl<'a> Resolver<'a> { errors: Vec::new(), lambda_index: 0, file, - enable_slices, } } @@ -333,7 +327,7 @@ impl<'a> Resolver<'a> { UnresolvedType::FieldElement(comp_time) => Type::FieldElement(comp_time), UnresolvedType::Array(size, elem) => { let elem = Box::new(self.resolve_type_inner(*elem, new_variables)); - if self.enable_slices && size.is_none() { + if self.interner.enable_slices && size.is_none() { return Type::Slice(elem); } let resolved_size = self.resolve_array_size(size, new_variables); @@ -1324,7 +1318,7 @@ mod test { for func in program.functions { let id = interner.push_fn(HirFunction::empty()); interner.push_function_definition(func.name().to_string(), id); - let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file, false); + let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file); let (_, _, err) = resolver.resolve_function(func, id); errors.extend(err); } diff --git a/crates/noirc_frontend/src/hir/type_check/mod.rs b/crates/noirc_frontend/src/hir/type_check/mod.rs index 552b5c8b8b0..fa47477a94e 100644 --- a/crates/noirc_frontend/src/hir/type_check/mod.rs +++ b/crates/noirc_frontend/src/hir/type_check/mod.rs @@ -376,7 +376,7 @@ mod test { ); let func_meta = vecmap(program.functions, |nf| { - let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file, false); + let resolver = Resolver::new(&mut interner, &path_resolver, &def_maps, file); let (hir_func, func_meta, resolver_errors) = resolver.resolve_function(nf, main_id); assert_eq!(resolver_errors, vec![]); (hir_func, func_meta) diff --git a/crates/noirc_frontend/src/main.rs b/crates/noirc_frontend/src/main.rs index 1e417179977..48c6c4b8b1a 100644 --- a/crates/noirc_frontend/src/main.rs +++ b/crates/noirc_frontend/src/main.rs @@ -34,7 +34,7 @@ fn main() { // With a CrateDefMap, we are sure that the imports are correct, and the modules declared are located // The modules are resolved and type checked! let mut errors = vec![]; - CrateDefMap::collect_defs(crate_id, &mut context, &mut errors, false); + CrateDefMap::collect_defs(crate_id, &mut context, &mut errors); assert_eq!(errors, vec![]); let def_map = context.def_map(crate_id).unwrap(); From 18061d8077d5fe3fa6d55843de36262f6d21b0cb Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 15:14:29 +0000 Subject: [PATCH 19/51] reference enable_slices flag issue --- crates/noirc_frontend/src/node_interner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index c9c27518339..942353d2ff4 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -71,7 +71,7 @@ pub struct NodeInterner { /// Methods on primitive types defined in the stdlib. primitive_methods: HashMap<(TypeMethodKey, String), FuncId>, - /// This is technical debt that should be removed once we fully move over + /// TODO(#1850): This is technical debt that should be removed once we fully move over /// to the new SSA pass which does have slices enabled pub enable_slices: bool, } From 1de23540d1c4ca1e4be078af2dc50c2b9098f5d1 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 15:21:23 +0000 Subject: [PATCH 20/51] cleanup name --- crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs index 069a7322b20..3ee3e70c6cd 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs @@ -211,9 +211,8 @@ impl<'function> PerFunctionContext<'function> { let elements = array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.array_constant(elements, element_type.clone()) } - Value::Slice { array: initial_array, element_type } => { - let elements = - initial_array.iter().map(|value| self.translate_value(*value)).collect(); + Value::Slice { array, element_type } => { + let elements = array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.slice(elements, element_type.clone()) } }; From eecd581599b88cbdd93f04084f18bee3a40327fc Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 15:48:54 +0000 Subject: [PATCH 21/51] remove SSA Value::Slice --- .../src/ssa_refactor/acir_gen/mod.rs | 5 +---- crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs | 15 +-------------- .../src/ssa_refactor/ir/instruction.rs | 2 +- .../src/ssa_refactor/ir/printer.rs | 4 ---- .../noirc_evaluator/src/ssa_refactor/ir/value.rs | 4 ---- .../src/ssa_refactor/opt/inlining.rs | 4 ---- .../src/ssa_refactor/ssa_builder/mod.rs | 8 -------- crates/noirc_frontend/src/hir/def_map/mod.rs | 3 +++ 8 files changed, 6 insertions(+), 39 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 8a7f3719293..40cc570008a 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -343,10 +343,6 @@ impl Context { let elements = array.iter().map(|element| self.convert_value(*element, dfg)); AcirValue::Array(elements.collect()) } - Value::Slice { array, .. } => { - let elements = array.iter().map(|element| self.convert_value(*element, dfg)); - AcirValue::Array(elements.collect()) - } Value::Intrinsic(..) => todo!(), Value::Function(..) => unreachable!("ICE: All functions should have been inlined"), Value::Instruction { .. } | Value::Param { .. } => { @@ -601,6 +597,7 @@ impl Context { (&elements[0]).into() } Type::Slice(elements) => { + dbg!("got slice type"); assert_eq!(elements.len(), 1); (&elements[0]).into() } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 6a9c2e16d7a..c54bb816ca3 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -195,17 +195,6 @@ impl DataFlowGraph { self.make_value(Value::Array { array, element_type }) } - /// Create a new slice value from the given elements - /// This is the initial slice for which the length will change - /// during program execution - pub(crate) fn make_slice( - &mut self, - array: im::Vector, - element_type: Rc, - ) -> ValueId { - self.make_value(Value::Slice { array, element_type }) - } - /// Gets or creates a ValueId for the given FunctionId. pub(crate) fn import_function(&mut self, function: FunctionId) -> ValueId { if let Some(existing) = self.functions.get(&function) { @@ -339,9 +328,7 @@ impl DataFlowGraph { ) -> Option<(im::Vector, Rc)> { match &self.values[self.resolve(value)] { // Vectors are shared, so cloning them is cheap - Value::Array { array, element_type } | Value::Slice { array, element_type } => { - Some((array.clone(), element_type.clone())) - } + Value::Array { array, element_type } => Some((array.clone(), element_type.clone())), _ => None, } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index e132835b2a4..7f0ec5a8291 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -341,7 +341,7 @@ impl Instruction { let slice = dfg.get_array_constant(arguments[0]); if let (Some((mut slice, element_type)), elem) = (slice, arguments[1]) { slice.push_back(elem); - let new_slice = dfg.make_slice(slice, element_type); + let new_slice = dfg.make_array(slice, element_type); simplify_result = SimplifiedTo(new_slice); } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs index b5424bb8f62..a8dceb6a8b4 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/printer.rs @@ -72,10 +72,6 @@ fn value(function: &Function, id: ValueId) -> String { let elements = vecmap(array, |element| value(function, *element)); format!("[{}]", elements.join(", ")) } - Value::Slice { array, .. } => { - let elements = vecmap(array, |element| value(function, *element)); - format!("[{}]", elements.join(", ")) - } Value::Param { .. } | Value::Instruction { .. } => id.to_string(), } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs index 99cf96ef0fd..30468a0a669 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/value.rs @@ -40,9 +40,6 @@ pub(crate) enum Value { /// Represents a constant array value Array { array: im::Vector, element_type: Rc }, - /// Represents a compile-time array - Slice { array: im::Vector, element_type: Rc }, - /// This Value refers to a function in the IR. /// Functions always have the type Type::Function. /// If the argument or return types are needed, users should retrieve @@ -63,7 +60,6 @@ impl Value { Value::Param { typ, .. } => typ.clone(), Value::NumericConstant { typ, .. } => typ.clone(), Value::Array { element_type, array } => Type::Array(element_type.clone(), array.len()), - Value::Slice { element_type, .. } => Type::Slice(element_type.clone()), Value::Function { .. } => Type::Function, Value::Intrinsic { .. } => Type::Function, } diff --git a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs index 3ee3e70c6cd..80e491e79f1 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/opt/inlining.rs @@ -211,10 +211,6 @@ impl<'function> PerFunctionContext<'function> { let elements = array.iter().map(|value| self.translate_value(*value)).collect(); self.context.builder.array_constant(elements, element_type.clone()) } - Value::Slice { array, element_type } => { - let elements = array.iter().map(|value| self.translate_value(*value)).collect(); - self.context.builder.slice(elements, element_type.clone()) - } }; self.values.insert(id, new_value); diff --git a/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs index f411157820f..49e68dad1f2 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ssa_builder/mod.rs @@ -116,14 +116,6 @@ impl FunctionBuilder { self.current_function.dfg.make_array(elements, element_types) } - pub(crate) fn slice( - &mut self, - elements: im::Vector, - element_types: Rc, - ) -> ValueId { - self.current_function.dfg.make_slice(elements, element_types) - } - /// Returns the type of the given value. pub(crate) fn type_of_value(&self, value: ValueId) -> Type { self.current_function.dfg.type_of_value(value) diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index 1cdcd9ec45c..a6f0ad7572c 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -79,6 +79,9 @@ impl CrateDefMap { let root_file_id = context.crate_graph[crate_id].root_file_id; let mut ast = parse_file(&mut context.file_manager, root_file_id, errors); + // TODO: This check should be removed once we fully move over to the new SSA pass + // Compiling with the old SSA pass will lead to duplicate method definitions between + // the `slice` and `array` modules of the stdlib if !context.def_interner.enable_slices && crate_id == CrateId::new(1) { ast.module_decls.retain(|ident| ident.0.contents != "slice"); } From cc04a7a2c1e9915e77ba1ef96152c2c4b2c22227 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Mon, 3 Jul 2023 16:34:28 +0000 Subject: [PATCH 22/51] remove dbg --- crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index ffdf80c3d76..79eccb69b92 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -692,7 +692,6 @@ impl Context { (&elements[0]).into() } Type::Slice(elements) => { - dbg!("got slice type"); assert_eq!(elements.len(), 1); (&elements[0]).into() } From c5d9d9cf9aaa2b6718c308406fe55987ff5249bc Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 08:15:09 +0000 Subject: [PATCH 23/51] fix array len from slice params --- crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs | 10 ++++++++++ .../noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 3f8327b891e..2da893d35b6 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -346,6 +346,16 @@ impl DataFlowGraph { } } + pub(crate) fn get_array_parameter(&self, value: ValueId) -> Option<(Rc, usize)> { + match &self.values[self.resolve(value)] { + Value::Param { typ, .. } => match typ { + Type::Array(element_size, size) => Some((element_size.clone(), size.clone())), + _ => None, + }, + _ => None, + } + } + /// Sets the terminator instruction for the given basic block pub(crate) fn set_block_terminator( &mut self, diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index f7462d3c469..b57efaad34f 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -393,6 +393,8 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) _ => vec![], }; + dbg!(intrinsic.clone()); + match intrinsic { Intrinsic::ToBits(endian) => { let field = constant_args[0]; @@ -413,6 +415,12 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) Type::Numeric(NumericType::NativeField), ); SimplifiedTo(slice_len) + } else if let Some((_, slice_len)) = dfg.get_array_parameter(arguments[0]) { + let slice_len = dfg.make_constant( + FieldElement::from(slice_len as u128), + Type::Numeric(NumericType::NativeField), + ); + SimplifiedTo(slice_len) } else { None } From 0be7871e342010bf48754919939838cf3b4f9172 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 08:19:32 +0000 Subject: [PATCH 24/51] remove old debug --- crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index b57efaad34f..3731dd7418c 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -393,8 +393,6 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) _ => vec![], }; - dbg!(intrinsic.clone()); - match intrinsic { Intrinsic::ToBits(endian) => { let field = constant_args[0]; From 525cfd64edafc5ce9186ba5a081be7a3b6e979b2 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 08:45:09 +0000 Subject: [PATCH 25/51] unwrap_array_element_type method in monomorphization pass --- .../src/monomorphization/mod.rs | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index 9afeecbb8af..1b0d31e5052 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -267,16 +267,7 @@ impl<'interner> Monomorphizer<'interner> { Literal(Integer(value, typ)) } HirExpression::Literal(HirLiteral::Array(array)) => match array { - HirArrayLiteral::Standard(array) => { - // Empty slice literal `[]` - if array.is_empty() && self.interner.enable_slices { - return ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { - contents: vec![], - element_type: ast::Type::Unit, - })); - } - self.standard_array(array) - } + HirArrayLiteral::Standard(array) => self.standard_array(expr, array), HirArrayLiteral::Repeated { repeated_element, length } => { self.repeated_array(repeated_element, length) } @@ -356,9 +347,14 @@ impl<'interner> Monomorphizer<'interner> { } } - fn standard_array(&mut self, array: Vec) -> ast::Expression { - let element_type = Self::convert_type(&self.interner.id_type(array[0])); - let contents = vecmap(array, |id| self.expr(id)); + fn standard_array( + &mut self, + array: node_interner::ExprId, + array_elements: Vec, + ) -> ast::Expression { + let element_type = + Self::convert_type(&unwrap_array_element_type(&self.interner.id_type(array))); + let contents = vecmap(array_elements, |id| self.expr(id)); Self::aos_to_soa(contents, element_type) } @@ -1068,6 +1064,16 @@ fn unwrap_struct_type(typ: &HirType) -> Vec<(String, HirType)> { } } +fn unwrap_array_element_type(typ: &HirType) -> HirType { + match typ.clone() { + HirType::Array(_, elem) => *elem, + HirType::Slice(elem) => *elem, + other => { + unreachable!("unwrap_array_element_type: expected an array or slice, found {:?}", other) + } + } +} + fn perform_instantiation_bindings(bindings: &TypeBindings) { for (var, binding) in bindings.values() { *var.borrow_mut() = TypeBinding::Bound(binding.clone()); From a8033c8a8f0778e0a12298c02a5c583e3962f55a Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 08:48:30 +0000 Subject: [PATCH 26/51] cargo clippy --- crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 2da893d35b6..7ba0efa8d48 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -346,12 +346,13 @@ impl DataFlowGraph { } } + /// Returns the Type::Array associated with this ValueId if it refers to an array parameter. + /// Otherwise, this returns None. pub(crate) fn get_array_parameter(&self, value: ValueId) -> Option<(Rc, usize)> { match &self.values[self.resolve(value)] { - Value::Param { typ, .. } => match typ { - Type::Array(element_size, size) => Some((element_size.clone(), size.clone())), - _ => None, - }, + Value::Param { typ: Type::Array(element_type, size), .. } => { + Some((element_type.clone(), *size)) + } _ => None, } } From b33dea2f27a610da950464bf2271a231b8f19b9f Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 09:06:45 +0000 Subject: [PATCH 27/51] mark issue in TODO comment for tech debt that removes slice module in stdlib --- crates/noirc_frontend/src/hir/def_map/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index a6f0ad7572c..908c66938f3 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -79,7 +79,7 @@ impl CrateDefMap { let root_file_id = context.crate_graph[crate_id].root_file_id; let mut ast = parse_file(&mut context.file_manager, root_file_id, errors); - // TODO: This check should be removed once we fully move over to the new SSA pass + // TODO(#1850): This check should be removed once we fully move over to the new SSA pass // Compiling with the old SSA pass will lead to duplicate method definitions between // the `slice` and `array` modules of the stdlib if !context.def_interner.enable_slices && crate_id == CrateId::new(1) { From bc49ec3ddf048e3a00779d78592b52577fa1e003 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 4 Jul 2023 11:49:13 +0100 Subject: [PATCH 28/51] Update crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs Co-authored-by: jfecher --- crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 3731dd7418c..51b66ee2d63 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -410,7 +410,7 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) if let Some((slice, _)) = slice { let slice_len = dfg.make_constant( FieldElement::from(slice.len() as u128), - Type::Numeric(NumericType::NativeField), + Type::field(), ); SimplifiedTo(slice_len) } else if let Some((_, slice_len)) = dfg.get_array_parameter(arguments[0]) { From a51d70d543d3290261b6521d8cdcce1c06526a29 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 13:20:23 +0000 Subject: [PATCH 29/51] fix stdlib crate check --- crates/noirc_driver/src/lib.rs | 2 +- crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs | 5 ++++- .../src/ssa_refactor/ir/instruction.rs | 9 +++------ crates/noirc_frontend/src/graph/mod.rs | 7 +++++++ crates/noirc_frontend/src/hir/def_map/mod.rs | 12 +++++++++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/crates/noirc_driver/src/lib.rs b/crates/noirc_driver/src/lib.rs index 8ad5679071f..aac138e51ba 100644 --- a/crates/noirc_driver/src/lib.rs +++ b/crates/noirc_driver/src/lib.rs @@ -26,7 +26,7 @@ pub use contract::{CompiledContract, ContractFunction, ContractFunctionType}; pub use program::CompiledProgram; pub struct Driver { - context: Context, + pub context: Context, language: Language, is_opcode_supported: Box bool>, } diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs index 7ba0efa8d48..76120c9918e 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/dfg.rs @@ -348,7 +348,10 @@ impl DataFlowGraph { /// Returns the Type::Array associated with this ValueId if it refers to an array parameter. /// Otherwise, this returns None. - pub(crate) fn get_array_parameter(&self, value: ValueId) -> Option<(Rc, usize)> { + pub(crate) fn get_array_parameter_type( + &self, + value: ValueId, + ) -> Option<(Rc, usize)> { match &self.values[self.resolve(value)] { Value::Param { typ: Type::Array(element_type, size), .. } => { Some((element_type.clone(), *size)) diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 51b66ee2d63..6f0f39c27ee 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -408,12 +408,10 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) Intrinsic::ArrayLen => { let slice = dfg.get_array_constant(arguments[0]); if let Some((slice, _)) = slice { - let slice_len = dfg.make_constant( - FieldElement::from(slice.len() as u128), - Type::field(), - ); + let slice_len = + dfg.make_constant(FieldElement::from(slice.len() as u128), Type::field()); SimplifiedTo(slice_len) - } else if let Some((_, slice_len)) = dfg.get_array_parameter(arguments[0]) { + } else if let Some((_, slice_len)) = dfg.get_array_parameter_type(arguments[0]) { let slice_len = dfg.make_constant( FieldElement::from(slice_len as u128), Type::Numeric(NumericType::NativeField), @@ -831,7 +829,6 @@ impl std::fmt::Display for BinaryOp { /// Contains the result to Instruction::simplify, specifying how the instruction /// should be simplified. -#[derive(Debug, Clone)] pub(crate) enum SimplifyResult { /// Replace this function's result with the given value SimplifiedTo(ValueId), diff --git a/crates/noirc_frontend/src/graph/mod.rs b/crates/noirc_frontend/src/graph/mod.rs index 115829e7877..ef2401ea3b2 100644 --- a/crates/noirc_frontend/src/graph/mod.rs +++ b/crates/noirc_frontend/src/graph/mod.rs @@ -11,6 +11,7 @@ use smol_str::SmolStr; /// The local crate is the crate being compiled. /// The caller should ensure that this crate has a CrateId(0). pub const LOCAL_CRATE: CrateId = CrateId(0); + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct CrateId(usize); @@ -51,6 +52,12 @@ pub struct CrateGraph { arena: FxHashMap, } +impl CrateGraph { + pub fn len(&self) -> usize { + self.arena.len() + } +} + /// List of characters that are not allowed in a crate name /// For example, Hyphen(-) is disallowed as it is similar to underscore(_) /// and we do not want names that differ by a hyphen diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index 908c66938f3..e8b96fb9c87 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -1,4 +1,4 @@ -use crate::graph::CrateId; +use crate::graph::{CrateId, LOCAL_CRATE}; use crate::hir::def_collector::dc_crate::DefCollector; use crate::hir::Context; use crate::node_interner::{FuncId, NodeInterner}; @@ -81,8 +81,14 @@ impl CrateDefMap { // TODO(#1850): This check should be removed once we fully move over to the new SSA pass // Compiling with the old SSA pass will lead to duplicate method definitions between - // the `slice` and `array` modules of the stdlib - if !context.def_interner.enable_slices && crate_id == CrateId::new(1) { + // the `slice` and `array` modules of the stdlib. + // + // The last crate represents the stdlib crate. + // After resolving the manifest of the local crate the stdlib is added to the manifest and propagated to all crates + // thus being the last crate. + if !context.def_interner.enable_slices + && CrateId::new(context.crate_graph.len() - 1) == crate_id + { ast.module_decls.retain(|ident| ident.0.contents != "slice"); } From 901c97366da59286fae65ad5bf0822df90782055 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 4 Jul 2023 14:27:07 +0100 Subject: [PATCH 30/51] Update noir_stdlib/src/slice.nr Co-authored-by: jfecher --- noir_stdlib/src/slice.nr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index ba3aab14092..c29f0f84061 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -50,9 +50,9 @@ impl [T] { accumulator } - // Apply a function to each element of the array and an accumulator value, + // Apply a function to each element of the slice and an accumulator value, // returning the final accumulated value. Unlike fold, reduce uses the first - // element of the given array as its starting accumulator value. + // element of the given slice as its starting accumulator value. fn reduce(self, f: fn(T, T) -> T) -> T { let mut accumulator = self[0]; for i in 1 .. self.len() { From 8fe073b6f449f4fbc1a16d335bc15b33a774c8c6 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 4 Jul 2023 14:27:14 +0100 Subject: [PATCH 31/51] Update noir_stdlib/src/slice.nr Co-authored-by: jfecher --- noir_stdlib/src/slice.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index c29f0f84061..f40104686a6 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -40,7 +40,7 @@ impl [T] { ret } - // Apply a function to each element of the array and an accumulator value, + // Apply a function to each element of the slice and an accumulator value, // returning the final accumulated value. This function is also sometimes // called `foldl`, `fold_left`, `reduce`, or `inject`. fn fold(self, mut accumulator: U, f: fn(U, T) -> U) -> U { From 64eccedfaabefb231ae72a9b99c3c5c544726a91 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 4 Jul 2023 14:27:26 +0100 Subject: [PATCH 32/51] Update noir_stdlib/src/slice.nr Co-authored-by: jfecher --- noir_stdlib/src/slice.nr | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index f40104686a6..54054582610 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -26,17 +26,13 @@ impl [T] { a } - // Apply a function to each element of an array, returning a new array + // Apply a function to each element of a slice, returning a new slice // containing the mapped elements. fn map(self, f: fn(T) -> U) -> [U] { - let first_elem = f(self[0]); let mut ret: [U] = []; - ret = ret.push_back(first_elem); - - for i in 1 .. self.len() { - ret.push_back(f(self[i])); + for elem in self { + ret = ret.push_back(f(elem)); } - ret } From 2d1428516ef103dc27bf98279021f3db1ed6e695 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 4 Jul 2023 14:27:35 +0100 Subject: [PATCH 33/51] Update noir_stdlib/src/slice.nr Co-authored-by: jfecher --- noir_stdlib/src/slice.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir_stdlib/src/slice.nr b/noir_stdlib/src/slice.nr index 54054582610..8e813cab1c6 100644 --- a/noir_stdlib/src/slice.nr +++ b/noir_stdlib/src/slice.nr @@ -2,7 +2,7 @@ impl [T] { /// Push a new element to the end of the slice, returning a /// new slice with a length one greater than the - /// original unmodified vector. + /// original unmodified slice. #[builtin(slice_push_back)] fn push_back(_self: Self, _elem: T) -> Self { } From 5d8151fbaabc265d26641f7c7c768721f33e69c6 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 14:34:55 +0000 Subject: [PATCH 34/51] PR comments and stdlib crate assert --- crates/fm/src/lib.rs | 2 +- .../src/ssa_refactor/ir/instruction.rs | 36 +++++++++---------- crates/noirc_frontend/src/graph/mod.rs | 8 ++--- crates/noirc_frontend/src/hir/def_map/mod.rs | 12 ++++--- .../noirc_frontend/src/hir/type_check/expr.rs | 7 ++-- .../src/monomorphization/mod.rs | 10 ++++-- 6 files changed, 40 insertions(+), 35 deletions(-) diff --git a/crates/fm/src/lib.rs b/crates/fm/src/lib.rs index cc87129fc0d..a38fbe81f07 100644 --- a/crates/fm/src/lib.rs +++ b/crates/fm/src/lib.rs @@ -61,7 +61,7 @@ impl FileManager { // Unwrap as we ensure that all file_id's map to a corresponding file in the file map self.file_map.get_file(file_id).unwrap() } - fn path(&mut self, file_id: FileId) -> &Path { + pub fn path(&mut self, file_id: FileId) -> &Path { // Unwrap as we ensure that all file_ids are created by the file manager // So all file_ids will points to a corresponding path self.id_to_path.get(&file_id).unwrap().0.as_path() diff --git a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs index 6f0f39c27ee..2d9da32792b 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ir/instruction.rs @@ -380,30 +380,28 @@ fn simplify_call(func: ValueId, arguments: &[ValueId], dfg: &mut DataFlowGraph) _ => return None, }; - // Fetch args for intrinsic functions with only constant args - let constant_args = match intrinsic { - Intrinsic::ToBits(_) | Intrinsic::ToRadix(_) => { - let constant_args: Option> = - arguments.iter().map(|value_id| dfg.get_numeric_constant(*value_id)).collect(); - match constant_args { - Some(constant_args) => constant_args, - Option::None => return None, - } - } - _ => vec![], - }; + let constant_args: Option> = + arguments.iter().map(|value_id| dfg.get_numeric_constant(*value_id)).collect(); match intrinsic { Intrinsic::ToBits(endian) => { - let field = constant_args[0]; - let limb_count = constant_args[1].to_u128() as u32; - SimplifiedTo(constant_to_radix(endian, field, 2, limb_count, dfg)) + if let Some(constant_args) = constant_args { + let field = constant_args[0]; + let limb_count = constant_args[1].to_u128() as u32; + SimplifiedTo(constant_to_radix(endian, field, 2, limb_count, dfg)) + } else { + None + } } Intrinsic::ToRadix(endian) => { - let field = constant_args[0]; - let radix = constant_args[1].to_u128() as u32; - let limb_count = constant_args[2].to_u128() as u32; - SimplifiedTo(constant_to_radix(endian, field, radix, limb_count, dfg)) + if let Some(constant_args) = constant_args { + let field = constant_args[0]; + let radix = constant_args[1].to_u128() as u32; + let limb_count = constant_args[2].to_u128() as u32; + SimplifiedTo(constant_to_radix(endian, field, radix, limb_count, dfg)) + } else { + None + } } Intrinsic::ArrayLen => { let slice = dfg.get_array_constant(arguments[0]); diff --git a/crates/noirc_frontend/src/graph/mod.rs b/crates/noirc_frontend/src/graph/mod.rs index ef2401ea3b2..381c18073be 100644 --- a/crates/noirc_frontend/src/graph/mod.rs +++ b/crates/noirc_frontend/src/graph/mod.rs @@ -16,10 +16,6 @@ pub const LOCAL_CRATE: CrateId = CrateId(0); pub struct CrateId(usize); impl CrateId { - pub fn new(id: usize) -> CrateId { - CrateId(id) - } - pub fn dummy_id() -> CrateId { CrateId(std::usize::MAX) } @@ -53,8 +49,8 @@ pub struct CrateGraph { } impl CrateGraph { - pub fn len(&self) -> usize { - self.arena.len() + pub fn is_last_crate(&self, crate_id: CrateId) -> bool { + (self.arena.len() - 1) == crate_id.0 } } diff --git a/crates/noirc_frontend/src/hir/def_map/mod.rs b/crates/noirc_frontend/src/hir/def_map/mod.rs index e8b96fb9c87..3e367c3db05 100644 --- a/crates/noirc_frontend/src/hir/def_map/mod.rs +++ b/crates/noirc_frontend/src/hir/def_map/mod.rs @@ -1,4 +1,4 @@ -use crate::graph::{CrateId, LOCAL_CRATE}; +use crate::graph::CrateId; use crate::hir::def_collector::dc_crate::DefCollector; use crate::hir::Context; use crate::node_interner::{FuncId, NodeInterner}; @@ -86,9 +86,13 @@ impl CrateDefMap { // The last crate represents the stdlib crate. // After resolving the manifest of the local crate the stdlib is added to the manifest and propagated to all crates // thus being the last crate. - if !context.def_interner.enable_slices - && CrateId::new(context.crate_graph.len() - 1) == crate_id - { + if !context.def_interner.enable_slices && context.crate_graph.is_last_crate(crate_id) { + let path_as_str = context + .file_manager + .path(root_file_id) + .to_str() + .expect("expected std path to be convertible to str"); + assert_eq!(path_as_str, "std"); ast.module_decls.retain(|ident| ident.0.contents != "slice"); } diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index d920d8e9ab8..87eb5178bf9 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -40,8 +40,11 @@ impl<'interner> TypeChecker<'interner> { let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - let arr_type = if arr.is_empty() && self.interner.enable_slices { - Type::Slice(Box::new(self.interner.next_type_variable())) + let arr_type = if arr.is_empty() { + Type::Array( + Box::new(Type::Constant(0u64)), + Box::new(self.interner.next_type_variable()), + ) } else { Type::Array( Box::new(Type::Constant(arr.len() as u64)), diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index 1b0d31e5052..43aaab182f1 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -1065,9 +1065,13 @@ fn unwrap_struct_type(typ: &HirType) -> Vec<(String, HirType)> { } fn unwrap_array_element_type(typ: &HirType) -> HirType { - match typ.clone() { - HirType::Array(_, elem) => *elem, - HirType::Slice(elem) => *elem, + match typ { + HirType::Array(_, elem) => *elem.clone(), + HirType::Slice(elem) => *elem.clone(), + HirType::TypeVariable(binding) => match &*binding.borrow() { + TypeBinding::Bound(binding) => unwrap_array_element_type(binding), + TypeBinding::Unbound(_) => unreachable!(), + }, other => { unreachable!("unwrap_array_element_type: expected an array or slice, found {:?}", other) } From dd3be16881d92c2b0217021db01103612366c362 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 4 Jul 2023 14:38:51 +0000 Subject: [PATCH 35/51] cargo fmt --- crates/noirc_driver/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/noirc_driver/src/lib.rs b/crates/noirc_driver/src/lib.rs index 7f803ec2d11..2848a64ba70 100644 --- a/crates/noirc_driver/src/lib.rs +++ b/crates/noirc_driver/src/lib.rs @@ -170,7 +170,11 @@ impl Driver { /// /// This returns a (possibly empty) vector of any warnings found on success. /// On error, this returns a non-empty vector of warnings and error messages, with at least one error. - pub fn check_crate(&mut self, deny_warnings: bool, enable_slices: bool) -> Result { + pub fn check_crate( + &mut self, + deny_warnings: bool, + enable_slices: bool, + ) -> Result { // Add the stdlib before we check the crate // TODO: This should actually be done when constructing the driver and then propagated to each dependency when added; // however, the `create_non_local_crate` panics if you add the stdlib as the first crate in the graph and other From b7f4bb2f2bb77b4b1b4f4460fb900ff77a53b929 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 10:45:52 +0000 Subject: [PATCH 36/51] keep enable slices check in expr type check --- crates/noirc_frontend/src/hir/type_check/expr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index 87eb5178bf9..f7fc7300857 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -40,7 +40,7 @@ impl<'interner> TypeChecker<'interner> { let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - let arr_type = if arr.is_empty() { + let arr_type = if arr.is_empty() && self.interner.enable_slices { Type::Array( Box::new(Type::Constant(0u64)), Box::new(self.interner.next_type_variable()), From 4344361703789d6c2a4dfad23cc2f7d74623df2c Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 12:22:47 +0000 Subject: [PATCH 37/51] increase timeout time --- .github/workflows/test.yml | 2 +- crates/noirc_frontend/src/hir/type_check/expr.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b6ec1b56bfd..181898b4be3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: test: name: Test on ${{ matrix.os }} runs-on: ${{ matrix.runner }} - timeout-minutes: 30 + timeout-minutes: 40 strategy: fail-fast: false diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index f7fc7300857..31d4778a530 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -40,7 +40,8 @@ impl<'interner> TypeChecker<'interner> { let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - let arr_type = if arr.is_empty() && self.interner.enable_slices { + let arr_type = if arr.is_empty() { + dbg!("arr.is_empty()"); Type::Array( Box::new(Type::Constant(0u64)), Box::new(self.interner.next_type_variable()), From f2b9cbb6cf2ee74cbc0a1b1b4da945dbca75a724 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 13:06:00 +0000 Subject: [PATCH 38/51] increase timeout to 60m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 181898b4be3..03bd9070fb3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: test: name: Test on ${{ matrix.os }} runs-on: ${{ matrix.runner }} - timeout-minutes: 40 + timeout-minutes: 60 strategy: fail-fast: false From c47f7fbb7d30fde1a830b33460fb9e00b11d6cde Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 13:35:09 +0000 Subject: [PATCH 39/51] back to 30m timeout --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 03bd9070fb3..b6ec1b56bfd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: test: name: Test on ${{ matrix.os }} runs-on: ${{ matrix.runner }} - timeout-minutes: 60 + timeout-minutes: 30 strategy: fail-fast: false From ebf36fb7af91a1b3700ab2e71c033c7046ec23a1 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 13:53:45 +0000 Subject: [PATCH 40/51] excldue 6_array from old ssa test and move 6_array into ssa_refactor tests --- crates/nargo_cli/tests/test_data/config.toml | 2 +- .../test_data_ssa_refactor/6_array/Nargo.toml | 5 ++ .../6_array/Prover.toml | 8 +++ .../6_array/src/main.nr | 53 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6_array/src/main.nr diff --git a/crates/nargo_cli/tests/test_data/config.toml b/crates/nargo_cli/tests/test_data/config.toml index 7a380f6e9f4..d2aeb387fee 100644 --- a/crates/nargo_cli/tests/test_data/config.toml +++ b/crates/nargo_cli/tests/test_data/config.toml @@ -1,6 +1,6 @@ # List of tests to be excluded (i.e not run), as their directory name in test_data # Exclude "poseidonsponge_x5_254" and "sha2_byte" due to relatively long computation time and "sha2_blocks" due to very long computation time. -exclude = ["bit_shifts_runtime", "comptime_fail", "poseidonsponge_x5_254", "sha2_blocks", "sha2_byte"] +exclude = ["bit_shifts_runtime", "comptime_fail", "poseidonsponge_x5_254", "sha2_blocks", "sha2_byte", "6_array"] # List of tests (as their directory name in test_data) expecting to fail: if the test pass, we report an error. diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Nargo.toml new file mode 100644 index 00000000000..7cae77988e3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.7.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Prover.toml new file mode 100644 index 00000000000..2e2ed310ba1 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/Prover.toml @@ -0,0 +1,8 @@ +x = [104, 101, 108, 108, 111] +y = [10, 81, 18, 48, 0] +z = "59" +t = "10" + +#7128 +#15309 +#16349 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/src/main.nr new file mode 100644 index 00000000000..cb063dd50a9 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6_array/src/main.nr @@ -0,0 +1,53 @@ +//Basic tests for arrays +fn main(x: [u32; 5], y: [u32; 5], mut z: u32, t: u32) { + let mut c = 2301; + z = y[4]; + //Test 1: + for i in 0..5 { + c = z*z*y[i]; + z -= c; + } + assert(z==0); //y[4]=0, so c and z are always 0 + + //Test 2: + c = 2301 as u32; + for i in 0..5 { + c = t+2 as u32; + c = z*z*x[i]; + z += x[i]*y[i] - c; + } + assert(z==3814912846); + + //Test 3: + c = 2300001 as u32; + z = y[4]; + for i in 0..5 { + z = z + x[i]*y[i]; + for _i in 0..3 { + c = i as u32 - 2 as u32; + z *= c; + } + } + assert(z==41472); + + //Test 4: + z = y[4]; + for i in 0..3 { + z += x[i] * y[i]; + for j in 0..2 { + z += x[i+j] - y[i+j]; + } + } + assert(z ==11539); + + //Test 5: + let cc = if z < 1 { x } else { y }; + assert(cc[0] == y[0]); + + // Test 6: for-each loops + for y_elem in y { + for x_elem in x { + assert(x_elem != y_elem); + } + } +} \ No newline at end of file From 2938b47a9ef5513a794e06c73d854a0bd4bf52f5 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Wed, 5 Jul 2023 18:40:48 +0000 Subject: [PATCH 41/51] unwrap_or_else for first_elem_type --- .../noirc_frontend/src/hir/type_check/expr.rs | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/crates/noirc_frontend/src/hir/type_check/expr.rs b/crates/noirc_frontend/src/hir/type_check/expr.rs index 24fa5833a2c..bac8b869d13 100644 --- a/crates/noirc_frontend/src/hir/type_check/expr.rs +++ b/crates/noirc_frontend/src/hir/type_check/expr.rs @@ -42,20 +42,15 @@ impl<'interner> TypeChecker<'interner> { HirLiteral::Array(HirArrayLiteral::Standard(arr)) => { let elem_types = vecmap(&arr, |arg| self.check_expression(arg)); - let first_elem_type = elem_types.get(0).cloned().unwrap_or(Type::Error); - - let arr_type = if arr.is_empty() { - dbg!("arr.is_empty()"); - Type::Array( - Box::new(Type::Constant(0u64)), - Box::new(self.interner.next_type_variable()), - ) - } else { - Type::Array( - Box::new(Type::Constant(arr.len() as u64)), - Box::new(first_elem_type.clone()), - ) - }; + let first_elem_type = elem_types + .get(0) + .cloned() + .unwrap_or_else(|| self.interner.next_type_variable()); + + let arr_type = Type::Array( + Box::new(Type::Constant(arr.len() as u64)), + Box::new(first_elem_type.clone()), + ); // Check if the array is homogeneous for (index, elem_type) in elem_types.iter().enumerate().skip(1) { From fa29eb42220d11545a0f7579eaf52f83fd7f69ec Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 07:37:24 +0000 Subject: [PATCH 42/51] only test new ssa :D --- crates/nargo_cli/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nargo_cli/build.rs b/crates/nargo_cli/build.rs index b30bdbe6a82..4b431635f5a 100644 --- a/crates/nargo_cli/build.rs +++ b/crates/nargo_cli/build.rs @@ -32,7 +32,7 @@ fn main() { let destination = Path::new(&out_dir).join("prove_and_verify.rs"); let mut test_file = File::create(destination).unwrap(); - generate_tests(&mut test_file, false); + // generate_tests(&mut test_file, false); generate_tests(&mut test_file, true); } From 34d675552dccb88b74f36fd3278264f4e45268c0 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 11:00:31 +0000 Subject: [PATCH 43/51] add back old ssa tests --- crates/nargo_cli/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nargo_cli/build.rs b/crates/nargo_cli/build.rs index 4b431635f5a..b30bdbe6a82 100644 --- a/crates/nargo_cli/build.rs +++ b/crates/nargo_cli/build.rs @@ -32,7 +32,7 @@ fn main() { let destination = Path::new(&out_dir).join("prove_and_verify.rs"); let mut test_file = File::create(destination).unwrap(); - // generate_tests(&mut test_file, false); + generate_tests(&mut test_file, false); generate_tests(&mut test_file, true); } From f0d0539b74bd112e644340639cfd2919a63b1fed Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 12:25:21 +0000 Subject: [PATCH 44/51] remove Vec type --- crates/noirc_evaluator/src/ssa/context.rs | 1 - crates/noirc_evaluator/src/ssa/value.rs | 1 - .../src/ssa_refactor/ssa_gen/context.rs | 5 ---- crates/noirc_frontend/src/ast/mod.rs | 8 ----- .../src/hir/resolution/resolver.rs | 15 ---------- crates/noirc_frontend/src/hir_def/types.rs | 12 -------- .../src/monomorphization/ast.rs | 2 -- .../src/monomorphization/mod.rs | 30 +++++++------------ crates/noirc_frontend/src/node_interner.rs | 1 - crates/noirc_frontend/src/parser/parser.rs | 7 ----- 10 files changed, 10 insertions(+), 72 deletions(-) diff --git a/crates/noirc_evaluator/src/ssa/context.rs b/crates/noirc_evaluator/src/ssa/context.rs index befde373ea1..0fecb633db6 100644 --- a/crates/noirc_evaluator/src/ssa/context.rs +++ b/crates/noirc_evaluator/src/ssa/context.rs @@ -1213,7 +1213,6 @@ impl SsaContext { Type::Tuple(_) => todo!("Conversion to ObjectType is unimplemented for tuples"), Type::String(_) => todo!("Conversion to ObjectType is unimplemented for strings"), Type::Slice(_) => todo!("Conversion to ObjectType is unimplemented for slices"), - Type::Vec(_) => todo!("Conversion to ObjectType is unimplemented for Vecs"), } } diff --git a/crates/noirc_evaluator/src/ssa/value.rs b/crates/noirc_evaluator/src/ssa/value.rs index 5b5cf8d1af8..35e5f9f12de 100644 --- a/crates/noirc_evaluator/src/ssa/value.rs +++ b/crates/noirc_evaluator/src/ssa/value.rs @@ -97,7 +97,6 @@ impl Value { | Type::Function(..) | Type::Array(..) | Type::Slice(..) - | Type::Vec(..) | Type::String(..) | Type::Integer(..) | Type::Bool diff --git a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs index a85cdf5c771..9ce34cb1e6b 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/ssa_gen/context.rs @@ -215,11 +215,6 @@ impl<'a> FunctionContext<'a> { Self::convert_non_tuple_type(element); Type::Reference } - - // How should we represent Vecs? - // Are they a struct of array + length + capacity? - // Or are they just references? - ast::Type::Vec(_) => Type::Reference, } } diff --git a/crates/noirc_frontend/src/ast/mod.rs b/crates/noirc_frontend/src/ast/mod.rs index 2f11ecc1564..cd20a6f0675 100644 --- a/crates/noirc_frontend/src/ast/mod.rs +++ b/crates/noirc_frontend/src/ast/mod.rs @@ -39,14 +39,6 @@ pub enum UnresolvedType { /// A Named UnresolvedType can be a struct type or a type variable Named(Path, Vec), - /// A vector of some element type. - /// It is expected the length of the generics is 1 so the inner Vec is technically unnecessary, - /// but we keep them all around to verify generic count after parsing for better error messages. - /// - /// The Span here encompasses the entire type and is used to issue an error if exactly 1 - /// generic argument is not given. - Vec(Vec, Span), - /// &mut T MutableReference(Box), diff --git a/crates/noirc_frontend/src/hir/resolution/resolver.rs b/crates/noirc_frontend/src/hir/resolution/resolver.rs index 8d5c7ad8855..47a40d8c14d 100644 --- a/crates/noirc_frontend/src/hir/resolution/resolver.rs +++ b/crates/noirc_frontend/src/hir/resolution/resolver.rs @@ -351,20 +351,6 @@ impl<'a> Resolver<'a> { let ret = Box::new(self.resolve_type_inner(*ret, new_variables)); Type::Function(args, ret) } - UnresolvedType::Vec(mut args, span) => { - let arg = if args.len() != 1 { - self.push_err(ResolverError::IncorrectGenericCount { - span, - struct_type: "Vec".into(), - actual: args.len(), - expected: 1, - }); - Type::Error - } else { - self.resolve_type_inner(args.remove(0), new_variables) - }; - Type::Vec(Box::new(arg)) - } UnresolvedType::MutableReference(element) => { Type::MutableReference(Box::new(self.resolve_type_inner(*element, new_variables))) } @@ -791,7 +777,6 @@ impl<'a> Resolver<'a> { } } } - Type::Vec(element) => Self::find_numeric_generics_in_type(element, found), Type::MutableReference(element) => Self::find_numeric_generics_in_type(element, found), } } diff --git a/crates/noirc_frontend/src/hir_def/types.rs b/crates/noirc_frontend/src/hir_def/types.rs index 5916b20d4de..31a1e82a621 100644 --- a/crates/noirc_frontend/src/hir_def/types.rs +++ b/crates/noirc_frontend/src/hir_def/types.rs @@ -74,11 +74,6 @@ pub enum Type { /// A functions with arguments, and a return type. Function(Vec, Box), - /// A variable-sized Vector type. - /// Unlike arrays, this type can have a dynamic size and can grow/shrink dynamically via .push, - /// .pop, and similar methods. - Vec(Box), - /// &mut T MutableReference(Box), @@ -605,7 +600,6 @@ impl Type { } }) } - Type::Vec(element) => element.contains_numeric_typevar(target_id), Type::MutableReference(element) => element.contains_numeric_typevar(target_id), } } @@ -674,9 +668,6 @@ impl std::fmt::Display for Type { let args = vecmap(args, ToString::to_string); write!(f, "fn({}) -> {}", args.join(", "), ret) } - Type::Vec(element) => { - write!(f, "Vec<{element}>") - } Type::MutableReference(element) => { write!(f, "&mut {element}") } @@ -1241,7 +1232,6 @@ impl Type { Type::Function(_, _) => unreachable!(), Type::Slice(_) => unreachable!("slices cannot be used in the abi"), Type::MutableReference(_) => unreachable!("&mut cannot be used in the abi"), - Type::Vec(_) => unreachable!("Vecs cannot be used in the abi"), } } @@ -1359,7 +1349,6 @@ impl Type { let ret = Box::new(ret.substitute(type_bindings)); Type::Function(args, ret) } - Type::Vec(element) => Type::Vec(Box::new(element.substitute(type_bindings))), Type::MutableReference(element) => { Type::MutableReference(Box::new(element.substitute(type_bindings))) } @@ -1393,7 +1382,6 @@ impl Type { Type::Function(args, ret) => { args.iter().any(|arg| arg.occurs(target_id)) || ret.occurs(target_id) } - Type::Vec(element) => element.occurs(target_id), Type::MutableReference(element) => element.occurs(target_id), Type::FieldElement(_) diff --git a/crates/noirc_frontend/src/monomorphization/ast.rs b/crates/noirc_frontend/src/monomorphization/ast.rs index 17a34f49e41..7cac2ed8e4f 100644 --- a/crates/noirc_frontend/src/monomorphization/ast.rs +++ b/crates/noirc_frontend/src/monomorphization/ast.rs @@ -210,7 +210,6 @@ pub enum Type { Unit, Tuple(Vec), Slice(Box), - Vec(Box), MutableReference(Box), Function(/*args:*/ Vec, /*ret:*/ Box), } @@ -325,7 +324,6 @@ impl std::fmt::Display for Type { write!(f, "fn({}) -> {}", args.join(", "), ret) } Type::Slice(element) => write!(f, "[{element}"), - Type::Vec(element) => write!(f, "Vec<{element}>"), Type::MutableReference(element) => write!(f, "&mut {element}"), } } diff --git a/crates/noirc_frontend/src/monomorphization/mod.rs b/crates/noirc_frontend/src/monomorphization/mod.rs index aa41d2eef58..d56390dbf0d 100644 --- a/crates/noirc_frontend/src/monomorphization/mod.rs +++ b/crates/noirc_frontend/src/monomorphization/mod.rs @@ -406,10 +406,7 @@ impl<'interner> Monomorphizer<'interner> { }, )), - ast::Type::Array(_, _) - | ast::Type::String(_) - | ast::Type::Vec(_) - | ast::Type::Slice(_) => { + ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Slice(_) => { unreachable!("Nested arrays, arrays of strings, and Vecs are not supported") } } @@ -453,10 +450,7 @@ impl<'interner> Monomorphizer<'interner> { })) } - ast::Type::Array(_, _) - | ast::Type::String(_) - | ast::Type::Vec(_) - | ast::Type::Slice(_) => { + ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Slice(_) => { unreachable!("Nested arrays and arrays of strings or Vecs are not supported") } } @@ -713,11 +707,6 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Function(args, ret) } - HirType::Vec(element) => { - let element = Self::convert_type(element); - ast::Type::Vec(Box::new(element)) - } - HirType::MutableReference(element) => { let element = Self::convert_type(element); ast::Type::MutableReference(Box::new(element)) @@ -744,10 +733,7 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Tuple(vecmap(elements, |typ| Self::aos_to_soa_type(length, typ))) } - ast::Type::Array(_, _) - | ast::Type::String(_) - | ast::Type::Vec(_) - | ast::Type::Slice(_) => { + ast::Type::Array(_, _) | ast::Type::String(_) | ast::Type::Slice(_) => { unreachable!("Nested arrays and arrays of strings are not supported") } } @@ -1015,14 +1001,18 @@ impl<'interner> Monomorphizer<'interner> { ast::Type::Function(parameter_types, ret_type) => { self.create_zeroed_function(parameter_types, ret_type) } - ast::Type::Slice(element_type) => ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { contents: vec![], element_type: *element_type.clone() })), - ast::Type::Vec(_) => panic!("Cannot create a zeroed Vec value. This type is currently unimplemented and meant to be unusable outside of unconstrained functions"), + ast::Type::Slice(element_type) => { + ast::Expression::Literal(ast::Literal::Array(ast::ArrayLiteral { + contents: vec![], + element_type: *element_type.clone(), + })) + } ast::Type::MutableReference(element) => { use crate::UnaryOp::MutableReference; let rhs = Box::new(self.zeroed_value_of_type(element)); let result_type = typ.clone(); ast::Expression::Unary(ast::Unary { rhs, result_type, operator: MutableReference }) - }, + } } } diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index b19772bd698..5fa0c0cf3ff 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -626,7 +626,6 @@ fn get_type_method_key(typ: &Type) -> Option { Type::Unit => Some(Unit), Type::Tuple(_) => Some(Tuple), Type::Function(_, _) => Some(Function), - Type::Vec(_) => Some(Vec), Type::MutableReference(element) => get_type_method_key(element), // We do not support adding methods to these types diff --git a/crates/noirc_frontend/src/parser/parser.rs b/crates/noirc_frontend/src/parser/parser.rs index f1ca5eb1708..2303825dd01 100644 --- a/crates/noirc_frontend/src/parser/parser.rs +++ b/crates/noirc_frontend/src/parser/parser.rs @@ -646,7 +646,6 @@ fn parse_type_inner( named_type(recursive_type_parser.clone()), array_type(recursive_type_parser.clone()), tuple_type(recursive_type_parser.clone()), - vec_type(recursive_type_parser.clone()), function_type(recursive_type_parser.clone()), mutable_reference_type(recursive_type_parser), )) @@ -706,12 +705,6 @@ fn named_type(type_parser: impl NoirParser) -> impl NoirParser) -> impl NoirParser { - keyword(Keyword::Vec) - .ignore_then(generic_type_args(type_parser)) - .map_with_span(UnresolvedType::Vec) -} - fn generic_type_args( type_parser: impl NoirParser, ) -> impl NoirParser> { From cd255829ed2cd897bd8b1821a40fc911d6a784da Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 12:28:04 +0000 Subject: [PATCH 45/51] remove Vec type check --- crates/noirc_frontend/src/ast/mod.rs | 4 ---- crates/noirc_frontend/src/hir_def/types.rs | 5 ----- crates/noirc_frontend/src/node_interner.rs | 1 - 3 files changed, 10 deletions(-) diff --git a/crates/noirc_frontend/src/ast/mod.rs b/crates/noirc_frontend/src/ast/mod.rs index cd20a6f0675..339dc346e64 100644 --- a/crates/noirc_frontend/src/ast/mod.rs +++ b/crates/noirc_frontend/src/ast/mod.rs @@ -107,10 +107,6 @@ impl std::fmt::Display for UnresolvedType { let args = vecmap(args, ToString::to_string); write!(f, "fn({}) -> {ret}", args.join(", ")) } - Vec(args, _span) => { - let args = vecmap(args, ToString::to_string); - write!(f, "Vec<{}>", args.join(", ")) - } MutableReference(element) => write!(f, "&mut {element}"), Unit => write!(f, "()"), Error => write!(f, "error"), diff --git a/crates/noirc_frontend/src/hir_def/types.rs b/crates/noirc_frontend/src/hir_def/types.rs index 31a1e82a621..9441307bf28 100644 --- a/crates/noirc_frontend/src/hir_def/types.rs +++ b/crates/noirc_frontend/src/hir_def/types.rs @@ -1003,8 +1003,6 @@ impl Type { } } - (Vec(elem_a), Vec(elem_b)) => elem_a.try_unify(elem_b, span), - (MutableReference(elem_a), MutableReference(elem_b)) => elem_a.try_unify(elem_b, span), (other_a, other_b) => { @@ -1142,8 +1140,6 @@ impl Type { } } - (Vec(elem_a), Vec(elem_b)) => elem_a.is_subtype_of(elem_b, span), - // `T <: U => &mut T <: &mut U` would be unsound(*), so mutable // references are never subtypes of each other. // @@ -1425,7 +1421,6 @@ impl Type { let ret = Box::new(ret.follow_bindings()); Function(args, ret) } - Vec(element) => Vec(Box::new(element.follow_bindings())), MutableReference(element) => MutableReference(Box::new(element.follow_bindings())), // Expect that this function should only be called on instantiated types diff --git a/crates/noirc_frontend/src/node_interner.rs b/crates/noirc_frontend/src/node_interner.rs index 5fa0c0cf3ff..f37daf45136 100644 --- a/crates/noirc_frontend/src/node_interner.rs +++ b/crates/noirc_frontend/src/node_interner.rs @@ -609,7 +609,6 @@ enum TypeMethodKey { Unit, Tuple, Function, - Vec, } fn get_type_method_key(typ: &Type) -> Option { From 691a35b776325b8d86d675862b84f3a33808a3d8 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 12:34:52 +0000 Subject: [PATCH 46/51] remove Vec from stdlib as we have no primitive type until we add in Vec using mutable refs --- noir_stdlib/src/collections/vec.nr | 24 ------------------------ noir_stdlib/src/lib.nr | 1 - 2 files changed, 25 deletions(-) delete mode 100644 noir_stdlib/src/collections/vec.nr diff --git a/noir_stdlib/src/collections/vec.nr b/noir_stdlib/src/collections/vec.nr deleted file mode 100644 index 130dfdfc2a6..00000000000 --- a/noir_stdlib/src/collections/vec.nr +++ /dev/null @@ -1,24 +0,0 @@ - -// These methods are all stubs currently and aren't implemented internally yet. -// For a similar reason, no constructor for Vec is exposed yet since the type -// is still in-progress. -impl Vec { - /// Get an element from the vector at the given index. - /// Fails with a constraint error if the given index - /// points beyond the end of the vector. - #[builtin(vec_get)] - fn get(_self: Self, _index: Field) -> T { } - - /// Push a new element to the end of the vector, returning a - /// new vector with a length one greater than the - /// original unmodified vector. - #[builtin(vec_push)] - fn push(_self: Self, _elem: T) -> Self { } - - /// Pop an element from the end of the given vector, returning - /// a new vector with a length of one less than the given vector, - /// as well as the popped element. - /// Fails with a constraint error if the given vector's length is zero. - #[builtin(vec_pop)] - fn pop(_self: Self) -> (Self, T) { } -} diff --git a/noir_stdlib/src/lib.nr b/noir_stdlib/src/lib.nr index e263a46fd2a..fa183f0bab6 100644 --- a/noir_stdlib/src/lib.nr +++ b/noir_stdlib/src/lib.nr @@ -11,7 +11,6 @@ mod sha512; mod field; mod ec; mod unsafe; -mod collections; mod compat; #[builtin(println)] From f0f0a71f6f51da60adc0df8cf4d83db6341b9c7b Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 15:33:11 +0000 Subject: [PATCH 47/51] try w/ a pub input to 6_array --- crates/nargo_cli/tests/test_data/6_array/src/main.nr | 2 +- crates/nargo_cli/tests/test_data/config.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/nargo_cli/tests/test_data/6_array/src/main.nr b/crates/nargo_cli/tests/test_data/6_array/src/main.nr index 9593c56524f..f868841c36d 100644 --- a/crates/nargo_cli/tests/test_data/6_array/src/main.nr +++ b/crates/nargo_cli/tests/test_data/6_array/src/main.nr @@ -1,5 +1,5 @@ //Basic tests for arrays -fn main(x: [u32; 5], y: [u32; 5], mut z: u32, t: u32) { +fn main(x: [u32; 5], y: [u32; 5], mut z: u32, pub t: u32) { let mut c = 2301; z = y[4]; //Test 1: diff --git a/crates/nargo_cli/tests/test_data/config.toml b/crates/nargo_cli/tests/test_data/config.toml index d2aeb387fee..7a380f6e9f4 100644 --- a/crates/nargo_cli/tests/test_data/config.toml +++ b/crates/nargo_cli/tests/test_data/config.toml @@ -1,6 +1,6 @@ # List of tests to be excluded (i.e not run), as their directory name in test_data # Exclude "poseidonsponge_x5_254" and "sha2_byte" due to relatively long computation time and "sha2_blocks" due to very long computation time. -exclude = ["bit_shifts_runtime", "comptime_fail", "poseidonsponge_x5_254", "sha2_blocks", "sha2_byte", "6_array"] +exclude = ["bit_shifts_runtime", "comptime_fail", "poseidonsponge_x5_254", "sha2_blocks", "sha2_byte"] # List of tests (as their directory name in test_data) expecting to fail: if the test pass, we report an error. From b55a45a517065b3d2589717486cfc5c7be2e144f Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 6 Jul 2023 16:01:21 +0000 Subject: [PATCH 48/51] im dumb and misplaced the pub --- crates/nargo_cli/tests/test_data/6_array/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nargo_cli/tests/test_data/6_array/src/main.nr b/crates/nargo_cli/tests/test_data/6_array/src/main.nr index f868841c36d..977fec99597 100644 --- a/crates/nargo_cli/tests/test_data/6_array/src/main.nr +++ b/crates/nargo_cli/tests/test_data/6_array/src/main.nr @@ -1,5 +1,5 @@ //Basic tests for arrays -fn main(x: [u32; 5], y: [u32; 5], mut z: u32, pub t: u32) { +fn main(x: [u32; 5], y: [u32; 5], mut z: u32, t: pub u32) { let mut c = 2301; z = y[4]; //Test 1: From b746a96b0f9ced8c8bc3e54a08bc99d9c096b127 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 7 Jul 2023 09:26:08 +0000 Subject: [PATCH 49/51] remove pub --- crates/nargo_cli/tests/test_data/6_array/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nargo_cli/tests/test_data/6_array/src/main.nr b/crates/nargo_cli/tests/test_data/6_array/src/main.nr index 977fec99597..9593c56524f 100644 --- a/crates/nargo_cli/tests/test_data/6_array/src/main.nr +++ b/crates/nargo_cli/tests/test_data/6_array/src/main.nr @@ -1,5 +1,5 @@ //Basic tests for arrays -fn main(x: [u32; 5], y: [u32; 5], mut z: u32, t: pub u32) { +fn main(x: [u32; 5], y: [u32; 5], mut z: u32, t: u32) { let mut c = 2301; z = y[4]; //Test 1: From daac68475aad7398decbf1af657ead7a058e82af Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 7 Jul 2023 10:04:46 +0000 Subject: [PATCH 50/51] temp: remove unused tests for debugging --- .../tests/test_data/1_mul/Nargo.toml | 5 - .../tests/test_data/1_mul/Prover.toml | 3 - .../tests/test_data/1_mul/src/main.nr | 9 - .../tests/test_data/2_div/Nargo.toml | 5 - .../tests/test_data/2_div/Prover.toml | 3 - .../tests/test_data/2_div/src/main.nr | 7 - .../tests/test_data/3_add/Nargo.toml | 5 - .../tests/test_data/3_add/Prover.toml | 3 - .../tests/test_data/3_add/src/main.nr | 8 - .../tests/test_data/4_sub/Nargo.toml | 5 - .../tests/test_data/4_sub/Prover.toml | 3 - .../tests/test_data/4_sub/src/main.nr | 5 - .../tests/test_data/5_over/Nargo.toml | 5 - .../tests/test_data/5_over/Prover.toml | 2 - .../tests/test_data/5_over/src/main.nr | 9 - crates/nargo_cli/tests/test_data/6/Nargo.toml | 5 - .../nargo_cli/tests/test_data/6/Prover.toml | 39 --- .../nargo_cli/tests/test_data/6/src/main.nr | 20 -- crates/nargo_cli/tests/test_data/7/Nargo.toml | 5 - .../nargo_cli/tests/test_data/7/Prover.toml | 38 --- .../nargo_cli/tests/test_data/7/src/main.nr | 10 - .../tests/test_data/7_function/Nargo.toml | 5 - .../tests/test_data/7_function/Prover.toml | 6 - .../tests/test_data/7_function/src/main.nr | 149 --------- .../tests/test_data/8_integration/Nargo.toml | 5 - .../tests/test_data/8_integration/Prover.toml | 5 - .../tests/test_data/8_integration/src/main.nr | 283 ----------------- .../tests/test_data/9_conditional/Nargo.toml | 5 - .../tests/test_data/9_conditional/Prover.toml | 38 --- .../tests/test_data/9_conditional/src/main.nr | 277 ----------------- .../tests/test_data/array_dynamic/Nargo.toml | 5 - .../tests/test_data/array_dynamic/Prover.toml | 9 - .../tests/test_data/array_dynamic/src/main.nr | 32 -- .../tests/test_data/array_len/Nargo.toml | 5 - .../tests/test_data/array_len/Prover.toml | 2 - .../tests/test_data/array_len/src/main.nr | 23 -- .../tests/test_data/array_neq/Nargo.toml | 5 - .../tests/test_data/array_neq/Prover.toml | 2 - .../tests/test_data/array_neq/src/main.nr | 4 - .../tests/test_data/array_sort/Nargo.toml | 5 - .../tests/test_data/array_sort/Prover.toml | 1 - .../tests/test_data/array_sort/src/main.nr | 6 - .../tests/test_data/assert/Nargo.toml | 5 - .../tests/test_data/assert/Prover.toml | 1 - .../tests/test_data/assert/src/main.nr | 3 - .../tests/test_data/assign_ex/Nargo.toml | 7 - .../tests/test_data/assign_ex/Prover.toml | 2 - .../tests/test_data/assign_ex/src/main.nr | 6 - .../tests/test_data/bit_and/Nargo.toml | 5 - .../tests/test_data/bit_and/Prover.toml | 2 - .../tests/test_data/bit_and/src/main.nr | 18 -- .../test_data/bit_shifts_comptime/Nargo.toml | 5 - .../test_data/bit_shifts_comptime/Prover.toml | 1 - .../test_data/bit_shifts_comptime/src/main.nr | 13 - .../test_data/bit_shifts_runtime/Nargo.toml | 5 - .../test_data/bit_shifts_runtime/Prover.toml | 2 - .../test_data/bit_shifts_runtime/src/main.nr | 12 - .../tests/test_data/bool_not/Nargo.toml | 7 - .../tests/test_data/bool_not/Prover.toml | 1 - .../tests/test_data/bool_not/src/main.nr | 5 - .../tests/test_data/bool_or/Nargo.toml | 7 - .../tests/test_data/bool_or/Prover.toml | 2 - .../tests/test_data/bool_or/src/main.nr | 7 - .../tests/test_data/cast_bool/Nargo.toml | 7 - .../tests/test_data/cast_bool/Prover.toml | 2 - .../tests/test_data/cast_bool/src/main.nr | 6 - .../comptime_array_access/Nargo.toml | 5 - .../comptime_array_access/Prover.toml | 1 - .../comptime_array_access/src/main.nr | 17 - .../tests/test_data/comptime_fail/Nargo.toml | 5 - .../tests/test_data/comptime_fail/Prover.toml | 1 - .../tests/test_data/comptime_fail/src/main.nr | 15 - .../comptime_recursion_regression/Nargo.toml | 5 - .../comptime_recursion_regression/Prover.toml | 2 - .../comptime_recursion_regression/src/main.nr | 4 - .../tests/test_data/contracts/Nargo.toml | 5 - .../tests/test_data/contracts/Prover.toml | 2 - .../tests/test_data/contracts/src/main.nr | 8 - .../tests/test_data/ec_baby_jubjub/Nargo.toml | 6 - .../test_data/ec_baby_jubjub/src/main.nr | 226 -------------- .../test_data/ecdsa_secp256k1/Nargo.toml | 6 - .../test_data/ecdsa_secp256k1/Prover.toml | 209 ------------- .../test_data/ecdsa_secp256k1/src/main.nr | 11 - .../tests/test_data/eddsa/Nargo.toml | 5 - .../tests/test_data/eddsa/Prover.toml | 3 - .../tests/test_data/eddsa/src/main.nr | 55 ---- .../tests/test_data/generics/Nargo.toml | 7 - .../tests/test_data/generics/Prover.toml | 2 - .../tests/test_data/generics/src/main.nr | 57 ---- .../tests/test_data/global_consts/Nargo.toml | 7 - .../tests/test_data/global_consts/Prover.toml | 4 - .../tests/test_data/global_consts/src/baz.nr | 5 - .../tests/test_data/global_consts/src/foo.nr | 11 - .../test_data/global_consts/src/foo/bar.nr | 5 - .../tests/test_data/global_consts/src/main.nr | 88 ------ .../tests/test_data/hash_to_field/Nargo.toml | 5 - .../tests/test_data/hash_to_field/Prover.toml | 1 - .../tests/test_data/hash_to_field/src/main.nr | 5 - .../higher_order_functions/Nargo.toml | 5 - .../higher_order_functions/Prover.toml | 1 - .../tests/test_data/if_else_chain/Nargo.toml | 5 - .../tests/test_data/if_else_chain/Prover.toml | 2 - .../tests/test_data/if_else_chain/src/main.nr | 16 - .../tests/test_data/keccak256/Nargo.toml | 5 - .../tests/test_data/keccak256/Prover.toml | 35 --- .../tests/test_data/keccak256/src/main.nr | 22 -- .../tests/test_data/main_bool_arg/Nargo.toml | 6 - .../tests/test_data/main_bool_arg/Prover.toml | 2 - .../tests/test_data/main_bool_arg/src/main.nr | 8 - .../tests/test_data/main_return/Nargo.toml | 6 - .../tests/test_data/main_return/Prover.toml | 1 - .../tests/test_data/main_return/src/main.nr | 3 - .../tests/test_data/merkle_insert/Nargo.toml | 7 - .../tests/test_data/merkle_insert/Prover.toml | 11 - .../tests/test_data/merkle_insert/src/main.nr | 21 -- .../tests/test_data/modules/Nargo.toml | 5 - .../tests/test_data/modules/Prover.toml | 2 - .../tests/test_data/modules/src/foo.nr | 3 - .../tests/test_data/modules/src/main.nr | 14 - .../tests/test_data/modules_more/Nargo.toml | 5 - .../tests/test_data/modules_more/Prover.toml | 4 - .../tests/test_data/modules_more/src/foo.nr | 5 - .../test_data/modules_more/src/foo/bar.nr | 3 - .../tests/test_data/modules_more/src/main.nr | 6 - .../tests/test_data/modulus/Nargo.toml | 5 - .../tests/test_data/modulus/Prover.toml | 290 ------------------ .../tests/test_data/modulus/src/main.nr | 27 -- .../test_data/numeric_generics/Nargo.toml | 7 - .../test_data/numeric_generics/Prover.toml | 0 .../test_data/numeric_generics/src/main.nr | 39 --- .../tests/test_data/pedersen_check/Nargo.toml | 7 - .../test_data/pedersen_check/Prover.toml | 6 - .../test_data/pedersen_check/src/main.nr | 17 - .../test_data/poseidon_bn254_hash/Nargo.toml | 6 - .../test_data/poseidon_bn254_hash/Prover.toml | 4 - .../test_data/poseidon_bn254_hash/src/main.nr | 10 - .../poseidonsponge_x5_254/Nargo.toml | 6 - .../poseidonsponge_x5_254/Prover.toml | 1 - .../poseidonsponge_x5_254/src/main.nr | 9 - .../tests/test_data/pred_eq/Nargo.toml | 7 - .../tests/test_data/pred_eq/Prover.toml | 2 - .../tests/test_data/pred_eq/src/main.nr | 6 - .../tests/test_data/range_fail/Nargo.toml | 5 - .../tests/test_data/range_fail/Prover.toml | 2 - .../tests/test_data/range_fail/src/main.nr | 8 - .../tests/test_data/regression/Nargo.toml | 5 - .../tests/test_data/regression/Prover.toml | 2 - .../tests/test_data/regression/src/main.nr | 101 ------ .../tests/test_data/scalar_mul/Nargo.toml | 5 - .../tests/test_data/scalar_mul/Prover.toml | 7 - .../tests/test_data/scalar_mul/src/main.nr | 22 -- .../tests/test_data/schnorr/Nargo.toml | 5 - .../tests/test_data/schnorr/Prover.toml | 9 - .../tests/test_data/schnorr/src/main.nr | 10 - .../tests/test_data/sha256/Nargo.toml | 5 - .../tests/test_data/sha256/Prover.toml | 36 --- .../tests/test_data/sha256/src/main.nr | 19 -- .../tests/test_data/sha2_blocks/Nargo.toml | 5 - .../tests/test_data/sha2_blocks/Prover.toml | 4 - .../tests/test_data/sha2_blocks/src/main.nr | 22 -- .../tests/test_data/sha2_byte/Nargo.toml | 5 - .../tests/test_data/sha2_byte/Prover.toml | 5 - .../tests/test_data/sha2_byte/src/main.nr | 11 - .../tests/test_data/simple_shield/Nargo.toml | 5 - .../tests/test_data/simple_shield/Prover.toml | 11 - .../tests/test_data/simple_shield/src/main.nr | 35 --- .../tests/test_data/strings/Nargo.toml | 5 - .../tests/test_data/strings/Prover.toml | 4 - .../tests/test_data/strings/src/main.nr | 56 ---- .../tests/test_data/struct/Nargo.toml | 7 - .../tests/test_data/struct/Prover.toml | 2 - .../tests/test_data/struct/src/main.nr | 77 ----- .../struct_fields_ordering/Nargo.toml | 5 - .../struct_fields_ordering/Prover.toml | 3 - .../struct_fields_ordering/src/main.nr | 14 - .../tests/test_data/struct_inputs/Nargo.toml | 5 - .../tests/test_data/struct_inputs/Prover.toml | 19 -- .../tests/test_data/struct_inputs/src/foo.nr | 6 - .../test_data/struct_inputs/src/foo/bar.nr | 7 - .../tests/test_data/struct_inputs/src/main.nr | 36 --- .../tests/test_data/submodules/Nargo.toml | 7 - .../tests/test_data/submodules/Prover.toml | 2 - .../tests/test_data/submodules/src/main.nr | 17 - .../tests/test_data/to_be_bytes/Nargo.toml | 5 - .../tests/test_data/to_be_bytes/Prover.toml | 1 - .../tests/test_data/to_be_bytes/src/main.nr | 14 - .../tests/test_data/to_bits/Nargo.toml | 5 - .../tests/test_data/to_bits/src/main.nr | 24 -- .../test_data/to_bytes_integration/Nargo.toml | 5 - .../to_bytes_integration/Prover.toml | 2 - .../to_bytes_integration/src/main.nr | 27 -- .../tests/test_data/to_le_bytes/Nargo.toml | 5 - .../tests/test_data/to_le_bytes/Prover.toml | 1 - .../tests/test_data/to_le_bytes/src/main.nr | 14 - .../tests/test_data/tuples/Nargo.toml | 5 - .../tests/test_data/tuples/Prover.toml | 2 - .../tests/test_data/tuples/src/main.nr | 29 -- .../nargo_cli/tests/test_data/xor/Nargo.toml | 5 - .../nargo_cli/tests/test_data/xor/Prover.toml | 2 - .../nargo_cli/tests/test_data/xor/src/main.nr | 5 - .../1327_concrete_in_generic/Nargo.toml | 5 - .../1327_concrete_in_generic/Prover.toml | 1 - .../1327_concrete_in_generic/src/main.nr | 78 ----- .../test_data_ssa_refactor/1_mul/Nargo.toml | 5 - .../test_data_ssa_refactor/1_mul/Prover.toml | 3 - .../test_data_ssa_refactor/1_mul/src/main.nr | 9 - .../test_data_ssa_refactor/2_div/Nargo.toml | 5 - .../test_data_ssa_refactor/2_div/Prover.toml | 3 - .../test_data_ssa_refactor/2_div/src/main.nr | 7 - .../test_data_ssa_refactor/3_add/Nargo.toml | 5 - .../test_data_ssa_refactor/3_add/Prover.toml | 3 - .../test_data_ssa_refactor/3_add/src/main.nr | 8 - .../test_data_ssa_refactor/4_sub/Nargo.toml | 5 - .../test_data_ssa_refactor/4_sub/Prover.toml | 3 - .../test_data_ssa_refactor/4_sub/src/main.nr | 5 - .../test_data_ssa_refactor/5_over/Nargo.toml | 5 - .../test_data_ssa_refactor/5_over/Prover.toml | 2 - .../test_data_ssa_refactor/5_over/src/main.nr | 9 - .../tests/test_data_ssa_refactor/6/Nargo.toml | 5 - .../test_data_ssa_refactor/6/Prover.toml | 39 --- .../test_data_ssa_refactor/6/src/main.nr | 20 -- .../tests/test_data_ssa_refactor/7/Nargo.toml | 5 - .../test_data_ssa_refactor/7/Prover.toml | 38 --- .../test_data_ssa_refactor/7/src/main.nr | 10 - .../7_function/Nargo.toml | 5 - .../7_function/Prover.toml | 6 - .../8_integration/Nargo.toml | 5 - .../8_integration/Prover.toml | 5 - .../8_integration/src/main.nr | 283 ----------------- .../arithmetic_binary_operations/Nargo.toml | 5 - .../arithmetic_binary_operations/Prover.toml | 3 - .../arithmetic_binary_operations/src/main.nr | 12 - .../array_len/Nargo.toml | 5 - .../array_len/Prover.toml | 2 - .../array_len/src/main.nr | 23 -- .../array_neq/Nargo.toml | 5 - .../array_neq/Prover.toml | 2 - .../array_neq/src/main.nr | 4 - .../array_sort/Nargo.toml | 5 - .../array_sort/Prover.toml | 1 - .../array_sort/src/main.nr | 6 - .../test_data_ssa_refactor/assert/Nargo.toml | 5 - .../test_data_ssa_refactor/assert/Prover.toml | 1 - .../test_data_ssa_refactor/assert/src/main.nr | 3 - .../assert_statement/Nargo.toml | 5 - .../assert_statement/Prover.toml | 2 - .../assert_statement/src/main.nr | 6 - .../assign_ex/Nargo.toml | 7 - .../assign_ex/Prover.toml | 2 - .../assign_ex/src/main.nr | 6 - .../test_data_ssa_refactor/bit_and/Nargo.toml | 5 - .../bit_and/Prover.toml | 2 - .../bit_and/src/main.nr | 18 -- .../bit_shifts_comptime/Nargo.toml | 5 - .../bit_shifts_comptime/Prover.toml | 1 - .../bit_shifts_comptime/src/main.nr | 13 - .../blackbox_func_simple_call/Nargo.toml | 5 - .../blackbox_func_simple_call/Prover.toml | 2 - .../blackbox_func_simple_call/src/main.nr | 9 - .../bool_not/Nargo.toml | 7 - .../bool_not/Prover.toml | 1 - .../bool_not/src/main.nr | 5 - .../test_data_ssa_refactor/bool_or/Nargo.toml | 7 - .../bool_or/Prover.toml | 2 - .../bool_or/src/main.nr | 7 - .../brillig_arrays/Nargo.toml | 5 - .../brillig_arrays/Prover.toml | 1 - .../brillig_arrays/src/main.nr | 29 -- .../brillig_assert/Nargo.toml | 5 - .../brillig_assert/Prover.toml | 1 - .../brillig_assert/src/main.nr | 11 - .../brillig_assert_fail/Nargo.toml | 5 - .../brillig_assert_fail/Prover.toml | 1 - .../brillig_assert_fail/src/main.nr | 11 - .../brillig_calls/Nargo.toml | 5 - .../brillig_calls/Prover.toml | 1 - .../brillig_calls/src/main.nr | 45 --- .../brillig_calls_array/Nargo.toml | 5 - .../brillig_calls_array/Prover.toml | 1 - .../brillig_calls_array/src/main.nr | 16 - .../brillig_calls_conditionals/Nargo.toml | 5 - .../brillig_calls_conditionals/Prover.toml | 1 - .../brillig_calls_conditionals/src/main.nr | 36 --- .../brillig_cast/Nargo.toml | 5 - .../brillig_cast/Prover.toml | 0 .../brillig_cast/src/main.nr | 50 --- .../brillig_conditional/Nargo.toml | 5 - .../brillig_conditional/Prover.toml | 1 - .../brillig_conditional/src/main.nr | 14 - .../Nargo.toml | 5 - .../Prover.toml | 0 .../src/main.nr | 25 -- .../brillig_identity_function/Nargo.toml | 5 - .../brillig_identity_function/Prover.toml | 2 - .../brillig_identity_function/src/main.nr | 35 --- .../brillig_identity_function/target/c.json | 1 - .../Nargo.toml | 5 - .../Prover.toml | 0 .../src/main.nr | 80 ----- .../brillig_loop/Nargo.toml | 5 - .../brillig_loop/Prover.toml | 1 - .../brillig_loop/src/main.nr | 14 - .../brillig_modulo/Nargo.toml | 5 - .../brillig_modulo/Prover.toml | 0 .../brillig_modulo/src/main.nr | 28 -- .../brillig_not/Nargo.toml | 5 - .../brillig_not/Prover.toml | 2 - .../brillig_not/src/main.nr | 11 - .../brillig_oracle/Nargo.toml | 5 - .../brillig_oracle/Prover.toml | 2 - .../brillig_oracle/src/main.nr | 23 -- .../cast_bool/Nargo.toml | 7 - .../cast_bool/Prover.toml | 2 - .../cast_bool/src/main.nr | 6 - .../comptime_array_access/Nargo.toml | 5 - .../comptime_array_access/Prover.toml | 1 - .../comptime_array_access/src/main.nr | 17 - .../comptime_recursion_regression/Nargo.toml | 5 - .../comptime_recursion_regression/Prover.toml | 2 - .../comptime_recursion_regression/src/main.nr | 4 - .../constant_return/Nargo.toml | 5 - .../constant_return/Prover.toml | 1 - .../constant_return/src/main.nr | 7 - .../contracts/Nargo.toml | 5 - .../contracts/Prover.toml | 2 - .../contracts/src/main.nr | 8 - .../distinct_keyword/Nargo.toml | 5 - .../distinct_keyword/Prover.toml | 1 - .../distinct_keyword/src/main.nr | 4 - .../ec_baby_jubjub/Nargo.toml | 6 - .../ec_baby_jubjub/src/main.nr | 226 -------------- .../ecdsa_secp256k1/Nargo.toml | 6 - .../ecdsa_secp256k1/Prover.toml | 209 ------------- .../ecdsa_secp256k1/src/main.nr | 11 - .../generics/Nargo.toml | 7 - .../generics/Prover.toml | 2 - .../generics/src/main.nr | 57 ---- .../global_consts/Nargo.toml | 7 - .../global_consts/Prover.toml | 4 - .../global_consts/src/baz.nr | 5 - .../global_consts/src/foo.nr | 11 - .../global_consts/src/foo/bar.nr | 5 - .../global_consts/src/main.nr | 88 ------ .../hash_to_field/Nargo.toml | 5 - .../hash_to_field/Prover.toml | 1 - .../hash_to_field/src/main.nr | 5 - .../if_else_chain/Nargo.toml | 5 - .../if_else_chain/Prover.toml | 2 - .../if_else_chain/src/main.nr | 16 - .../keccak256/Nargo.toml | 5 - .../keccak256/Prover.toml | 35 --- .../keccak256/src/main.nr | 22 -- .../main_bool_arg/Nargo.toml | 6 - .../main_bool_arg/Prover.toml | 2 - .../main_bool_arg/src/main.nr | 8 - .../main_return/Nargo.toml | 6 - .../main_return/Prover.toml | 1 - .../main_return/src/main.nr | 3 - .../merkle_insert/Nargo.toml | 7 - .../merkle_insert/Prover.toml | 11 - .../merkle_insert/src/main.nr | 21 -- .../test_data_ssa_refactor/modules/Nargo.toml | 5 - .../modules/Prover.toml | 2 - .../test_data_ssa_refactor/modules/src/foo.nr | 3 - .../modules/src/main.nr | 14 - .../modules_more/Nargo.toml | 5 - .../modules_more/Prover.toml | 4 - .../modules_more/src/foo.nr | 5 - .../modules_more/src/foo/bar.nr | 3 - .../modules_more/src/main.nr | 6 - .../test_data_ssa_refactor/modulus/Nargo.toml | 5 - .../modulus/Prover.toml | 290 ------------------ .../modulus/src/main.nr | 27 -- .../numeric_generics/Nargo.toml | 7 - .../numeric_generics/Prover.toml | 0 .../numeric_generics/src/main.nr | 39 --- .../pedersen_check/Nargo.toml | 7 - .../pedersen_check/Prover.toml | 6 - .../pedersen_check/src/main.nr | 17 - .../test_data_ssa_refactor/pred_eq/Nargo.toml | 7 - .../pred_eq/Prover.toml | 2 - .../pred_eq/src/main.nr | 6 - .../Nargo.toml | 5 - .../Prover.toml | 1 - .../src/main.nr | 23 -- .../scalar_mul/Nargo.toml | 5 - .../scalar_mul/Prover.toml | 7 - .../scalar_mul/src/main.nr | 22 -- .../test_data_ssa_refactor/schnorr/Nargo.toml | 5 - .../schnorr/Prover.toml | 9 - .../schnorr/src/main.nr | 10 - .../test_data_ssa_refactor/sha256/Nargo.toml | 5 - .../test_data_ssa_refactor/sha256/Prover.toml | 36 --- .../test_data_ssa_refactor/sha256/src/main.nr | 19 -- .../simple_add_and_ret_arr/Nargo.toml | 5 - .../simple_add_and_ret_arr/Prover.toml | 1 - .../simple_add_and_ret_arr/src/main.nr | 8 - .../simple_array_param/Nargo.toml | 5 - .../simple_array_param/Prover.toml | 1 - .../simple_array_param/src/main.nr | 7 - .../simple_bitwise/Nargo.toml | 5 - .../simple_bitwise/Prover.toml | 4 - .../simple_bitwise/src/main.nr | 9 - .../simple_comparison/Nargo.toml | 5 - .../simple_comparison/Prover.toml | 2 - .../simple_comparison/src/main.nr | 6 - .../simple_mut/Nargo.toml | 5 - .../simple_mut/Prover.toml | 1 - .../simple_mut/src/main.nr | 7 - .../simple_not/Nargo.toml | 5 - .../simple_not/Prover.toml | 1 - .../simple_not/src/main.nr | 4 - .../simple_print/Nargo.toml | 5 - .../simple_print/Prover.toml | 2 - .../simple_print/src/main.nr | 8 - .../simple_program_addition/Nargo.toml | 5 - .../simple_program_addition/Prover.toml | 1 - .../simple_program_addition/src/main.nr | 5 - .../simple_program_no_body/Nargo.toml | 5 - .../simple_program_no_body/Prover.toml | 2 - .../simple_program_no_body/src/main.nr | 9 - .../simple_radix/Nargo.toml | 5 - .../simple_radix/Prover.toml | 1 - .../simple_radix/src/main.nr | 10 - .../simple_range/Nargo.toml | 5 - .../simple_range/Prover.toml | 1 - .../simple_range/src/main.nr | 6 - .../simple_shield/Nargo.toml | 5 - .../simple_shield/Prover.toml | 11 - .../simple_shield/src/main.nr | 35 --- .../simple_shift_left_right/Nargo.toml | 5 - .../simple_shift_left_right/Prover.toml | 1 - .../simple_shift_left_right/src/main.nr | 8 - .../test_data_ssa_refactor/strings/Nargo.toml | 5 - .../strings/Prover.toml | 4 - .../strings/src/main.nr | 56 ---- .../test_data_ssa_refactor/struct/Nargo.toml | 7 - .../test_data_ssa_refactor/struct/Prover.toml | 2 - .../test_data_ssa_refactor/struct/src/main.nr | 77 ----- .../struct_fields_ordering/Nargo.toml | 5 - .../struct_fields_ordering/Prover.toml | 3 - .../struct_fields_ordering/src/main.nr | 14 - .../struct_inputs/Nargo.toml | 5 - .../struct_inputs/Prover.toml | 19 -- .../struct_inputs/src/foo.nr | 6 - .../struct_inputs/src/foo/bar.nr | 7 - .../struct_inputs/src/main.nr | 36 --- .../submodules/Nargo.toml | 7 - .../submodules/Prover.toml | 2 - .../submodules/src/main.nr | 17 - .../to_be_bytes/Nargo.toml | 5 - .../to_be_bytes/Prover.toml | 1 - .../to_be_bytes/src/main.nr | 14 - .../to_bytes_integration/Nargo.toml | 5 - .../to_bytes_integration/Prover.toml | 2 - .../to_bytes_integration/src/main.nr | 25 -- .../to_le_bytes/Nargo.toml | 5 - .../to_le_bytes/Prover.toml | 1 - .../to_le_bytes/src/main.nr | 14 - .../test_data_ssa_refactor/tuples/Nargo.toml | 5 - .../test_data_ssa_refactor/tuples/Prover.toml | 2 - .../unconstrained_empty/Nargo.toml | 5 - .../unconstrained_empty/Prover.toml | 1 - .../unconstrained_empty/src/main.nr | 2 - .../test_data_ssa_refactor/xor/Nargo.toml | 5 - .../test_data_ssa_refactor/xor/Prover.toml | 2 - .../test_data_ssa_refactor/xor/src/main.nr | 5 - 467 files changed, 6789 deletions(-) delete mode 100644 crates/nargo_cli/tests/test_data/1_mul/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/1_mul/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/1_mul/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/2_div/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/2_div/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/2_div/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/3_add/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/3_add/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/3_add/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/4_sub/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/4_sub/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/4_sub/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/5_over/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/5_over/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/5_over/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/6/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/6/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/6/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/7/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/7/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/7/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/7_function/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/7_function/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/7_function/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/8_integration/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/8_integration/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/8_integration/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/9_conditional/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/9_conditional/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/array_len/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_len/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_len/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/array_neq/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_neq/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_neq/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/array_sort/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_sort/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/array_sort/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/assert/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/assert/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/assert/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/assign_ex/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/assign_ex/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/bit_and/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_and/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_and/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/bool_not/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/bool_not/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/bool_not/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/bool_or/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/bool_or/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/bool_or/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/cast_bool/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/cast_bool/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/contracts/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/contracts/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/contracts/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/eddsa/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/eddsa/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/eddsa/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/generics/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/generics/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/generics/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/baz.nr delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/keccak256/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/keccak256/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/keccak256/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/main_return/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/main_return/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/main_return/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/modules/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/modules/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/modules/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data/modules/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/modules_more/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/modules_more/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/modulus/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/modulus/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/modulus/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/pred_eq/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/pred_eq/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/range_fail/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/range_fail/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/range_fail/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/regression/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/regression/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/regression/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/schnorr/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/schnorr/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/schnorr/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/sha256/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha256/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha256/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/simple_shield/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/simple_shield/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/strings/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/strings/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/strings/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/struct/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/submodules/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/submodules/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/submodules/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/to_bits/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_bits/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/tuples/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/tuples/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/tuples/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data/xor/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data/xor/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data/xor/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml delete mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr diff --git a/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml b/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/1_mul/Prover.toml b/crates/nargo_cli/tests/test_data/1_mul/Prover.toml deleted file mode 100644 index 9bff601c75a..00000000000 --- a/crates/nargo_cli/tests/test_data/1_mul/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "3" -y = "4" -z = "429981696" diff --git a/crates/nargo_cli/tests/test_data/1_mul/src/main.nr b/crates/nargo_cli/tests/test_data/1_mul/src/main.nr deleted file mode 100644 index 4587b4b5947..00000000000 --- a/crates/nargo_cli/tests/test_data/1_mul/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// Test unsafe integer multiplication with overflow: 12^8 = 429 981 696 -// The circuit should handle properly the growth of the bit size -fn main(mut x: u32, y: u32, z: u32) { - x *= y; - x *= x; //144 - x *= x; //20736 - x *= x; //429 981 696 - assert(x == z); -} diff --git a/crates/nargo_cli/tests/test_data/2_div/Nargo.toml b/crates/nargo_cli/tests/test_data/2_div/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/2_div/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/2_div/Prover.toml b/crates/nargo_cli/tests/test_data/2_div/Prover.toml deleted file mode 100644 index ee6f0ef229a..00000000000 --- a/crates/nargo_cli/tests/test_data/2_div/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "7" -y = "3" -z = "2" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/2_div/src/main.nr b/crates/nargo_cli/tests/test_data/2_div/src/main.nr deleted file mode 100644 index ff0dee755cc..00000000000 --- a/crates/nargo_cli/tests/test_data/2_div/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -// Testing integer division: 7/3 = 2 -fn main(mut x: u32, y: u32, z: u32) { - let a = x % y; - assert(x / y == z); - assert(a == x - z*y); - assert((50 as u64) % (9 as u64) == 5); -} diff --git a/crates/nargo_cli/tests/test_data/3_add/Nargo.toml b/crates/nargo_cli/tests/test_data/3_add/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/3_add/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/3_add/Prover.toml b/crates/nargo_cli/tests/test_data/3_add/Prover.toml deleted file mode 100644 index 5d777c023db..00000000000 --- a/crates/nargo_cli/tests/test_data/3_add/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "3" -y = "4" -z = "7" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/3_add/src/main.nr b/crates/nargo_cli/tests/test_data/3_add/src/main.nr deleted file mode 100644 index 2884415b81a..00000000000 --- a/crates/nargo_cli/tests/test_data/3_add/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// Test integer addition: 3 + 4 = 7 -fn main(mut x: u32, y: u32, z: u32) { - x += y; - assert(x == z); - - x *= 8; - assert(x>9); -} diff --git a/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml b/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/4_sub/Prover.toml b/crates/nargo_cli/tests/test_data/4_sub/Prover.toml deleted file mode 100644 index 1240475dee3..00000000000 --- a/crates/nargo_cli/tests/test_data/4_sub/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "12" -y = "2418266113" -z = "1876701195" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/4_sub/src/main.nr b/crates/nargo_cli/tests/test_data/4_sub/src/main.nr deleted file mode 100644 index 80fc0177e41..00000000000 --- a/crates/nargo_cli/tests/test_data/4_sub/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -// Test unsafe integer subtraction with underflow: 12 - 2418266113 = 1876701195 modulo 2^32 -fn main(mut x: u32, y: u32, z: u32) { - x -= y; - assert(x == z); -} diff --git a/crates/nargo_cli/tests/test_data/5_over/Nargo.toml b/crates/nargo_cli/tests/test_data/5_over/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/5_over/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/5_over/Prover.toml b/crates/nargo_cli/tests/test_data/5_over/Prover.toml deleted file mode 100644 index 9a1986329ca..00000000000 --- a/crates/nargo_cli/tests/test_data/5_over/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "43046721" -y = "3793632897" diff --git a/crates/nargo_cli/tests/test_data/5_over/src/main.nr b/crates/nargo_cli/tests/test_data/5_over/src/main.nr deleted file mode 100644 index 4fdff16c5c0..00000000000 --- a/crates/nargo_cli/tests/test_data/5_over/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// Test unsafe integer arithmetic -// Test odd bits integer -fn main(mut x: u32, y: u32) { - x = x * x; - assert(y == x); - - let c:u3 = 2; - assert(c > x as u3); -} diff --git a/crates/nargo_cli/tests/test_data/6/Nargo.toml b/crates/nargo_cli/tests/test_data/6/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/6/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/6/Prover.toml b/crates/nargo_cli/tests/test_data/6/Prover.toml deleted file mode 100644 index 1c52aef063c..00000000000 --- a/crates/nargo_cli/tests/test_data/6/Prover.toml +++ /dev/null @@ -1,39 +0,0 @@ - -# hello as bytes -# used : https://emn178.github.io/online-tools/sha256.html -x = [104, 101, 108, 108, 111] - -result = [ - 0x2c, - 0xf2, - 0x4d, - 0xba, - 0x5f, - 0xb0, - 0xa3, - 0x0e, - 0x26, - 0xe8, - 0x3b, - 0x2a, - 0xc5, - 0xb9, - 0xe2, - 0x9e, - 0x1b, - 0x16, - 0x1e, - 0x5c, - 0x1f, - 0xa7, - 0x42, - 0x5e, - 0x73, - 0x04, - 0x33, - 0x62, - 0x93, - 0x8b, - 0x98, - 0x24, -] diff --git a/crates/nargo_cli/tests/test_data/6/src/main.nr b/crates/nargo_cli/tests/test_data/6/src/main.nr deleted file mode 100644 index 8b350de16c1..00000000000 --- a/crates/nargo_cli/tests/test_data/6/src/main.nr +++ /dev/null @@ -1,20 +0,0 @@ -// Sha256 circuit where the input is 5 bytes -// not five field elements since sha256 operates over -// bytes. -// -// If you do not cast, it will take all the bytes from the field element! - -// Mimc input is an array of field elements -// The function is called mimc_bn254 to emphasize its parameters are chosen for bn254 curve, it should be used only with a proving system using the same curve (e.g Plonk from Aztec) -use dep::std; - -fn main(x: [u8; 5], result: pub [u8; 32]) { - let mut digest = std::hash::sha256(x); - digest[0] = 5 as u8; - digest = std::hash::sha256(x); - assert(digest == result); - - let y = [12,45,78,41]; - let h = std::hash::mimc_bn254(y); - assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); -} diff --git a/crates/nargo_cli/tests/test_data/7/Nargo.toml b/crates/nargo_cli/tests/test_data/7/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/7/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7/Prover.toml b/crates/nargo_cli/tests/test_data/7/Prover.toml deleted file mode 100644 index bc3784726d2..00000000000 --- a/crates/nargo_cli/tests/test_data/7/Prover.toml +++ /dev/null @@ -1,38 +0,0 @@ - -# hello as bytes -# https://toolkitbay.com/tkb/tool/BLAKE2s_256 -x = [104, 101, 108, 108, 111] -result = [ - 0x19, - 0x21, - 0x3b, - 0xac, - 0xc5, - 0x8d, - 0xee, - 0x6d, - 0xbd, - 0xe3, - 0xce, - 0xb9, - 0xa4, - 0x7c, - 0xbb, - 0x33, - 0x0b, - 0x3d, - 0x86, - 0xf8, - 0xcc, - 0xa8, - 0x99, - 0x7e, - 0xb0, - 0x0b, - 0xe4, - 0x56, - 0xf1, - 0x40, - 0xca, - 0x25, -] diff --git a/crates/nargo_cli/tests/test_data/7/src/main.nr b/crates/nargo_cli/tests/test_data/7/src/main.nr deleted file mode 100644 index a6bba978644..00000000000 --- a/crates/nargo_cli/tests/test_data/7/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -// This is the same as Blake2s example. -// -// Pre-alpha dependencies must now be prefixed with the word "dep". -// The line below indicates that we would like to pull in the standard library dependency. -use dep::std; - -fn main(x: [u8; 5], result: [u8; 32]) { - let digest = std::hash::blake2s(x); - assert(digest == result); -} diff --git a/crates/nargo_cli/tests/test_data/7_function/Nargo.toml b/crates/nargo_cli/tests/test_data/7_function/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/7_function/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7_function/Prover.toml b/crates/nargo_cli/tests/test_data/7_function/Prover.toml deleted file mode 100644 index 9140e7f7530..00000000000 --- a/crates/nargo_cli/tests/test_data/7_function/Prover.toml +++ /dev/null @@ -1,6 +0,0 @@ -x = "59" -y = "5" -a = "1" - -arr1=[3320379920, 1938147428, 1942509796, 1795943184, 24853, 0, 0, 0, 0] -arr2=[2912727897, 3590519536, 1687587470, 3896107618, 1092831095, 0, 0, 0, 0] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7_function/src/main.nr b/crates/nargo_cli/tests/test_data/7_function/src/main.nr deleted file mode 100644 index 5a23b493871..00000000000 --- a/crates/nargo_cli/tests/test_data/7_function/src/main.nr +++ /dev/null @@ -1,149 +0,0 @@ -//Tests for function calling -use dep::std; - -fn f1(mut x: Field) -> Field { - x = x + 1; - x = f2(x); - x -} - -fn f2(mut x: Field) -> Field{ - x += 2; - x -} - -// Simple example -fn test0(mut a: Field) { - a = f2(a); - assert(a == 3); -} - -// Nested call -fn test1(mut a: Field) { - a = f1(a); - assert(a == 4); -} - -fn test2(z: Field, t: u32 ) { - let a = z + t as Field; - assert(a == 64); - let e = pow(z, t as Field); - assert(e == 714924299); -} - -fn pow(base: Field, exponent: Field) -> Field { - let mut r = 1 as Field; - let b = exponent.to_le_bits(32 as u32); - for i in 1..33 { - r = r*r; - r = (b[32-i] as Field) * (r * base) + (1 - b[32-i] as Field) * r; - } - r -} - -fn test3(x: [u8; 3]) -> [u8; 3] { - let mut buffer = [0 as u8; 3]; - for i in 0..3 { - buffer[i] = x[i]; - } - assert(buffer == x); - buffer -} - -fn test_multiple(x: u32, y: u32) -> (u32, u32) { - (y,x) -} - -fn test_multiple2() -> my_struct { - my_struct { a: 5 as u32, b: 7 as u32 } -} - -fn test_multiple3(x: u32, y: u32) { - assert(x == y); -} - -struct my_struct { - a: u32, - b: u32, -} - -struct my2 { - aa: my_struct, - bb: my_struct, -} - -fn test_multiple4(s: my_struct) { - assert(s.a == s.b+2); -} - -fn test_multiple5(a: (u32, u32)) { - assert(a.0 == a.1+2); -} - - -fn test_multiple6(a: my2, b: my_struct, c: (my2, my_struct)) { - test_multiple4(a.aa); - test_multiple5((b.a, b.b)); - assert(c.0.aa.a == c.1.a); -} - - -fn foo(a: [Field]) -> [Field] { - a -} -fn bar() -> [Field] { - foo([0]) -} -fn main(x: u32 , y: u32 , a: Field, arr1: [u32; 9], arr2: [u32; 9]) { - let mut ss: my_struct = my_struct { b: x, a: x+2, }; - test_multiple4(ss); - test_multiple5((ss.a,ss.b)); - let my = my2 { - aa: ss, - bb: ss, - }; - ss.a = 61; - test_multiple6(my, ss, (my,ss)); - - let my_block = { - let mut ab = f2(a); - ab = ab + a; - (x,ab) - }; - assert(my_block.1 == 4); - - test0(a); - test1(a); - test2(x as Field, y); - assert(bar()[0] == 0); - - let mut b = [0 as u8, 5 as u8, 2 as u8]; - let c = test3(b); - assert(b == c); - b[0] = 1 as u8; - let cc = test3(b); - assert(c != cc); - let e = test_multiple(x, y); - assert(e.1 == e.0 + 54 as u32); - let d = test_multiple2(); - assert(d.b == d.a + 2 as u32); - test_multiple3(y, y); - - //Regression test for issue #628: - let result = first(arr_to_field(arr1), arr_to_field(arr2)); - assert(result[0] == arr1[0] as Field); -} - - -// Issue #628 -fn arr_to_field(arr: [u32; 9]) -> [Field; 9] { - let mut as_field: [Field; 9] = [0 as Field; 9]; - for i in 0..9 { - as_field[i] = arr[i] as Field; - } - as_field -} - -fn first(a: [Field; 9], _b: [Field; 9]) -> [Field; 9] { - a -} diff --git a/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml b/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/8_integration/Prover.toml b/crates/nargo_cli/tests/test_data/8_integration/Prover.toml deleted file mode 100644 index e4b4fa41073..00000000000 --- a/crates/nargo_cli/tests/test_data/8_integration/Prover.toml +++ /dev/null @@ -1,5 +0,0 @@ -a=[867393132, 2339025230, 220695592, 603045882, 2511105607, 2829384008, 3709060370, 165831136, 1055242736, 1021386699, 504214651, 3662346416, 1830680088, 3882307476, 2426040416, 1802701977, 2663953820, 442532338, 1174156258, 2943965281, 2059435796, 2505576606, 666729718, 3602851575, 2784009587, 3495199106, 1721163808, 3787454896, 315490254, 2761503044, 1222736857, 3669200722, 1595984236, 1113969718, 486680564, 3162990949, 3264361924, 2006416798, 2386200406, 315797713, 2613961431, 2248446788, 1487182619, 1426297375, 1728644913, 1251844809, 1725705662, 1593325285, 2204175104, 2086772782, 3535562424, 171941432, 1454717338, 346500936, 3226869878, 1868934392, 4256057877, 1568150812, 3256749490, 2594788417, 1807197388, 3087252400, 1649310565, 2748668146, 3716823811, 3800017989, 932498547, 2480193018, 333760602, 97095822, 4100736518, 2777593334, 2339587180, 3771453942, 3867894936, 3650805881, 1824779553, 1642205658, 4264337791, 4071013475, 1985859040, 4202403275, 2148375036, 2428793574, 314105769, 4225849095, 3500808841, 2684237013, 848348764, 723628347, 1455798875, 3707853370, 1746878741, 1139375098, 3478206320, 3069213335, 112605790, 2440244355, 1471127557, 4092108893] -b=[3828535814, 348916743, 1199414553, 737248839, 756047272, 1292160882, 4257951637, 291617875, 2966142224, 3814394488, 3878026466, 700807834, 2969962294, 1306796485, 3854250602, 898180304, 3427925197, 604266260, 1075521373, 3406840156, 3396422198, 890966269, 1079444598, 988299705, 3071209797, 3808577073, 2135889094, 1194271359, 4006125262, 566871018, 1292670770, 3445252242, 1897364157, 1587048323, 1240078226, 1678980405, 262815752, 304362997, 1104680912, 2632486420, 2463291218, 2187725560, 1870618568, 2652926282, 3004775258, 1952884887, 561428664, 2467226612, 2683547316, 3452779168, 976229927, 1449738410, 3252038428, 2805606398, 1462658417, 1592183545, 2019693157, 3278803512, 3026040550, 566335611, 703403330, 936890230, 2567824938, 890552997, 4217401169, 258050408, 29872215, 812502992, 3871770414, 4261908330, 3703871063, 2429703152, 1496772760, 3466865862, 2739387475, 547994854, 240736540, 3737530356, 545555875, 1243531855, 826369375, 392660683, 262937837, 3055809624, 1979941188, 3982865811, 2062520214, 1365494964, 3851477194, 4086198942, 4210993448, 3262645997, 766395054, 1585427862, 1824837360, 105660195, 3008983983, 845249279, 2566786179, 205438487] -c=[867393132, 2339025230, 220695592, 603045882, ] -d=[3828535814, 348916743, 1199414553, 737248839, ] -m=[77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data/8_integration/src/main.nr b/crates/nargo_cli/tests/test_data/8_integration/src/main.nr deleted file mode 100644 index 56b02650c27..00000000000 --- a/crates/nargo_cli/tests/test_data/8_integration/src/main.nr +++ /dev/null @@ -1,283 +0,0 @@ -fn matrix_mul_2(a: [u32; 4], b: [u32; 4]) ->[u32; 4] { - let mut c = [0 as u32; 4]; - for i in 0..2 { - for j in 0..2 { - c[i+2*j] = 0; - for k in 0..2 { - c[i+2*j] += a[i+2*k] * b[k+2*j]; - } - } - } - c -} - -fn matrix_mul_10(a: [u32; 100], b: [u32; 100]) -> [u32; 100] { - let mut c = [0 as u32; 100]; - for i in 0..10 { - for j in 0..10 { - c[i+10*j] = 0 as u32; - - for k in 0..10 { - c[i+10*j] += a[i+10*k] * b[k+10*j]; - } - } - } - c -} - - -fn siggy(x: u32) -> u32 { - x * (10 as u32) -} - - -fn test4 (mut a: [u32; 4]) -> [u32; 4] { - for i in 3..4 { - a[i] = siggy(a[i-2]); - } - a -} - -fn iterate1(mut a0: u32) -> u32{ - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = 1 as u32; - let mut f = 2 as u32; - let mut g = 3 as u32; - let mut h = 4 as u32; - - for _i in 0..2 { - t1 = h; - h = g; - g = f; - a = t1 + t2; - } - a0 += a; - a0 -} - -fn array_noteq(a: [u32; 4], b: [u32; 4]) { - assert(a != b); -} - -fn test3(mut b: [Field; 4]) -> [Field; 4] { - for i in 0..4 { - b[i] = i; - } - b -} - -fn iterate2(mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - - let mut a = hash[0]; - let mut e = hash[4]; - let mut f = hash[5]; - let mut g = hash[6]; - let mut h = hash[7]; - - for _i in 0..2 { - t1 = ch2(e, f); - h = g; - g = f; - a = t1; - } - - hash[0] = hash[0] + a; - hash -} - -fn iterate3( mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = hash[0]; - let mut b = hash[1]; - let mut c = hash[2]; - let mut d = hash[3]; - let mut e = hash[4]; - let mut f = hash[5]; - let mut g = hash[6]; - let mut h = hash[7]; - - for _i in 0..3 { - t1 = ep2(e)+ch2(e, f); - h = g; - g = f; - a = t1+t2; - } - assert(a == 2470696267); - hash[0] = hash[0] + a; - hash[1] = hash[1] + b; - hash[2] = hash[2] + c; - hash[3] = hash[3] + d; - hash[4] = hash[4] + e; - hash[5] = hash[5] + f; - hash[6] = hash[6] + g; - hash[7] = hash[7] + h; - hash -} - - -fn test5() { - let mut sha_hash = [ - 0 as u32, 1, 2, 3, - 4, 5, 6, 7 - ]; - - sha_hash = iterate2(sha_hash); - - assert(sha_hash[0] == 9); -} - - -fn ch2(x: u32, y: u32) -> u32 { - x + y -} - -fn ep2(x: u32) -> u32 { - (2 as u32) * too(x) -} - -fn too(x: u32) -> u32 { - (x + 17 as u32) * (x + 3 as u32) -} - -fn test6(x: [u8; 32]) -> [u32; 8] { - let mut sha_m = [0 as u32; 64]; - - let mut sha_hash = [ - 1 as u32, 2, 3, 4, 5, 6, 7, 8 - ]; - - let mut buffer = [0 as u8; 64]; - for i in 0..32 { - buffer[i] = x[i]; - } - - sha_m = iterate6_1(sha_m, buffer); - sha_hash = iterate6_2(sha_m, sha_hash); - sha_hash -} - -fn iterate6_1(mut sha_m: [u32; 64], next_chunk: [u8; 64]) -> [u32; 64] { - let mut j = 0; - for i in 0..16 { - j = (i ) * 4; - sha_m[i] = ((next_chunk[j] as u32) << 24 as u32) - | ((next_chunk[j + 1] as u32) << 16 as u32) - | ((next_chunk[j + 2] as u32) << 8 as u32) - | (next_chunk[j + 3] as u32); - } - for i in 16..64 { - sha_m[i] = sig1(sha_m[i - 2])+(sha_m[i - 7])+(sig0(sha_m[i - 15]))+(sha_m[i - 16]); - } - sha_m -} - -fn iterate6_2(sha_m: [u32; 64], mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = 1 as u32; - let mut b = 2 as u32; - let mut c = 3 as u32; - let mut d = 4 as u32; - let mut e = 5 as u32; - let mut f = 6 as u32; - let mut g = 7 as u32; - let mut h = 8 as u32; - - for i in 0..11 { - t1 = h + ep1(e) + ch(e, f, g) + sha_m[i]; - t2 = epo(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d+t1; - d = c; - c = b; - b = a; - a = t1+t2; - } - - hash[0] = hash[0]+a; - hash[1] = hash[1]+b; - hash[2] = hash[2]+c; - hash[3] = hash[3]+d; - hash[4] = hash[4]+e; - hash[5] = hash[5]+f; - hash[6] = hash[6]+g; - hash[7] = hash[7]+h; - hash -} - -fn rot_right(a: u32, b: u32) -> u32 { - ((a >> b) | (a << (32 as u32 - b))) -} - - -fn ch(x: u32, y: u32, z: u32) -> u32 { - ((x & y) ^ (!x & z)) -} - - -fn maj(x: u32, y: u32, z: u32) -> u32 { - ((x & y) ^ (x & z) ^ (y & z)) -} - - -fn epo(x: u32) -> u32 { - (rot_right(x, 2) ^ rot_right(x, 13) ^ rot_right(x, 22)) -} - -fn ep1(x: u32) -> u32 { - (rot_right(x, 6) ^ rot_right(x, 11) ^ rot_right(x, 25)) -} - -fn sig0(x: u32) -> u32 { - (rot_right(x, 7) ^ rot_right(x, 18) ^ (x >> 3)) -} - -fn sig1(x: u32) -> u32 { - (rot_right(x, 17) ^ rot_right(x, 19) ^ (x >> 10)) -} - - -fn main(a: [u32; 100], b: [u32; 100], c: [u32; 4], mut d: [u32; 4], m: [u8; 32]) { - let e = matrix_mul_10(a,b); - assert(e[6] == 1866842232); - let f = matrix_mul_2(c,d); - assert(f[3] == 2082554100); - - let mut a = [1 as u32, 2, 3, 4]; - a = test4(a); - assert(a[3] == 20); - a = test4(c); - assert(a[3] == c[1] * 10); - - d[0] += c[0]; - d[0] += c[1]; - assert(d[0] == 2739986880); - - let h = iterate1(1); - assert(h == 4); - - let x = d; - array_noteq(x, [d[0], d[1], d[2], 0]); - - let mut h5 = [d[0] as Field, d[1] as Field, d[2] as Field, d[3] as Field]; - let t5 = test3(h5); - assert(t5[3] == 3); - h5 = test3(h5); - assert(h5[3] == 3); - - test5(); - - let mut sha_hash = [ - 0x6a09e667 as u32, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - sha_hash = iterate3(sha_hash); - - let h6 = test6(m); - assert(h6[0]== 523008072); //31.. 3800709683 -} diff --git a/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml b/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml b/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml deleted file mode 100644 index baad8be126a..00000000000 --- a/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml +++ /dev/null @@ -1,38 +0,0 @@ -c=[2, 4, 3, 0, ] -a=0 -x = [104, 101, 108, 108, 111] - -result = [ - 0x2c, - 0xf2, - 0x4d, - 0xba, - 0x5f, - 0xb0, - 0xa3, - 0x0e, - 0x26, - 0xe8, - 0x3b, - 0x2a, - 0xc5, - 0xb9, - 0xe2, - 0x9e, - 0x1b, - 0x16, - 0x1e, - 0x5c, - 0x1f, - 0xa7, - 0x42, - 0x5e, - 0x73, - 0x04, - 0x33, - 0x62, - 0x93, - 0x8b, - 0x98, - 0x24, -] diff --git a/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr b/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr deleted file mode 100644 index 48ac639ecf0..00000000000 --- a/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr +++ /dev/null @@ -1,277 +0,0 @@ -use dep::std; - -fn sort(mut a: [u32; 4]) -> [u32; 4] { - for i in 1..4 { - for j in 0..i { - if a[i] < a[j] { - let c = a[j]; - a[j] = a[i]; - a[i] = c; - } - } - } - a -} - -fn call_intrinsic(x: [u8; 5], result: [u8; 32]) { - let mut digest = std::hash::sha256(x); - digest[0] = 5 as u8; - digest = std::hash::sha256(x); - assert(digest == result); -} - -fn must_be_zero(x: u8) { - assert(x == 0); -} - -fn test3 (x: u8) { - if x == 0 { - must_be_zero(x); - } -} - -fn test4() -> [u32; 4] { - let b: [u32; 4] = [1,2,3,4]; - b -} - -fn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]){ - // Regression test for issue #547 - // Warning: it must be kept at the start of main - let arr: [u8; 2] = [1, 2]; - if arr[0] != arr[1] { - for i in 0..1 { - assert(i != 2); - } - } - - //Issue reported in #421 - if a == c[0] { - assert(c[0] == 0); - } else { - if a == c[1] { - assert(c[1] == 0); - } else { - if a == c[2] { - assert(c[2] == 0); - } - } - } - - //Regression for to_le_bits() constant evaluation - // binary array representation of u8 1 - let as_bits_hardcode_1 = [1, 0]; - let mut c1 = 0; - for i in 0..2 { - let mut as_bits = (arr[i] as Field).to_le_bits(2); - c1 = c1 + as_bits[0] as Field; - - if i == 0 { - assert(arr[i] == 1);// 1 - for k in 0..2 { - assert(as_bits_hardcode_1[k] == as_bits[k]); - } - } - if i == 1 { - assert(arr[i] == 2);//2 - for k in 0..2 { - assert(as_bits_hardcode_1[k] != as_bits[k]); - } - } - } - assert(c1==1); - - //Regression for Issue #579 - let result1_true = test(true); - assert(result1_true.array_param[0] == 1); - let result1_false = test(false); - assert(result1_false.array_param[0] == 0); - - //Test case for short-circuit - let mut data = [0 as u32; 32]; - let mut ba = a; - for i in 0..32 { - let i_u32 = i as u32; - if i_u32 == a { - for j in 0..4 { - data[i + j] = c[4 - 1 - j]; - for k in 0..4 { - ba = ba +data[k]; - } - if ba == 4864 { - c[3]=ba; - } - } - } - } - assert(data[31] == 0); - assert(ba != 13); - //regression for short-circuit2 - if 35 == a { - assert(false); - } - bar(a as Field); - - if a == 3 { - c = test4(); - } - assert(c[1] != 2); - call_intrinsic(x, result); - - //Test case for conditional with arrays from function parameters - let b = sort([1,2,3,4]); - assert(b[0] == 1); - - if a == 0 { - must_be_zero(0); - c[0] = 3; - } else { - must_be_zero(1); - c[0] = 1; - c[1] = c[2] / a + 11 % a; - let f1 = a as Field; - assert(10/f1 != 0); - } - assert(c[0] == 3); - - let mut y = 0; - if a == 0 { - let digest = std::hash::sha256(x); - y = digest[0]; - } else { - y = 5; - } - assert(y == result[0]); - c = sort(c); - assert(c[0]==0); - - //test 1 - let mut x: u32 = 0; - if a == 0 { - c[0] = 12; - if a != 0 { - x = 6; - } else { - x = 2; - assert(x == 2); - } - } else { - x = 5; - assert(x == 5); - } - if c[0] == 0 { - x = 3; - } - assert(x == 2); - - //test2: loops! - x = 0; - x = a - a; - for i in 0..4 { - if c[i] == 0 { - x = i as u32 +2; - } - } - assert(x == 0); - - test3(1); - - if a == 0 { - c = test4(); - } else { - assert(c[1] != 2); - } - if false { - c[1] = 5; - } - assert(c[1] == 2); - - test5(4); - - // Regression for issue #661: - let mut c_661 :[u32;1]=[0]; - if a > 5 { - c_661 = issue_661_foo(issue_661_bar(c), a); - } else { - c_661 = issue_661_foo(issue_661_bar(c), x); - } - assert(c_661[0] < 20000); - - // Test case for function synchronisation - let mut c_sync = 0; - if a == 42 { - c_sync = foo2(); - } else { - c_sync = foo2() + foo2(); - } - assert(c_sync == 6); - - // Regression for predicate simplification - safe_inverse(0); -} - -fn test5(a : u32) { - if a > 1 { - let q = a / 2; - assert(q == 2); - } -} - - - -fn foo() { - let mut x = 1; - x /= 0; -} - -fn bar(x:Field) { - if x == 15 { - foo(); - } -} - - -struct MyStruct579 { - array_param: [u32; 2] -} - -impl MyStruct579 { - fn new(array_param: [u32; 2]) -> MyStruct579 { - MyStruct579 { - array_param: array_param - } - } -} - -fn test(flag: bool) -> MyStruct579 { - let mut my_struct = MyStruct579::new([0; 2]); - - if flag == true { - my_struct= MyStruct579::new([1; 2]); - } - my_struct -} - -fn issue_661_foo(array: [u32;4], b:u32) ->[u32;1] { - [array[0]+b] -} - -fn issue_661_bar(a : [u32;4]) ->[u32;4] { - let mut b:[u32;4] = [0;4]; - b[0]=a[0]+1; - b -} - -fn foo2() -> Field { - 3 -} - -fn safe_inverse(n: Field) -> Field -{ - if n == 0 { - 0 - } - else { - 1 / n - } -} diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml b/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml b/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml deleted file mode 100644 index 750b3129ec9..00000000000 --- a/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml +++ /dev/null @@ -1,9 +0,0 @@ -x = [104, 101, 108, 108, 111] -z = "59" -t = "10" -index = [0,1,2,3,4] -index2 = [0,1,2,3,4] -offset = 1 -sublen = 2 - - diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr b/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr deleted file mode 100644 index 69e5fdc93db..00000000000 --- a/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr +++ /dev/null @@ -1,32 +0,0 @@ - -fn main(x: [u32; 5], mut z: u32, t: u32, index: [Field;5], index2: [Field;5], offset: Field, sublen: Field) { - let idx = (z - 5*t - 5) as Field; - //dynamic array test - dyn_array(x, idx, idx - 3); - - //regression for issue 1283 - let mut s = 0; - let x3 = [246,159,32,176,8]; - for i in 0..5 { - s += x3[index[i]]; - } - assert(s!=0); - - if 3 < (sublen as u32) { - assert(index[offset + 3] == index2[3]); - } -} - -fn dyn_array(mut x: [u32; 5], y: Field, z: Field) { - assert(x[y] == 111); - assert(x[z] == 101); - x[z] = 0; - assert(x[y] == 111); - assert(x[1] == 0); - if y as u32 < 10 { - x[y] = x[y] - 2; - } else { - x[y] = 0; - } - assert(x[4] == 109); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_len/Nargo.toml b/crates/nargo_cli/tests/test_data/array_len/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/array_len/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_len/Prover.toml b/crates/nargo_cli/tests/test_data/array_len/Prover.toml deleted file mode 100644 index 3c3295e6848..00000000000 --- a/crates/nargo_cli/tests/test_data/array_len/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -len3 = [1, 2, 3] -len4 = [1, 2, 3, 4] diff --git a/crates/nargo_cli/tests/test_data/array_len/src/main.nr b/crates/nargo_cli/tests/test_data/array_len/src/main.nr deleted file mode 100644 index 9099cfa2144..00000000000 --- a/crates/nargo_cli/tests/test_data/array_len/src/main.nr +++ /dev/null @@ -1,23 +0,0 @@ -use dep::std; - -fn len_plus_1(array: [T]) -> Field { - array.len() + 1 -} - -fn add_lens(a: [T], b: [Field]) -> Field { - a.len() + b.len() -} - -fn nested_call(b: [Field]) -> Field { - len_plus_1(b) -} - -fn main(len3: [u8; 3], len4: [Field; 4]) { - assert(len_plus_1(len3) == 4); - assert(len_plus_1(len4) == 5); - assert(add_lens(len3, len4) == 7); - assert(nested_call(len4) == 5); - - // std::array::len returns a comptime value - assert(len4[len3.len()] == 4); -} diff --git a/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml b/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_neq/Prover.toml b/crates/nargo_cli/tests/test_data/array_neq/Prover.toml deleted file mode 100644 index 3aad77f6d4d..00000000000 --- a/crates/nargo_cli/tests/test_data/array_neq/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data/array_neq/src/main.nr b/crates/nargo_cli/tests/test_data/array_neq/src/main.nr deleted file mode 100644 index be734dea368..00000000000 --- a/crates/nargo_cli/tests/test_data/array_neq/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -// Simple example of checking where two arrays are different -fn main(a: [Field; 32], b: [Field; 32]) { - assert(a != b); -} diff --git a/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml b/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_sort/Prover.toml b/crates/nargo_cli/tests/test_data/array_sort/Prover.toml deleted file mode 100644 index e0d79da4da6..00000000000 --- a/crates/nargo_cli/tests/test_data/array_sort/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -xs = [2, 1, 3] diff --git a/crates/nargo_cli/tests/test_data/array_sort/src/main.nr b/crates/nargo_cli/tests/test_data/array_sort/src/main.nr deleted file mode 100644 index 17df7b23551..00000000000 --- a/crates/nargo_cli/tests/test_data/array_sort/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(xs : [u8; 3]) { - let sorted = xs.sort(); - assert(sorted[0] == 1); - assert(sorted[1] == 2); - assert(sorted[2] == 3); -} diff --git a/crates/nargo_cli/tests/test_data/assert/Nargo.toml b/crates/nargo_cli/tests/test_data/assert/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/assert/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/assert/Prover.toml b/crates/nargo_cli/tests/test_data/assert/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data/assert/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data/assert/src/main.nr b/crates/nargo_cli/tests/test_data/assert/src/main.nr deleted file mode 100644 index 00e94414c0b..00000000000 --- a/crates/nargo_cli/tests/test_data/assert/src/main.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn main(x: Field) { - assert(x == 1); -} diff --git a/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml b/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml b/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml deleted file mode 100644 index 8c12ebba6cf..00000000000 --- a/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "2" diff --git a/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr b/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr deleted file mode 100644 index b0626d63c8e..00000000000 --- a/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(x: Field, y: Field) { - let mut z = x + y; - assert(z == 3); - z = x * y; - assert(z == 2); -} diff --git a/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_and/Prover.toml b/crates/nargo_cli/tests/test_data/bit_and/Prover.toml deleted file mode 100644 index 40ce2b0bc27..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_and/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "0x00" -y = "0x10" diff --git a/crates/nargo_cli/tests/test_data/bit_and/src/main.nr b/crates/nargo_cli/tests/test_data/bit_and/src/main.nr deleted file mode 100644 index f4805960a33..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_and/src/main.nr +++ /dev/null @@ -1,18 +0,0 @@ -// You can only do bit operations with integers. -// (Kobi/Daira/Circom/#37) https://github.com/iden3/circom/issues/37 -fn main(x : Field, y : Field) { - let x_as_u8 = x as u8; - let y_as_u8 = y as u8; - - assert((x_as_u8 & y_as_u8) == x_as_u8); - - //bitwise and with 1 bit: - let flag = (x == 0) & (y == 16); - assert(flag); - - //bitwise and with odd bits: - let x_as_u11 = x as u11; - let y_as_u11 = y as u11; - assert((x_as_u11 & y_as_u11) == x_as_u11); -} - diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml deleted file mode 100644 index cfd62c406cb..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 64 diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr deleted file mode 100644 index c1c6890febb..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr +++ /dev/null @@ -1,13 +0,0 @@ -fn main(x: u64) { - let two: u64 = 2; - let three: u64 = 3; - - // comptime shifts on comptime values - assert(two << 2 == 8); - assert((two << 3) / 8 == two); - assert((three >> 1) == 1); - - // comptime shifts on runtime values - assert(x << 1 == 128); - assert(x >> 2 == 16); -} diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml deleted file mode 100644 index 67bf6a6a234..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 64 -y = 1 diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr deleted file mode 100644 index 903a5f35463..00000000000 --- a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr +++ /dev/null @@ -1,12 +0,0 @@ -fn main(x: u64, y: u64) { - // These are currently unimplemented and panic with "ShiftLeft and ShiftRight operations with shifts which are only known at runtime are not yet implemented." - // See: https://github.com/noir-lang/noir/issues/1265 - - // runtime shifts on comptime values - assert(64 << y == 128); - assert(64 >> y == 32); - - // runtime shifts on runtime values - assert(x << y == 128); - assert(x >> y == 32); -} diff --git a/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml b/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bool_not/Prover.toml b/crates/nargo_cli/tests/test_data/bool_not/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_not/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data/bool_not/src/main.nr b/crates/nargo_cli/tests/test_data/bool_not/src/main.nr deleted file mode 100644 index d6b4d7a9fad..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_not/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -use dep::std; -fn main(x: u1) { - assert(!x == 0); -} - diff --git a/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml b/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bool_or/Prover.toml b/crates/nargo_cli/tests/test_data/bool_or/Prover.toml deleted file mode 100644 index a0397e89477..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_or/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "0" diff --git a/crates/nargo_cli/tests/test_data/bool_or/src/main.nr b/crates/nargo_cli/tests/test_data/bool_or/src/main.nr deleted file mode 100644 index 4a74027e4aa..00000000000 --- a/crates/nargo_cli/tests/test_data/bool_or/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -use dep::std; -fn main(x: u1, y: u1) { - assert(x | y == 1); - - assert(x | y | x == 1); -} - diff --git a/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml b/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml b/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml deleted file mode 100644 index f489cbac003..00000000000 --- a/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "10" -y = "10" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr b/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr deleted file mode 100644 index 57af8120b33..00000000000 --- a/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(x: Field, y: Field) { - let z = x == y; - let t = z as u8; - assert(t == 1); -} - diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml deleted file mode 100644 index ec8d8e34856..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -a = [1, 2, 3] diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr deleted file mode 100644 index 04f08bb70c5..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -fn main(a: [Field; 3]) { - let i = 1; - - // Using a comptime variable as a parameter should not make it non-comptime - let ii = foo(i); - let elem1 = a[i]; - - // Nor should using it in an expression with a non-comptime variable. - let two = i + ii; - assert(i == ii); - - let elem2 = a[i]; - assert(elem1 == elem2); - assert(two == 2); -} - -fn foo(x: Field) -> Field { x } diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml deleted file mode 100644 index 7d4290a117a..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 1 diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr deleted file mode 100644 index ad9ecc2f689..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr +++ /dev/null @@ -1,15 +0,0 @@ -fn main(x: Field) { - let my_const = 2; - let array = [0, 1, 2, 3]; - - // Error here: - let foo = my_const + x; - assert(array[foo] == x); - - let my_const2 = 3; - assert(array[my_const2] == 3); - - // Using a comptime variable where a non-comptime variable is expected should be fine - main(my_const2); - assert(x != 0); -} diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml deleted file mode 100644 index 745ce7c2361..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 5 -y = 6 diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr deleted file mode 100644 index 0461fd9c4cb..00000000000 --- a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -fn main(x: Field, y: Field) { - let flag = (x == 1) | (y == 2); - assert(flag | false == flag); -} diff --git a/crates/nargo_cli/tests/test_data/contracts/Nargo.toml b/crates/nargo_cli/tests/test_data/contracts/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/contracts/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/contracts/Prover.toml b/crates/nargo_cli/tests/test_data/contracts/Prover.toml deleted file mode 100644 index 97d5b1e0eed..00000000000 --- a/crates/nargo_cli/tests/test_data/contracts/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 3 -y = 2 diff --git a/crates/nargo_cli/tests/test_data/contracts/src/main.nr b/crates/nargo_cli/tests/test_data/contracts/src/main.nr deleted file mode 100644 index 53e094eb4cc..00000000000 --- a/crates/nargo_cli/tests/test_data/contracts/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -fn main(x : Field, y : pub Field) { - assert(x * 2 == y * 3); -} - -contract Foo { - fn double(x: Field) -> pub Field { x * 2 } - fn triple(x: Field) -> pub Field { x * 3 } -} diff --git a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml deleted file mode 100644 index 4a5c2a916f0..00000000000 --- a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "Baby Jubjub sanity checks" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr deleted file mode 100644 index 3372e969d4b..00000000000 --- a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr +++ /dev/null @@ -1,226 +0,0 @@ -// Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc - -use dep::std::ec::tecurve::affine::Curve as AffineCurve; -use dep::std::ec::tecurve::affine::Point as Gaffine; -use dep::std::ec::tecurve::curvegroup::Curve; -use dep::std::ec::tecurve::curvegroup::Point as G; - -use dep::std::ec::swcurve::affine::Point as SWGaffine; -use dep::std::ec::swcurve::curvegroup::Point as SWG; - -use dep::std::ec::montcurve::affine::Point as MGaffine; -use dep::std::ec::montcurve::curvegroup::Point as MG; - -fn main() { - // This test only makes sense if Field is the right prime field. - if 21888242871839275222246405745257275088548364400416034343698204186575808495617 == 0 - { - // Define Baby Jubjub (ERC-2494) parameters in affine representation - let bjj_affine = AffineCurve::new(168700, 168696, Gaffine::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905)); - - // Test addition - let p1_affine = Gaffine::new(17777552123799933955779906779655732241715742912184938656739573121738514868268, 2626589144620713026669568689430873010625803728049924121243784502389097019475); - let p2_affine = Gaffine::new(16540640123574156134436876038791482806971768689494387082833631921987005038935, 20819045374670962167435360035096875258406992893633759881276124905556507972311); - - let p3_affine = bjj_affine.add(p1_affine, p2_affine); - assert( - p3_affine.eq(Gaffine::new( - 7916061937171219682591368294088513039687205273691143098332585753343424131937, - 14035240266687799601661095864649209771790948434046947201833777492504781204499 - )) - ); - - // Test scalar multiplication - let p4_affine = bjj_affine.mul(2, p1_affine); - assert( - p4_affine.eq(Gaffine::new( - 6890855772600357754907169075114257697580319025794532037257385534741338397365, - 4338620300185947561074059802482547481416142213883829469920100239455078257889 - )) - ); - assert(p4_affine.eq(bjj_affine.bit_mul([0,1], p1_affine))); - - // Test subtraction - let p5_affine = bjj_affine.subtract(p3_affine, p3_affine); - assert(p5_affine.eq(Gaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_affine.contains(bjj_affine.gen) & - bjj_affine.contains(p1_affine) & - bjj_affine.contains(p2_affine) & - bjj_affine.contains(p3_affine) & - bjj_affine.contains(p4_affine) & - bjj_affine.contains(p5_affine) - ); - - // Test CurveGroup equivalents - let bjj = bjj_affine.into_group(); // Baby Jubjub - - let p1 = p1_affine.into_group(); - let p2 = p2_affine.into_group(); - let p3 = p3_affine.into_group(); - let p4 = p4_affine.into_group(); - let p5 = p5_affine.into_group(); - - // Test addition - assert(p3.eq(bjj.add(p1, p2))); - - // Test scalar multiplication - assert(p4.eq(bjj.mul(2, p1))); - assert(p4.eq(bjj.bit_mul([0,1], p1))); - - // Test subtraction - assert(G::zero().eq(bjj.subtract(p3, p3))); - assert(p5.eq(G::zero())); - - // Check that these points are on the curve - assert( - bjj.contains(bjj.gen) & - bjj.contains(p1) & - bjj.contains(p2) & - bjj.contains(p3) & - bjj.contains(p4) & - bjj.contains(p5) - ); - - // Test SWCurve equivalents of the above - // First the affine representation - let bjj_swcurve_affine = bjj_affine.into_swcurve(); - - let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine); - let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine); - let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine); - let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine); - let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine); - - // Addition - assert( - p3_swcurve_affine.eq( - bjj_swcurve_affine.add( - p1_swcurve_affine, - p2_swcurve_affine - ) - ) - ); - - // Doubling - assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine))); - assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0,1], p1_swcurve_affine))); - - // Subtraction - assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(p3_swcurve_affine, p3_swcurve_affine))); - assert(p5_swcurve_affine.eq(SWGaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_swcurve_affine.contains(bjj_swcurve_affine.gen) & - bjj_swcurve_affine.contains(p1_swcurve_affine) & - bjj_swcurve_affine.contains(p2_swcurve_affine) & - bjj_swcurve_affine.contains(p3_swcurve_affine) & - bjj_swcurve_affine.contains(p4_swcurve_affine) & - bjj_swcurve_affine.contains(p5_swcurve_affine) - ); - - // Then the CurveGroup representation - let bjj_swcurve = bjj.into_swcurve(); - - let p1_swcurve = bjj.map_into_swcurve(p1); - let p2_swcurve = bjj.map_into_swcurve(p2); - let p3_swcurve = bjj.map_into_swcurve(p3); - let p4_swcurve = bjj.map_into_swcurve(p4); - let p5_swcurve = bjj.map_into_swcurve(p5); - - // Addition - assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve,p2_swcurve))); - - // Doubling - assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve))); - assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0,1], p1_swcurve))); - - // Subtraction - assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve))); - assert(p5_swcurve.eq(SWG::zero())); - - // Check that these points are on the curve - assert( - bjj_swcurve.contains(bjj_swcurve.gen) & - bjj_swcurve.contains(p1_swcurve) & - bjj_swcurve.contains(p2_swcurve) & - bjj_swcurve.contains(p3_swcurve) & - bjj_swcurve.contains(p4_swcurve) & - bjj_swcurve.contains(p5_swcurve) - ); - - // Test MontCurve conversions - // First the affine representation - let bjj_montcurve_affine = bjj_affine.into_montcurve(); - - let p1_montcurve_affine = p1_affine.into_montcurve(); - let p2_montcurve_affine = p2_affine.into_montcurve(); - let p3_montcurve_affine = p3_affine.into_montcurve(); - let p4_montcurve_affine = p4_affine.into_montcurve(); - let p5_montcurve_affine = p5_affine.into_montcurve(); - - // Addition - assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(p1_montcurve_affine, p2_montcurve_affine))); - - // Doubling - assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine))); - assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0,1], p1_montcurve_affine))); - - // Subtraction - assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(p3_montcurve_affine, p3_montcurve_affine))); - assert(p5_montcurve_affine.eq(MGaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_montcurve_affine.contains(bjj_montcurve_affine.gen) & - bjj_montcurve_affine.contains(p1_montcurve_affine) & - bjj_montcurve_affine.contains(p2_montcurve_affine) & - bjj_montcurve_affine.contains(p3_montcurve_affine) & - bjj_montcurve_affine.contains(p4_montcurve_affine) & - bjj_montcurve_affine.contains(p5_montcurve_affine) - ); - - // Then the CurveGroup representation - let bjj_montcurve = bjj.into_montcurve(); - - let p1_montcurve = p1_montcurve_affine.into_group(); - let p2_montcurve = p2_montcurve_affine.into_group(); - let p3_montcurve = p3_montcurve_affine.into_group(); - let p4_montcurve = p4_montcurve_affine.into_group(); - let p5_montcurve = p5_montcurve_affine.into_group(); - - // Addition - assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve))); - - // Doubling - assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve))); - assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0,1], p1_montcurve))); - - // Subtraction - assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve))); - assert(p5_montcurve.eq(MG::zero())); - - // Check that these points are on the curve - assert( - bjj_montcurve.contains(bjj_montcurve.gen) & - bjj_montcurve.contains(p1_montcurve) & - bjj_montcurve.contains(p2_montcurve) & - bjj_montcurve.contains(p3_montcurve) & - bjj_montcurve.contains(p4_montcurve) & - bjj_montcurve.contains(p5_montcurve) - ); - - // Elligator 2 map-to-curve - let ell2_pt_map = bjj_affine.elligator2_map(27); - - assert(ell2_pt_map.eq(MGaffine::new(7972459279704486422145701269802978968072470631857513331988813812334797879121, 8142420778878030219043334189293412482212146646099536952861607542822144507872).into_tecurve())); - - // SWU map-to-curve - let swu_pt_map = bjj_affine.swu_map(5,27); - - assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(2162719247815120009132293839392097468339661471129795280520343931405114293888, 5341392251743377373758788728206293080122949448990104760111875914082289313973)))); - } -} diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml deleted file mode 100644 index 7199d3305bf..00000000000 --- a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "ECDSA secp256k1 verification" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml deleted file mode 100644 index 412c7b36e4c..00000000000 --- a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml +++ /dev/null @@ -1,209 +0,0 @@ - -hashed_message = [ - 0x3a, - 0x73, - 0xf4, - 0x12, - 0x3a, - 0x5c, - 0xd2, - 0x12, - 0x1f, - 0x21, - 0xcd, - 0x7e, - 0x8d, - 0x35, - 0x88, - 0x35, - 0x47, - 0x69, - 0x49, - 0xd0, - 0x35, - 0xd9, - 0xc2, - 0xda, - 0x68, - 0x06, - 0xb4, - 0x63, - 0x3a, - 0xc8, - 0xc1, - 0xe2, -] -message = [ - 0x49, - 0x6e, - 0x73, - 0x74, - 0x72, - 0x75, - 0x63, - 0x74, - 0x69, - 0x6f, - 0x6e, - 0x73, - 0x20, - 0x75, - 0x6e, - 0x63, - 0x6c, - 0x65, - 0x61, - 0x72, - 0x2c, - 0x20, - 0x61, - 0x73, - 0x6b, - 0x20, - 0x61, - 0x67, - 0x61, - 0x69, - 0x6e, - 0x20, - 0x6c, - 0x61, - 0x74, - 0x65, - 0x72, - 0x2e, -] -pub_key_x = [ - 0xa0, - 0x43, - 0x4d, - 0x9e, - 0x47, - 0xf3, - 0xc8, - 0x62, - 0x35, - 0x47, - 0x7c, - 0x7b, - 0x1a, - 0xe6, - 0xae, - 0x5d, - 0x34, - 0x42, - 0xd4, - 0x9b, - 0x19, - 0x43, - 0xc2, - 0xb7, - 0x52, - 0xa6, - 0x8e, - 0x2a, - 0x47, - 0xe2, - 0x47, - 0xc7, -] -pub_key_y = [ - 0x89, - 0x3a, - 0xba, - 0x42, - 0x54, - 0x19, - 0xbc, - 0x27, - 0xa3, - 0xb6, - 0xc7, - 0xe6, - 0x93, - 0xa2, - 0x4c, - 0x69, - 0x6f, - 0x79, - 0x4c, - 0x2e, - 0xd8, - 0x77, - 0xa1, - 0x59, - 0x3c, - 0xbe, - 0xe5, - 0x3b, - 0x03, - 0x73, - 0x68, - 0xd7, -] -signature = [ - 0xe5, - 0x08, - 0x1c, - 0x80, - 0xab, - 0x42, - 0x7d, - 0xc3, - 0x70, - 0x34, - 0x6f, - 0x4a, - 0x0e, - 0x31, - 0xaa, - 0x2b, - 0xad, - 0x8d, - 0x97, - 0x98, - 0xc3, - 0x80, - 0x61, - 0xdb, - 0x9a, - 0xe5, - 0x5a, - 0x4e, - 0x8d, - 0xf4, - 0x54, - 0xfd, - 0x28, - 0x11, - 0x98, - 0x94, - 0x34, - 0x4e, - 0x71, - 0xb7, - 0x87, - 0x70, - 0xcc, - 0x93, - 0x1d, - 0x61, - 0xf4, - 0x80, - 0xec, - 0xbb, - 0x0b, - 0x89, - 0xd6, - 0xeb, - 0x69, - 0x69, - 0x01, - 0x61, - 0xe4, - 0x9a, - 0x71, - 0x5f, - 0xcd, - 0x55, -] diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr deleted file mode 100644 index dfac8673b38..00000000000 --- a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -use dep::std; - - -fn main(message : [u8;38],hashed_message : [u8;32], pub_key_x : [u8;32], pub_key_y : [u8;32], signature : [u8;64]) { - // Hash the message, since secp256k1 expects a hashed_message - let expected= std::hash::sha256(message); - assert(hashed_message == expected); - - let valid_signature = std::ecdsa_secp256k1::verify_signature(pub_key_x, pub_key_y, signature, hashed_message); - assert(valid_signature); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml b/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml deleted file mode 100644 index 48db376fb19..00000000000 --- a/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.3.2" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/eddsa/Prover.toml b/crates/nargo_cli/tests/test_data/eddsa/Prover.toml deleted file mode 100644 index 53555202ca6..00000000000 --- a/crates/nargo_cli/tests/test_data/eddsa/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -_priv_key_a = 123 -_priv_key_b = 456 -msg = 789 diff --git a/crates/nargo_cli/tests/test_data/eddsa/src/main.nr b/crates/nargo_cli/tests/test_data/eddsa/src/main.nr deleted file mode 100644 index 8de38011aaf..00000000000 --- a/crates/nargo_cli/tests/test_data/eddsa/src/main.nr +++ /dev/null @@ -1,55 +0,0 @@ -use dep::std::compat; -use dep::std::ec::consts::te::baby_jubjub; -use dep::std::hash; -use dep::std::eddsa::eddsa_poseidon_verify; -use dep::std; - -fn main(msg: pub Field, _priv_key_a: Field, _priv_key_b: Field) { - // Skip this test for non-bn254 backends - if compat::is_bn254() { - let bjj = baby_jubjub(); - - let pub_key_a = bjj.curve.mul(_priv_key_a, bjj.curve.gen); - // let pub_key_b = bjj.curve.mul(_priv_key_b, bjj.curve.gen); - - // Manually computed as fields can't use modulo. Importantantly the commitment is within - // the subgroup order. Note that choice of hash is flexible for this step. - // let r_a = hash::pedersen([_priv_key_a, msg])[0] % bjj.suborder; // modulus computed manually - let r_a = 1414770703199880747815475415092878800081323795074043628810774576767372531818; - // let r_b = hash::pedersen([_priv_key_b, msg])[0] % bjj.suborder; // modulus computed manually - let r_b = 571799555715456644614141527517766533395606396271089506978608487688924659618; - - let r8_a = bjj.curve.mul(r_a, bjj.base8); - let r8_b = bjj.curve.mul(r_b, bjj.base8); - - // let h_a: [Field; 6] = hash::poseidon::bn254::hash_5([ - // r8_a.x, - // r8_a.y, - // pub_key_a.x, - // pub_key_a.y, - // msg, - // ]); - - // let h_b: [Field; 6] = hash::poseidon::bn254::hash_5([ - // r8_b.x, - // r8_b.y, - // pub_key_b.x, - // pub_key_b.y, - // msg, - // ]); - - // let s_a = (r_a + _priv_key_a * h_a) % bjj.suborder; // modulus computed manually - let s_a = 30333430637424319196043722294837632681219980330991241982145549329256671548; - // let s_b = (r_b + _priv_key_b * h_b) % bjj.suborder; // modulus computed manually - let s_b = 1646085314320208098241070054368798527940102577261034947654839408482102287019; - - // User A verifies their signature over the message - assert(eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_a, r8_a.x, r8_a.y, msg)); - - // User B's signature over the message can't be used with user A's pub key - assert(!eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_b, r8_b.x, r8_b.y, msg)); - - // User A's signature over the message can't be used with another message - assert(!eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_a, r8_a.x, r8_a.y, msg + 1)); - } -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/generics/Nargo.toml b/crates/nargo_cli/tests/test_data/generics/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/generics/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/generics/Prover.toml b/crates/nargo_cli/tests/test_data/generics/Prover.toml deleted file mode 100644 index 85f1e9f96f2..00000000000 --- a/crates/nargo_cli/tests/test_data/generics/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2" -y = "2" diff --git a/crates/nargo_cli/tests/test_data/generics/src/main.nr b/crates/nargo_cli/tests/test_data/generics/src/main.nr deleted file mode 100644 index bfde9d3c957..00000000000 --- a/crates/nargo_cli/tests/test_data/generics/src/main.nr +++ /dev/null @@ -1,57 +0,0 @@ -struct Bar { - one: Field, - two: Field, - other: T, -} - -fn foo(bar: Bar) { - assert(bar.one == bar.two); -} - -struct BigInt { - limbs: [u32; N], -} - -impl BigInt { - // `N` is in scope of all methods in the impl - fn first(first: BigInt, second: BigInt) -> Self { - assert(first.limbs != second.limbs); - first - } - - fn second(first: BigInt, second: Self) -> Self { - assert(first.limbs != second.limbs); - second - } -} - -impl Bar { - fn get_other(self) -> Field { - self.other - } -} - -fn main(x: Field, y: Field) { - let bar1: Bar = Bar { one: x, two: y, other: 0 }; - let bar2 = Bar { one: x, two: y, other: [0] }; - - foo(bar1); - foo(bar2); - - // Test generic impls - let int1 = BigInt { limbs: [1] }; - let int2 = BigInt { limbs: [2] }; - let BigInt { limbs } = int1.second(int2).first(int1); - assert(limbs == int2.limbs); - - // Test impl exclusively for Bar - assert(bar1.get_other() == bar1.other); - - // Expected type error - // assert(bar2.get_other() == bar2.other); - - let one = x; - let two = y; - let nested_generics: Bar> = Bar { one, two, other: Bar { one, two, other: 0 } }; - assert(nested_generics.other.other == bar1.get_other()); -} diff --git a/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml b/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/Prover.toml b/crates/nargo_cli/tests/test_data/global_consts/Prover.toml deleted file mode 100644 index 66f7feb1dda..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -c = [3, 3, 3] -d = [5, 5, 5, 5, 5] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr b/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr deleted file mode 100644 index e52efc52eae..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr +++ /dev/null @@ -1,5 +0,0 @@ -fn from_baz(x : [Field; crate::foo::MAGIC_NUMBER]) { - for i in 0..crate::foo::MAGIC_NUMBER { - assert(x[i] == crate::foo::MAGIC_NUMBER); - }; -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr b/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr deleted file mode 100644 index 2db74fb1ff7..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr +++ /dev/null @@ -1,11 +0,0 @@ -mod bar; - -global N: Field = 5; -global MAGIC_NUMBER: Field = 3; -global TYPE_INFERRED = 42; - -fn from_foo(x : [Field; bar::N]) { - for i in 0..bar::N { - assert(x[i] == bar::N); - }; -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr deleted file mode 100644 index 1b4d472b1e8..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr +++ /dev/null @@ -1,5 +0,0 @@ -global N: Field = 5; - -fn from_bar(x : Field) -> Field { - x * N -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/main.nr b/crates/nargo_cli/tests/test_data/global_consts/src/main.nr deleted file mode 100644 index 9bcca2b8071..00000000000 --- a/crates/nargo_cli/tests/test_data/global_consts/src/main.nr +++ /dev/null @@ -1,88 +0,0 @@ -mod foo; -mod baz; - -global M: Field = 32; -global L: Field = 10; // Unused globals currently allowed -global N: Field = 5; -global T_LEN = 2; // Type inference is allowed on globals -//global N: Field = 5; // Uncomment to see duplicate globals error - -struct Dummy { - x: [Field; N], - y: [Field; foo::MAGIC_NUMBER] -} - -fn main(a: [Field; M + N - N], b: [Field; 30 + N / 2], c : pub [Field; foo::MAGIC_NUMBER], d: [Field; foo::bar::N]) { - let test_struct = Dummy { x: d, y: c }; - - for i in 0..foo::MAGIC_NUMBER { - assert(c[i] == foo::MAGIC_NUMBER); - assert(test_struct.y[i] == foo::MAGIC_NUMBER); - } - - assert(N != M); - - let expected: u32 = 42; - assert(foo::TYPE_INFERRED == expected); - - let mut y = 5; - let mut x = M; - for i in 0..N*N { - let M: comptime Field = 10; - x = M; - - y = i; - } - assert(y == 24); - assert(x == 10); - - let q = multiplyByM(3); - assert(q == 96); - - arrays_neq(a, b); - - let t: [Field; T_LEN] = [N, M]; - assert(t[1] == 32); - - assert(15 == mysubmodule::my_helper()); - - let add_submodules_N = mysubmodule::N + foo::bar::N; - assert(15 == add_submodules_N); - let add_from_bar_N = mysubmodule::N + foo::bar::from_bar(1); - assert(15 == add_from_bar_N); - - // Example showing an array filled with (mysubmodule::N + 2) 0's - let sugared = [0; mysubmodule::N + 2]; - assert(sugared[mysubmodule::N + 1] == 0); - - let arr: [Field; mysubmodule::N] = [N; 10]; - assert((arr[0] == 5) & (arr[9] == 5)); - - foo::from_foo(d); - baz::from_baz(c); -} - -fn multiplyByM(x: Field) -> Field { - x * M -} - -fn arrays_neq(a: [Field; M], b: [Field; M]) { - assert(a != b); -} - -mod mysubmodule { - use dep::std; - - global N: Field = 10; - global L: Field = 50; - - fn my_bool_or(x: u1, y: u1) { - assert(x | y == 1); - } - - fn my_helper() -> comptime Field { - let N: comptime Field = 15; // Like in Rust, local variables override globals - let x = N; - x - } -} diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml b/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml b/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml deleted file mode 100644 index f6597d3f78a..00000000000 --- a/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -input = "1" diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr b/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr deleted file mode 100644 index ffc334179ee..00000000000 --- a/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -use dep::std; - -fn main(input : Field) -> pub Field { - std::hash::hash_to_field([input]) -} diff --git a/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml b/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml b/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml deleted file mode 100644 index 8b137891791..00000000000 --- a/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml b/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml b/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml deleted file mode 100644 index 84aeb36ac21..00000000000 --- a/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -a=0 -c=[2, 4, 3, 0, ] diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr b/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr deleted file mode 100644 index 5105c18c7de..00000000000 --- a/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr +++ /dev/null @@ -1,16 +0,0 @@ - -fn main(a: u32, mut c: [u32; 4]){ - if a == c[0] { - assert(c[0] == 0); - } else if a == c[1] { - assert(c[1] == 0); - } else if a == c[2] { - assert(c[2] == 0); - } else if a == c[3] { - // expect to match this case - assert(c[3] == 0); - } else { - assert(c[0] == 10); - } -} - diff --git a/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml b/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/keccak256/Prover.toml b/crates/nargo_cli/tests/test_data/keccak256/Prover.toml deleted file mode 100644 index d65c4011d3f..00000000000 --- a/crates/nargo_cli/tests/test_data/keccak256/Prover.toml +++ /dev/null @@ -1,35 +0,0 @@ -x = 0xbd -result = [ - 0x5a, - 0x50, - 0x2f, - 0x9f, - 0xca, - 0x46, - 0x7b, - 0x26, - 0x6d, - 0x5b, - 0x78, - 0x33, - 0x65, - 0x19, - 0x37, - 0xe8, - 0x05, - 0x27, - 0x0c, - 0xa3, - 0xf3, - 0xaf, - 0x1c, - 0x0d, - 0xd2, - 0x46, - 0x2d, - 0xca, - 0x4b, - 0x3b, - 0x1a, - 0xbf, -] diff --git a/crates/nargo_cli/tests/test_data/keccak256/src/main.nr b/crates/nargo_cli/tests/test_data/keccak256/src/main.nr deleted file mode 100644 index ba3ed7d07af..00000000000 --- a/crates/nargo_cli/tests/test_data/keccak256/src/main.nr +++ /dev/null @@ -1,22 +0,0 @@ -// Keccak256 example -// -use dep::std; - -fn main(x: Field, result: [u8; 32]) { - // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field - // The padding is taken care of by the program - let digest = std::hash::keccak256([x as u8], 1); - assert(digest == result); - - //#1399: variable meesage size - let message_size = 4; - let hash_a = std::hash::keccak256([1,2,3,4], message_size); - let hash_b = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size); - - assert(hash_a == hash_b); - - let message_size_big = 8; - let hash_c = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size_big); - - assert(hash_a != hash_c); -} diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml b/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml deleted file mode 100644 index fb93b9aa2a7..00000000000 --- a/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml b/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml deleted file mode 100644 index f932e0b4817..00000000000 --- a/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = true -y = [true, false] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr b/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr deleted file mode 100644 index 0615a7dbca4..00000000000 --- a/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -fn main(x : bool, y: [bool;2]) { - if x { - assert(1 != 2); - } - - assert(x); - assert(y[0] != y[1]); -} diff --git a/crates/nargo_cli/tests/test_data/main_return/Nargo.toml b/crates/nargo_cli/tests/test_data/main_return/Nargo.toml deleted file mode 100644 index fb93b9aa2a7..00000000000 --- a/crates/nargo_cli/tests/test_data/main_return/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_return/Prover.toml b/crates/nargo_cli/tests/test_data/main_return/Prover.toml deleted file mode 100644 index 63e9878811a..00000000000 --- a/crates/nargo_cli/tests/test_data/main_return/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "8" diff --git a/crates/nargo_cli/tests/test_data/main_return/src/main.nr b/crates/nargo_cli/tests/test_data/main_return/src/main.nr deleted file mode 100644 index 06347eb0919..00000000000 --- a/crates/nargo_cli/tests/test_data/main_return/src/main.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn main(x: pub Field) -> pub Field { - x -} diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml b/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml b/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml deleted file mode 100644 index fca4a077df4..00000000000 --- a/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml +++ /dev/null @@ -1,11 +0,0 @@ -old_root = "0x285785b10eca49cf456b935f1c9787ff571f306c1bc62549c31a9199a633f9f8" -old_leaf = "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0" -old_hash_path = [ - "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", - "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", - "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", -] -new_root = "0x2d05c2650e6c2ef02c6dc7fae7f517b8ac191386666c0b5a68130a8c11092f5f" -leaf = "0x085ca53be9c9d95b57e6e5fc91c5d531ad9e63e85dd71af7e35562991774b435" -index = "0" -mimc_input = [12,45,78,41] diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr b/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr deleted file mode 100644 index 3de10520037..00000000000 --- a/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr +++ /dev/null @@ -1,21 +0,0 @@ -use dep::std; - -fn main( - old_root: Field, - old_leaf: Field, - old_hash_path: [Field; 3], - new_root: pub Field, - leaf: Field, - index: Field, - mimc_input: [Field; 4], -) { - assert(old_root == std::merkle::compute_merkle_root(old_leaf, index, old_hash_path)); - - let calculated_root = std::merkle::compute_merkle_root(leaf, index, old_hash_path); - assert(new_root == calculated_root); - - let h = std::hash::mimc_bn254(mimc_input); - // Regression test for PR #891 - std::println(h); - assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); -} diff --git a/crates/nargo_cli/tests/test_data/modules/Nargo.toml b/crates/nargo_cli/tests/test_data/modules/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/modules/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules/Prover.toml b/crates/nargo_cli/tests/test_data/modules/Prover.toml deleted file mode 100644 index c0a0cdfbeb0..00000000000 --- a/crates/nargo_cli/tests/test_data/modules/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2" -y = "13" diff --git a/crates/nargo_cli/tests/test_data/modules/src/foo.nr b/crates/nargo_cli/tests/test_data/modules/src/foo.nr deleted file mode 100644 index 1f771fa9425..00000000000 --- a/crates/nargo_cli/tests/test_data/modules/src/foo.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn hello(x : Field) -> Field { - x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules/src/main.nr b/crates/nargo_cli/tests/test_data/modules/src/main.nr deleted file mode 100644 index 167f7e671a0..00000000000 --- a/crates/nargo_cli/tests/test_data/modules/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -mod foo; -// This is a comment. -// -// `main` is the entry point to a binary -// -// You can have a `Binary` or a `Library` -// Release : 0.2 -// -// To run a proof on the command line, type `cargo run prove {proof_name}` -// -// To verify that proof, type `cargo run verify {proof_name}` -fn main(x: Field, y: pub Field) { - assert(x != foo::hello(y)); -} diff --git a/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml b/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/Prover.toml b/crates/nargo_cli/tests/test_data/modules_more/Prover.toml deleted file mode 100644 index 39a4ddb9d15..00000000000 --- a/crates/nargo_cli/tests/test_data/modules_more/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ - - x = "5" - y = "15" - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr b/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr deleted file mode 100644 index ee0d20082f5..00000000000 --- a/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr +++ /dev/null @@ -1,5 +0,0 @@ -mod bar; - -fn hello(x : Field) -> Field { - x -} diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr deleted file mode 100644 index a92fb81dceb..00000000000 --- a/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn from_bar(x : Field) -> Field { - x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/main.nr b/crates/nargo_cli/tests/test_data/modules_more/src/main.nr deleted file mode 100644 index 8862e5a8650..00000000000 --- a/crates/nargo_cli/tests/test_data/modules_more/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -mod foo; - -// An example of the module system -fn main(x: Field, y: Field) { - assert(x != foo::bar::from_bar(y)); -} diff --git a/crates/nargo_cli/tests/test_data/modulus/Nargo.toml b/crates/nargo_cli/tests/test_data/modulus/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/modulus/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modulus/Prover.toml b/crates/nargo_cli/tests/test_data/modulus/Prover.toml deleted file mode 100644 index d435609bb1a..00000000000 --- a/crates/nargo_cli/tests/test_data/modulus/Prover.toml +++ /dev/null @@ -1,290 +0,0 @@ -bn254_modulus_be_bytes = [ - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, -] -bn254_modulus_be_bits = [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 1, - 1, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, -] diff --git a/crates/nargo_cli/tests/test_data/modulus/src/main.nr b/crates/nargo_cli/tests/test_data/modulus/src/main.nr deleted file mode 100644 index 4a13a6e06ba..00000000000 --- a/crates/nargo_cli/tests/test_data/modulus/src/main.nr +++ /dev/null @@ -1,27 +0,0 @@ -use dep::std; - -fn main(bn254_modulus_be_bytes : [u8; 32], bn254_modulus_be_bits : [u1; 254]) -> pub Field { - let modulus_size = std::field::modulus_num_bits(); - // NOTE: The constraints used in this circuit will only work when testing nargo with the plonk bn254 backend - assert(modulus_size == 254); - - let modulus_be_byte_array = std::field::modulus_be_bytes(); - for i in 0..32 { - assert(modulus_be_byte_array[i] == bn254_modulus_be_bytes[i]); - } - let modulus_le_byte_array = std::field::modulus_le_bytes(); - for i in 0..32 { - assert(modulus_le_byte_array[i] == bn254_modulus_be_bytes[31-i]); - } - - let modulus_be_bits = std::field::modulus_be_bits(); - for i in 0..254 { - assert(modulus_be_bits[i] == bn254_modulus_be_bits[i]); - } - let modulus_le_bits = std::field::modulus_le_bits(); - for i in 0..254 { - assert(modulus_le_bits[i] == bn254_modulus_be_bits[253-i]); - } - - modulus_size -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml b/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml b/crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr b/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr deleted file mode 100644 index f1efafc19fd..00000000000 --- a/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr +++ /dev/null @@ -1,39 +0,0 @@ -fn main() { - let a = id([1, 2]); - let b = id([1, 2, 3]); - - let itWorks1 = MyStruct { data: a }; - assert(itWorks1.data[1] == 2); - let itWorks2 = MyStruct { data: b }; - assert(itWorks2.data[1] == 2); - - let c = [1, 2]; - let itAlsoWorks = MyStruct { data: c }; - assert(itAlsoWorks.data[1] == 2); - - assert(foo(itWorks2).data[0] == itWorks2.data[0] + 1); -} - -fn id(x: [Field; I]) -> [Field; I] { - x -} - -struct MyStruct { - data: [Field; S], -} - -impl MyStruct { - fn insert(mut self: Self, index: comptime Field, elem: Field) -> Self { - // Regression test for numeric generics on impls - assert(index as u64 < S as u64); - - self.data[index] = elem; - self - } -} - -fn foo(mut s: MyStruct<2+1>) -> MyStruct<10/2-2> { - s.data[0] = s.data[0] + 1; - s -} - diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml b/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml b/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml deleted file mode 100644 index 2fb3b1e1abf..00000000000 --- a/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml +++ /dev/null @@ -1,6 +0,0 @@ -x = "0" -y = "1" -salt = "42" - -out_x = "0x0c5e1ddecd49de44ed5e5798d3f6fb7c71fe3d37f5bee8664cf88a445b5ba0af" -out_y = "0x230294a041e26fe80b827c2ef5cb8784642bbaa83842da2714d62b1f3c4f9752" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr b/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr deleted file mode 100644 index 37fc3f61188..00000000000 --- a/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -use dep::std; - -fn main(x: Field, y: Field, salt: Field, out_x: Field, out_y: Field ) { - let res = std::hash::pedersen([x, y]); - assert(res[0] == out_x); - assert(res[1] == out_y); - - let raw_data = [x,y]; - let mut state = 0; - for i in 0..2 { - state = state * 8 + raw_data[i]; - } - state += salt; - let hash = std::hash::pedersen([state]); - assert(std::hash::pedersen([43])[0] == hash[0]); -} - diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml deleted file mode 100644 index 6a061f5a217..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "Poseidon 254-bit permutation test on 3 elements with alpha = 5" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml deleted file mode 100644 index 8eecf9a3db2..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -x1 = [1,2] -y1 = "0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a" -x2 = [1,2,3,4] -y2 = "0x299c867db6c1fdd79dcefa40e4510b9837e60ebb1ce0663dbaa525df65250465" diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr deleted file mode 100644 index 37621c732a8..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -use dep::std::hash::poseidon; - -fn main(x1: [Field; 2], y1: pub Field, x2: [Field; 4], y2: pub Field) -{ - let hash1 = poseidon::bn254::hash_2(x1); - assert(hash1 == y1); - - let hash2 = poseidon::bn254::hash_4(x2); - assert(hash2 == y2); -} diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml deleted file mode 100644 index 902abd85754..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "Variable-length Poseidon-128 sponge test on 7 elements with alpha = 5" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml deleted file mode 100644 index f8a6be57b24..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = [1,2,3,4,5,6,7] diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr deleted file mode 100644 index 3addc1cec97..00000000000 --- a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -use dep::std::hash::poseidon; - -fn main(x: [Field; 7]) -{ - // Test optimised sponge - let result = poseidon::bn254::sponge(x); - - assert(result == 0x080ae1669d62f0197190573d4a325bfb8d8fc201ce3127cbac0c47a7ac81ac48); -} diff --git a/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml b/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml b/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml deleted file mode 100644 index 465ef562de4..00000000000 --- a/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "1" diff --git a/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr b/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr deleted file mode 100644 index c7986cb7af3..00000000000 --- a/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use dep::std; - -fn main(x: Field, y: Field) { - let p = x == y; - assert(p == true); -} diff --git a/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml b/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/range_fail/Prover.toml b/crates/nargo_cli/tests/test_data/range_fail/Prover.toml deleted file mode 100644 index 7524e8b58b1..00000000000 --- a/crates/nargo_cli/tests/test_data/range_fail/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "300" -y = "20" diff --git a/crates/nargo_cli/tests/test_data/range_fail/src/main.nr b/crates/nargo_cli/tests/test_data/range_fail/src/main.nr deleted file mode 100644 index 4535c5d9e5f..00000000000 --- a/crates/nargo_cli/tests/test_data/range_fail/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// Multiple integers constraints. -// -// There is currently no range optimizer currently in ACIR :( -// -fn main(x: u8, y: Field) { - let _z = x + (y as u8); -} - diff --git a/crates/nargo_cli/tests/test_data/regression/Nargo.toml b/crates/nargo_cli/tests/test_data/regression/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/regression/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/regression/Prover.toml b/crates/nargo_cli/tests/test_data/regression/Prover.toml deleted file mode 100644 index 2875190982f..00000000000 --- a/crates/nargo_cli/tests/test_data/regression/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = [0x3f, 0x1c, 0xb8, 0x99, 0xab] -z = 3 diff --git a/crates/nargo_cli/tests/test_data/regression/src/main.nr b/crates/nargo_cli/tests/test_data/regression/src/main.nr deleted file mode 100644 index 06e35827d1e..00000000000 --- a/crates/nargo_cli/tests/test_data/regression/src/main.nr +++ /dev/null @@ -1,101 +0,0 @@ -global NIBBLE_LENGTH: comptime Field = 16; - -fn compact_decode(input: [u8; N], length: Field) -> ([u4; NIBBLE_LENGTH], Field) -{ - assert(2*input.len() as u64 <= NIBBLE_LENGTH as u64); - assert(length as u64 <= input.len() as u64); - - let mut nibble = [0 as u4; NIBBLE_LENGTH]; - - let first_nibble = (input[0] >> 4) as u4; - let parity = first_nibble as u1; - - if parity == 1 - { - nibble[0] = (input[0] & 0x0f) as u4; - for i in 1..input.len() - { - if i as u64 < length as u64 - { - let x = input[i]; - nibble[2*i - 1] = (x >> 4) as u4; - nibble[2*i] = (x & 0x0f) as u4; - } - } - } - else - { - for i in 0..2 - { - if (i as u64) < length as u64 - 1 - { - let x = input[i + 1]; - nibble[2*i] = (x >> 4) as u4; - nibble[2*i + 1] = (x & 0x0f) as u4; - } - } - } - - let out = (nibble, 2*length + (parity as Field) - 2); - - out -} - -fn enc(value: [u8; N], value_length: Field) -> ([u8; 32], Field) -{ - assert(value.len() as u8 >= value_length as u8); - let mut out_value = [0; 32]; - if value_length == 0 - { - let out = (out_value, value_length); - out - } - else { if value_length as u8 < 31 - { - out_value[0] = 0x80 + value_length as u8; - - for i in 1..value.len() - { - out_value[i] = value[i-1]; - } - - let out = (out_value, value_length + 1); - - out - } - else - { - let out = (out_value, 32); - out - } - } -} - -fn main(x: [u8; 5], z: Field) -{ - //Issue 1144 - let (nib, len) = compact_decode(x,z); - assert(len == 5); - assert([nib[0], nib[1], nib[2], nib[3], nib[4]] == [15, 1, 12, 11, 8]); - - -} - -#[test] -// Issue 1144 -fn test_1144() -{ - main([0x3f, 0x1c, 0xb8, 0x99, 0xab], 3); -} - -// Issue 1169 -fn enc_test() -{ - let val1 = [0xb8,0x8f,0x61,0xe6,0xfb,0xda,0x83,0xfb,0xff,0xfa,0xbe,0x36,0x41,0x12,0x13,0x74,0x80,0x39,0x80,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]; - let val1_length = 20; - - let enc_val1 = enc(val1,val1_length); - - assert(enc_val1.0 == [0x94,0xb8,0x8f,0x61,0xe6,0xfb,0xda,0x83,0xfb,0xff,0xfa,0xbe,0x36,0x41,0x12,0x13,0x74,0x80,0x39,0x80,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]); - assert(enc_val1.1 == 21); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml b/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml b/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml deleted file mode 100644 index 69b91cb5f31..00000000000 --- a/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml +++ /dev/null @@ -1,7 +0,0 @@ -a = "1" -a_pub_x = "0x0000000000000000000000000000000000000000000000000000000000000001" -a_pub_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" - -b = "2" -b_pub_x = "0x06ce1b0827aafa85ddeb49cdaa36306d19a74caa311e13d46d8bc688cdbffffe" -b_pub_y = "0x1c122f81a3a14964909ede0ba2a6855fc93faf6fa1a788bf467be7e7a43f80ac" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr b/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr deleted file mode 100644 index d9d267f1dcd..00000000000 --- a/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr +++ /dev/null @@ -1,22 +0,0 @@ -use dep::std; - -fn main( - a: Field, - a_pub_x: pub Field, - a_pub_y: pub Field, - b: Field, - b_pub_x: pub Field, - b_pub_y: pub Field -) { - let mut priv_key = a; - let mut pub_x: Field = a_pub_x; - let mut pub_y: Field = a_pub_y; - if a != 1 { // Change `a` in Prover.toml to test input `b` - priv_key = b; - pub_x = b_pub_x; - pub_y = b_pub_y; - } - let res = std::scalar_mul::fixed_base(priv_key); - assert(res[0] == pub_x); - assert(res[1] == pub_y); -} diff --git a/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml b/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/schnorr/Prover.toml b/crates/nargo_cli/tests/test_data/schnorr/Prover.toml deleted file mode 100644 index c5c3ab5101a..00000000000 --- a/crates/nargo_cli/tests/test_data/schnorr/Prover.toml +++ /dev/null @@ -1,9 +0,0 @@ -message = [0,1,2,3,4,5,6,7,8,9] -pub_key_x = "0x17cbd3ed3151ccfd170efe1d54280a6a4822640bf5c369908ad74ea21518a9c5" -pub_key_y = "0x0e0456e3795c1a31f20035b741cd6158929eeccd320d299cfcac962865a6bc74" -signature = [ - 5, 202, 31, 146, 81, 242, 246, 69, 43, 107, 249, 153, 198, 44, 14, 111, 191, 121, 137, 166, - 160, 103, 18, 181, 243, 233, 226, 95, 67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, - 205, 69, 33, 236, 163, 83, 194, 84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, - 250, 39, 239, -] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/schnorr/src/main.nr b/crates/nargo_cli/tests/test_data/schnorr/src/main.nr deleted file mode 100644 index c0933b23029..00000000000 --- a/crates/nargo_cli/tests/test_data/schnorr/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -use dep::std; - -// Note: If main has any unsized types, then the verifier will never be able -// to figure out the circuit instance -fn main(message: [u8; 10], pub_key_x: Field, pub_key_y: Field, signature: [u8; 64]) { - // Is there ever a situation where someone would want - // to ensure that a signature was invalid? - let valid_signature = std::schnorr::verify_signature(pub_key_x,pub_key_y,signature, message); - assert(valid_signature); -} diff --git a/crates/nargo_cli/tests/test_data/sha256/Nargo.toml b/crates/nargo_cli/tests/test_data/sha256/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/sha256/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha256/Prover.toml b/crates/nargo_cli/tests/test_data/sha256/Prover.toml deleted file mode 100644 index c4df1b749bb..00000000000 --- a/crates/nargo_cli/tests/test_data/sha256/Prover.toml +++ /dev/null @@ -1,36 +0,0 @@ - -x = 0xbd -result = [ - 0x68, - 0x32, - 0x57, - 0x20, - 0xaa, - 0xbd, - 0x7c, - 0x82, - 0xf3, - 0x0f, - 0x55, - 0x4b, - 0x31, - 0x3d, - 0x05, - 0x70, - 0xc9, - 0x5a, - 0xcc, - 0xbb, - 0x7d, - 0xc4, - 0xb5, - 0xaa, - 0xe1, - 0x12, - 0x04, - 0xc0, - 0x8f, - 0xfe, - 0x73, - 0x2b, -] diff --git a/crates/nargo_cli/tests/test_data/sha256/src/main.nr b/crates/nargo_cli/tests/test_data/sha256/src/main.nr deleted file mode 100644 index fd5340e2384..00000000000 --- a/crates/nargo_cli/tests/test_data/sha256/src/main.nr +++ /dev/null @@ -1,19 +0,0 @@ -// Sha256 example -// -// Calls Sha256 from the standard library. -// -// The Compiler sees this special function and creates an ACIR gate -// -// The ACIR SHA256 gate is passed to PLONK who should -// know how to create the necessary constraints. -// -// Not yet here: For R1CS, it is more about manipulating arithmetic gates to get performance -// This can be done in ACIR! -use dep::std; - -fn main(x: Field, result: [u8; 32]) { - // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field - // The padding is taken care of by the program - let digest = std::hash::sha256([x as u8]); - assert(digest == result); -} diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml b/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml b/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml deleted file mode 100644 index 3fe435ea07f..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -# From https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA256.pdf and https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512.pdf -x = [0x61, 0x62, 0x63] # "abc" -result256 = [0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad] -result512 = [0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr b/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr deleted file mode 100644 index fcdcdb8684f..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr +++ /dev/null @@ -1,22 +0,0 @@ -// Test Noir implementations of SHA256 and SHA512 on one- and two-block (padded) messages. -use dep::std; - -fn main(x: [u8; 3], result256: [u8; 32], result512: [u8; 64]) -{ - // One-block tests. - let mut digest256 = std::sha256::digest(x); - assert(digest256 == result256); - - let mut digest512 = std::sha512::digest(x); - assert(digest512 == result512); - - // Two-block SHA256 test. Taken from https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA256.pdf - let y: [u8; 56] = [97,98,99,100,98,99,100,101,99,100,101,102,100,101,102,103,101,102,103,104,102,103,104,105,103,104,105,106,104,105,106,107,105,106,107,108,106,107,108,109,107,108,109,110,108,109,110,111,109,110,111,112,110,111,112,113]; // "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - digest256 = std::sha256::digest(y); - assert(digest256 == [36,141,106,97,210,6,56,184,229,192,38,147,12,62,96,57,163,60,228,89,100,255,33,103,246,236,237,212,25,219,6,193]); - - // Two-block SHA256 test. Taken from https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512.pdf - let z: [u8; 112] = [97,98,99,100,101,102,103,104,98,99,100,101,102,103,104,105,99,100,101,102,103,104,105,106,100,101,102,103,104,105,106,107,101,102,103,104,105,106,107,108,102,103,104,105,106,107,108,109,103,104,105,106,107,108,109,110,104,105,106,107,108,109,110,111,105,106,107,108,109,110,111,112,106,107,108,109,110,111,112,113,107,108,109,110,111,112,113,114,108,109,110,111,112,113,114,115,109,110,111,112,113,114,115,116,110,111,112,113,114,115,116,117]; // "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" - digest512 = std::sha512::digest(z); - assert(digest512 == [142,149,155,117,218,227,19,218,140,244,247,40,20,252,20,63,143,119,121,198,235,159,127,161,114,153,174,173,182,136,144,24,80,29,40,158,73,0,247,228,51,27,153,222,196,181,67,58,199,211,41,238,182,221,38,84,94,150,229,91,135,75,233,9]); -} diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml b/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml b/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml deleted file mode 100644 index 2f82f14a58d..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml +++ /dev/null @@ -1,5 +0,0 @@ -# Values obtainable from https://emn178.github.io/online-tools/sha256.html and https://emn178.github.io/online-tools/sha512.html -x = 0xbd -result256 = [0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b] -result512 = [0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d, 0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe, 0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba, 0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3, 0x7c, 0x3f, 0x7b, 0xaf] - diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr b/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr deleted file mode 100644 index a7cc9daebb9..00000000000 --- a/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -// Test Noir implementations of SHA256 and SHA512 on a one-byte message. -use dep::std; - -fn main(x: Field, result256: [u8; 32], result512: [u8; 64]) -{ - let digest256 = std::sha256::digest([x as u8]); - assert(digest256 == result256); - - let digest512 = std::sha512::digest([x as u8]); - assert(digest512 == result512); -} diff --git a/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml b/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml b/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml deleted file mode 100644 index 5a9b2f21b9b..00000000000 --- a/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml +++ /dev/null @@ -1,11 +0,0 @@ -# Random test key -priv_key = "0x000000000000000000000000000000000000000000000000000000616c696365" -note_root = "0x21386402d57460963f45f32577dc3902c38a6f6fab9ec7b1b708a92e48745de7" -index = "0" -note_hash_path = [ - "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", - "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", - "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", -] -to_pubkey_x = "0x0000000000000000000000000000000000000000000000000000000000000001" -to_pubkey_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" diff --git a/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr b/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr deleted file mode 100644 index 18fccd862b5..00000000000 --- a/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr +++ /dev/null @@ -1,35 +0,0 @@ -use dep::std; - -fn main( - // Public key of note - // all notes have the same denomination - priv_key: Field, - - // Merkle membership proof - note_root: pub Field, - index: Field, - note_hash_path: [Field; 3], - - // Receiver public key - to_pubkey_x: Field, - to_pubkey_y: Field, -) -> pub [Field; 2] { - // Compute public key from private key to show ownership - let pubkey = std::scalar_mul::fixed_base(priv_key); - let pubkey_x = pubkey[0]; - let pubkey_y = pubkey[1]; - - // Compute input note commitment - let note_commitment = std::hash::pedersen([pubkey_x, pubkey_y]); - - // Compute input note nullifier - let nullifier = std::hash::pedersen([note_commitment[0], index, priv_key]); - - // Compute output note nullifier - let receiver_note_commitment = std::hash::pedersen([to_pubkey_x, to_pubkey_y]); - - // Check that the input note nullifier is in the root - assert(note_root == std::merkle::compute_merkle_root(note_commitment[0], index, note_hash_path)); - - [nullifier[0], receiver_note_commitment[0]] -} diff --git a/crates/nargo_cli/tests/test_data/strings/Nargo.toml b/crates/nargo_cli/tests/test_data/strings/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/strings/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/strings/Prover.toml b/crates/nargo_cli/tests/test_data/strings/Prover.toml deleted file mode 100644 index 0d1bd92b5de..00000000000 --- a/crates/nargo_cli/tests/test_data/strings/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -message = "hello world" -y = 5 -hex_as_string = "0x41" -hex_as_field = "0x41" diff --git a/crates/nargo_cli/tests/test_data/strings/src/main.nr b/crates/nargo_cli/tests/test_data/strings/src/main.nr deleted file mode 100644 index bee2370201c..00000000000 --- a/crates/nargo_cli/tests/test_data/strings/src/main.nr +++ /dev/null @@ -1,56 +0,0 @@ -use dep::std; - -fn main(message : pub str<11>, y : Field, hex_as_string : str<4>, hex_as_field : Field) { - let mut bad_message = "hello world"; - - assert(message == "hello world"); - bad_message = "helld world"; - let x = 10; - let z = x * 5; - std::println(10); - - std::println(z); // x * 5 in println not yet supported - std::println(x); - - let array = [1, 2, 3, 5, 8]; - assert(y == 5); // Change to y != 5 to see how the later print statements are not called - std::println(array); - - std::println(bad_message); - assert(message != bad_message); - - let hash = std::hash::pedersen([x]); - std::println(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); -} - -#[test] -fn test_prints_strings() { - let message = "hello world!"; - - std::println(message); - std::println("goodbye world"); -} - -#[test] -fn test_prints_array() { - let array = [1, 2, 3, 5, 8]; - - // TODO: Printing structs currently not supported - // let s = Test { a: 1, b: 2, c: [3, 4] }; - // std::println(s); - - std::println(array); - - let hash = std::hash::pedersen(array); - std::println(hash); -} - -struct Test { - a: Field, - b: Field, - c: [Field; 2], -} diff --git a/crates/nargo_cli/tests/test_data/struct/Nargo.toml b/crates/nargo_cli/tests/test_data/struct/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/struct/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct/Prover.toml b/crates/nargo_cli/tests/test_data/struct/Prover.toml deleted file mode 100644 index 7d59cc81807..00000000000 --- a/crates/nargo_cli/tests/test_data/struct/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "0" -y = "1" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct/src/main.nr b/crates/nargo_cli/tests/test_data/struct/src/main.nr deleted file mode 100644 index 6d61393920d..00000000000 --- a/crates/nargo_cli/tests/test_data/struct/src/main.nr +++ /dev/null @@ -1,77 +0,0 @@ -use dep::std; - -struct Foo { - bar: Field, - array: [Field; 2], -} - -struct Pair { - first: Foo, - second: Field, -} - -impl Foo { - fn default(x: Field,y: Field) -> Self { - Self { bar: 0, array: [x,y] } - } -} - -impl Pair { - fn foo(p: Self) -> Foo { - p.first - } - - fn bar(self) -> Field { - self.foo().bar - } -} - -struct Nested { - a: Field, - b: Field -} -struct MyStruct { - my_bool: bool, - my_int: u32, - my_nest: Nested, -} -fn test_struct_in_tuple(a_bool : bool,x:Field, y:Field) -> (MyStruct, bool) { - let my_struct = MyStruct { - my_bool: a_bool, - my_int: 5, - my_nest: Nested{a:x,b:y}, - }; - (my_struct, a_bool) -} - -struct Animal { - legs: Field, - eyes: u8, -} - -fn get_dog() -> Animal { - let dog = Animal { legs: 4, eyes: 2 }; - dog -} - -fn main(x: Field, y: Field) { - let first = Foo::default(x,y); - let p = Pair { first, second: 1 }; - - assert(p.bar() == x); - assert(p.second == y); - assert(p.first.array[0] != p.first.array[1]); - - // Nested structs - let (struct_from_tuple, a_bool) = test_struct_in_tuple(true,x,y); - assert(struct_from_tuple.my_bool == true); - assert(a_bool == true); - assert(struct_from_tuple.my_int == 5); - assert(struct_from_tuple.my_nest.a == 0); - - // Regression test for issue #670 - let Animal { legs, eyes } = get_dog(); - let six = legs + eyes as Field; - - assert(six == 6); -} diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml deleted file mode 100644 index 70640bba4cc..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -[y] -foo = "5" -bar = "7" diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr b/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr deleted file mode 100644 index 0d6e411addf..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -// Note that fields are not in alphabetical order. -// We want to check that this ordering is maintained -struct myStruct { - foo: u32, - bar: Field, -} - -fn main(y : pub myStruct) { - assert(y.foo == 5); - assert(y.bar == 7); -} - diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml b/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml b/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml deleted file mode 100644 index 339da5b1a00..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml +++ /dev/null @@ -1,19 +0,0 @@ -x = "5" - -[y] -foo = "5" -bar = "10" -message = "hello" - -[z] -val = "1" -array = [0, 1] -message = "helld" - -[a] -baz = 0 - -[a.bar_struct] -val = "1" -array = [0, 1] -message = "hello" diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr deleted file mode 100644 index 281769cfb07..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr +++ /dev/null @@ -1,6 +0,0 @@ -mod bar; - -struct fooStruct { - bar_struct: bar::barStruct, - baz: Field, -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr deleted file mode 100644 index d1963f4a0a7..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr +++ /dev/null @@ -1,7 +0,0 @@ -global N = 2; - -struct barStruct { - val: Field, - array: [Field; 2], - message: str<5>, -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr deleted file mode 100644 index fe77ed6eee6..00000000000 --- a/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr +++ /dev/null @@ -1,36 +0,0 @@ -use dep::std; - -mod foo; - -struct myStruct { - foo: u32, - bar: Field, - message: str<5>, -} - -fn main(x : Field, y : pub myStruct, z: pub foo::bar::barStruct, a: pub foo::fooStruct) -> pub Field { - let struct_from_bar = foo::bar::barStruct { val: 1, array: [0, 1], message: "hello" }; - - check_inner_struct(a, z); - - for i in 0 .. struct_from_bar.array.len() { - assert(struct_from_bar.array[i] == z.array[i]); - } - assert(z.val == struct_from_bar.val); - - assert((struct_from_bar.val * x) == x); - - assert(x != y.bar); - - assert(y.message == "hello"); - assert(a.bar_struct.message == struct_from_bar.message); - - a.bar_struct.array[1] -} - -fn check_inner_struct(a: foo::fooStruct, z: foo::bar::barStruct) { - assert(a.bar_struct.val == z.val); - for i in 0.. a.bar_struct.array.len() { - assert(a.bar_struct.array[i] == z.array[i]); - } -} diff --git a/crates/nargo_cli/tests/test_data/submodules/Nargo.toml b/crates/nargo_cli/tests/test_data/submodules/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data/submodules/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/submodules/Prover.toml b/crates/nargo_cli/tests/test_data/submodules/Prover.toml deleted file mode 100644 index b6626a67e19..00000000000 --- a/crates/nargo_cli/tests/test_data/submodules/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 1 -y = 0 diff --git a/crates/nargo_cli/tests/test_data/submodules/src/main.nr b/crates/nargo_cli/tests/test_data/submodules/src/main.nr deleted file mode 100644 index 9bfe382663f..00000000000 --- a/crates/nargo_cli/tests/test_data/submodules/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -use mysubmodule::my_helper; - -fn main(x: u1, y: u1) { - my_helper(); - mysubmodule::my_bool_or(x, y); -} - -mod mysubmodule { - use dep::std; - - fn my_bool_or(x: u1, y: u1) { - assert(x | y == 1); - } - - fn my_helper() {} -} - diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml b/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml deleted file mode 100644 index 07fe857ac7c..00000000000 --- a/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "2040124" diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr b/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr deleted file mode 100644 index f5831e8c524..00000000000 --- a/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -fn main(x : Field) -> pub [u8; 31] { - // The result of this byte array will be big-endian - let byte_array = x.to_be_bytes(31); - let mut bytes = [0; 31]; - for i in 0..31 { - bytes[i] = byte_array[i]; - } - assert(bytes[30] == 60); - assert(bytes[29] == 33); - assert(bytes[28] == 31); - bytes -} diff --git a/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml b/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml deleted file mode 100644 index 5a02ffe4729..00000000000 --- a/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.7.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_bits/src/main.nr b/crates/nargo_cli/tests/test_data/to_bits/src/main.nr deleted file mode 100644 index feeb5089d13..00000000000 --- a/crates/nargo_cli/tests/test_data/to_bits/src/main.nr +++ /dev/null @@ -1,24 +0,0 @@ -use dep::std; - -fn main() { - let field = 1000; - let be_bits = field.to_be_bits(16); - let le_bits = field.to_le_bits(16); - - for i in 0..16 { - let x = be_bits[i]; - let y = le_bits[15-i]; - assert(x == y); - } - - let x = 3; - let be_bits_x = x.to_be_bits(4); - let le_bits_x = x.to_le_bits(4); - - for i in 0..4 { - let be_bit = be_bits_x[i]; - let le_bit = le_bits_x[3-i]; - assert(be_bit == le_bit); - } - -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml b/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml b/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml deleted file mode 100644 index 23f7acea449..00000000000 --- a/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2040124" -_y = "0x2000000000000000000000000000000000000000000000000000000000000000" diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr b/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr deleted file mode 100644 index 36e6d430e2e..00000000000 --- a/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr +++ /dev/null @@ -1,27 +0,0 @@ -use dep::std; - -fn main(x : Field, _y: Field) { - // The result of this byte array will be big-endian - let y: Field = 2040124; - let be_byte_array = y.to_be_bytes(31); - // The result of this byte array will be little-endian - let le_byte_array = x.to_le_bytes(31); - - assert(le_byte_array[0] == 60); - assert(le_byte_array[0] == be_byte_array[30]); - assert(le_byte_array[1] == be_byte_array[29]); - assert(le_byte_array[2] == be_byte_array[28]); - - let z = 0 - 1; - let p_bytes = std::field::modulus_le_bytes(); - let z_bytes = z.to_le_bytes(32); - assert(p_bytes[10] == z_bytes[10]); - assert(p_bytes[0] == z_bytes[0] as u8 + 1 as u8); - - let p_bits = std::field::modulus_le_bits(); - let z_bits = z.to_le_bits(std::field::modulus_num_bits() as u32); - assert(z_bits[0] == 0); - assert(p_bits[100] == z_bits[100]); - - _y.to_le_bits(std::field::modulus_num_bits() as u32); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml b/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml deleted file mode 100644 index 07fe857ac7c..00000000000 --- a/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "2040124" diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr b/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr deleted file mode 100644 index a5476ec13bf..00000000000 --- a/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -fn main(x : Field) -> pub [u8; 4] { - // The result of this byte array will be little-endian - let byte_array = x.to_le_bytes(31); - let mut first_four_bytes = [0; 4]; - for i in 0..4 { - first_four_bytes[i] = byte_array[i]; - } - // Issue #617 fix - // We were incorrectly mapping our output array from bit decomposition functions during acir generation - first_four_bytes[3] = byte_array[31]; - first_four_bytes -} diff --git a/crates/nargo_cli/tests/test_data/tuples/Nargo.toml b/crates/nargo_cli/tests/test_data/tuples/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data/tuples/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data/tuples/Prover.toml b/crates/nargo_cli/tests/test_data/tuples/Prover.toml deleted file mode 100644 index a0397e89477..00000000000 --- a/crates/nargo_cli/tests/test_data/tuples/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "0" diff --git a/crates/nargo_cli/tests/test_data/tuples/src/main.nr b/crates/nargo_cli/tests/test_data/tuples/src/main.nr deleted file mode 100644 index b1d310b1412..00000000000 --- a/crates/nargo_cli/tests/test_data/tuples/src/main.nr +++ /dev/null @@ -1,29 +0,0 @@ -use dep::std; - -fn main(x: Field, y: Field) { - let pair = (x, y); - assert(pair.0 == 1); - assert(pair.1 == 0); - - let (a, b) = if true { (0, 1) } else { (2, 3) }; - assert(a == 0); - assert(b == 1); - - let (u,v) = if x as u32 < 1 { - (x, x + 1) - } else { - (x + 1, x) - }; - assert(u == x+1); - assert(v == x); - - // Test mutating tuples - let mut mutable = ((0, 0), 1, 2, 3); - mutable.0 = pair; - mutable.2 = 7; - assert(mutable.0.0 == 1); - assert(mutable.0.1 == 0); - assert(mutable.1 == 1); - assert(mutable.2 == 7); - assert(mutable.3 == 3); -} diff --git a/crates/nargo_cli/tests/test_data/xor/Nargo.toml b/crates/nargo_cli/tests/test_data/xor/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data/xor/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/xor/Prover.toml b/crates/nargo_cli/tests/test_data/xor/Prover.toml deleted file mode 100644 index f28f2f8cc48..00000000000 --- a/crates/nargo_cli/tests/test_data/xor/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "5" -y = "10" diff --git a/crates/nargo_cli/tests/test_data/xor/src/main.nr b/crates/nargo_cli/tests/test_data/xor/src/main.nr deleted file mode 100644 index e893c938fc3..00000000000 --- a/crates/nargo_cli/tests/test_data/xor/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -fn main(x : u32, y : pub u32) { - let m = x ^ y; - - assert(m != 10); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml deleted file mode 100644 index e5fc42da053..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -input = 1 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr deleted file mode 100644 index d868ff1ef83..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr +++ /dev/null @@ -1,78 +0,0 @@ -// --- - - fn new_concrete_c_over_d() -> C { - let d_method_interface = get_d_method_interface(); - C::new(d_method_interface) - } - -// --- - - // Map - struct B { - new_concrete_t_c_constructor: fn()->T_C, - } - - impl B { - fn new(new_concrete_t_c_constructor: fn () -> T_C) -> B { - B { new_concrete_t_c_constructor } - } - - fn get_t_c(self) -> T_C { - let new_concrete_t_c_constructor = self.new_concrete_t_c_constructor; - new_concrete_t_c_constructor() - } - } - -// --- - - // Set - struct C { - t_d_interface: MethodInterface, - } - - impl C { - fn new (t_d_interface: MethodInterface) -> Self { - C { t_d_interface } - } - - fn call_method_of_t_d(self, t_d: T_D) -> Field { - let some_method_on_t_d = self.t_d_interface.some_method_on_t_d; - some_method_on_t_d(t_d) - } - } - -// --- - - struct MethodInterface { - some_method_on_t_d: fn(T_D)->Field, - } - -// --- - - // Note - struct D { - d: Field, - } - - fn d_method(input: D) -> Field { - input.d * input.d - } - - fn get_d_method_interface() -> MethodInterface { - MethodInterface { - some_method_on_t_d: d_method, - } - } - -// --- - - fn main(input: Field) -> pub Field { - let b: B> = B::new(new_concrete_c_over_d); - let c: C = b.get_t_c(); // Singleton - let d: D = D { d: input }; // Note - let output = c.call_method_of_t_d(d); - - output - } - -// --- diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml deleted file mode 100644 index 9bff601c75a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "3" -y = "4" -z = "429981696" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr deleted file mode 100644 index 4587b4b5947..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// Test unsafe integer multiplication with overflow: 12^8 = 429 981 696 -// The circuit should handle properly the growth of the bit size -fn main(mut x: u32, y: u32, z: u32) { - x *= y; - x *= x; //144 - x *= x; //20736 - x *= x; //429 981 696 - assert(x == z); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml deleted file mode 100644 index ee6f0ef229a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "7" -y = "3" -z = "2" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr deleted file mode 100644 index ff0dee755cc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -// Testing integer division: 7/3 = 2 -fn main(mut x: u32, y: u32, z: u32) { - let a = x % y; - assert(x / y == z); - assert(a == x - z*y); - assert((50 as u64) % (9 as u64) == 5); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml deleted file mode 100644 index 5d777c023db..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "3" -y = "4" -z = "7" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr deleted file mode 100644 index 2884415b81a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// Test integer addition: 3 + 4 = 7 -fn main(mut x: u32, y: u32, z: u32) { - x += y; - assert(x == z); - - x *= 8; - assert(x>9); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml deleted file mode 100644 index 1240475dee3..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "12" -y = "2418266113" -z = "1876701195" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr deleted file mode 100644 index 80fc0177e41..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -// Test unsafe integer subtraction with underflow: 12 - 2418266113 = 1876701195 modulo 2^32 -fn main(mut x: u32, y: u32, z: u32) { - x -= y; - assert(x == z); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml deleted file mode 100644 index 9a1986329ca..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "43046721" -y = "3793632897" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr deleted file mode 100644 index 4fdff16c5c0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// Test unsafe integer arithmetic -// Test odd bits integer -fn main(mut x: u32, y: u32) { - x = x * x; - assert(y == x); - - let c:u3 = 2; - assert(c > x as u3); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml deleted file mode 100644 index 1c52aef063c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml +++ /dev/null @@ -1,39 +0,0 @@ - -# hello as bytes -# used : https://emn178.github.io/online-tools/sha256.html -x = [104, 101, 108, 108, 111] - -result = [ - 0x2c, - 0xf2, - 0x4d, - 0xba, - 0x5f, - 0xb0, - 0xa3, - 0x0e, - 0x26, - 0xe8, - 0x3b, - 0x2a, - 0xc5, - 0xb9, - 0xe2, - 0x9e, - 0x1b, - 0x16, - 0x1e, - 0x5c, - 0x1f, - 0xa7, - 0x42, - 0x5e, - 0x73, - 0x04, - 0x33, - 0x62, - 0x93, - 0x8b, - 0x98, - 0x24, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr deleted file mode 100644 index 8b350de16c1..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr +++ /dev/null @@ -1,20 +0,0 @@ -// Sha256 circuit where the input is 5 bytes -// not five field elements since sha256 operates over -// bytes. -// -// If you do not cast, it will take all the bytes from the field element! - -// Mimc input is an array of field elements -// The function is called mimc_bn254 to emphasize its parameters are chosen for bn254 curve, it should be used only with a proving system using the same curve (e.g Plonk from Aztec) -use dep::std; - -fn main(x: [u8; 5], result: pub [u8; 32]) { - let mut digest = std::hash::sha256(x); - digest[0] = 5 as u8; - digest = std::hash::sha256(x); - assert(digest == result); - - let y = [12,45,78,41]; - let h = std::hash::mimc_bn254(y); - assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml deleted file mode 100644 index bc3784726d2..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml +++ /dev/null @@ -1,38 +0,0 @@ - -# hello as bytes -# https://toolkitbay.com/tkb/tool/BLAKE2s_256 -x = [104, 101, 108, 108, 111] -result = [ - 0x19, - 0x21, - 0x3b, - 0xac, - 0xc5, - 0x8d, - 0xee, - 0x6d, - 0xbd, - 0xe3, - 0xce, - 0xb9, - 0xa4, - 0x7c, - 0xbb, - 0x33, - 0x0b, - 0x3d, - 0x86, - 0xf8, - 0xcc, - 0xa8, - 0x99, - 0x7e, - 0xb0, - 0x0b, - 0xe4, - 0x56, - 0xf1, - 0x40, - 0xca, - 0x25, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr deleted file mode 100644 index a6bba978644..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -// This is the same as Blake2s example. -// -// Pre-alpha dependencies must now be prefixed with the word "dep". -// The line below indicates that we would like to pull in the standard library dependency. -use dep::std; - -fn main(x: [u8; 5], result: [u8; 32]) { - let digest = std::hash::blake2s(x); - assert(digest == result); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml deleted file mode 100644 index 9140e7f7530..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml +++ /dev/null @@ -1,6 +0,0 @@ -x = "59" -y = "5" -a = "1" - -arr1=[3320379920, 1938147428, 1942509796, 1795943184, 24853, 0, 0, 0, 0] -arr2=[2912727897, 3590519536, 1687587470, 3896107618, 1092831095, 0, 0, 0, 0] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml deleted file mode 100644 index e4b4fa41073..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml +++ /dev/null @@ -1,5 +0,0 @@ -a=[867393132, 2339025230, 220695592, 603045882, 2511105607, 2829384008, 3709060370, 165831136, 1055242736, 1021386699, 504214651, 3662346416, 1830680088, 3882307476, 2426040416, 1802701977, 2663953820, 442532338, 1174156258, 2943965281, 2059435796, 2505576606, 666729718, 3602851575, 2784009587, 3495199106, 1721163808, 3787454896, 315490254, 2761503044, 1222736857, 3669200722, 1595984236, 1113969718, 486680564, 3162990949, 3264361924, 2006416798, 2386200406, 315797713, 2613961431, 2248446788, 1487182619, 1426297375, 1728644913, 1251844809, 1725705662, 1593325285, 2204175104, 2086772782, 3535562424, 171941432, 1454717338, 346500936, 3226869878, 1868934392, 4256057877, 1568150812, 3256749490, 2594788417, 1807197388, 3087252400, 1649310565, 2748668146, 3716823811, 3800017989, 932498547, 2480193018, 333760602, 97095822, 4100736518, 2777593334, 2339587180, 3771453942, 3867894936, 3650805881, 1824779553, 1642205658, 4264337791, 4071013475, 1985859040, 4202403275, 2148375036, 2428793574, 314105769, 4225849095, 3500808841, 2684237013, 848348764, 723628347, 1455798875, 3707853370, 1746878741, 1139375098, 3478206320, 3069213335, 112605790, 2440244355, 1471127557, 4092108893] -b=[3828535814, 348916743, 1199414553, 737248839, 756047272, 1292160882, 4257951637, 291617875, 2966142224, 3814394488, 3878026466, 700807834, 2969962294, 1306796485, 3854250602, 898180304, 3427925197, 604266260, 1075521373, 3406840156, 3396422198, 890966269, 1079444598, 988299705, 3071209797, 3808577073, 2135889094, 1194271359, 4006125262, 566871018, 1292670770, 3445252242, 1897364157, 1587048323, 1240078226, 1678980405, 262815752, 304362997, 1104680912, 2632486420, 2463291218, 2187725560, 1870618568, 2652926282, 3004775258, 1952884887, 561428664, 2467226612, 2683547316, 3452779168, 976229927, 1449738410, 3252038428, 2805606398, 1462658417, 1592183545, 2019693157, 3278803512, 3026040550, 566335611, 703403330, 936890230, 2567824938, 890552997, 4217401169, 258050408, 29872215, 812502992, 3871770414, 4261908330, 3703871063, 2429703152, 1496772760, 3466865862, 2739387475, 547994854, 240736540, 3737530356, 545555875, 1243531855, 826369375, 392660683, 262937837, 3055809624, 1979941188, 3982865811, 2062520214, 1365494964, 3851477194, 4086198942, 4210993448, 3262645997, 766395054, 1585427862, 1824837360, 105660195, 3008983983, 845249279, 2566786179, 205438487] -c=[867393132, 2339025230, 220695592, 603045882, ] -d=[3828535814, 348916743, 1199414553, 737248839, ] -m=[77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr deleted file mode 100644 index 56b02650c27..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr +++ /dev/null @@ -1,283 +0,0 @@ -fn matrix_mul_2(a: [u32; 4], b: [u32; 4]) ->[u32; 4] { - let mut c = [0 as u32; 4]; - for i in 0..2 { - for j in 0..2 { - c[i+2*j] = 0; - for k in 0..2 { - c[i+2*j] += a[i+2*k] * b[k+2*j]; - } - } - } - c -} - -fn matrix_mul_10(a: [u32; 100], b: [u32; 100]) -> [u32; 100] { - let mut c = [0 as u32; 100]; - for i in 0..10 { - for j in 0..10 { - c[i+10*j] = 0 as u32; - - for k in 0..10 { - c[i+10*j] += a[i+10*k] * b[k+10*j]; - } - } - } - c -} - - -fn siggy(x: u32) -> u32 { - x * (10 as u32) -} - - -fn test4 (mut a: [u32; 4]) -> [u32; 4] { - for i in 3..4 { - a[i] = siggy(a[i-2]); - } - a -} - -fn iterate1(mut a0: u32) -> u32{ - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = 1 as u32; - let mut f = 2 as u32; - let mut g = 3 as u32; - let mut h = 4 as u32; - - for _i in 0..2 { - t1 = h; - h = g; - g = f; - a = t1 + t2; - } - a0 += a; - a0 -} - -fn array_noteq(a: [u32; 4], b: [u32; 4]) { - assert(a != b); -} - -fn test3(mut b: [Field; 4]) -> [Field; 4] { - for i in 0..4 { - b[i] = i; - } - b -} - -fn iterate2(mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - - let mut a = hash[0]; - let mut e = hash[4]; - let mut f = hash[5]; - let mut g = hash[6]; - let mut h = hash[7]; - - for _i in 0..2 { - t1 = ch2(e, f); - h = g; - g = f; - a = t1; - } - - hash[0] = hash[0] + a; - hash -} - -fn iterate3( mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = hash[0]; - let mut b = hash[1]; - let mut c = hash[2]; - let mut d = hash[3]; - let mut e = hash[4]; - let mut f = hash[5]; - let mut g = hash[6]; - let mut h = hash[7]; - - for _i in 0..3 { - t1 = ep2(e)+ch2(e, f); - h = g; - g = f; - a = t1+t2; - } - assert(a == 2470696267); - hash[0] = hash[0] + a; - hash[1] = hash[1] + b; - hash[2] = hash[2] + c; - hash[3] = hash[3] + d; - hash[4] = hash[4] + e; - hash[5] = hash[5] + f; - hash[6] = hash[6] + g; - hash[7] = hash[7] + h; - hash -} - - -fn test5() { - let mut sha_hash = [ - 0 as u32, 1, 2, 3, - 4, 5, 6, 7 - ]; - - sha_hash = iterate2(sha_hash); - - assert(sha_hash[0] == 9); -} - - -fn ch2(x: u32, y: u32) -> u32 { - x + y -} - -fn ep2(x: u32) -> u32 { - (2 as u32) * too(x) -} - -fn too(x: u32) -> u32 { - (x + 17 as u32) * (x + 3 as u32) -} - -fn test6(x: [u8; 32]) -> [u32; 8] { - let mut sha_m = [0 as u32; 64]; - - let mut sha_hash = [ - 1 as u32, 2, 3, 4, 5, 6, 7, 8 - ]; - - let mut buffer = [0 as u8; 64]; - for i in 0..32 { - buffer[i] = x[i]; - } - - sha_m = iterate6_1(sha_m, buffer); - sha_hash = iterate6_2(sha_m, sha_hash); - sha_hash -} - -fn iterate6_1(mut sha_m: [u32; 64], next_chunk: [u8; 64]) -> [u32; 64] { - let mut j = 0; - for i in 0..16 { - j = (i ) * 4; - sha_m[i] = ((next_chunk[j] as u32) << 24 as u32) - | ((next_chunk[j + 1] as u32) << 16 as u32) - | ((next_chunk[j + 2] as u32) << 8 as u32) - | (next_chunk[j + 3] as u32); - } - for i in 16..64 { - sha_m[i] = sig1(sha_m[i - 2])+(sha_m[i - 7])+(sig0(sha_m[i - 15]))+(sha_m[i - 16]); - } - sha_m -} - -fn iterate6_2(sha_m: [u32; 64], mut hash: [u32; 8]) -> [u32; 8] { - let mut t1 = 0 as u32; - let mut t2 = 0 as u32; - let mut a = 1 as u32; - let mut b = 2 as u32; - let mut c = 3 as u32; - let mut d = 4 as u32; - let mut e = 5 as u32; - let mut f = 6 as u32; - let mut g = 7 as u32; - let mut h = 8 as u32; - - for i in 0..11 { - t1 = h + ep1(e) + ch(e, f, g) + sha_m[i]; - t2 = epo(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d+t1; - d = c; - c = b; - b = a; - a = t1+t2; - } - - hash[0] = hash[0]+a; - hash[1] = hash[1]+b; - hash[2] = hash[2]+c; - hash[3] = hash[3]+d; - hash[4] = hash[4]+e; - hash[5] = hash[5]+f; - hash[6] = hash[6]+g; - hash[7] = hash[7]+h; - hash -} - -fn rot_right(a: u32, b: u32) -> u32 { - ((a >> b) | (a << (32 as u32 - b))) -} - - -fn ch(x: u32, y: u32, z: u32) -> u32 { - ((x & y) ^ (!x & z)) -} - - -fn maj(x: u32, y: u32, z: u32) -> u32 { - ((x & y) ^ (x & z) ^ (y & z)) -} - - -fn epo(x: u32) -> u32 { - (rot_right(x, 2) ^ rot_right(x, 13) ^ rot_right(x, 22)) -} - -fn ep1(x: u32) -> u32 { - (rot_right(x, 6) ^ rot_right(x, 11) ^ rot_right(x, 25)) -} - -fn sig0(x: u32) -> u32 { - (rot_right(x, 7) ^ rot_right(x, 18) ^ (x >> 3)) -} - -fn sig1(x: u32) -> u32 { - (rot_right(x, 17) ^ rot_right(x, 19) ^ (x >> 10)) -} - - -fn main(a: [u32; 100], b: [u32; 100], c: [u32; 4], mut d: [u32; 4], m: [u8; 32]) { - let e = matrix_mul_10(a,b); - assert(e[6] == 1866842232); - let f = matrix_mul_2(c,d); - assert(f[3] == 2082554100); - - let mut a = [1 as u32, 2, 3, 4]; - a = test4(a); - assert(a[3] == 20); - a = test4(c); - assert(a[3] == c[1] * 10); - - d[0] += c[0]; - d[0] += c[1]; - assert(d[0] == 2739986880); - - let h = iterate1(1); - assert(h == 4); - - let x = d; - array_noteq(x, [d[0], d[1], d[2], 0]); - - let mut h5 = [d[0] as Field, d[1] as Field, d[2] as Field, d[3] as Field]; - let t5 = test3(h5); - assert(t5[3] == 3); - h5 = test3(h5); - assert(h5[3] == 3); - - test5(); - - let mut sha_hash = [ - 0x6a09e667 as u32, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - sha_hash = iterate3(sha_hash); - - let h6 = test6(m); - assert(h6[0]== 523008072); //31.. 3800709683 -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml deleted file mode 100644 index 63382a9f640..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -x = "3" -y = "4" -z = "5" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr deleted file mode 100644 index 391aa27049d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr +++ /dev/null @@ -1,12 +0,0 @@ -// Tests a very simple program. -// -// The features being tested are: -// Binary addition, multiplication, division -// x = 3, y = 4, z = 5 -fn main(x : Field, y : Field, z : Field) -> pub Field { - let a = x + x; // 3 + 3 = 6 - let b = a - y; // 6 - 4 = 2 - let c = b * z; // 2 * 5 = 10 - let d = c / a; // 10 / 6 (This uses field inversion, so we test it by multiplying by `a`) - d * a -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml deleted file mode 100644 index 3c3295e6848..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -len3 = [1, 2, 3] -len4 = [1, 2, 3, 4] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr deleted file mode 100644 index 9099cfa2144..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr +++ /dev/null @@ -1,23 +0,0 @@ -use dep::std; - -fn len_plus_1(array: [T]) -> Field { - array.len() + 1 -} - -fn add_lens(a: [T], b: [Field]) -> Field { - a.len() + b.len() -} - -fn nested_call(b: [Field]) -> Field { - len_plus_1(b) -} - -fn main(len3: [u8; 3], len4: [Field; 4]) { - assert(len_plus_1(len3) == 4); - assert(len_plus_1(len4) == 5); - assert(add_lens(len3, len4) == 7); - assert(nested_call(len4) == 5); - - // std::array::len returns a comptime value - assert(len4[len3.len()] == 4); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml deleted file mode 100644 index 3aad77f6d4d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr deleted file mode 100644 index be734dea368..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -// Simple example of checking where two arrays are different -fn main(a: [Field; 32], b: [Field; 32]) { - assert(a != b); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml deleted file mode 100644 index e0d79da4da6..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -xs = [2, 1, 3] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr deleted file mode 100644 index 17df7b23551..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(xs : [u8; 3]) { - let sorted = xs.sort(); - assert(sorted[0] == 1); - assert(sorted[1] == 2); - assert(sorted[2] == 3); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr deleted file mode 100644 index 00e94414c0b..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn main(x: Field) { - assert(x == 1); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml deleted file mode 100644 index 5d1dc99124f..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "3" -y = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr deleted file mode 100644 index 7dab317d924..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is assertion -fn main(x : Field, y : Field) { - assert(x == y); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml deleted file mode 100644 index 8c12ebba6cf..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "2" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr deleted file mode 100644 index b0626d63c8e..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(x: Field, y: Field) { - let mut z = x + y; - assert(z == 3); - z = x * y; - assert(z == 2); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml deleted file mode 100644 index 40ce2b0bc27..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "0x00" -y = "0x10" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr deleted file mode 100644 index f4805960a33..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr +++ /dev/null @@ -1,18 +0,0 @@ -// You can only do bit operations with integers. -// (Kobi/Daira/Circom/#37) https://github.com/iden3/circom/issues/37 -fn main(x : Field, y : Field) { - let x_as_u8 = x as u8; - let y_as_u8 = y as u8; - - assert((x_as_u8 & y_as_u8) == x_as_u8); - - //bitwise and with 1 bit: - let flag = (x == 0) & (y == 16); - assert(flag); - - //bitwise and with odd bits: - let x_as_u11 = x as u11; - let y_as_u11 = y as u11; - assert((x_as_u11 & y_as_u11) == x_as_u11); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml deleted file mode 100644 index cfd62c406cb..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 64 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr deleted file mode 100644 index c1c6890febb..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr +++ /dev/null @@ -1,13 +0,0 @@ -fn main(x: u64) { - let two: u64 = 2; - let three: u64 = 3; - - // comptime shifts on comptime values - assert(two << 2 == 8); - assert((two << 3) / 8 == two); - assert((three >> 1) == 1); - - // comptime shifts on runtime values - assert(x << 1 == 128); - assert(x >> 2 == 16); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml deleted file mode 100644 index 325164ff043..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ - -x = 0xbd diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr deleted file mode 100644 index 24b98a540b0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// The feature being tested is a call -// to a black box function. -// One with array input, one with a numeric input. -use dep::std; - -fn main(x: Field) { - let _p1 = std::scalar_mul::fixed_base(x); - let _p2 = std::hash::pedersen([x]); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr deleted file mode 100644 index d6b4d7a9fad..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -use dep::std; -fn main(x: u1) { - assert(!x == 0); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml deleted file mode 100644 index a0397e89477..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr deleted file mode 100644 index 4a74027e4aa..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -use dep::std; -fn main(x: u1, y: u1) { - assert(x | y == 1); - - assert(x | y | x == 1); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml deleted file mode 100644 index 6371ea2b28b..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = ["1", "2", "3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr deleted file mode 100644 index a2b64100918..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr +++ /dev/null @@ -1,29 +0,0 @@ -// Tests a very simple program. -// -// The features being tested are array reads and writes - -fn main(x: [Field; 3]) { - read_array(x); - read_write_array(x); -} - -unconstrained fn read_array(x: [Field; 3]) { - assert(x[0] == 1); - let y = [1, 5, 27]; - - assert(y[x[0]] == 5); -} - -unconstrained fn read_write_array(x: [Field; 3]) { - let mut y = x; - - y[0] = 5; - - assert(y[0] == 5); - assert(y[1] == 2); - assert(y[2] == 3); - - assert(x[0] == 1); - assert(x[1] == 2); - assert(x[2] == 3); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr deleted file mode 100644 index 320369c7b67..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is using assert on brillig -fn main(x: Field) { - assert(1 == conditional(x as bool)); -} - -unconstrained fn conditional(x : bool) -> Field { - assert(x); - 1 -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml deleted file mode 100644 index 11497a473bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr deleted file mode 100644 index 320369c7b67..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is using assert on brillig -fn main(x: Field) { - assert(1 == conditional(x as bool)); -} - -unconstrained fn conditional(x : bool) -> Field { - assert(x); - 1 -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml deleted file mode 100644 index 11497a473bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr deleted file mode 100644 index 795fc02c35f..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr +++ /dev/null @@ -1,45 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is brillig calls -fn main(x: u32) { - assert(entry_point(x) == 2); - swap_entry_point(x, x + 1); - assert(deep_entry_point(x) == 4); -} - -unconstrained fn inner(x : u32) -> u32 { - x + 1 -} - -unconstrained fn entry_point(x : u32) -> u32 { - inner(x + 1) -} - -unconstrained fn swap(x: u32, y:u32) -> (u32, u32) { - (y, x) -} - -unconstrained fn swap_entry_point(x: u32, y: u32) { - let swapped = swap(x, y); - assert(swapped.0 == y); - assert(swapped.1 == x); - let swapped_twice = swap(swapped.0, swapped.1); - assert(swapped_twice.0 == x); - assert(swapped_twice.1 == y); -} - -unconstrained fn level_3(x : u32) -> u32 { - x + 1 -} - -unconstrained fn level_2(x : u32) -> u32 { - level_3(x + 1) -} - -unconstrained fn level_1(x : u32) -> u32 { - level_2(x + 1) -} - -unconstrained fn deep_entry_point(x : u32) -> u32 { - level_1(x + 1) -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml deleted file mode 100644 index 99580ca45bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = ["1","2","3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr deleted file mode 100644 index ebe37a9b006..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr +++ /dev/null @@ -1,16 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is brillig calls passing arrays around -fn main(x: [u32; 3]) { - assert(entry_point(x) == 9); -} - -unconstrained fn inner(x : [u32; 3]) -> [u32; 3] { - [x[0] + 1, x[1] + 1, x[2] + 1] -} - -unconstrained fn entry_point(x : [u32; 3]) -> u32 { - let y = inner(x); - y[0] + y[1] + y[2] -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml deleted file mode 100644 index 99580ca45bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = ["1","2","3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr deleted file mode 100644 index 4d4eba01f05..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr +++ /dev/null @@ -1,36 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is brillig calls with conditionals -fn main(x: [u32; 3]) { - assert(entry_point(x[0]) == 7); - assert(entry_point(x[1]) == 8); - assert(entry_point(x[2]) == 9); - assert(entry_point(42) == 0); -} - -unconstrained fn inner_1() -> u32 { - 7 -} - -unconstrained fn inner_2() -> u32 { - 8 -} - -unconstrained fn inner_3() -> u32 { - 9 -} - -unconstrained fn entry_point(x: u32) -> u32 { - let mut result: u32 = 0; - - if x == 1 { - result = inner_1(); - } else if x == 2 { - result = inner_2(); - } else if x == 3 { - result = inner_3(); - } - - result -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr deleted file mode 100644 index e258a8f2640..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr +++ /dev/null @@ -1,50 +0,0 @@ -// Tests a very simple Brillig function. -// -// The features being tested are cast operations on brillig -fn main() { - bool_casts(); - field_casts(); - uint_casts(); - int_casts(); - mixed_casts(); -} - -unconstrained fn bool_casts() { - assert(false == 0 as bool); - assert(true == 1 as bool); - assert(true == 3 as bool); -} - -unconstrained fn field_casts() { - assert(5 as u8 as Field == 5); - assert(16 as u4 as Field == 0); -} - -unconstrained fn uint_casts() { - let x: u32 = 100; - assert(x as u2 == 0); - assert(x as u4 == 4); - assert(x as u6 == 36); - assert(x as u8 == 100); - assert(x as u64 == 100); - assert(x as u126 == 100); -} - -unconstrained fn int_casts() { - let x: i32 = 100; - assert(x as i2 == 0); - assert(x as i4 == 4); - assert(x as i6 == -28 as i6); - assert(x as i8 == 100); - assert(x as i8 == 100); - assert(x as i8 == 100); -} - - -unconstrained fn mixed_casts() { - assert(100 as u32 as i32 as u32 == 100); - assert(13 as u4 as i2 as u32 == 1); - assert(15 as u4 as i2 as u32 == 3); - assert(1 as u8 as bool == true); - assert(true as i8 == 1); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml deleted file mode 100644 index 4dd6b405159..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr deleted file mode 100644 index 4ddd351ad04..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is basic conditonal on brillig -fn main(x: Field) { - assert(4 == conditional(x as bool)); -} - -unconstrained fn conditional(x : bool) -> Field { - if x { - 4 - }else { - 5 - } -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr deleted file mode 100644 index e7b0afccc3e..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr +++ /dev/null @@ -1,25 +0,0 @@ -// Tests arithmetic operations on fields -fn main() { - let x = 4; - let y = 2; - assert((x + y) == add(x, y)); - assert((x - y) == sub(x, y)); - assert((x * y) == mul(x, y)); - assert((x / y) == div(x, y)); -} - -unconstrained fn add(x : Field, y : Field) -> Field { - x + y -} - -unconstrained fn sub(x : Field, y : Field) -> Field { - x - y -} - -unconstrained fn mul(x : Field, y : Field) -> Field { - x * y -} - -unconstrained fn div(x : Field, y : Field) -> Field { - x / y -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml deleted file mode 100644 index 55cccb955a9..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "3" - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr deleted file mode 100644 index 5ad4e913e92..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr +++ /dev/null @@ -1,35 +0,0 @@ -use dep::std; - -struct myStruct { - foo: Field, - foo_arr: [Field; 2], -} - -// Tests a very simple program. -// -// The features being tested is the identity function in Brillig -fn main(x : Field) { - assert(x == identity(x)); - // TODO: add support for array comparison - let arr = identity_array([x, x]); - assert(x == arr[0]); - assert(x == arr[1]); - - let s = myStruct { foo: x, foo_arr: [x, x] }; - let identity_struct = identity_struct(s); - assert(x == identity_struct.foo); - assert(x == identity_struct.foo_arr[0]); - assert(x == identity_struct.foo_arr[1]); -} - -unconstrained fn identity(x : Field) -> Field { - x -} - -unconstrained fn identity_array(arr : [Field; 2]) -> [Field; 2] { - arr -} - -unconstrained fn identity_struct(s : myStruct) -> myStruct { - s -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json deleted file mode 100644 index 09089ad1fa0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json +++ /dev/null @@ -1 +0,0 @@ -{"backend":"acvm-backend-barretenberg","abi":{"parameters":[{"name":"x","type":{"kind":"field"},"visibility":"private"}],"param_witnesses":{"x":[1]},"return_type":null,"return_witnesses":[]},"bytecode":[213,148,77,78,195,48,16,133,67,211,150,180,92,198,142,237,198,222,241,183,97,193,170,39,32,197,45,150,210,164,10,86,246,190,129,99,195,142,29,80,4,167,224,26,220,6,132,40,82,215,30,36,227,149,87,79,51,223,188,247,238,142,30,204,203,105,171,170,74,173,238,123,179,157,171,122,85,73,111,123,247,113,140,194,30,62,8,150,64,223,19,173,55,149,28,88,103,30,47,155,206,37,201,211,92,55,155,119,243,118,210,42,125,179,150,90,45,188,245,16,227,126,105,16,52,163,84,22,185,196,4,95,161,92,148,156,33,202,202,25,199,28,51,206,174,115,78,136,228,148,23,162,20,5,18,152,18,137,151,76,144,229,143,200,0,64,35,13,199,102,94,207,85,43,23,90,117,210,108,47,234,78,182,218,165,195,61,100,189,15,39,150,14,33,108,50,10,71,6,191,217,200,2,92,97,207,162,177,160,250,77,187,139,46,237,209,13,228,118,245,51,222,125,14,173,55,207,103,77,125,171,93,210,3,108,252,15,58,109,12,160,145,253,77,167,101,19,240,228,103,19,8,239,77,35,236,180,108,26,101,167,1,160,178,246,19],"proving_key":[0,0,0,2,0,0,0,16,0,0,0,0,0,0,0,69,0,0,0,3,113,95,49,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,31,128,225,166,19,57,49,226,241,25,0,192,25,68,134,248,118,168,148,147,77,202,252,253,191,232,34,128,93,159,247,134,11,76,135,16,63,22,220,90,11,47,238,136,127,221,224,11,208,111,8,212,89,138,92,85,171,215,86,38,230,32,230,222,31,153,33,17,244,110,182,83,120,134,226,119,20,11,135,137,123,161,100,228,245,184,170,239,230,246,84,3,136,168,13,61,27,248,206,237,196,3,251,75,41,174,251,100,247,192,65,80,218,6,170,55,30,58,230,35,74,112,242,201,88,196,129,110,17,96,38,159,136,213,223,121,213,54,117,35,89,161,79,59,216,138,170,79,239,53,218,90,140,178,58,7,148,89,158,24,43,67,130,113,165,31,169,220,202,57,163,114,96,117,84,13,60,219,59,7,119,225,98,253,63,194,166,143,84,101,143,134,15,107,124,191,58,95,120,167,216,11,221,18,255,243,153,72,60,90,224,46,241,29,149,154,104,198,48,50,19,159,157,25,14,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,144,128,125,98,191,216,133,187,137,8,118,247,57,246,102,212,73,23,253,117,193,54,186,171,54,248,235,240,215,4,156,49,180,120,239,192,233,35,165,244,208,17,119,128,34,31,244,47,144,247,43,166,117,163,170,84,40,169,217,25,223,25,33,0,89,124,202,117,192,42,8,98,248,245,196,205,7,205,126,137,38,160,141,73,40,173,248,29,61,208,243,235,197,146,104,8,7,49,18,75,104,15,210,146,192,147,225,142,246,213,123,253,155,253,70,96,15,212,139,253,101,109,4,198,200,47,45,30,176,59,133,237,34,42,238,215,108,147,18,184,220,44,36,115,103,1,65,212,85,89,93,223,108,224,100,186,29,94,10,18,189,125,142,90,224,86,35,53,198,92,141,159,138,171,242,195,36,196,248,136,30,157,2,192,61,89,112,171,154,112,121,16,135,33,28,47,208,104,180,1,115,251,41,227,30,186,191,200,109,36,67,78,195,194,77,156,109,244,196,96,207,2,140,21,0,0,0,7,113,95,49,95,102,102,116,0,0,0,68,33,185,35,19,211,157,207,139,200,46,221,191,180,55,39,213,48,163,198,132,183,226,65,68,111,162,151,156,210,60,242,13,148,91,186,43,24,55,242,122,66,221,229,167,113,20,234,13,143,145,118,167,100,213,71,238,124,57,101,183,220,182,200,67,120,63,57,25,70,66,110,174,121,229,156,239,77,134,12,201,125,213,220,253,186,105,169,13,98,30,193,173,124,67,58,33,53,115,110,187,211,17,50,156,69,228,249,17,68,21,237,84,139,99,114,224,156,55,94,27,79,187,184,165,141,60,53,42,86,126,164,210,4,9,76,201,0,65,178,27,107,212,0,26,53,227,74,231,54,96,211,189,197,121,183,105,97,124,105,11,176,0,98,20,159,190,180,71,33,186,83,132,202,105,144,22,49,166,5,77,178,185,111,48,200,157,111,93,250,235,165,19,126,89,119,45,5,136,54,245,228,23,192,144,107,190,48,75,79,33,98,25,34,253,246,31,37,177,64,11,227,95,220,15,240,192,118,220,113,6,8,240,84,115,105,170,23,175,16,225,100,62,50,233,71,41,46,128,5,211,142,82,1,222,250,63,81,249,197,143,108,138,117,169,78,95,135,155,0,65,66,53,191,243,148,232,57,153,192,159,213,189,87,93,89,121,82,19,198,28,172,188,160,31,140,137,31,130,117,233,8,20,115,214,158,22,53,68,18,112,202,179,120,62,74,188,133,123,215,85,180,248,189,188,200,46,239,162,59,142,45,158,128,83,231,100,120,28,204,98,79,188,151,231,20,37,147,136,97,188,61,17,91,4,18,179,71,17,99,84,228,123,163,9,155,135,21,246,38,98,86,225,240,22,243,42,134,6,140,81,67,118,31,63,224,200,32,138,139,111,243,208,47,46,106,197,218,2,198,165,189,38,80,57,97,164,255,22,144,169,45,210,70,201,253,22,50,19,98,42,9,255,76,28,187,215,10,61,43,221,32,133,236,130,161,57,8,111,57,100,71,2,205,105,51,31,30,8,71,137,7,213,86,39,99,44,161,208,185,167,85,60,165,17,24,230,255,39,200,70,58,56,129,143,120,178,153,43,115,77,235,141,164,123,121,7,142,182,146,137,229,85,213,15,209,175,216,149,25,101,163,85,145,194,106,31,125,40,192,15,171,58,100,27,58,246,109,72,77,237,152,140,229,245,159,171,33,10,106,10,130,121,165,31,239,39,252,211,103,1,94,151,149,14,59,242,5,129,116,218,122,232,164,34,128,49,59,94,24,66,241,147,202,70,29,97,187,111,172,57,91,53,210,63,94,53,104,164,32,46,180,78,172,149,112,88,88,21,254,219,63,192,242,196,129,56,232,178,230,212,64,57,25,67,50,45,21,33,227,254,214,108,119,60,103,253,163,178,37,239,6,134,93,231,22,143,0,229,16,240,215,176,156,39,27,163,53,224,193,11,93,226,151,235,173,250,204,41,5,113,57,201,77,171,24,22,141,79,202,226,164,172,13,157,9,38,180,204,221,222,80,60,233,93,210,15,64,87,53,123,55,114,75,95,56,255,215,108,242,34,148,253,209,250,124,26,217,254,249,218,64,59,158,6,118,119,162,21,51,12,98,172,179,124,12,158,122,2,49,9,181,173,243,235,60,124,199,150,185,179,105,23,93,190,134,21,142,226,57,155,132,1,94,158,219,148,121,241,17,180,147,148,236,212,178,145,255,135,9,179,245,216,182,129,115,194,162,37,165,205,139,74,177,207,250,245,7,38,91,182,128,117,253,18,33,158,72,145,185,238,190,228,6,61,211,37,196,220,223,76,206,81,47,33,165,105,42,199,234,38,13,27,149,128,249,110,63,144,224,254,45,177,66,166,74,73,3,96,100,54,9,56,107,46,139,119,226,188,195,17,28,81,168,98,3,14,65,226,102,250,102,200,39,88,230,52,109,77,225,86,1,238,194,85,131,22,25,37,210,226,95,81,148,198,28,219,139,57,201,123,126,224,36,200,192,223,113,141,224,163,195,81,122,132,72,16,53,54,240,143,35,54,79,193,152,95,166,68,144,76,122,241,212,20,254,60,244,10,58,209,140,115,196,206,69,91,227,79,184,118,219,0,14,223,0,136,32,171,196,244,135,60,232,86,62,132,27,152,13,80,229,50,201,16,73,126,220,3,6,88,130,172,66,32,8,51,143,222,45,124,229,133,186,66,99,131,239,163,113,147,193,32,205,202,122,206,221,241,63,253,184,56,57,77,150,4,201,85,138,29,9,236,36,8,132,165,159,128,149,96,208,107,32,11,128,249,74,188,105,142,87,253,224,15,135,104,199,210,120,101,47,225,151,0,242,186,118,152,66,188,111,95,249,158,131,30,79,193,139,226,87,187,49,245,27,5,184,197,86,213,60,125,117,52,186,140,4,43,232,51,230,189,208,198,47,114,191,210,112,149,82,28,111,254,120,6,88,25,140,206,30,5,137,127,29,139,32,104,57,93,203,249,2,225,74,108,239,64,250,96,146,7,227,18,216,6,182,100,149,78,39,55,191,34,47,230,72,165,139,184,63,24,28,157,182,221,243,43,231,144,31,56,188,46,229,127,226,61,217,133,37,19,50,1,158,16,245,128,229,178,26,76,29,74,1,80,128,161,251,19,169,18,245,36,175,222,149,95,93,77,53,47,35,10,2,153,130,136,52,112,208,173,1,209,12,123,197,128,60,186,43,127,119,55,211,201,147,46,125,7,241,201,99,155,141,9,118,98,128,26,4,10,130,215,8,106,6,92,192,39,250,238,53,234,188,33,189,192,18,81,244,51,0,209,57,23,231,40,6,173,61,33,129,246,35,158,167,58,21,168,137,75,168,90,217,205,154,229,185,169,144,124,178,105,138,154,225,71,70,59,247,8,216,140,23,216,14,168,2,131,224,217,21,249,78,174,10,112,117,5,81,128,150,11,160,228,136,230,223,81,185,17,198,54,80,131,102,94,76,73,234,95,141,47,100,100,117,20,0,204,18,144,68,144,76,247,150,225,78,60,138,3,16,58,104,255,254,223,186,47,237,231,247,174,184,58,125,21,100,65,18,228,2,48,137,6,170,197,255,28,169,15,62,234,240,62,89,122,99,83,19,44,209,227,243,254,183,0,104,189,27,65,55,77,26,194,182,36,238,116,250,93,152,159,69,138,55,74,186,84,150,26,128,214,171,122,146,185,106,139,47,85,75,103,51,142,140,175,117,114,160,36,189,79,69,161,119,5,15,50,192,139,4,135,23,176,212,36,228,248,115,193,227,49,198,108,180,67,234,247,30,19,58,107,254,171,222,152,254,204,236,40,1,1,125,119,245,5,171,30,215,214,191,237,38,216,63,208,46,123,187,63,189,204,226,65,112,91,235,21,21,62,220,3,129,79,176,224,193,38,110,52,28,206,148,106,66,159,82,210,224,166,4,250,219,16,138,115,127,142,251,234,157,0,230,60,162,170,25,153,71,247,35,225,167,153,99,216,15,13,195,39,76,194,10,80,125,90,170,87,94,25,179,84,64,64,191,30,91,210,207,206,18,101,155,3,31,180,58,221,212,163,232,79,247,30,116,107,171,127,10,133,81,70,232,112,69,222,91,89,168,57,58,71,177,118,200,156,239,197,55,147,209,41,119,24,42,179,239,43,86,191,248,143,190,195,117,118,204,132,123,49,15,146,74,93,77,184,32,204,12,34,37,128,137,191,199,180,15,236,217,65,151,206,73,3,101,63,134,247,216,61,140,72,217,193,23,17,162,9,110,230,128,247,28,191,248,248,27,21,178,214,209,180,75,21,179,27,154,235,171,63,160,9,153,45,109,102,6,4,224,153,137,63,7,109,168,107,229,219,79,234,2,204,154,252,134,28,108,64,40,19,103,24,214,146,128,54,14,225,134,217,136,67,112,224,72,57,223,210,120,154,186,94,250,111,227,249,119,150,35,162,163,74,6,125,6,250,70,58,120,158,66,45,41,100,236,147,64,94,158,77,45,43,155,220,241,156,156,223,191,24,43,26,65,231,240,71,5,99,73,74,117,208,182,35,136,139,144,130,134,15,32,76,52,138,142,125,53,16,175,21,60,123,230,133,108,44,127,189,50,130,140,29,112,109,84,123,222,224,68,181,101,246,63,225,125,76,36,97,201,232,210,149,13,201,36,149,215,205,205,48,94,100,11,54,225,175,228,40,42,76,96,254,203,42,123,172,162,135,218,204,109,197,214,133,33,18,122,186,142,142,18,228,101,21,197,85,65,160,222,2,120,194,94,207,114,100,96,237,76,209,76,191,203,187,229,12,118,25,78,8,252,61,198,55,180,204,74,37,67,0,71,235,73,66,230,228,89,67,53,132,252,198,213,220,173,43,27,150,105,225,178,248,176,36,226,254,183,63,52,11,136,147,153,15,112,164,224,182,2,107,157,238,116,199,30,97,104,64,169,91,228,122,150,44,110,56,189,159,145,205,149,72,40,242,55,43,27,222,227,144,152,16,169,76,192,9,46,11,218,93,111,56,134,124,60,66,139,210,170,180,173,109,31,69,127,117,39,162,231,88,26,238,12,149,151,220,90,242,254,249,207,148,34,189,210,162,108,26,12,108,103,207,22,125,157,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,255,255,239,84,156,194,5,125,103,34,222,192,99,245,164,138,210,107,105,78,234,75,51,142,157,23,206,68,103,31,42,0,0,0,3,113,95,50,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,25,30,64,95,235,13,171,42,228,62,124,180,116,227,178,31,242,75,250,39,219,137,233,73,73,35,134,47,44,128,193,13,16,95,107,169,29,208,35,15,148,61,97,255,209,43,101,21,149,96,197,119,184,208,113,228,116,30,51,136,214,50,41,21,111,117,214,118,104,98,247,124,0,96,41,18,65,95,219,179,255,65,91,75,226,130,203,107,91,164,76,236,179,14,239,9,212,217,146,93,102,184,79,7,90,168,67,179,167,43,177,190,157,93,83,187,54,124,24,158,72,47,130,153,101,68,40,10,7,239,61,66,191,100,68,213,61,129,232,151,28,172,32,30,118,203,35,145,171,127,81,231,71,143,247,102,59,94,184,22,90,88,151,124,55,133,103,230,173,36,191,209,204,96,52,192,183,138,10,245,80,178,220,122,201,243,53,92,126,243,160,31,232,34,162,159,159,221,237,151,85,165,246,161,139,141,232,98,43,182,194,210,58,27,39,142,63,207,123,223,130,228,5,5,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,232,225,191,144,168,231,54,25,173,49,61,197,211,4,129,8,107,12,135,89,219,187,102,110,224,124,171,177,70,206,162,34,241,160,148,70,118,37,190,52,253,50,88,122,118,188,206,18,200,247,187,9,254,116,222,211,180,129,254,88,156,27,59,27,146,138,41,121,43,147,234,198,144,16,144,103,7,137,88,116,93,22,38,54,212,194,132,76,206,251,228,244,190,63,117,38,45,38,109,146,45,61,146,60,55,200,117,198,160,188,130,105,191,250,45,198,127,201,55,26,225,112,175,71,13,10,60,38,250,16,194,173,212,144,157,110,83,239,208,225,43,60,19,10,231,140,93,240,10,198,254,208,225,16,58,122,55,240,171,25,167,167,104,115,92,112,122,93,227,75,250,167,123,135,255,103,165,205,118,140,101,147,115,61,96,172,251,132,244,90,195,16,25,221,93,80,244,23,244,171,59,203,194,215,188,90,75,197,49,162,190,174,123,42,41,42,234,208,181,1,240,105,94,43,0,0,0,7,113,95,50,95,102,102,116,0,0,0,68,92,65,127,181,198,89,181,35,146,85,92,92,53,240,231,147,60,119,25,190,180,125,35,91,48,246,224,163,214,202,162,27,145,123,194,11,154,75,4,55,101,141,212,229,235,31,99,254,141,106,93,178,27,19,147,195,239,206,181,44,222,117,225,93,35,85,255,121,208,180,244,170,171,48,218,21,86,184,110,224,32,6,150,209,32,18,211,210,120,134,44,224,67,34,3,44,32,72,65,9,100,147,157,236,222,125,150,200,185,20,145,243,175,110,131,244,23,106,90,184,213,185,197,92,70,248,9,53,178,202,57,54,172,14,138,189,169,125,191,11,80,145,49,225,251,116,238,187,210,202,150,101,104,68,40,121,112,206,13,45,166,94,137,5,44,178,46,14,61,142,147,80,14,128,213,114,237,244,126,154,77,154,143,175,115,183,7,78,26,89,251,74,164,232,229,35,232,195,27,160,222,11,84,26,176,130,36,147,121,10,111,178,32,40,201,175,192,243,12,51,64,42,118,57,175,80,118,46,64,122,251,212,219,126,141,2,158,189,67,120,154,209,54,44,13,168,43,16,225,71,252,144,11,222,169,41,127,214,158,135,92,166,221,131,172,228,234,146,92,215,70,65,129,231,61,96,32,162,31,226,42,136,59,176,227,215,223,7,144,245,233,170,191,98,210,46,173,197,43,245,43,191,201,68,213,193,196,109,85,224,253,237,251,1,37,26,123,33,79,22,241,170,128,183,54,228,37,56,152,109,205,113,209,113,83,182,56,15,142,34,170,179,108,32,85,55,135,217,26,52,123,36,34,108,70,219,222,170,97,66,10,161,119,156,119,192,21,204,104,241,22,159,218,255,80,201,230,131,147,208,146,195,137,68,157,167,77,201,199,231,250,34,33,189,96,53,33,14,70,0,46,36,97,149,178,211,238,148,86,178,219,2,254,6,11,32,117,240,127,47,182,61,72,14,50,96,70,155,153,44,218,11,31,71,107,9,174,3,174,177,108,50,116,35,33,147,84,89,38,215,106,107,7,204,24,115,212,116,61,240,171,42,28,43,62,171,94,199,45,68,147,225,29,245,51,197,4,112,1,22,252,163,161,37,253,202,199,236,172,192,202,246,14,123,193,3,77,145,5,53,156,71,44,168,6,124,230,181,94,24,208,36,35,64,186,237,177,101,122,119,108,15,158,8,105,183,3,113,126,187,222,146,159,123,15,122,196,125,62,137,141,245,90,21,210,1,22,186,35,58,178,1,85,8,238,106,163,194,179,201,27,213,19,9,126,10,156,140,139,44,206,59,132,181,226,33,38,36,166,251,58,129,46,186,189,153,122,218,173,233,122,28,95,152,130,13,161,18,9,174,79,144,77,148,134,246,88,19,166,131,73,113,20,111,158,109,173,0,46,112,251,168,151,67,252,150,253,162,42,190,38,121,76,135,161,80,107,194,4,3,237,130,251,48,137,176,229,17,235,86,132,174,81,155,13,176,96,133,166,163,104,150,135,112,251,243,203,143,248,237,166,32,145,71,252,57,12,166,105,141,254,109,22,66,100,172,184,132,147,156,148,250,43,66,176,133,227,184,184,199,125,46,117,16,225,249,172,200,251,236,86,175,57,125,205,182,94,143,12,114,100,50,198,56,129,228,238,127,50,156,25,89,178,129,154,74,39,103,232,180,74,211,114,65,188,12,125,197,69,187,28,179,254,240,157,223,161,68,31,136,55,8,53,154,153,235,156,45,7,6,146,246,0,195,40,93,158,14,73,145,125,95,32,119,112,8,62,96,216,141,26,49,119,173,80,82,211,147,21,45,1,53,97,201,200,81,44,96,130,114,113,59,232,216,22,51,164,255,238,211,39,233,99,139,194,25,61,53,224,107,140,60,20,33,108,58,240,120,199,152,101,70,106,149,209,17,42,112,218,232,99,22,14,18,23,68,96,165,2,113,167,88,233,56,78,33,148,85,69,225,254,14,33,24,141,20,234,130,20,174,34,250,204,134,213,47,189,145,37,49,185,96,159,217,46,11,83,217,253,12,39,179,158,122,35,58,183,25,180,225,6,109,81,172,235,100,228,133,98,181,252,243,26,119,252,122,231,42,152,73,82,10,0,188,11,150,98,91,136,221,43,49,189,111,14,25,16,206,226,228,73,220,68,69,250,224,177,155,85,57,31,243,147,197,26,116,216,62,121,179,53,56,5,216,234,211,118,112,121,198,77,82,206,39,31,32,120,19,41,174,216,91,196,142,47,163,4,227,174,163,182,56,171,179,115,185,253,47,84,152,249,206,2,46,145,74,78,193,190,115,233,94,138,39,188,115,75,178,145,78,228,200,121,197,72,198,172,121,28,59,241,53,159,123,93,31,150,71,168,203,185,160,95,72,227,2,177,223,188,67,179,247,250,216,67,177,64,142,29,191,31,72,75,189,184,146,189,182,239,252,148,205,181,221,92,30,111,2,185,134,79,36,138,12,255,64,173,235,217,127,75,42,17,138,163,200,199,227,201,64,79,123,70,121,167,162,19,70,194,89,34,66,226,117,83,171,0,150,111,201,236,27,92,34,148,62,5,66,231,57,126,90,78,136,124,230,205,98,8,20,251,80,48,133,135,41,153,32,231,28,37,87,156,208,233,181,3,129,8,138,41,179,248,223,248,249,135,41,192,28,11,43,254,65,172,107,204,107,138,11,180,18,219,240,139,231,163,22,130,51,79,86,172,37,196,219,195,112,23,185,117,180,5,253,80,1,154,216,235,109,208,174,196,48,29,96,16,44,225,64,7,134,183,228,69,129,227,21,136,132,214,217,172,167,59,47,155,17,27,136,212,83,157,249,185,39,211,204,64,225,139,164,146,200,124,216,138,210,198,56,103,182,165,215,202,159,227,198,180,63,109,8,52,83,60,252,218,230,212,106,152,22,235,185,22,71,80,107,182,160,150,84,53,220,108,144,212,176,200,239,155,25,150,186,63,159,3,207,249,24,26,41,40,201,207,251,132,132,95,33,24,231,159,33,205,69,110,164,110,212,231,200,139,56,145,97,109,43,8,69,165,199,214,63,35,43,228,224,46,169,193,220,115,37,246,78,13,82,25,71,246,79,215,215,23,41,54,143,221,47,142,96,58,250,226,244,153,106,255,69,37,251,7,202,148,29,22,38,111,201,88,158,184,170,212,56,117,26,197,128,190,160,93,120,51,58,203,234,63,190,181,45,20,226,66,212,150,8,49,53,146,175,233,220,106,27,83,35,249,80,231,223,205,216,92,51,234,101,40,54,167,79,66,219,187,210,206,82,135,34,225,49,39,133,11,168,199,139,115,92,78,61,176,184,244,237,156,204,3,75,133,221,18,165,12,100,162,163,12,44,29,34,198,200,211,159,59,47,233,148,106,154,242,53,218,224,70,84,74,142,147,210,231,214,234,98,79,87,194,200,73,217,99,129,239,74,121,132,4,215,69,64,197,108,216,73,239,235,16,100,134,83,216,37,234,151,114,244,45,139,15,118,12,114,139,145,241,192,107,51,198,150,72,211,250,61,59,95,198,231,212,67,193,24,84,239,11,165,74,63,172,12,24,213,207,1,30,251,133,81,73,185,23,187,33,81,114,2,105,53,190,59,219,154,126,243,190,167,134,138,41,39,111,129,53,137,116,110,176,28,117,151,99,5,149,241,93,36,85,210,184,40,108,166,182,104,29,21,70,178,212,236,56,217,87,214,76,64,15,36,34,114,157,227,86,56,188,114,150,104,173,47,54,36,221,128,172,34,103,134,150,32,225,231,73,202,61,232,84,153,221,220,19,247,38,250,121,160,27,105,121,173,11,181,104,65,211,54,123,6,195,120,150,159,63,198,31,81,232,79,101,44,242,181,120,203,168,192,158,29,11,90,172,157,107,17,226,40,197,22,86,85,139,241,173,79,135,49,35,113,19,165,186,37,85,194,71,98,145,173,32,157,178,39,151,186,251,99,192,55,115,0,121,189,13,21,169,97,182,99,124,141,247,20,23,15,124,146,234,170,115,15,31,132,187,168,110,105,47,108,62,76,5,194,36,85,251,125,149,121,53,55,131,245,128,122,124,85,9,226,17,222,128,135,39,81,187,36,56,86,168,21,59,85,185,206,113,236,191,16,35,248,184,26,6,135,163,1,250,105,106,90,223,215,127,194,201,173,242,138,12,123,19,157,79,76,52,89,181,158,152,132,232,214,149,24,225,187,61,134,39,43,240,164,102,91,97,40,1,115,42,105,15,188,179,184,63,27,220,159,224,28,16,121,247,179,150,61,107,190,137,140,245,152,204,186,193,161,134,2,62,162,110,253,51,183,236,68,106,63,129,34,109,181,167,23,106,95,226,116,94,52,14,161,196,154,107,67,232,91,3,103,0,230,52,113,124,113,23,64,161,29,162,164,43,142,96,141,9,158,71,150,115,167,203,97,192,255,103,133,217,62,116,59,191,7,124,78,216,24,217,117,106,61,163,232,87,224,156,6,21,13,208,53,233,24,110,218,150,146,37,151,242,240,221,56,42,44,104,220,26,89,110,144,141,73,50,59,127,183,73,0,91,242,132,246,59,142,37,231,92,45,145,5,150,209,35,238,247,78,248,240,206,156,144,220,20,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,255,255,79,221,218,118,110,21,196,201,3,14,242,189,179,91,192,99,96,7,72,106,225,147,220,237,134,147,144,197,7,0,0,0,3,113,95,51,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,31,47,105,2,24,44,61,202,225,13,32,123,108,193,107,94,173,50,114,254,198,176,90,125,164,150,196,246,249,175,17,22,17,212,54,198,19,37,196,236,18,249,140,57,127,198,118,190,90,186,184,182,149,230,68,142,29,18,230,63,42,140,127,115,26,78,45,231,99,47,178,137,217,194,249,98,34,71,84,65,171,26,157,214,254,238,114,188,4,251,25,142,7,130,73,178,23,206,168,128,2,146,158,95,184,42,133,27,158,249,61,105,233,94,184,141,220,221,237,220,88,12,98,175,180,15,99,95,44,93,116,146,10,202,247,15,36,96,11,13,172,211,201,170,103,94,130,48,250,24,93,230,138,166,181,221,0,246,156,82,51,112,46,189,99,187,107,16,190,144,53,82,201,219,132,39,28,55,129,140,241,9,188,107,253,166,160,170,130,36,9,87,15,98,165,197,232,147,116,194,27,177,68,144,136,185,158,85,207,109,211,99,97,22,122,34,230,200,37,248,167,98,90,176,35,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,32,29,59,252,68,189,13,82,103,98,31,174,164,55,182,8,16,132,240,26,4,129,169,43,228,115,82,6,117,152,41,233,4,45,201,57,220,110,49,245,48,152,227,127,250,129,113,117,205,162,159,202,235,207,0,194,154,23,186,241,182,230,206,240,21,255,118,23,233,77,142,116,179,62,182,127,104,250,181,89,58,249,29,196,77,249,214,60,60,57,157,160,72,57,64,177,46,53,87,127,205,41,66,70,19,137,204,16,207,223,122,50,143,184,80,246,167,69,227,19,208,112,126,229,238,72,136,205,36,89,231,110,120,116,168,151,26,82,150,60,54,196,228,85,43,165,203,184,61,34,42,17,93,162,115,136,82,167,196,118,23,145,209,66,140,216,137,209,133,0,59,103,176,108,99,12,12,38,215,244,143,172,137,228,186,130,255,134,94,78,69,13,33,84,182,59,154,170,43,229,34,1,93,185,89,222,15,171,195,149,122,133,214,36,13,213,1,128,3,110,171,58,7,25,39,0,0,0,7,113,95,51,95,102,102,116,0,0,0,68,96,235,41,49,136,78,16,56,49,164,6,15,31,30,12,18,215,50,132,7,160,167,165,108,130,110,90,163,189,88,175,57,210,214,50,20,15,197,65,137,142,188,120,64,210,22,214,36,208,41,66,170,232,165,94,141,194,42,100,67,44,247,217,71,29,106,78,42,31,106,26,190,167,163,150,239,86,136,163,158,188,178,190,138,81,230,40,137,10,6,129,47,114,202,151,75,77,7,134,206,202,14,41,115,184,238,243,40,6,95,129,76,66,188,13,149,114,94,31,30,208,113,85,34,47,178,126,72,111,92,150,127,203,108,215,120,30,128,204,2,108,158,145,169,250,194,13,236,127,159,233,87,124,168,138,238,238,244,194,88,236,108,97,224,76,65,183,66,187,154,197,172,63,90,82,139,60,64,114,141,212,19,152,64,144,67,102,78,97,180,237,11,232,123,176,62,89,196,181,73,109,0,203,185,146,162,229,197,65,220,69,55,200,165,66,10,191,137,88,184,86,222,244,58,118,59,175,201,5,93,87,165,88,100,207,100,181,162,88,167,17,66,74,201,21,250,146,247,53,60,77,224,197,218,12,31,86,111,175,251,222,176,24,240,182,53,117,215,230,232,214,34,161,11,97,239,44,251,206,137,211,218,210,7,34,166,74,7,74,242,159,36,190,33,157,121,133,72,154,149,236,14,215,213,35,123,14,237,104,50,209,230,33,164,118,43,78,236,92,71,26,224,65,192,104,212,12,157,129,191,147,195,69,42,59,184,252,180,159,11,92,68,249,67,192,107,9,71,99,31,21,72,42,96,117,167,199,37,213,2,63,28,41,158,251,126,136,242,113,164,241,137,196,85,35,65,96,149,17,241,76,91,184,83,231,241,11,207,233,122,97,51,155,210,17,107,118,132,239,197,109,35,66,80,180,152,22,106,211,53,64,192,147,37,21,21,86,214,112,48,90,112,103,79,128,39,205,234,5,173,249,91,165,84,179,87,11,249,9,212,227,234,245,77,116,4,217,5,106,147,180,156,104,131,12,39,206,189,206,199,130,51,129,29,79,129,144,214,67,196,121,202,52,74,105,218,27,170,7,33,55,128,244,42,96,202,211,93,36,152,23,9,194,170,37,15,21,66,77,129,141,79,238,11,211,216,227,67,24,53,236,10,114,207,221,162,176,61,204,102,157,247,189,255,191,181,39,55,91,102,70,150,215,227,68,86,126,17,156,46,245,211,114,35,48,211,1,125,46,104,242,210,195,219,206,65,59,48,89,30,4,149,139,33,180,182,154,217,9,228,85,163,113,209,69,61,168,131,187,200,188,39,38,15,196,21,144,137,171,108,143,77,232,141,82,212,214,77,150,9,11,56,226,242,197,124,3,0,219,137,138,94,169,68,176,230,89,120,60,138,109,7,247,35,20,218,174,172,233,132,147,180,138,91,65,113,164,26,38,1,5,69,113,63,188,225,233,174,24,225,85,11,141,57,132,123,245,181,194,245,242,161,222,41,73,94,22,50,35,92,251,39,174,22,80,115,238,255,173,118,176,127,67,249,183,106,43,66,247,63,143,42,58,182,255,136,236,199,175,65,173,97,176,35,48,38,131,239,164,142,213,142,203,246,221,42,52,79,126,52,239,220,154,250,138,68,202,17,1,254,80,84,51,178,133,76,226,200,169,51,161,54,175,87,235,33,150,59,163,141,245,249,38,77,77,88,92,255,234,5,18,80,51,247,56,160,80,38,100,200,24,48,57,113,21,146,233,59,196,128,240,69,137,164,179,37,83,70,206,158,58,31,145,4,255,75,46,215,106,34,173,114,251,185,29,213,95,53,105,8,89,82,92,117,46,155,214,183,112,188,251,72,190,159,248,44,22,167,28,167,6,30,105,246,80,143,208,175,49,36,179,49,27,135,241,201,50,197,190,173,45,8,138,162,160,246,184,68,211,230,121,216,153,37,197,210,226,86,221,165,125,168,206,77,176,28,61,50,27,224,94,86,245,19,38,213,25,0,168,235,135,22,146,42,231,23,252,68,0,155,116,59,61,163,167,48,16,51,168,64,82,144,115,129,210,145,119,41,182,56,114,137,47,189,40,244,87,42,175,242,103,75,230,139,62,47,237,38,22,177,23,40,20,159,186,62,107,248,11,254,85,112,41,108,86,33,219,73,117,68,29,126,202,240,251,14,52,23,13,26,239,43,63,192,69,103,3,209,103,32,53,243,209,2,173,51,176,172,53,30,53,95,134,184,28,1,87,184,237,24,161,116,36,171,210,220,14,255,158,154,135,108,14,65,146,138,204,112,234,197,51,3,146,10,224,122,17,32,151,189,59,40,183,167,219,209,81,155,254,187,116,168,26,240,113,43,139,98,38,31,195,215,148,97,82,32,196,143,33,7,121,97,46,220,138,42,116,135,234,128,58,2,48,1,222,245,41,229,158,48,82,58,197,138,36,226,86,6,165,163,241,111,238,228,137,149,120,70,202,183,173,28,2,139,150,219,185,201,76,203,165,178,8,208,154,67,3,178,28,4,255,233,145,75,60,129,175,36,125,182,20,124,107,182,8,81,184,4,54,72,207,54,196,127,1,175,251,210,200,10,186,93,25,203,101,204,249,86,201,21,11,32,107,137,18,196,90,23,43,47,35,40,246,38,0,237,90,127,243,139,156,84,92,32,250,244,83,168,96,180,158,228,64,116,166,81,94,78,95,220,83,43,206,254,254,124,35,35,67,94,8,57,83,98,144,40,146,19,2,225,249,136,76,3,227,180,70,77,52,116,139,72,122,147,187,41,156,131,177,65,152,121,137,87,39,181,218,36,252,78,208,29,167,90,177,251,153,66,138,78,3,75,171,103,230,157,154,73,237,19,101,43,187,93,233,42,183,193,116,37,96,80,78,54,52,126,192,151,101,197,247,182,17,68,189,29,63,169,238,163,126,87,81,43,193,119,111,209,173,251,60,13,26,88,24,71,146,49,136,249,225,132,241,211,197,53,8,224,88,234,34,52,30,149,153,98,91,20,154,238,80,176,199,66,162,75,182,72,12,134,107,80,148,79,202,121,33,183,189,95,254,92,119,189,192,249,161,77,206,221,0,90,228,145,149,53,56,107,197,158,17,207,214,30,163,137,107,78,64,97,147,3,101,200,249,107,199,245,50,5,117,124,3,68,154,56,225,54,237,143,68,241,113,42,119,233,198,226,201,14,39,206,211,235,168,204,63,94,186,102,147,80,83,14,165,151,130,63,54,40,92,230,236,239,242,79,227,83,58,59,192,139,244,181,102,27,31,20,3,244,140,162,43,72,153,149,112,60,11,251,59,88,100,107,234,47,204,209,62,99,253,64,168,147,107,162,29,27,24,161,71,63,177,154,103,145,149,77,219,160,26,72,106,27,169,212,82,253,196,46,188,224,157,41,168,26,10,74,224,128,18,34,37,148,114,38,127,6,159,139,161,198,54,66,185,80,132,43,222,186,148,61,178,44,61,42,219,193,221,205,115,16,124,248,242,194,80,72,149,185,32,211,108,183,164,74,40,41,82,5,89,48,161,140,183,13,4,14,167,134,253,135,44,139,1,221,55,46,239,45,70,231,5,175,145,254,194,27,215,29,38,175,195,103,175,50,186,31,101,191,47,88,132,179,122,54,56,55,51,213,42,220,117,97,10,65,234,133,58,21,89,84,53,47,33,173,54,34,192,53,156,188,232,216,80,40,194,95,210,51,247,144,214,36,90,246,106,53,29,252,143,1,150,46,101,67,107,189,158,171,196,141,141,195,112,132,92,180,96,166,56,56,249,84,184,131,217,120,126,244,155,25,83,129,232,64,80,108,79,0,124,159,159,37,149,26,155,173,83,25,76,47,64,185,77,235,30,179,238,210,33,213,42,83,239,206,177,65,140,12,109,95,112,69,218,55,251,17,35,246,171,20,53,120,183,217,149,103,235,205,23,157,55,185,197,130,137,208,101,88,20,244,241,95,165,146,89,217,251,114,185,194,173,41,195,118,141,34,80,169,184,94,35,116,166,255,150,91,212,219,204,50,184,218,1,111,174,216,6,117,247,17,209,174,91,49,242,160,4,92,172,22,187,142,45,154,177,245,54,228,254,71,94,10,45,128,80,168,109,154,195,134,91,249,50,175,240,189,199,234,30,121,234,204,134,1,119,71,229,40,137,193,94,112,114,35,137,126,103,5,163,195,81,111,120,18,30,33,185,81,59,225,244,41,226,242,195,248,71,92,186,72,230,172,228,233,181,23,227,239,124,120,212,54,46,255,135,15,232,145,22,133,169,161,39,34,17,232,16,35,158,51,130,165,189,113,201,236,0,65,40,197,198,187,152,95,127,59,116,246,115,46,8,135,140,12,78,104,132,10,142,155,6,195,96,54,101,105,141,155,239,40,89,239,49,193,145,189,216,197,57,230,229,130,233,156,135,33,227,155,64,109,225,165,136,96,3,76,229,182,81,71,246,9,151,223,131,11,61,107,122,160,216,176,144,32,16,26,217,166,108,53,91,53,207,3,245,231,44,18,118,4,192,70,167,28,194,114,34,192,86,109,252,177,177,74,217,26,195,153,3,198,170,137,154,77,243,160,247,207,175,170,148,229,6,216,199,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,0,0,0,3,113,95,52,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,47,161,213,145,45,92,48,72,179,58,249,54,150,41,180,3,66,188,21,78,218,34,30,204,61,218,34,222,82,176,5,98,2,152,14,33,126,44,184,181,22,94,220,17,255,186,193,23,160,223,16,168,179,20,185,170,86,175,173,76,204,65,204,189,31,86,98,104,119,237,253,24,80,61,220,221,45,57,88,46,148,125,250,151,211,182,147,170,251,157,124,145,86,251,174,149,16,212,217,146,93,102,184,79,7,90,168,67,179,167,43,177,190,157,93,83,187,54,124,24,158,72,47,130,153,101,68,40,10,228,12,247,8,173,124,146,164,217,56,113,197,19,119,162,80,33,16,147,209,75,38,55,142,176,170,149,99,109,240,9,44,135,4,227,58,211,71,155,217,4,183,158,58,51,145,78,160,19,208,143,111,121,11,75,56,174,237,80,138,61,109,113,47,187,251,208,29,146,158,230,158,159,71,118,58,148,67,192,249,224,29,140,49,42,233,77,16,135,43,233,153,217,236,6,8,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,49,96,42,110,194,55,197,153,144,86,119,130,227,30,52,48,230,160,66,51,167,147,39,132,122,79,125,83,142,194,72,2,46,105,241,222,113,103,61,44,45,51,148,167,122,141,38,28,136,125,71,217,205,161,140,165,97,122,242,228,20,49,130,166,16,171,157,151,120,166,247,200,243,83,148,219,75,15,144,5,148,223,93,233,173,255,177,165,188,139,35,160,138,119,159,206,31,45,38,109,146,45,61,146,60,55,200,117,198,160,188,130,105,191,250,45,198,127,201,55,26,225,112,175,71,13,10,60,38,29,243,8,231,230,120,79,159,183,55,72,180,52,113,145,215,59,72,238,175,106,31,25,42,121,245,155,125,5,94,90,4,123,251,28,165,84,163,40,174,29,42,212,184,93,63,25,176,166,224,114,147,243,127,85,56,165,82,18,56,168,47,87,49,70,4,47,210,1,87,251,164,241,40,67,63,180,164,115,46,124,58,245,79,140,92,2,168,162,116,72,71,153,97,93,40,0,0,0,7,113,95,52,95,102,102,116,0,0,0,68,198,179,43,33,83,197,251,207,15,77,146,188,13,76,232,96,219,35,7,81,33,67,55,95,158,5,176,72,105,23,227,47,182,113,139,138,225,69,248,201,102,143,58,18,211,140,168,161,147,201,205,246,29,4,182,60,150,57,168,138,31,195,241,36,117,63,215,6,143,250,157,229,216,187,181,228,169,142,235,226,184,151,47,251,232,132,65,227,202,153,187,161,161,179,220,73,245,150,202,56,74,127,47,176,214,106,16,22,94,229,87,163,254,232,30,78,51,110,140,161,146,205,241,96,213,49,45,91,123,35,120,164,91,89,123,46,54,138,2,149,215,6,115,45,223,6,180,204,162,16,248,42,163,38,63,209,0,95,86,91,50,116,113,61,219,8,108,93,185,93,61,67,99,169,157,2,224,28,173,4,88,59,205,8,241,59,217,227,96,218,47,37,152,116,94,65,117,64,164,236,28,209,130,160,61,167,216,55,77,97,209,28,123,214,101,243,242,131,69,156,125,212,96,74,154,213,178,183,32,158,162,188,16,107,182,143,144,230,83,227,100,248,18,55,208,198,153,25,92,95,135,9,122,48,106,83,78,199,221,43,249,7,57,80,165,113,150,116,225,86,141,123,158,220,158,149,138,171,5,133,128,112,71,36,225,105,11,95,108,83,182,197,162,0,145,113,203,168,101,228,230,85,107,42,138,125,239,117,88,88,89,43,225,167,95,30,170,192,195,14,106,224,112,70,120,96,247,91,247,43,173,31,194,36,23,254,199,58,185,43,41,228,41,69,148,96,126,205,113,245,75,67,226,69,20,1,115,70,15,142,32,48,160,218,137,78,247,42,66,58,29,174,137,216,140,201,174,154,192,2,186,0,106,7,136,167,183,0,218,208,136,223,254,123,140,162,121,137,115,205,175,105,75,91,195,117,184,106,141,197,146,204,208,47,57,85,0,215,71,80,146,21,57,128,99,16,215,203,202,56,209,101,160,89,156,159,239,89,216,231,206,0,90,238,169,126,209,57,151,233,250,74,66,25,158,92,31,8,61,179,49,53,42,36,247,204,27,253,146,235,155,219,96,104,163,67,215,13,61,64,162,154,70,127,111,13,205,236,66,80,52,199,182,197,46,192,167,130,189,197,198,181,253,6,209,88,156,167,22,5,170,32,106,171,200,211,102,38,109,119,19,209,68,116,123,245,21,193,59,228,137,42,223,27,152,108,128,206,111,129,4,62,181,32,233,46,103,253,8,142,92,217,27,255,9,54,113,143,229,65,100,168,84,191,47,68,216,221,206,214,192,157,165,93,129,33,153,161,21,215,17,22,84,145,121,183,156,79,157,198,126,97,161,74,47,232,153,170,228,153,100,44,30,46,122,22,9,1,158,146,53,116,174,141,229,175,12,17,70,72,43,2,10,88,190,239,82,97,8,127,159,57,89,126,180,104,52,143,0,79,187,95,253,137,86,229,36,225,223,197,67,9,53,20,186,142,225,79,59,53,53,1,87,58,149,214,167,224,177,172,171,89,243,41,222,238,67,95,175,80,6,78,78,135,44,15,181,170,84,40,128,212,102,21,51,191,194,41,7,40,71,18,129,39,88,92,147,146,233,141,250,204,212,180,92,165,13,14,41,99,59,182,75,56,44,122,39,167,207,186,65,226,94,243,171,26,214,21,107,79,103,100,154,118,130,195,93,18,172,29,26,32,203,182,204,44,241,6,179,165,210,226,121,120,5,1,115,45,214,32,24,247,165,100,166,187,45,165,70,105,122,43,22,231,127,162,128,110,169,137,115,160,37,41,104,253,222,75,148,63,169,119,14,212,66,50,31,232,63,243,204,76,91,210,120,251,220,197,14,139,97,94,165,169,178,130,169,225,100,86,86,96,224,105,29,167,50,201,20,29,147,221,157,118,159,211,11,125,82,145,43,24,100,190,243,176,93,249,175,203,213,1,129,31,89,60,158,55,247,28,154,123,189,46,30,27,11,80,208,101,29,235,238,84,198,142,42,7,148,36,154,90,219,123,6,23,201,38,26,47,211,38,244,119,169,250,106,212,8,177,97,42,205,255,91,22,150,71,23,113,31,141,240,125,244,108,55,61,237,85,143,222,162,246,159,123,223,23,129,160,211,125,227,136,203,32,3,75,22,218,90,206,73,25,35,28,24,145,19,93,232,96,90,5,206,123,247,34,71,213,120,117,165,236,30,128,171,17,58,59,86,33,144,21,119,239,217,137,21,115,13,42,1,209,142,6,149,159,115,126,37,112,76,60,244,46,164,32,237,247,236,13,190,178,92,103,87,210,236,44,75,140,34,43,164,167,46,68,150,70,48,180,124,222,157,154,98,127,135,153,14,9,248,187,15,194,15,173,15,56,180,90,114,40,97,92,80,130,12,56,63,243,190,48,158,125,213,121,23,139,233,39,63,91,54,254,238,150,11,151,56,7,17,166,94,149,234,91,165,220,218,33,126,188,27,180,50,82,45,56,176,196,70,117,228,214,32,162,174,120,141,13,233,235,177,182,150,187,41,14,193,3,0,203,168,225,129,240,113,177,7,12,249,44,233,227,25,234,124,118,72,45,103,54,108,81,166,194,91,130,201,92,91,187,63,30,216,123,95,44,172,147,128,190,36,253,57,141,247,122,70,71,39,232,132,7,195,10,67,100,178,5,28,75,190,108,104,225,139,204,237,77,198,7,179,209,211,61,23,167,87,98,75,148,240,202,238,160,72,20,53,58,79,250,253,75,134,23,247,196,77,243,34,118,24,243,250,48,145,59,246,19,118,76,221,174,198,239,218,120,152,100,253,133,62,44,176,16,16,39,52,51,180,174,140,65,161,150,153,250,161,209,207,242,235,52,217,78,39,24,205,134,14,134,84,75,158,236,4,54,102,225,203,210,5,224,77,33,146,219,227,171,207,139,21,217,237,195,48,41,167,176,105,152,29,58,22,223,215,50,75,21,46,132,60,144,222,35,35,19,32,80,140,65,255,93,250,174,131,68,37,104,19,82,136,31,243,101,28,54,13,72,175,55,232,49,96,79,156,230,241,248,155,241,237,40,225,203,67,203,38,123,64,217,140,57,160,172,143,208,243,79,212,41,12,17,104,188,153,35,124,244,135,44,135,75,175,217,145,198,141,41,60,35,50,129,236,47,236,63,87,105,6,226,204,30,87,46,234,7,45,75,28,108,8,15,224,164,36,162,13,144,127,33,3,168,126,39,253,120,225,110,55,35,198,22,61,182,122,17,134,117,70,69,208,31,157,205,66,18,112,50,237,237,101,114,155,220,220,172,158,14,135,213,116,83,85,193,252,18,138,84,255,177,209,66,111,24,92,159,250,125,85,112,86,116,33,191,144,86,53,172,202,36,150,155,158,190,212,200,77,200,144,67,126,32,18,135,68,52,50,128,121,127,78,103,21,58,92,141,243,227,59,29,229,73,13,197,86,76,96,158,113,218,167,14,116,98,146,160,22,158,46,74,53,91,96,189,42,98,212,100,34,128,251,189,108,135,224,134,187,10,66,162,249,70,122,91,157,26,210,90,231,76,3,175,107,195,129,45,154,8,230,227,172,170,215,210,102,236,172,5,132,58,141,245,254,97,111,33,143,64,232,165,49,25,32,193,149,67,161,226,6,42,228,31,205,168,99,231,43,97,122,223,218,220,117,61,106,134,56,73,210,247,223,247,163,38,121,228,171,101,154,228,24,205,61,250,149,35,91,64,171,243,51,184,138,103,189,115,145,154,143,59,247,140,148,166,93,123,198,125,254,246,234,180,71,202,182,6,204,198,50,32,59,208,80,2,139,193,229,79,78,54,76,57,25,69,174,86,92,125,184,176,195,151,253,143,186,88,93,183,45,186,204,206,188,137,82,231,53,58,148,235,137,111,161,93,224,38,12,102,103,92,63,211,101,146,0,139,129,45,39,86,26,207,101,43,190,62,150,49,221,94,16,211,194,194,138,50,10,189,157,35,254,171,106,121,50,20,64,171,18,239,173,167,224,11,199,167,123,121,148,242,102,156,73,214,115,139,238,19,138,101,231,112,158,26,97,72,64,87,59,28,39,3,28,51,20,0,83,166,161,105,158,193,57,23,100,108,197,105,112,4,79,93,98,163,102,187,89,181,89,115,90,223,226,16,144,155,119,46,112,213,149,74,80,41,146,136,99,149,43,96,30,61,26,205,0,240,188,198,201,155,193,217,203,230,193,28,210,125,247,190,249,41,82,109,115,239,198,111,239,245,26,215,83,14,173,238,8,120,232,137,102,76,43,221,196,68,212,58,159,214,251,64,182,125,7,82,119,172,26,18,80,86,85,37,134,48,213,197,88,17,181,171,198,245,108,33,175,241,39,59,239,36,53,93,57,34,231,194,37,35,185,60,19,118,176,160,39,29,103,35,71,255,199,120,236,181,79,4,149,62,214,225,226,80,154,244,105,84,90,180,34,171,16,241,159,228,242,1,216,49,140,172,68,187,176,50,52,30,245,208,233,224,88,209,1,38,226,248,249,28,129,21,59,60,38,123,136,25,128,119,90,30,207,81,243,80,41,113,145,48,17,195,128,78,48,6,41,6,164,187,69,52,86,155,3,136,169,225,161,64,190,100,161,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,0,0,0,3,113,95,109,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,31,171,122,171,39,137,98,22,245,110,230,148,101,145,202,169,222,116,161,116,24,73,104,187,20,203,121,75,71,184,15,202,19,196,215,90,106,7,244,200,3,101,79,216,127,244,74,89,69,37,88,241,29,46,116,28,57,157,199,12,162,181,76,74,5,197,38,34,182,73,236,14,137,58,110,9,126,222,74,160,1,156,39,57,216,86,29,84,40,106,205,71,86,181,98,69,4,235,108,201,30,199,209,137,71,190,68,91,83,28,126,140,7,44,7,43,223,209,131,92,7,206,183,242,173,165,112,120,21,203,166,195,75,235,217,228,177,74,18,143,32,156,78,120,248,230,27,108,85,90,18,59,138,108,42,165,60,174,164,185,29,23,214,37,215,23,220,138,27,116,129,76,113,87,12,39,132,220,78,3,126,111,79,223,58,7,77,166,7,25,100,26,32,34,72,239,2,205,165,79,231,206,214,127,105,66,243,205,48,66,253,5,206,169,85,95,31,138,42,240,197,164,19,161,34,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,32,162,41,83,37,244,221,231,151,146,201,77,37,176,63,241,6,159,25,38,52,159,225,61,44,105,61,227,8,3,122,153,50,61,40,165,133,140,1,25,64,44,33,225,249,83,157,218,226,55,0,144,99,136,209,51,127,140,216,36,63,189,1,26,43,135,125,220,166,159,94,13,192,53,209,31,147,26,215,198,187,26,59,224,242,218,230,84,96,160,73,181,24,147,216,185,17,23,147,54,193,96,25,58,64,100,156,23,160,116,82,219,72,142,169,215,35,155,7,68,105,133,136,112,20,64,44,80,11,235,180,61,55,83,198,194,140,103,143,186,193,251,95,136,154,28,50,125,226,224,116,188,93,220,254,192,22,239,188,15,45,234,41,218,24,124,25,87,40,29,239,108,8,241,219,12,164,128,9,126,3,71,246,112,125,34,83,139,217,89,234,73,16,148,19,18,128,113,250,87,87,227,202,201,120,85,187,50,98,193,80,227,105,145,49,152,200,190,254,117,141,248,77,40,40,0,0,0,7,113,95,109,95,102,102,116,0,0,0,68,94,214,202,65,150,190,86,65,72,163,37,61,92,110,171,24,182,226,190,94,164,100,10,21,229,152,195,63,112,255,243,92,105,117,149,195,154,41,36,68,158,199,100,51,168,131,47,103,109,108,210,48,225,32,189,106,220,54,140,118,108,252,14,23,216,153,239,166,150,3,5,124,157,54,52,94,31,77,17,87,57,23,20,208,127,120,44,179,7,33,91,205,131,8,37,46,197,19,106,152,169,172,25,136,192,17,241,32,43,213,220,105,86,78,152,83,253,86,97,177,14,220,92,51,44,194,166,20,117,72,213,68,204,10,179,107,11,116,182,225,149,139,161,83,128,187,221,192,128,177,219,11,19,166,88,72,88,22,165,49,236,43,49,108,221,132,184,156,250,154,54,116,59,21,86,127,132,143,15,156,4,244,107,12,140,73,150,110,57,236,16,70,0,115,160,156,64,10,203,33,84,176,94,231,125,169,44,167,212,115,98,212,79,199,81,52,245,107,222,9,189,160,212,28,118,59,177,169,56,199,47,26,160,44,230,125,53,133,212,72,153,208,216,112,78,234,76,38,19,250,149,255,103,59,182,1,170,36,89,207,121,219,120,148,8,255,119,142,203,246,254,240,233,140,57,50,0,202,32,116,154,149,145,132,41,45,214,19,164,119,80,90,241,229,57,182,169,16,246,230,132,187,27,236,104,104,162,158,230,181,148,59,53,175,94,184,30,175,116,60,254,180,166,72,94,233,196,37,24,254,62,131,180,25,158,72,224,201,239,189,178,168,175,194,93,84,92,184,35,183,145,8,226,101,31,126,123,46,120,78,81,133,114,63,20,35,12,128,212,170,109,44,146,231,149,203,231,96,70,219,69,41,115,87,65,151,212,119,169,174,252,226,59,90,40,88,184,108,112,240,115,119,151,180,203,206,102,191,198,99,14,71,229,188,135,85,182,212,93,52,139,174,11,66,2,10,149,144,47,181,62,141,108,85,194,146,182,176,91,151,3,223,225,238,21,83,6,76,91,33,248,136,248,26,230,114,9,238,124,251,103,152,55,231,233,41,36,155,217,168,38,110,91,153,188,234,80,98,71,19,74,111,254,219,181,217,64,76,201,43,1,99,6,135,21,123,128,53,32,157,134,26,72,213,38,234,19,27,229,251,214,84,89,232,109,165,193,143,249,52,194,41,6,52,35,190,212,201,80,142,104,134,140,118,169,106,129,118,150,23,73,136,115,53,109,19,38,129,3,101,156,180,144,228,45,154,126,21,207,25,181,143,127,38,161,37,194,89,179,133,74,46,163,253,146,95,217,244,223,217,181,244,163,180,212,193,178,244,184,180,21,175,252,45,191,24,69,39,82,180,0,49,249,228,94,94,146,53,2,30,8,56,105,58,96,182,107,72,131,124,218,53,138,169,242,214,49,99,14,211,191,118,158,66,204,74,208,213,181,79,128,223,247,74,203,130,110,248,133,79,59,107,168,243,22,156,103,53,194,35,29,111,200,216,156,91,21,50,60,194,248,15,255,109,174,36,132,110,69,76,180,34,171,110,15,144,122,56,160,128,36,190,218,117,183,116,22,232,102,23,63,119,25,49,228,240,103,221,97,49,177,152,99,37,181,31,147,75,80,130,78,224,9,122,244,83,0,251,26,253,161,153,126,109,33,71,129,207,78,163,91,154,62,159,15,213,236,255,77,203,3,222,51,178,211,29,199,26,126,170,37,199,75,2,71,41,237,9,215,73,82,30,180,87,242,80,210,25,111,3,250,186,167,186,73,82,190,155,161,237,112,31,42,3,236,167,152,197,44,38,205,5,201,100,144,143,35,88,247,232,176,150,26,2,118,125,221,118,41,141,31,208,9,31,235,64,255,1,136,208,215,70,236,28,77,35,253,178,65,163,125,135,126,108,254,213,56,103,225,70,62,172,113,14,244,72,60,226,233,204,92,112,175,42,144,143,211,130,126,176,196,183,227,101,12,70,55,85,220,139,136,130,226,0,19,83,16,89,127,103,11,246,37,8,128,78,58,211,175,163,24,184,254,177,154,185,163,104,38,92,84,93,41,80,20,4,236,106,198,132,106,91,165,205,152,17,23,91,126,125,173,155,20,13,42,196,155,220,209,60,128,239,142,140,228,222,28,105,187,19,94,179,158,244,115,41,210,106,67,53,5,36,65,68,182,240,176,102,107,227,194,239,250,34,244,35,72,147,179,74,106,114,90,11,85,244,35,218,203,97,149,75,44,209,246,13,251,129,151,118,45,184,64,90,138,68,212,57,2,4,81,95,180,117,20,127,52,180,187,21,107,112,161,68,86,108,153,118,236,71,82,19,141,113,144,66,182,145,20,65,73,14,104,221,26,24,98,23,18,140,237,151,37,243,154,10,47,32,13,194,202,210,233,174,54,15,213,187,239,162,85,28,111,91,194,195,181,77,63,247,97,10,150,133,63,20,60,88,28,237,158,64,144,102,174,222,12,21,213,45,114,185,243,132,25,151,176,229,230,184,205,159,156,45,215,145,247,248,2,72,203,174,47,69,0,1,88,255,32,63,213,174,7,140,13,195,140,245,33,193,206,228,95,229,221,111,252,225,255,163,44,49,115,134,156,154,103,54,180,148,37,156,62,162,72,208,231,221,159,54,120,161,2,101,143,17,134,117,11,110,247,121,237,44,170,35,234,187,250,52,224,16,249,130,14,158,246,159,47,175,102,183,20,62,139,209,135,218,51,134,123,76,248,179,57,76,32,51,105,150,142,252,204,198,24,235,48,2,53,124,4,135,89,221,79,225,41,251,64,44,226,212,157,111,144,252,22,36,116,195,128,112,252,221,204,29,101,248,223,176,153,244,102,2,102,213,138,221,88,191,250,124,128,70,47,193,57,157,91,11,164,238,237,184,67,187,128,73,228,3,66,195,248,23,211,73,232,69,19,47,88,248,202,146,168,11,158,198,0,111,50,30,178,20,36,68,28,194,48,228,6,227,178,254,244,153,32,91,208,154,159,55,84,134,233,118,169,177,164,116,216,136,175,20,116,246,53,218,101,143,117,247,192,124,85,223,88,53,175,0,104,109,171,122,213,162,4,69,234,37,127,122,135,246,122,93,12,71,176,117,88,253,136,177,82,55,16,33,187,177,66,39,167,232,209,185,135,108,154,82,174,152,183,163,241,118,143,41,225,6,41,203,1,40,106,118,59,20,35,31,110,22,57,127,72,254,133,84,48,11,60,223,83,111,249,110,5,205,248,23,72,227,66,60,154,64,132,208,64,148,151,179,179,58,244,145,90,31,130,228,196,136,250,250,9,34,103,195,151,98,103,92,117,148,174,60,137,60,6,82,93,182,182,88,87,168,110,236,61,1,165,61,188,122,35,70,217,231,64,138,93,201,163,47,22,219,4,2,40,177,229,153,27,118,0,113,214,255,210,225,248,238,201,119,67,62,29,150,252,203,129,48,221,243,247,75,25,120,118,21,47,192,236,41,221,21,110,69,248,3,213,65,151,22,170,47,55,75,75,104,13,243,124,213,39,75,109,47,193,101,23,232,17,86,164,216,58,134,113,31,79,65,226,147,26,208,156,190,91,16,187,133,103,158,17,31,49,3,169,37,29,51,187,203,72,226,141,131,208,139,82,114,247,115,187,251,89,206,58,122,236,159,250,247,44,254,174,135,61,187,40,46,132,204,72,28,199,239,38,64,37,211,238,159,248,205,55,104,64,96,56,46,119,43,215,44,15,96,89,11,180,166,51,63,98,156,115,81,83,128,251,93,42,91,214,127,75,183,61,15,135,85,124,73,215,32,255,240,197,251,37,174,117,184,90,75,155,78,53,63,208,168,105,66,64,240,130,253,100,202,162,164,238,155,183,156,10,16,211,118,45,0,204,139,43,188,65,68,22,9,174,248,96,240,111,155,186,134,61,2,88,182,135,203,65,178,126,213,136,3,194,223,79,1,24,110,219,146,156,7,29,211,232,50,248,167,87,130,38,25,164,10,6,10,143,77,36,170,129,147,176,107,52,10,201,157,48,51,17,220,67,7,191,195,45,70,162,166,8,40,175,38,157,5,248,37,58,145,114,102,229,84,95,28,118,152,127,204,33,117,5,15,17,36,111,219,149,132,66,218,73,138,231,98,186,201,139,195,234,102,111,66,86,96,62,92,29,13,176,63,163,60,134,253,48,73,248,105,28,117,163,245,226,55,7,88,9,160,137,62,34,133,9,197,143,151,229,237,15,172,39,140,111,23,226,229,52,85,210,78,208,146,69,20,226,71,106,78,147,16,179,77,76,39,36,35,149,127,70,161,70,17,23,5,130,63,97,249,54,21,198,127,101,221,154,169,113,236,124,31,219,155,39,85,255,215,241,39,2,208,162,80,13,4,107,29,193,236,46,18,225,80,246,65,255,80,198,167,139,88,161,47,72,55,189,6,144,250,120,82,35,68,224,183,204,117,130,74,176,201,172,29,155,34,199,164,136,68,228,148,145,133,72,215,29,141,251,206,214,61,81,252,18,3,112,86,228,213,20,163,168,128,95,165,22,62,124,10,62,136,100,171,58,37,161,79,205,51,225,245,73,199,74,173,34,112,124,197,137,199,189,89,114,188,236,44,235,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,109,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,3,113,95,99,0,0,0,16,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,179,110,244,26,187,222,193,109,106,79,94,71,173,135,192,1,211,58,27,45,81,71,158,234,164,50,97,40,82,26,125,7,136,175,181,212,14,232,145,7,202,158,176,255,232,149,178,138,74,176,226,59,92,232,56,114,58,143,25,68,107,153,148,10,84,170,181,9,44,52,46,34,174,88,80,143,85,245,96,248,28,248,24,152,148,115,192,26,63,86,61,55,235,26,25,41,242,157,219,105,47,225,91,218,126,216,60,226,18,84,8,5,200,4,114,63,225,87,232,4,52,37,247,115,110,160,165,35,21,208,20,113,227,155,171,240,137,126,178,63,220,71,75,97,140,211,117,31,169,225,250,165,147,65,224,81,179,137,61,27,45,172,75,190,155,194,51,243,86,146,223,104,102,48,26,224,91,69,133,122,40,89,110,189,228,249,26,46,191,121,208,15,108,44,215,248,26,184,67,196,14,65,25,124,255,194,60,202,213,243,173,172,90,210,47,194,222,28,71,28,2,166,28,44,2,0,0,224,39,235,195,135,34,225,114,243,144,208,103,80,186,176,2,3,109,139,160,112,83,64,99,194,229,156,200,0,243,138,232,241,138,183,125,35,164,73,181,137,108,170,224,69,62,103,61,71,94,12,161,145,132,219,152,220,211,74,41,38,121,80,74,27,133,13,80,60,199,209,8,122,95,82,129,157,18,168,158,69,90,93,23,70,239,16,24,157,7,181,207,37,112,19,112,15,227,138,29,66,133,112,188,112,47,101,151,149,30,81,94,96,197,187,78,200,213,173,49,168,67,166,10,30,15,98,36,134,100,20,134,105,18,152,124,151,53,148,43,35,149,83,15,66,213,237,103,179,245,122,58,109,4,174,190,12,40,114,197,101,161,154,234,238,211,40,250,57,231,69,240,56,149,59,148,105,179,52,70,47,129,90,226,175,144,3,3,14,212,83,180,49,248,50,174,80,58,222,217,16,226,183,25,72,1,19,252,6,142,236,225,250,68,166,22,179,179,212,147,32,239,217,75,234,50,167,94,238,115,150,140,44,47,243,85,22,118,194,122,96,172,31,225,121,33,117,240,191,74,67,161,22,0,0,0,7,113,95,99,95,102,102,116,0,0,0,68,194,82,223,29,102,119,10,75,32,27,76,125,128,89,128,28,254,131,181,64,250,230,178,103,145,114,105,114,250,227,26,21,93,102,220,126,14,29,198,105,253,25,22,198,116,84,0,34,68,154,200,240,59,173,44,168,80,180,101,69,243,176,57,51,241,220,191,129,58,243,19,219,172,24,49,61,248,20,98,150,124,118,9,203,195,86,74,166,149,144,105,192,38,213,187,67,99,185,133,191,68,246,197,81,247,241,16,186,139,65,102,134,71,2,169,212,163,152,239,56,7,255,6,201,55,35,128,16,168,83,191,170,23,117,199,20,215,22,143,255,73,18,32,240,224,146,40,227,124,97,25,52,233,126,189,4,37,13,165,11,171,145,187,8,39,197,70,136,233,9,172,108,190,109,21,168,245,149,117,214,16,150,108,82,210,54,176,17,203,22,143,36,43,34,68,127,21,199,186,167,239,32,12,38,230,158,130,248,157,204,39,116,253,14,179,218,174,42,2,172,69,164,133,69,109,43,123,253,115,69,133,72,147,62,76,171,9,155,116,9,154,178,230,73,6,233,120,33,27,247,115,102,204,196,187,2,25,148,101,22,97,194,93,207,194,230,208,4,181,3,41,249,10,53,111,172,155,229,154,57,194,195,199,72,75,69,143,90,91,15,204,7,122,151,55,89,231,245,94,26,147,169,82,230,18,123,24,154,43,60,7,187,43,149,158,245,205,12,43,67,82,91,161,120,98,161,167,88,111,105,155,105,226,32,32,217,77,6,66,96,39,163,208,149,59,102,13,183,175,191,126,67,60,222,226,133,5,47,132,196,218,54,109,195,51,25,177,37,176,58,113,27,130,9,175,30,115,118,0,243,218,198,251,72,168,253,84,143,231,249,1,123,24,235,96,203,110,81,213,57,43,165,47,209,162,74,19,204,129,60,28,93,218,104,139,81,180,138,152,86,158,59,172,207,128,194,35,86,236,199,134,95,210,23,172,224,16,142,126,86,183,154,108,68,67,27,153,52,179,56,78,172,221,86,110,219,47,71,113,13,166,164,19,237,124,152,62,219,141,128,236,193,59,15,91,178,50,168,82,72,62,255,95,232,233,190,25,255,175,39,255,6,41,159,129,203,122,201,6,216,182,204,153,60,129,192,107,205,43,241,188,66,114,121,170,18,105,128,116,197,74,141,183,13,221,190,59,104,36,216,170,28,17,109,200,152,185,83,69,181,163,13,242,50,70,215,90,64,44,110,250,203,248,99,216,166,163,186,23,196,6,90,126,201,61,244,86,106,24,222,87,152,39,18,159,47,52,12,199,190,185,251,176,86,239,242,169,17,228,68,242,30,29,8,22,226,46,20,77,72,71,250,139,83,253,3,203,35,14,48,46,70,171,247,81,207,59,142,140,166,41,4,144,84,38,185,163,90,83,183,205,24,17,190,56,42,142,251,208,75,188,148,62,62,127,132,215,175,121,207,198,39,55,160,79,140,22,64,65,6,151,137,136,49,74,110,105,76,134,229,87,22,207,3,225,231,36,15,138,65,9,45,195,127,200,253,11,143,133,165,127,238,203,5,255,227,225,39,20,165,234,233,235,4,137,236,168,101,211,55,248,242,189,236,44,134,79,78,189,233,54,1,230,140,32,66,228,17,209,210,25,147,103,220,175,83,102,17,45,174,196,74,104,179,134,77,205,157,233,29,165,248,121,116,186,72,146,141,171,194,171,27,167,216,164,57,158,93,167,48,131,117,22,40,94,145,132,208,119,176,37,194,181,29,135,135,6,129,2,150,248,122,83,108,108,214,245,220,52,82,70,95,18,150,96,6,234,25,110,26,36,155,217,6,131,6,81,33,27,14,181,42,232,242,0,5,243,240,172,132,160,24,7,27,24,56,148,147,207,141,59,200,178,151,58,142,210,81,94,38,152,227,129,160,27,117,51,98,206,178,141,18,62,14,241,254,242,93,60,3,31,129,170,74,46,178,46,92,4,166,210,199,108,186,151,170,254,252,186,72,251,163,255,237,39,54,67,32,191,12,254,209,40,93,35,195,126,243,117,129,244,160,73,250,223,234,29,140,95,152,72,117,112,156,188,48,234,54,193,57,3,146,33,5,98,203,191,6,57,173,12,39,62,100,247,8,66,154,222,145,58,149,115,72,139,112,54,73,7,55,225,93,14,233,16,146,12,41,2,73,168,63,203,64,236,106,6,215,60,12,59,125,250,137,157,225,254,150,217,245,115,52,167,96,213,139,239,254,135,17,204,244,89,159,163,42,185,35,235,87,240,183,34,1,114,29,239,124,216,85,84,96,88,57,32,229,163,110,54,101,6,61,158,155,157,95,179,89,116,10,20,32,215,22,190,222,16,227,17,227,84,18,240,205,71,70,175,188,9,110,63,200,22,46,8,165,44,212,114,243,213,164,223,136,181,94,47,232,212,176,78,233,18,158,177,24,78,48,97,184,64,148,99,160,0,93,80,250,178,158,161,17,103,101,79,42,155,60,227,200,145,179,169,46,68,203,200,245,23,93,155,178,198,199,160,94,12,78,66,152,170,121,174,189,10,49,46,181,110,45,60,192,34,121,185,203,95,255,248,115,162,8,146,50,110,107,218,179,97,199,87,57,151,50,52,140,249,219,100,80,252,132,52,254,37,184,229,38,113,241,29,216,209,65,247,60,132,149,146,191,25,49,176,75,144,175,157,86,219,24,87,117,105,19,97,48,40,75,167,135,100,2,72,228,51,11,159,128,104,58,161,231,237,237,201,44,72,104,135,196,67,100,198,212,63,181,160,242,13,248,86,188,4,39,247,60,1,25,185,69,30,224,56,203,37,92,118,3,86,65,97,74,182,169,50,162,137,125,111,168,126,224,152,21,189,40,60,206,212,16,57,104,141,222,191,78,149,143,172,17,79,185,122,50,239,70,162,155,101,233,137,136,129,135,132,246,172,115,121,40,162,89,57,10,227,0,100,142,209,113,215,173,123,85,94,93,15,198,160,167,23,5,168,16,112,187,87,34,93,123,216,10,106,77,188,54,20,215,120,133,79,195,78,195,142,222,25,175,198,18,29,231,67,29,65,42,244,35,156,188,95,63,171,50,149,27,160,5,96,236,91,4,180,107,246,254,40,63,46,98,62,209,161,91,58,13,201,169,133,20,78,54,217,130,173,59,136,5,28,206,60,255,173,74,165,191,32,177,165,93,195,153,211,19,162,83,59,18,133,149,192,210,221,187,37,105,211,219,238,6,32,189,56,111,196,19,51,117,208,124,53,105,69,188,234,112,38,219,93,154,205,3,162,77,112,122,136,85,119,201,227,4,233,25,134,154,112,179,180,106,202,166,195,245,212,16,15,50,64,245,8,151,74,107,239,238,212,129,156,216,53,161,133,3,104,177,180,115,250,213,199,172,150,43,30,178,102,100,35,64,161,111,114,19,6,184,74,58,82,247,202,0,129,61,24,84,236,249,216,126,15,239,22,215,7,127,174,194,104,120,140,34,191,51,185,46,176,226,11,255,24,139,61,250,252,101,20,35,242,18,193,115,129,244,71,0,250,130,53,136,175,237,22,87,3,249,14,103,249,47,172,233,63,133,148,237,205,151,202,95,34,203,82,211,147,113,96,156,3,36,50,128,243,37,111,122,182,52,249,223,13,55,52,196,10,134,13,83,52,247,46,88,220,139,140,46,71,86,171,174,92,145,134,38,81,64,144,44,239,228,211,160,255,38,240,178,49,186,198,31,83,200,125,95,114,75,226,81,72,40,87,216,179,181,152,216,113,156,96,51,204,212,180,119,252,200,111,19,24,175,115,253,128,212,160,48,221,164,239,13,181,27,199,193,180,243,189,67,169,225,123,223,200,193,209,255,189,204,99,51,243,7,166,1,128,212,192,81,245,93,28,154,202,172,194,57,94,130,237,120,142,205,86,178,241,34,46,208,132,233,59,181,91,143,104,92,238,202,123,38,42,167,119,135,77,235,57,76,7,104,221,249,27,79,156,203,190,253,155,71,241,72,194,210,17,122,91,98,182,79,249,30,57,192,225,87,20,205,211,123,241,193,217,136,212,71,26,244,63,100,121,48,7,220,121,55,109,106,97,199,208,100,158,49,22,100,113,72,184,204,156,49,104,119,85,227,78,63,88,63,21,12,139,185,138,235,159,149,84,113,128,30,92,133,44,52,233,45,183,34,216,7,56,130,183,76,235,16,38,252,199,143,151,191,80,173,23,3,168,174,136,104,55,228,14,148,188,35,213,71,248,55,45,77,40,54,157,187,20,48,250,139,6,185,155,163,177,165,159,212,35,63,90,138,96,1,14,116,141,62,59,21,2,30,128,157,205,223,51,205,123,92,122,245,160,231,134,82,122,139,194,139,53,106,57,142,43,112,197,170,182,61,3,29,230,235,251,171,80,157,202,214,224,88,251,10,219,220,162,196,196,82,26,59,208,29,130,201,230,47,242,122,232,34,177,26,12,4,71,233,254,227,111,240,115,33,141,6,24,128,223,206,2,77,185,45,42,16,138,155,51,253,162,109,29,68,141,114,162,96,208,239,236,125,43,73,105,154,120,111,239,223,29,74,153,165,250,188,67,159,46,170,43,195,157,140,47,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,99,95,108,97,103,114,97,110,103,101,0,0,0,16,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,255,255,159,56,104,44,89,83,154,193,62,43,237,248,109,92,140,242,240,222,70,221,204,94,190,15,52,131,239,20,28,0,0,0,7,113,95,97,114,105,116,104,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,70,27,90,38,177,171,158,221,170,147,13,198,54,138,226,204,148,110,146,73,81,119,23,12,222,161,93,246,226,79,8,91,230,123,248,159,182,156,214,49,187,48,5,103,36,61,189,167,16,24,80,140,231,118,215,34,213,39,141,132,202,163,4,137,121,231,101,175,33,111,169,223,62,112,41,6,254,64,71,124,137,233,55,235,17,25,13,176,224,147,137,219,71,205,39,205,168,128,18,254,168,125,116,153,20,98,36,177,85,53,193,1,96,12,91,39,168,140,160,226,193,125,211,156,20,251,43,156,83,222,104,131,2,198,21,93,179,177,226,126,241,208,80,37,246,3,172,255,57,97,165,77,154,69,161,203,236,114,46,157,218,8,34,87,46,68,177,231,199,49,50,66,181,65,252,146,198,17,108,50,21,218,186,139,154,197,176,227,130,39,47,106,66,151,84,171,114,121,237,97,31,241,72,220,186,220,85,94,64,58,151,129,188,248,51,255,32,126,53,119,0,140,28,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,49,96,191,7,137,39,174,246,19,165,44,18,155,104,127,8,254,126,33,186,122,189,160,153,36,244,179,149,126,86,6,110,26,165,25,132,7,96,73,99,41,206,68,207,250,152,219,194,66,88,239,231,175,115,24,137,40,221,42,216,114,123,53,92,27,181,200,242,96,105,10,9,122,15,217,245,201,5,120,46,123,2,222,161,210,39,74,120,128,142,91,96,89,219,147,215,17,52,87,127,221,149,76,100,207,247,91,87,85,151,146,254,102,91,248,116,38,143,157,195,23,71,222,179,13,214,57,105,36,41,106,71,160,31,178,103,146,103,134,20,151,78,81,91,101,115,171,244,205,16,59,254,245,240,9,91,31,214,34,21,41,100,37,247,205,60,199,157,146,169,168,135,71,6,51,242,43,202,145,111,21,132,48,118,253,157,5,108,48,143,203,60,33,61,183,69,168,46,25,168,231,61,234,219,1,134,95,248,25,16,186,159,94,228,220,150,0,84,141,173,176,33,179,126,33,0,0,0,11,113,95,97,114,105,116,104,95,102,102,116,0,0,0,68,97,105,132,245,126,73,66,113,7,136,146,97,207,227,18,118,119,191,135,10,54,163,151,208,249,157,129,159,132,121,115,82,215,137,149,196,15,142,48,224,2,124,174,234,58,246,185,29,105,138,46,82,158,178,15,191,250,236,19,18,102,70,236,60,9,121,148,91,198,82,111,183,41,209,149,137,85,190,69,213,7,180,70,137,29,60,254,157,16,156,47,250,36,48,183,43,116,210,61,120,88,131,114,218,40,115,22,1,250,232,91,124,50,122,89,154,216,162,93,65,18,174,245,24,107,112,64,84,135,216,181,1,33,208,105,102,77,209,83,17,0,7,14,72,153,157,64,76,119,177,178,202,235,66,229,200,141,76,35,34,180,230,75,47,86,82,65,79,103,147,111,32,111,107,1,111,200,107,234,105,172,5,242,8,35,229,192,92,241,118,234,59,201,6,199,122,236,188,113,73,54,192,166,206,63,211,21,102,109,237,171,250,248,105,171,21,234,62,16,2,108,28,125,33,49,103,1,2,147,49,197,224,90,244,183,124,4,87,39,75,118,218,145,114,145,107,167,66,115,60,133,148,192,148,157,10,162,1,14,245,226,233,10,230,41,151,74,228,60,227,7,100,248,238,157,101,255,56,100,86,176,11,13,116,115,91,174,86,30,190,215,153,187,154,202,112,12,134,43,79,240,169,92,135,18,141,204,26,184,70,107,20,75,129,117,193,19,110,229,56,230,29,157,56,207,210,205,50,190,177,137,183,77,23,93,132,95,43,23,53,96,17,140,20,147,9,125,70,203,31,17,11,44,141,187,209,212,247,30,98,35,56,243,66,99,129,53,59,98,249,207,225,90,223,174,234,113,116,207,107,0,3,127,57,226,51,81,50,230,165,14,88,183,116,172,129,118,123,84,4,242,73,9,23,235,220,209,98,160,143,240,219,187,50,245,5,103,211,227,150,201,66,147,218,93,249,209,185,119,70,20,29,204,172,176,26,0,7,49,183,136,65,170,110,43,227,168,64,107,31,125,171,254,104,227,35,79,169,133,76,161,42,112,166,148,153,238,253,34,55,102,199,164,204,10,12,183,80,222,7,131,74,70,71,43,135,143,173,201,139,84,175,221,64,98,146,149,131,148,224,233,121,103,242,124,85,202,243,215,34,170,14,113,89,140,21,207,117,27,154,83,174,84,106,56,124,77,140,123,50,174,19,107,94,148,16,148,145,132,120,54,112,255,35,27,157,223,152,30,150,242,163,233,221,28,176,5,95,140,192,76,115,178,138,68,64,241,163,136,186,187,224,155,118,27,93,12,106,139,11,21,94,39,45,40,77,67,251,152,23,199,99,180,147,22,131,232,198,178,65,53,16,87,237,33,161,149,14,51,230,249,238,35,72,216,199,4,147,18,150,174,212,184,148,139,133,90,247,236,60,23,12,62,9,16,65,45,175,147,82,185,113,142,147,198,255,250,44,161,122,128,2,164,204,62,189,89,40,232,222,202,51,137,126,178,252,82,157,198,1,137,48,224,224,239,67,8,133,255,9,21,147,7,91,113,58,95,62,49,179,182,99,206,146,85,90,146,11,154,52,247,197,225,2,133,22,84,204,245,142,174,103,240,139,182,22,204,236,225,20,196,16,162,0,145,71,11,173,18,238,250,64,24,215,153,57,249,60,62,246,127,216,7,53,27,219,219,128,237,165,112,218,40,138,107,196,136,224,16,248,90,241,13,95,202,29,229,21,229,39,106,132,144,110,252,156,78,177,250,250,166,117,200,112,240,144,68,225,194,21,201,99,112,20,16,138,102,43,14,50,108,147,255,39,209,182,198,165,133,127,27,174,223,62,118,93,197,180,76,140,127,60,6,21,253,154,169,190,140,31,173,5,70,0,103,254,228,222,173,255,209,86,188,16,137,229,203,95,148,177,57,255,20,0,4,158,46,140,113,40,214,144,206,95,62,196,187,91,110,177,30,225,252,26,34,248,91,218,63,254,9,212,60,49,165,17,159,85,107,173,81,163,225,84,181,33,208,28,45,3,32,38,177,193,139,140,118,109,61,212,73,215,158,175,251,134,172,37,115,9,245,100,52,199,198,16,55,32,41,159,208,67,238,11,100,156,175,9,206,87,244,61,51,155,66,62,117,97,213,220,87,200,122,225,160,161,168,36,116,18,249,0,49,135,125,246,247,78,26,233,241,60,119,11,255,22,83,143,191,248,105,24,79,240,55,122,139,206,176,123,140,56,228,134,212,173,48,183,136,109,111,179,245,201,27,37,120,142,2,220,213,15,162,113,202,151,108,105,209,232,59,62,125,33,175,40,120,107,176,208,153,78,99,97,209,74,222,233,26,74,64,114,93,90,166,23,57,175,165,138,159,128,144,124,231,61,13,39,106,83,127,222,250,115,157,121,81,176,210,203,200,29,37,159,10,178,127,96,149,103,253,105,170,20,130,200,192,62,249,41,171,110,250,211,6,222,108,253,142,240,40,57,76,228,74,106,110,181,166,109,174,153,53,198,61,162,204,197,22,85,210,231,110,213,57,221,240,250,28,24,60,16,124,203,158,254,94,234,134,76,183,144,39,83,100,72,153,144,205,195,132,90,81,101,90,210,234,132,246,119,60,9,6,149,111,66,183,137,139,131,130,149,121,149,136,223,62,234,191,155,89,54,8,20,10,243,32,69,225,149,197,161,76,103,59,136,93,215,195,20,97,143,48,62,32,187,66,161,171,119,85,210,16,254,97,75,89,33,101,147,57,128,96,217,173,206,180,246,189,193,249,127,202,109,123,90,202,51,193,185,34,187,156,131,233,41,86,85,1,132,88,187,67,54,213,24,204,141,136,220,171,64,67,46,88,229,16,233,111,175,161,132,16,83,50,160,247,12,64,49,78,232,43,47,94,131,54,2,176,116,20,115,246,214,172,228,233,23,33,201,252,80,150,106,87,13,178,156,76,90,145,58,142,141,146,31,222,188,44,243,111,250,76,85,16,69,223,30,181,176,67,250,235,249,169,69,16,38,208,106,246,225,50,58,206,14,229,1,71,199,23,84,100,67,18,187,53,96,77,87,83,222,75,20,184,58,94,112,222,234,190,239,201,88,41,68,152,159,224,234,21,46,188,231,120,107,230,148,35,106,241,84,31,239,3,59,126,99,46,175,42,139,33,211,42,66,142,90,144,223,85,11,144,52,154,248,61,32,160,123,164,51,68,119,125,224,209,151,36,58,77,187,172,208,161,155,155,45,197,82,201,169,234,5,114,149,99,212,35,181,208,26,253,146,133,103,162,32,216,47,198,151,87,96,111,55,141,250,46,156,208,78,117,110,148,93,236,83,110,30,233,147,196,65,133,70,37,136,134,123,186,146,3,55,169,249,131,210,253,19,96,68,22,61,213,58,62,54,120,252,138,74,99,19,131,21,219,211,159,82,118,47,235,126,91,174,221,179,125,224,123,9,65,147,205,95,243,83,217,30,90,27,100,40,253,251,14,137,140,113,154,75,58,232,175,219,253,93,197,18,118,209,237,56,255,17,33,27,105,69,80,124,58,113,238,205,53,243,214,92,4,13,112,153,220,191,58,209,168,157,35,121,188,17,246,184,201,28,38,71,10,141,233,13,161,127,49,215,31,90,139,70,23,238,162,191,1,249,24,86,144,225,231,170,240,159,227,233,31,191,69,11,121,90,131,165,170,90,222,50,84,214,52,37,53,187,130,161,3,213,187,139,192,34,74,99,188,114,41,25,125,198,90,20,181,164,213,77,70,215,121,157,80,165,210,98,251,56,103,107,19,139,37,204,174,53,98,249,230,87,250,195,144,103,3,77,146,215,146,150,108,155,154,48,190,143,218,128,242,141,31,134,31,104,245,188,39,195,31,94,8,32,1,103,167,66,152,48,147,253,58,149,137,236,157,33,165,152,227,32,73,255,33,45,108,177,147,99,169,115,96,98,56,219,116,115,208,159,196,42,25,80,250,129,140,108,23,15,239,16,41,52,116,68,205,85,169,116,128,197,119,123,89,229,19,179,20,133,93,54,32,43,249,70,88,162,121,191,201,206,213,225,218,223,191,177,86,40,178,246,189,61,108,204,43,255,136,4,211,232,26,198,213,67,132,119,155,121,226,178,134,240,142,249,87,234,197,83,85,177,139,229,29,157,78,156,33,106,104,193,38,5,219,205,208,36,100,128,1,54,4,58,100,124,145,142,119,76,252,3,126,192,56,185,96,47,67,43,163,109,70,146,22,180,239,73,91,81,104,102,179,233,83,43,161,215,152,248,191,105,253,223,154,21,226,250,19,137,46,251,87,219,225,219,165,208,19,99,46,10,242,226,88,105,97,81,104,102,179,202,81,98,75,221,254,138,174,253,247,52,238,170,218,249,57,112,226,212,146,172,18,34,47,103,60,136,168,162,173,192,96,131,224,20,104,122,158,159,69,48,62,134,169,222,43,171,16,107,193,168,24,40,34,11,51,237,98,237,47,161,203,29,57,239,200,86,215,240,157,11,226,165,252,198,73,210,157,197,223,114,180,127,231,177,154,49,224,40,223,250,238,214,232,129,203,172,85,7,159,166,219,223,3,195,164,3,178,135,47,89,54,166,46,121,67,152,222,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,113,95,97,114,105,116,104,95,108,97,103,114,97,110,103,101,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,0,0,0,6,113,95,115,111,114,116,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,31,130,199,23,50,136,57,76,28,175,236,196,110,18,139,39,200,227,87,190,206,82,1,155,34,148,238,243,89,226,59,112,35,32,190,214,82,59,160,71,30,40,123,194,254,163,87,202,42,42,193,138,239,112,161,227,200,233,60,102,16,173,101,82,42,200,45,139,244,145,82,33,192,81,208,39,61,76,32,147,197,252,77,117,111,158,111,227,164,210,80,23,30,79,233,28,22,198,119,110,199,149,153,171,225,216,128,128,149,186,127,185,195,101,98,197,250,23,212,0,163,124,84,121,13,212,228,205,45,218,187,158,22,132,2,130,3,108,171,112,11,234,3,182,80,238,47,195,107,235,89,105,237,36,206,251,67,69,12,117,26,179,176,46,9,219,20,237,136,202,216,196,41,81,217,52,88,18,189,147,104,235,30,105,61,105,71,58,215,137,152,221,14,250,164,22,29,208,33,202,171,53,85,25,159,160,159,205,103,191,98,102,152,92,101,157,144,122,79,173,184,110,197,246,42,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,17,127,56,232,189,11,188,149,39,226,131,244,10,54,93,12,96,121,0,195,178,99,68,181,149,149,177,61,135,144,18,244,12,225,65,41,157,88,85,154,37,105,245,246,122,164,144,105,253,50,151,246,145,69,164,108,239,63,99,203,208,197,232,17,6,57,210,116,251,1,163,192,131,63,160,145,60,252,199,160,98,96,10,12,18,24,214,108,19,87,79,26,195,35,101,71,26,60,136,145,24,146,81,24,166,73,96,242,93,214,80,174,140,84,78,61,8,85,183,159,205,214,235,233,180,17,184,250,50,39,68,97,217,15,243,95,64,37,197,72,110,94,228,125,215,110,40,190,21,203,235,230,202,4,210,53,157,45,66,239,21,78,79,209,230,184,224,244,186,198,151,244,79,247,14,255,207,74,155,237,24,203,38,231,122,192,88,247,9,233,181,134,33,7,91,233,210,195,211,23,152,91,27,160,218,167,72,102,192,157,245,26,233,89,224,178,39,175,80,132,40,4,137,109,5,0,0,0,10,113,95,115,111,114,116,95,102,102,116,0,0,0,68,93,154,143,49,232,95,4,84,143,150,218,210,164,194,121,30,176,103,222,64,154,151,217,150,26,210,132,192,16,5,184,47,243,236,185,8,94,4,65,121,185,228,139,235,134,94,71,58,57,42,232,30,186,28,184,227,128,215,240,3,251,200,99,65,241,169,201,99,141,81,135,27,70,42,95,8,117,27,126,118,215,172,105,206,249,153,60,156,0,237,62,55,177,42,90,82,239,115,99,198,9,194,218,161,32,221,15,172,41,105,81,209,36,19,166,228,239,154,170,126,183,241,35,201,101,139,167,8,78,47,160,144,23,126,184,16,146,194,135,117,68,110,33,119,235,120,68,101,95,146,106,190,189,200,221,128,180,159,133,89,238,154,236,241,134,175,38,255,87,29,120,85,95,39,74,30,190,182,231,177,153,125,156,134,178,186,66,27,35,2,216,81,116,155,40,23,215,99,88,54,186,128,12,137,241,83,134,191,234,11,192,121,91,22,114,249,182,47,197,78,14,8,166,34,119,199,67,90,66,221,246,12,133,115,228,69,120,160,230,6,212,242,151,114,180,24,210,105,166,137,45,214,47,242,211,62,18,95,210,239,62,188,10,147,123,76,162,159,81,46,239,137,234,149,125,198,233,96,39,225,228,213,232,68,138,3,119,94,60,111,72,242,72,72,153,156,123,204,126,125,148,253,126,195,137,114,150,244,19,40,226,132,14,96,108,255,123,105,53,84,140,128,150,200,133,142,28,32,136,164,239,135,247,165,217,199,227,45,245,226,152,40,34,17,142,0,17,59,169,222,52,25,217,7,27,156,130,83,246,171,188,176,57,157,85,166,125,97,181,80,168,105,195,187,182,111,189,195,135,143,21,250,70,58,9,138,159,27,44,125,232,184,97,148,219,13,212,222,152,121,164,249,140,76,212,40,112,176,33,167,27,68,172,103,250,32,171,30,181,101,244,195,236,22,181,144,92,56,209,67,40,149,159,63,166,170,209,57,59,29,119,54,51,222,8,195,56,93,115,55,249,115,196,214,240,140,152,239,151,202,249,179,89,93,236,184,163,122,13,159,127,108,87,64,168,35,172,110,66,37,131,35,94,164,112,14,178,167,137,144,131,135,182,255,164,13,84,118,210,50,155,9,109,241,121,86,54,213,153,203,174,59,56,143,11,197,51,51,60,159,196,22,177,69,79,71,29,172,79,48,13,142,41,37,32,230,85,19,149,172,176,82,156,43,225,147,137,172,218,192,218,181,244,131,207,116,41,199,32,245,187,109,240,211,2,153,5,149,176,147,240,49,97,13,139,28,119,215,28,196,243,25,102,216,39,26,100,61,63,86,186,228,160,43,106,11,10,80,246,95,233,197,56,51,201,226,130,17,125,195,156,245,97,192,230,211,53,241,116,226,118,181,166,18,52,34,238,171,35,146,100,15,105,200,138,64,202,164,52,89,247,212,81,221,196,244,33,227,44,1,255,154,157,167,41,11,254,70,33,110,242,94,99,74,16,83,193,200,139,132,165,6,239,55,40,57,225,208,223,44,142,141,251,220,168,97,173,155,58,83,43,241,197,51,180,145,17,109,111,128,218,135,205,68,202,37,111,35,42,196,12,228,186,80,85,139,140,34,20,20,17,184,14,74,193,201,169,14,249,56,225,236,49,16,77,3,30,29,228,9,151,41,15,118,185,79,163,105,192,23,240,154,247,131,188,60,187,55,36,173,52,153,195,54,169,53,220,92,113,214,202,14,60,66,101,222,74,203,211,22,213,182,113,70,15,240,211,16,7,238,190,162,236,43,56,133,20,141,30,4,53,74,19,224,183,169,91,196,13,222,134,155,171,234,159,97,139,116,145,225,81,180,86,4,254,77,143,181,113,240,203,47,128,226,209,222,152,97,198,38,196,124,210,72,127,111,186,166,24,23,58,32,48,83,154,150,39,247,63,186,199,87,1,42,119,80,40,154,37,35,110,187,215,99,187,76,124,13,39,149,155,1,191,241,239,42,254,70,211,16,222,195,74,191,212,46,181,51,120,89,120,154,119,217,239,231,174,165,61,190,43,160,203,193,77,155,66,235,67,14,143,6,238,133,134,14,248,0,230,199,105,51,33,165,62,34,201,212,133,47,63,98,183,155,38,70,3,99,249,158,67,152,70,12,99,143,211,55,215,91,138,214,205,17,176,86,179,86,83,209,122,75,172,160,6,144,166,220,161,248,163,168,138,76,216,41,172,33,208,15,207,23,172,22,105,179,198,212,68,83,135,149,16,251,154,62,48,214,230,159,230,103,253,152,123,52,31,195,59,145,185,101,131,57,217,52,62,32,39,26,29,127,9,109,157,88,181,38,94,52,120,35,115,205,228,227,57,94,207,63,72,172,131,8,133,42,191,173,16,176,21,164,28,253,150,225,13,126,129,38,174,183,161,118,28,124,221,216,105,102,204,190,143,81,11,206,41,74,49,38,121,50,204,254,46,132,104,157,254,204,210,184,247,142,17,1,86,2,172,137,76,127,211,175,220,253,247,223,192,2,85,90,85,41,149,147,52,122,80,134,42,69,211,184,53,66,135,79,36,198,133,29,89,21,160,97,224,54,16,43,16,43,206,249,84,136,189,86,147,184,132,36,133,87,171,182,42,76,97,190,7,94,101,92,38,143,61,78,56,154,246,125,226,67,252,144,224,65,245,115,186,98,241,30,162,202,185,28,47,169,248,183,98,110,77,92,211,224,211,154,4,204,37,229,204,36,180,116,73,241,44,225,91,77,226,132,240,56,34,133,141,165,25,49,126,64,252,241,142,65,88,6,148,137,236,248,197,86,191,222,154,169,177,72,132,19,155,173,104,212,228,217,139,27,136,67,160,231,125,218,107,251,62,189,233,45,96,66,162,23,222,129,186,99,106,206,83,4,121,26,86,54,69,85,63,60,123,149,236,55,3,26,109,155,152,13,148,191,193,34,167,60,146,5,166,117,27,140,237,150,116,202,148,91,121,226,213,35,28,203,48,223,74,148,213,89,40,29,90,7,197,43,252,41,140,66,128,84,64,208,111,166,145,45,223,216,140,69,74,239,175,196,87,206,89,84,235,219,161,235,49,236,94,160,64,87,223,165,119,63,188,165,40,162,205,158,133,168,36,203,51,15,243,43,108,213,132,79,149,71,245,150,129,161,243,47,101,13,57,181,230,254,14,219,151,2,188,161,63,167,90,168,136,255,11,227,212,96,93,60,210,246,200,121,228,84,196,150,178,71,7,242,93,108,44,138,239,120,114,82,49,116,158,255,83,112,199,205,79,186,199,205,99,100,199,121,149,32,222,202,83,64,253,151,23,201,157,220,172,184,6,151,231,202,79,109,43,17,123,53,26,99,51,18,237,70,227,157,115,148,253,50,111,9,169,128,109,249,153,144,207,238,221,111,119,3,101,224,174,228,161,221,123,168,146,253,97,20,72,91,7,95,10,199,238,67,238,45,195,160,75,146,207,133,36,67,184,179,82,178,8,54,30,250,161,79,121,126,53,67,81,35,74,107,188,193,47,25,125,35,24,105,200,6,145,130,203,31,17,97,107,158,102,173,67,145,75,69,234,128,225,191,217,152,152,40,28,209,248,92,189,0,139,162,75,136,7,59,128,158,76,99,144,95,132,231,32,163,2,178,95,13,200,246,136,27,245,47,206,133,249,16,109,74,213,79,169,225,0,26,10,98,229,178,179,110,150,149,83,103,78,213,252,130,42,184,85,255,235,249,240,179,72,63,243,187,112,67,62,4,124,14,194,216,127,119,108,37,21,54,8,6,109,169,237,207,112,245,228,97,171,222,74,79,1,28,31,92,232,152,204,20,60,77,7,25,76,249,164,173,88,65,14,42,227,58,167,191,178,219,59,45,167,44,1,51,237,11,42,137,101,61,39,130,104,236,38,120,218,18,39,247,102,173,143,46,220,56,217,207,146,28,11,105,159,216,97,207,32,35,184,166,39,218,82,229,56,247,237,26,0,143,195,62,61,138,43,101,9,53,250,161,112,67,137,208,12,115,154,100,147,26,185,220,137,134,188,195,184,249,230,228,93,159,124,236,3,23,120,88,69,95,227,39,206,15,204,105,12,199,36,134,79,54,189,209,45,159,231,181,169,128,133,51,238,94,96,147,105,140,89,85,19,154,151,68,229,3,40,171,220,79,37,168,214,0,36,188,171,42,193,165,143,127,110,184,177,128,184,6,8,136,27,31,164,228,96,153,175,223,64,21,44,116,18,50,160,83,231,232,11,240,17,95,41,39,106,76,68,132,136,70,144,43,196,30,30,40,156,132,100,35,220,162,208,104,237,75,212,80,113,178,203,113,21,147,189,219,96,92,86,196,199,86,216,35,125,9,204,87,247,65,194,70,62,198,179,167,111,17,190,22,136,132,9,191,154,89,99,237,253,196,36,177,103,247,147,139,81,208,224,195,47,62,195,67,137,22,147,4,0,154,239,1,186,144,91,4,137,74,4,251,229,32,188,218,240,38,53,109,239,16,247,122,50,238,195,42,23,228,148,54,94,192,53,8,192,23,239,171,81,222,153,240,45,154,77,96,246,61,209,61,172,26,180,71,102,129,26,171,25,173,196,215,150,153,7,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,113,95,115,111,114,116,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,214,255,255,159,186,181,237,220,42,136,147,7,28,228,123,103,183,128,199,192,14,144,212,194,39,185,219,13,39,33,139,15,0,0,0,10,113,95,101,108,108,105,112,116,105,99,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,47,114,192,90,60,84,67,221,174,32,46,47,158,98,130,31,247,200,204,53,136,15,80,218,56,92,4,230,236,193,47,197,27,228,149,49,189,66,148,16,34,141,202,154,126,152,162,35,112,79,25,124,13,159,21,0,2,135,4,115,178,98,178,156,47,129,147,28,51,228,124,37,248,91,202,204,196,85,132,69,94,188,247,99,61,146,221,127,249,236,58,218,1,121,134,224,24,190,70,92,140,153,148,247,10,135,124,229,140,123,193,9,158,108,12,253,24,82,186,36,237,236,70,67,102,152,102,60,15,85,147,114,157,111,197,249,50,181,100,112,46,85,202,191,208,212,63,219,56,187,115,2,29,223,223,46,52,49,154,170,17,202,134,84,224,242,240,119,164,62,90,17,155,168,229,91,220,238,11,151,230,90,110,72,120,112,148,224,222,162,252,247,46,153,121,185,36,165,232,74,16,184,35,142,148,130,89,186,10,0,217,18,139,154,0,157,116,95,145,118,215,127,138,60,36,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,49,143,63,165,179,63,178,4,149,112,66,138,219,229,101,20,49,148,139,75,249,166,245,117,127,205,155,75,244,176,30,159,20,30,106,206,34,229,86,179,101,149,22,216,116,248,45,68,224,106,151,134,245,205,117,160,110,204,59,240,15,131,234,43,49,128,108,227,188,175,120,188,75,53,166,236,180,242,99,238,201,160,96,29,68,36,104,208,190,60,101,87,223,249,199,131,23,67,185,163,99,250,96,234,56,10,244,211,236,204,38,42,138,240,75,132,104,100,139,43,203,60,89,238,122,218,231,39,33,172,108,141,82,36,48,232,16,220,11,73,75,243,29,116,87,136,24,166,72,251,209,77,155,74,192,2,173,65,180,185,30,56,121,171,255,52,250,75,227,227,134,97,88,232,234,11,116,203,164,107,28,18,29,88,248,226,171,130,227,66,160,208,49,104,134,70,203,238,12,151,51,217,76,43,229,197,142,121,29,93,127,110,246,27,69,179,67,202,14,187,9,243,195,39,12,0,0,0,14,113,95,101,108,108,105,112,116,105,99,95,102,102,116,0,0,0,68,169,141,193,177,252,167,249,183,151,115,219,154,20,114,92,17,201,181,138,249,177,228,210,142,109,8,8,237,29,163,212,71,144,42,209,95,62,115,18,235,136,102,158,33,244,234,72,74,0,86,179,112,118,192,192,162,55,182,202,110,60,86,6,7,47,223,66,146,12,253,123,182,124,225,51,154,218,97,71,192,102,183,6,56,130,36,186,120,155,150,0,2,57,230,152,86,109,226,47,125,253,88,146,222,214,6,201,240,87,19,130,16,149,0,107,177,4,247,137,165,243,163,110,222,160,6,201,15,54,53,180,158,23,32,4,28,230,53,52,47,142,197,170,223,101,173,74,239,171,106,171,115,140,169,226,6,98,202,6,16,75,46,42,220,72,13,34,12,150,12,220,228,20,126,236,3,80,171,3,7,4,217,51,141,233,217,197,85,145,199,199,55,226,174,13,2,136,117,50,219,136,88,81,125,75,42,93,131,57,97,55,168,75,54,120,252,152,5,5,168,214,161,200,14,101,64,140,51,9,2,48,147,118,191,30,228,71,9,150,4,221,195,153,79,203,30,198,181,182,206,231,75,209,171,86,28,243,170,204,225,205,160,145,112,85,201,110,59,193,49,236,104,51,154,107,221,226,245,231,86,109,232,7,244,235,129,200,45,34,125,145,40,244,128,89,42,49,125,152,86,218,0,161,63,79,60,231,176,132,4,6,193,209,123,143,45,255,160,37,22,158,80,169,121,32,27,17,198,97,81,202,181,218,206,238,212,206,127,20,64,135,144,110,175,180,240,11,211,183,161,141,52,211,104,158,129,172,233,22,213,48,72,240,199,206,245,114,64,99,215,43,133,206,68,83,46,6,232,32,4,23,1,31,11,74,123,19,33,31,78,137,199,219,216,95,128,165,125,197,99,205,109,238,5,56,37,116,175,0,232,120,112,211,42,13,31,128,194,107,120,91,160,85,64,149,152,194,49,48,213,185,152,112,134,106,111,231,134,196,91,54,1,135,229,254,61,186,86,98,94,120,120,25,43,252,104,230,211,254,79,166,91,37,34,68,7,233,58,129,190,65,109,124,76,220,116,137,109,41,72,243,231,233,62,39,148,51,99,100,120,206,42,146,40,70,160,251,67,156,40,170,144,124,138,57,133,106,251,161,7,255,48,30,1,173,77,6,196,65,239,11,201,173,180,240,7,109,121,252,125,77,62,24,228,147,234,150,21,246,224,147,142,171,0,94,198,26,116,215,207,251,103,242,182,235,13,78,75,242,246,196,168,191,223,34,137,236,40,75,18,58,221,177,51,116,74,102,114,160,186,228,27,239,251,126,203,71,52,16,30,88,166,32,156,7,29,194,34,255,194,171,18,198,181,240,200,191,25,236,91,80,190,241,94,246,195,1,169,175,114,248,26,219,91,64,15,123,16,214,248,30,30,92,29,221,187,91,136,28,70,151,15,252,230,163,103,228,235,245,127,79,215,226,65,201,153,70,243,150,13,62,25,10,67,161,81,49,127,94,13,235,61,236,62,77,238,27,20,22,215,192,188,24,142,158,162,245,107,80,144,255,253,62,125,164,66,143,238,113,75,49,116,15,35,132,10,221,91,222,212,119,51,63,15,11,120,20,149,189,20,89,145,113,84,66,55,187,122,55,152,98,83,14,237,1,40,192,160,32,7,7,161,5,110,178,52,211,161,57,68,243,135,211,185,177,65,179,68,60,64,18,52,133,83,21,51,200,19,64,49,164,2,101,161,151,85,51,135,48,36,239,88,109,178,98,155,63,164,199,8,93,184,142,157,234,154,91,35,250,46,124,179,21,86,6,219,91,246,5,68,157,60,28,95,231,188,63,36,84,142,0,165,255,105,205,211,179,0,235,11,235,71,208,30,172,250,203,45,159,171,92,204,236,49,111,189,145,187,251,89,65,36,150,157,109,137,12,246,135,177,192,130,65,47,134,90,109,203,60,38,88,219,100,254,137,229,52,108,210,172,218,12,39,192,4,249,231,230,242,6,128,120,2,225,187,58,45,58,167,206,114,63,253,145,181,191,195,1,105,149,120,43,133,83,201,224,133,200,122,77,154,3,80,76,53,252,160,67,226,0,215,101,150,1,157,83,245,122,43,186,80,96,7,145,165,172,66,174,143,222,15,33,176,53,106,216,247,227,6,67,91,145,7,24,33,68,145,112,89,207,123,182,175,122,250,23,36,194,85,215,74,236,7,232,8,71,149,109,45,222,175,14,130,57,214,129,41,106,158,223,128,96,79,151,146,58,16,69,18,32,164,85,248,46,51,247,151,11,252,51,170,249,229,88,117,251,69,118,77,116,102,202,41,93,51,110,203,86,23,190,56,181,114,24,97,93,71,203,237,179,220,166,56,110,45,90,118,195,18,244,182,129,90,193,74,91,77,67,18,128,118,107,36,216,78,122,249,214,240,113,129,74,182,54,40,67,23,41,249,74,200,26,27,139,252,243,37,36,218,10,117,3,56,108,226,70,115,181,151,157,204,40,28,82,213,99,14,15,213,93,159,5,128,88,139,236,13,191,191,240,187,97,192,254,91,241,61,2,248,109,164,21,210,4,186,105,253,112,106,127,51,18,8,153,95,53,250,62,158,160,57,37,228,224,146,7,189,191,68,12,41,170,95,57,31,175,15,192,203,37,82,225,119,88,27,163,28,242,169,199,32,237,134,170,25,199,44,12,59,42,201,98,110,219,251,164,197,128,25,94,236,20,145,90,52,17,74,163,114,151,136,98,22,245,53,221,49,67,162,65,37,70,14,75,205,135,96,173,152,109,14,183,45,170,208,144,108,73,151,58,206,92,122,16,113,158,96,241,44,126,42,210,3,196,4,119,196,116,132,94,227,17,236,40,205,143,122,20,163,32,25,210,49,188,8,208,244,49,91,201,213,129,183,81,160,197,228,37,201,189,250,136,158,100,44,87,161,206,67,204,240,31,68,198,90,232,57,192,210,216,158,7,153,104,182,164,67,94,104,142,182,154,102,53,252,246,194,248,248,239,160,157,34,35,220,74,16,119,234,217,106,245,105,234,100,189,209,177,229,48,186,184,224,69,83,86,240,130,215,184,237,119,190,62,146,25,155,154,102,69,38,249,233,126,185,128,205,76,146,193,32,22,125,220,73,64,44,2,146,39,217,253,215,113,192,95,30,21,224,139,195,96,190,151,110,90,225,103,240,236,92,64,115,218,97,84,191,60,50,123,162,222,252,212,90,131,206,95,156,74,72,176,233,119,36,186,137,240,210,170,238,81,155,252,100,3,140,242,201,129,55,80,250,135,5,93,206,64,8,206,106,78,254,138,58,236,220,41,25,77,175,132,163,107,93,58,152,138,170,85,143,193,84,20,57,13,217,77,166,60,59,5,39,77,189,48,155,202,102,78,75,64,54,191,245,26,32,87,10,84,237,213,217,171,215,238,147,39,130,114,144,109,170,199,251,21,172,147,219,16,250,1,130,103,173,167,157,40,175,194,214,70,121,143,246,25,182,63,176,217,197,207,255,176,144,205,110,40,236,39,59,0,37,238,117,40,106,93,31,129,11,1,243,233,49,44,4,125,117,133,171,228,218,167,236,224,55,58,89,74,214,96,220,128,0,43,191,255,23,45,21,23,230,74,188,27,5,209,84,154,230,110,15,115,51,251,151,235,101,162,162,85,186,243,207,3,98,196,211,146,240,39,46,221,92,203,40,207,3,93,7,95,202,167,253,91,38,123,106,76,103,25,243,40,113,211,222,145,174,200,214,214,163,73,202,216,254,82,196,77,166,37,10,238,198,207,0,239,17,50,14,38,201,219,91,13,164,103,5,154,172,203,65,163,203,58,102,33,171,40,190,214,184,18,241,115,9,102,131,70,18,231,147,143,162,177,219,67,80,58,18,25,155,10,223,188,152,219,128,80,66,196,58,129,167,182,24,65,29,94,97,202,75,142,152,60,36,36,208,75,144,155,108,37,145,247,1,250,220,142,153,122,228,206,184,35,46,234,43,253,239,251,46,36,196,10,160,162,160,31,74,78,80,24,91,153,129,157,115,176,113,115,18,36,3,237,221,116,123,216,253,250,40,228,189,90,0,195,199,3,27,237,12,55,246,139,19,253,79,158,21,238,189,244,42,18,48,37,62,213,132,153,103,127,5,77,208,97,198,124,124,239,7,105,123,67,168,51,1,88,175,159,144,173,51,55,235,83,107,19,239,100,208,246,119,192,177,105,125,31,212,199,24,82,27,17,226,69,2,102,13,204,126,222,198,12,231,34,145,176,209,251,160,5,238,92,79,122,121,146,58,110,233,170,173,175,83,194,50,0,191,40,5,162,197,6,185,206,218,249,169,173,151,228,76,35,161,95,149,114,127,129,144,216,0,11,132,64,207,73,137,19,26,181,234,6,98,186,241,238,46,206,2,33,157,94,58,229,184,66,222,61,172,235,139,36,132,25,87,230,178,219,145,50,211,2,231,8,157,65,48,241,0,42,24,203,77,162,54,97,176,77,248,44,248,229,168,18,227,88,126,7,179,1,236,93,182,250,108,1,244,46,233,38,81,108,228,56,36,149,35,117,71,237,167,13,38,70,221,111,105,2,90,240,227,239,191,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,113,95,101,108,108,105,112,116,105,99,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,255,255,239,214,233,131,137,84,85,244,166,177,90,120,158,229,198,64,57,126,51,67,41,87,152,227,167,232,152,149,29,0,0,0,5,113,95,97,117,120,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,14,98,185,157,70,32,77,110,65,146,111,153,205,178,121,23,38,174,65,173,65,204,158,25,79,36,26,216,127,161,35,26,20,167,109,140,55,182,146,247,225,96,169,185,132,68,5,73,141,23,25,236,169,22,68,204,130,250,43,78,115,165,176,130,4,58,249,173,113,54,167,41,48,102,196,113,76,95,232,247,246,123,161,82,11,134,75,28,78,7,37,157,229,162,35,164,27,183,21,74,65,49,133,37,120,198,232,3,254,132,235,141,160,208,14,182,184,66,230,152,239,134,217,62,160,207,54,15,33,208,106,70,36,91,136,113,98,254,29,112,81,192,144,201,80,187,79,243,5,139,141,155,76,153,241,97,36,29,40,224,8,224,92,122,199,118,215,32,124,33,107,164,146,183,9,79,56,110,2,25,227,19,120,215,250,77,65,85,5,73,18,174,30,56,78,92,44,122,175,203,116,58,242,2,138,100,19,167,173,64,79,191,125,216,155,156,88,68,211,63,246,144,79,130,29,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,33,159,70,98,169,115,168,115,2,255,0,32,172,149,110,28,2,175,22,212,63,234,166,54,105,5,134,89,97,209,42,74,28,90,146,115,184,221,98,234,97,48,199,255,244,3,227,234,154,69,63,149,215,159,1,132,53,47,116,227,109,205,157,225,43,199,6,82,126,93,78,184,19,43,172,71,45,233,255,59,49,225,182,46,118,48,250,51,106,34,123,148,251,207,42,192,20,74,234,181,174,98,112,188,203,202,135,181,123,195,252,165,135,140,73,203,200,115,95,183,200,162,198,242,64,163,23,85,15,49,149,185,203,56,109,112,225,146,82,73,40,136,87,106,215,161,8,142,123,43,184,180,107,144,174,207,188,85,38,132,39,33,163,133,40,29,30,193,199,111,5,21,231,144,222,228,239,238,85,104,158,162,205,120,189,219,94,220,219,41,60,182,17,201,177,163,195,25,70,22,207,86,126,182,239,227,212,140,122,28,9,194,3,222,169,179,95,229,204,241,234,225,254,225,18,0,0,0,9,113,95,97,117,120,95,102,102,116,0,0,0,68,245,128,243,49,17,240,238,27,160,80,220,98,132,33,63,4,226,3,55,178,201,49,204,134,192,62,139,25,43,65,241,95,47,104,232,150,70,205,167,228,122,201,35,75,242,71,178,170,129,50,129,197,159,239,105,210,65,213,7,156,99,128,113,45,109,20,188,192,139,168,112,81,179,152,8,44,64,168,16,10,246,193,163,161,10,175,55,85,54,64,194,204,192,161,215,90,236,80,252,35,133,229,43,95,30,161,59,175,206,165,230,119,98,70,177,255,207,152,185,132,89,246,234,212,78,208,78,71,32,59,200,140,63,173,19,175,92,138,83,220,104,237,155,152,154,146,83,124,101,206,140,153,174,202,74,79,245,145,80,39,168,193,103,198,10,107,29,25,212,251,63,116,202,212,142,233,225,159,31,92,110,52,203,147,32,249,72,144,255,140,183,29,81,194,242,220,204,124,238,195,232,160,79,235,237,232,103,111,229,14,48,88,242,155,206,183,164,123,118,226,17,138,79,43,85,185,212,236,247,17,45,161,138,236,203,117,168,66,173,82,160,69,158,47,79,176,90,114,26,84,5,132,88,2,162,90,214,246,198,179,132,112,220,213,81,39,174,202,193,5,81,152,54,79,92,247,72,22,73,61,73,59,138,101,51,157,226,93,10,139,218,62,199,164,221,63,9,15,37,35,177,212,42,12,207,182,58,112,98,108,202,109,232,215,21,30,104,117,222,56,176,32,188,42,187,167,5,108,59,254,164,227,189,247,3,226,185,209,51,157,117,248,186,77,219,224,6,107,198,100,230,79,207,201,33,71,254,106,251,133,199,192,25,230,216,21,208,111,203,14,178,163,70,89,144,93,162,76,29,59,254,164,191,60,139,108,135,38,18,31,42,214,85,29,228,242,118,28,242,77,246,225,79,191,155,33,120,174,223,40,214,156,250,237,31,29,84,102,34,155,46,135,220,37,228,47,111,177,70,126,23,116,228,116,173,178,70,142,253,225,203,43,169,11,130,106,215,31,80,133,247,140,218,137,37,1,163,71,172,91,10,27,189,190,62,253,172,121,62,152,179,181,119,184,222,228,243,29,172,58,99,172,117,217,221,25,181,30,63,96,25,206,109,81,231,50,163,17,102,30,185,23,140,35,249,179,158,33,170,67,79,38,5,115,78,198,108,74,41,131,228,235,99,157,218,176,240,110,6,36,15,112,189,232,87,167,1,184,136,246,233,24,31,6,218,248,171,75,64,233,58,214,94,121,78,45,42,231,143,208,112,139,13,106,140,51,131,4,188,240,81,167,143,11,249,71,86,13,36,161,105,19,90,99,103,237,228,164,41,206,41,144,253,100,38,176,48,59,88,222,151,255,132,25,139,253,96,82,91,244,3,135,129,253,5,180,205,96,234,2,122,128,15,165,76,252,7,117,136,95,217,44,79,114,47,55,237,107,4,51,53,74,166,16,91,239,226,108,156,29,45,32,151,11,1,216,212,238,9,170,28,72,16,203,222,15,62,115,75,249,103,20,233,69,114,163,86,87,76,129,243,235,53,63,148,227,61,60,102,205,211,10,184,198,148,243,12,112,116,22,136,96,81,1,61,239,74,164,254,239,0,63,50,93,7,235,83,31,51,237,67,18,83,221,12,95,124,46,76,87,178,216,119,123,82,28,101,36,93,212,50,249,161,49,95,107,47,71,140,41,146,237,198,248,42,203,206,34,69,252,108,175,219,19,218,27,225,91,15,140,125,246,141,0,202,204,27,67,141,49,9,251,104,30,182,70,171,55,136,35,251,205,48,15,157,176,162,185,213,89,195,28,24,204,84,12,92,40,254,169,179,221,140,211,46,24,244,211,22,59,175,149,168,207,156,89,216,75,100,39,10,96,32,91,134,22,255,249,119,48,245,27,7,27,95,11,105,208,222,156,72,40,252,231,64,124,241,244,207,168,185,173,129,52,148,100,178,12,192,51,96,183,96,40,159,4,165,226,73,156,188,191,13,13,99,129,129,206,232,92,240,75,71,180,62,22,163,64,214,99,69,249,190,194,88,182,101,106,3,156,93,102,132,52,66,35,92,26,17,28,82,192,78,80,254,76,129,37,223,57,68,136,159,83,221,200,178,145,138,190,170,70,139,174,129,107,3,123,220,99,44,98,67,255,162,2,143,222,154,90,45,76,65,14,38,39,81,206,240,61,54,155,251,60,34,200,254,255,138,55,168,117,213,59,99,4,176,154,253,250,244,53,86,92,67,112,100,20,52,228,87,74,27,64,249,101,136,99,131,239,94,64,134,57,74,73,189,19,89,20,181,240,127,23,15,194,77,236,75,227,235,141,39,108,86,144,80,182,104,247,62,150,111,96,112,75,180,199,184,231,13,223,7,55,13,41,45,217,20,56,88,95,152,133,254,212,140,8,163,217,62,31,167,57,129,120,21,213,119,125,54,214,220,27,69,184,4,8,191,111,23,35,66,44,6,220,192,201,66,85,134,125,16,249,248,219,141,101,22,38,172,97,17,180,106,7,63,161,32,88,234,176,170,119,21,59,201,71,192,203,6,248,245,44,182,200,81,13,77,151,121,83,155,172,253,17,76,140,55,34,187,41,64,56,106,2,15,60,229,0,204,68,208,118,233,135,231,226,109,169,71,243,236,138,119,94,142,241,251,238,199,167,68,12,60,181,88,130,134,6,75,255,62,23,4,183,48,204,174,251,83,190,124,75,23,121,88,145,178,97,55,32,226,108,100,94,223,209,155,77,80,238,238,88,248,196,185,211,217,21,137,190,165,12,155,77,14,35,82,225,154,199,149,233,65,218,174,11,111,150,1,16,67,216,93,41,38,53,241,39,112,202,123,108,129,170,232,1,139,226,90,40,153,148,176,241,148,230,163,41,84,34,169,20,167,209,149,95,61,120,85,205,41,78,1,79,78,182,165,67,242,247,207,45,192,160,174,221,197,117,58,3,246,134,15,91,88,244,183,26,201,68,157,117,243,102,177,152,180,81,60,86,130,214,34,148,93,212,151,216,124,15,73,28,46,83,160,121,188,206,41,204,100,136,93,149,167,238,232,194,126,93,108,192,185,227,149,154,96,198,12,198,3,122,172,60,87,143,85,75,144,76,171,91,165,98,21,241,255,183,13,29,7,141,39,171,211,180,142,7,189,100,46,66,141,143,215,28,135,98,160,194,109,84,69,178,6,46,161,50,95,216,93,181,183,197,169,24,7,186,114,198,48,48,209,177,216,40,134,77,136,110,117,147,136,244,65,36,162,146,242,181,79,17,66,110,243,190,194,199,240,140,64,243,25,160,213,127,191,130,29,44,254,125,93,31,136,129,163,157,198,1,166,146,34,31,209,219,124,29,131,158,191,208,52,27,165,93,167,3,6,137,122,96,211,224,200,123,91,247,138,25,177,239,230,37,108,158,205,19,243,126,58,178,137,107,102,171,15,202,124,62,48,101,209,72,105,249,243,144,20,124,82,5,165,155,201,35,195,234,112,47,119,204,201,98,60,187,218,183,16,220,131,21,242,138,73,7,90,44,94,167,237,223,120,138,119,42,116,39,99,123,75,254,194,110,59,51,74,68,37,81,178,22,15,184,224,84,85,7,236,192,45,143,249,236,208,248,251,105,177,93,98,125,88,215,209,245,34,254,73,255,101,198,96,250,165,3,165,211,30,9,7,157,202,183,26,167,166,11,215,237,118,7,6,40,187,8,180,82,192,232,151,204,208,255,246,246,232,158,221,126,157,18,241,234,76,192,70,120,245,38,168,155,135,45,34,81,219,181,254,245,169,53,13,91,49,89,146,66,212,47,45,5,127,95,39,115,34,187,100,151,131,113,109,123,13,86,32,211,187,27,169,74,252,169,254,128,179,64,149,96,29,48,94,147,1,27,117,235,190,4,123,157,115,73,121,206,109,20,21,169,218,44,98,230,211,199,170,166,223,191,98,19,96,191,115,42,27,68,103,144,177,128,59,20,233,184,58,146,121,236,188,118,0,149,211,22,205,67,47,16,157,76,213,164,1,241,51,140,156,81,231,83,44,172,70,119,46,103,252,1,199,168,137,237,183,210,126,88,182,150,110,160,173,165,52,28,131,64,17,84,202,55,45,70,249,122,144,155,189,211,211,212,244,209,110,230,170,205,245,44,185,97,6,202,26,79,17,14,185,204,4,141,87,37,44,171,86,133,157,153,145,219,248,181,36,39,30,32,214,65,133,206,75,156,2,58,75,95,103,122,5,48,36,240,35,56,32,227,14,120,167,62,10,190,23,75,10,74,244,105,77,88,47,164,4,81,122,113,1,226,115,147,31,154,18,36,190,64,13,159,62,210,117,122,180,193,84,151,253,150,103,114,193,34,197,181,94,141,7,193,94,106,195,79,84,217,46,130,84,16,171,229,203,94,149,37,158,172,206,102,39,23,138,221,172,22,195,92,90,54,114,83,4,77,85,124,233,230,242,206,207,50,233,116,114,61,245,87,182,27,104,225,71,78,209,100,156,220,89,129,117,90,154,12,157,209,49,237,210,52,175,87,117,34,174,221,234,54,190,106,252,228,150,31,238,4,227,188,221,252,156,112,158,214,82,150,64,165,12,152,82,203,22,227,64,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,113,95,97,117,120,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,255,255,63,243,29,26,54,126,34,85,70,71,209,116,213,19,13,186,177,237,214,177,143,134,119,235,65,170,16,160,43,0,0,0,7,115,105,103,109,97,95,49,0,0,0,16,42,138,78,31,22,241,9,27,63,151,72,223,65,50,93,49,40,171,194,239,223,218,171,125,10,0,226,179,6,7,102,41,155,136,1,7,211,5,170,102,131,52,185,14,21,191,60,88,67,42,202,21,70,244,63,41,251,79,73,87,126,191,118,21,236,229,182,148,147,138,148,82,191,204,22,211,79,0,147,87,36,32,196,108,110,188,170,29,179,102,253,179,4,43,33,39,172,50,51,21,171,80,254,181,221,56,210,138,244,34,204,78,237,74,178,11,244,124,6,155,5,170,29,157,248,91,196,45,197,241,88,154,202,242,27,87,55,112,0,102,163,130,55,18,148,101,92,45,19,212,11,152,122,58,162,48,235,218,50,23,81,188,7,159,79,217,146,220,67,20,65,167,200,155,105,76,139,42,171,81,187,158,37,48,142,138,180,182,172,114,194,48,230,59,101,23,145,248,38,152,4,193,60,24,250,23,252,194,129,236,241,6,158,230,163,112,165,95,111,202,159,221,248,32,136,74,185,79,226,220,236,5,98,63,189,28,126,57,169,14,110,179,184,195,178,65,229,60,34,120,92,100,65,81,19,47,208,240,60,96,179,1,161,78,183,87,64,174,243,82,1,123,244,108,5,5,108,136,72,242,46,71,34,57,27,113,193,26,203,145,154,213,66,247,62,176,158,202,3,171,193,100,182,14,23,153,61,40,141,196,132,157,221,239,51,135,163,216,114,40,8,159,189,11,60,62,221,125,19,90,86,16,98,37,104,40,50,145,91,131,112,249,187,124,36,15,129,137,197,216,169,45,184,150,60,151,54,113,48,36,115,51,88,58,74,169,39,152,240,56,49,171,76,190,84,42,227,174,29,156,224,235,144,25,61,87,100,18,143,165,66,14,172,221,206,16,242,70,220,48,26,109,204,46,14,98,38,228,172,46,55,212,185,157,208,16,151,150,124,203,141,192,145,45,116,192,156,138,29,158,49,243,95,162,163,35,159,47,69,85,93,71,155,82,94,35,72,43,5,123,221,107,26,53,181,248,79,150,48,104,15,225,21,254,229,177,75,0,181,182,52,101,26,84,8,122,52,215,145,31,220,126,182,92,255,228,65,212,238,44,109,168,192,146,74,216,111,208,42,243,141,249,117,136,198,224,222,212,151,246,65,24,0,0,0,11,115,105,103,109,97,95,49,95,102,102,116,0,0,0,64,148,184,185,173,190,25,116,111,9,178,51,127,41,110,248,113,70,9,193,74,66,107,240,154,176,180,84,222,89,219,5,46,84,182,34,241,16,102,96,243,71,95,26,137,105,29,43,236,74,47,176,53,245,106,184,164,123,237,153,22,111,24,212,57,255,174,2,248,67,137,166,237,90,208,120,116,243,245,223,136,164,23,21,36,53,118,164,202,238,121,148,125,137,228,77,36,215,192,223,13,62,154,119,179,157,115,211,230,101,65,211,98,80,67,84,160,107,43,216,82,61,176,245,224,46,170,82,36,61,230,134,123,159,177,183,214,102,212,72,190,215,48,37,118,31,142,121,63,225,1,64,56,210,115,246,218,137,181,24,80,137,110,230,180,248,36,36,148,132,117,209,75,8,225,83,206,154,149,194,23,109,238,121,140,3,117,210,103,213,148,164,41,115,175,53,183,33,180,171,176,169,135,44,102,160,164,246,100,222,63,228,166,157,30,230,68,97,108,54,44,133,42,29,2,119,78,143,212,184,142,169,83,208,132,174,93,14,14,229,86,86,169,104,219,42,99,166,66,240,224,78,5,149,72,135,53,161,77,10,45,57,235,205,56,90,225,193,152,250,43,141,244,176,109,115,188,52,227,112,20,120,112,210,100,190,186,203,62,11,183,20,207,125,199,197,165,19,58,6,20,98,121,248,156,137,208,208,61,46,24,143,188,140,131,133,139,168,18,198,13,42,204,200,244,199,208,65,39,249,229,28,8,241,131,234,232,239,106,73,118,114,52,47,238,64,91,162,132,194,17,33,11,159,238,208,98,227,49,119,40,106,60,3,4,121,216,165,119,42,36,174,19,173,10,78,195,187,104,217,236,120,191,133,52,171,118,247,61,42,74,203,43,200,231,26,33,44,109,176,78,247,41,14,252,43,173,248,139,97,89,234,157,169,191,98,74,166,147,215,16,99,112,125,93,226,98,219,227,147,206,13,182,176,155,204,32,62,79,19,131,100,147,159,44,21,102,181,13,121,194,159,40,213,93,36,192,179,213,237,79,108,6,201,15,49,189,40,84,53,228,135,170,182,114,181,156,113,96,186,63,96,65,117,1,155,59,102,224,214,16,247,98,83,25,164,169,31,56,33,229,204,154,199,45,145,197,29,249,245,29,218,35,223,242,16,223,37,168,147,241,237,229,233,124,4,197,249,157,61,164,169,125,224,187,144,7,4,132,62,175,64,246,144,14,117,70,155,109,1,53,171,40,136,221,150,38,144,25,113,73,37,222,202,168,234,118,96,45,124,24,136,76,151,22,213,4,25,31,132,77,107,172,34,134,215,1,42,87,184,122,186,117,91,121,190,24,0,10,116,252,28,20,166,246,220,21,38,51,0,14,190,180,18,5,91,113,101,199,215,141,28,97,92,2,17,239,151,81,243,95,44,4,37,119,153,184,31,197,157,22,203,47,79,249,73,240,180,232,196,167,29,113,108,79,18,24,190,177,223,4,194,220,100,171,131,148,222,27,21,164,95,22,95,60,103,174,61,128,131,85,125,78,49,216,187,114,42,5,173,214,99,22,71,45,58,170,57,253,245,122,108,241,28,36,172,33,7,216,209,230,164,161,134,226,161,163,227,247,177,44,158,105,96,184,77,56,243,48,10,77,252,79,111,188,97,50,233,127,36,165,230,149,39,242,97,49,162,179,112,34,211,41,203,24,125,76,113,236,170,22,200,251,63,158,111,31,1,56,57,30,118,11,48,74,45,80,113,63,140,234,82,111,129,180,94,139,106,222,151,80,54,50,31,212,224,135,248,182,1,64,195,111,115,166,68,49,102,72,159,84,238,79,219,143,125,246,163,139,196,252,201,6,182,15,192,25,6,116,48,61,69,42,123,100,65,60,11,24,45,6,170,17,95,215,60,208,91,146,23,61,123,163,23,248,142,211,42,127,203,185,231,32,241,30,186,78,139,206,223,50,72,74,245,254,241,126,142,51,152,108,156,195,96,210,151,35,173,131,84,181,3,29,91,44,31,2,191,81,177,116,180,83,77,136,160,87,73,170,147,210,130,239,60,80,29,161,228,217,56,162,181,35,51,86,154,13,97,55,189,139,112,130,179,241,222,130,124,42,101,161,168,111,162,198,14,43,79,91,114,85,49,71,89,198,195,35,142,231,3,75,211,39,204,113,82,178,117,71,201,70,215,192,255,242,230,251,135,225,41,156,220,78,145,100,216,121,146,1,246,84,232,86,208,250,58,193,241,122,92,239,213,99,94,235,109,82,8,60,221,254,184,124,228,206,129,103,201,223,110,104,145,58,184,93,242,212,62,224,19,16,213,58,70,97,105,15,249,109,39,194,52,200,69,63,0,234,245,206,30,169,218,99,3,180,49,76,164,9,53,238,93,28,178,191,101,1,35,109,238,33,138,177,223,73,201,121,120,32,87,14,128,82,16,12,136,89,224,26,135,24,251,34,50,133,246,203,41,224,200,69,70,38,188,205,100,56,150,195,219,81,12,51,232,35,251,180,185,239,241,5,203,52,114,26,28,91,12,74,126,249,179,181,98,93,212,119,222,249,43,229,160,242,255,52,102,196,235,231,239,183,205,0,115,13,150,239,181,135,250,233,0,243,112,27,127,10,144,137,33,131,151,70,85,206,37,135,222,61,175,15,230,255,185,81,139,142,66,55,121,24,130,168,195,170,244,75,255,56,5,176,239,73,76,187,120,55,113,11,33,70,216,6,198,240,42,68,189,132,47,36,142,150,23,119,11,253,212,39,206,116,66,65,116,47,197,233,4,181,185,234,160,39,55,221,31,34,103,76,117,132,83,184,66,106,208,28,229,86,49,137,196,213,243,222,57,228,61,144,207,149,238,3,67,140,122,236,201,18,123,64,121,14,219,131,32,28,124,31,48,28,128,94,46,72,175,132,52,228,48,198,16,78,19,40,232,250,210,77,141,149,141,80,179,232,78,164,239,153,32,140,111,135,220,88,54,72,91,169,81,125,182,190,186,222,87,4,113,253,244,95,127,78,28,44,182,145,32,150,52,110,8,47,172,155,238,198,54,115,57,110,109,224,195,192,236,1,48,48,170,199,161,244,225,164,65,60,169,120,156,243,6,31,219,165,139,113,175,24,115,181,11,109,136,73,216,221,186,90,56,61,176,48,180,84,65,197,186,39,63,251,100,241,217,78,81,1,214,220,138,10,100,213,255,18,215,120,228,11,179,245,186,208,25,248,153,193,125,60,227,55,68,205,183,6,146,146,98,170,239,249,85,216,195,95,37,134,135,177,173,124,78,248,14,251,153,23,174,20,183,67,80,62,255,185,42,13,79,165,192,247,206,73,121,109,91,117,84,223,189,210,228,234,244,105,124,171,253,178,164,164,99,136,217,70,120,177,222,116,184,42,10,201,206,138,13,66,161,190,145,222,159,139,224,99,48,173,142,208,121,28,231,4,96,1,145,2,155,132,30,143,241,247,207,49,214,19,5,160,124,127,97,173,100,44,17,172,5,69,79,37,8,11,203,111,167,9,30,36,49,47,166,92,111,195,59,52,12,210,35,154,33,84,136,37,247,225,240,119,172,46,24,61,96,139,98,18,65,235,14,26,31,106,42,7,144,134,36,176,109,164,28,3,228,240,30,159,95,158,105,16,159,17,22,223,19,235,194,201,223,12,255,83,204,135,211,174,235,36,34,107,33,70,70,229,101,251,183,244,67,130,105,28,211,8,108,190,53,171,93,42,163,247,144,31,119,38,231,122,166,29,242,211,218,195,115,87,85,151,33,78,146,3,152,52,20,135,148,144,33,136,221,224,179,198,108,0,193,250,186,106,26,174,172,69,21,179,203,16,200,182,200,191,110,69,216,144,222,95,111,10,197,187,93,201,215,200,177,88,16,58,209,63,20,37,130,247,232,218,89,88,165,163,153,165,161,118,208,12,71,231,30,66,189,84,239,231,56,175,109,94,241,101,74,10,26,246,191,51,168,44,199,165,119,91,48,79,228,166,191,63,119,156,95,55,219,41,55,238,217,187,25,11,71,43,140,130,109,217,100,222,178,130,199,123,35,7,123,234,80,102,245,255,24,221,109,252,119,247,198,128,202,28,248,7,139,96,92,89,158,239,143,131,224,52,118,26,79,148,216,78,247,169,77,140,35,227,242,59,35,60,205,116,188,5,175,65,29,15,157,240,78,132,98,8,169,180,148,205,140,72,170,31,78,36,45,20,50,2,174,17,60,228,84,93,1,71,119,62,78,119,119,26,23,147,255,112,11,98,17,109,76,128,84,20,105,197,206,152,69,49,59,217,189,104,171,229,80,218,196,89,109,234,119,22,170,211,22,177,11,57,160,102,47,178,106,23,238,195,206,129,124,211,35,79,161,217,227,70,2,48,169,0,29,220,208,24,231,158,247,199,165,80,99,123,86,128,192,135,146,50,74,54,134,215,93,15,199,160,144,146,50,36,18,92,55,76,160,242,220,190,35,171,3,239,171,74,185,9,122,222,102,62,149,209,65,32,224,129,158,136,67,187,144,158,241,68,116,67,180,181,230,116,213,29,29,177,129,11,238,90,94,107,106,253,84,238,33,212,102,56,128,93,86,105,147,53,172,69,0,0,0,16,115,105,103,109,97,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,179,119,61,61,116,15,34,195,70,230,39,157,139,31,56,121,127,7,5,86,32,110,130,34,32,252,197,166,23,202,133,4,144,91,22,233,35,165,66,128,163,160,79,122,152,64,38,139,249,155,234,222,60,223,198,73,165,161,46,60,158,210,57,44,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,243,73,45,74,12,78,178,19,218,57,121,196,248,86,103,167,33,109,75,175,2,133,234,104,203,254,40,144,106,60,137,37,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,255,112,208,107,171,109,13,147,85,120,162,143,180,162,76,232,79,89,7,231,125,206,186,227,84,3,173,239,147,115,76,74,195,131,82,42,69,160,22,143,99,91,167,111,145,9,7,35,195,134,110,165,65,142,41,151,169,102,200,130,254,31,136,60,114,164,233,246,3,70,129,7,127,64,35,121,248,143,65,197,192,20,24,36,48,172,217,38,174,158,52,134,71,202,142,52,119,16,35,65,144,173,78,8,2,80,43,66,100,185,40,241,75,68,249,142,243,40,239,226,131,55,162,136,176,33,145,53,79,136,194,162,179,219,161,196,219,250,74,86,5,177,47,215,58,169,253,172,76,29,30,78,51,68,157,27,206,210,66,92,156,158,162,205,113,193,233,117,141,47,233,159,238,29,254,159,149,54,219,49,150,77,206,245,128,177,238,19,210,107,13,67,15,182,210,149,27,157,17,116,72,167,249,46,152,121,0,169,152,67,183,83,106,6,182,7,136,65,58,50,123,96,63,59,0,0,0,7,115,105,103,109,97,95,50,0,0,0,16,207,2,225,189,181,162,122,242,123,60,135,240,166,137,191,117,8,13,68,60,209,194,163,236,87,250,123,23,111,188,178,9,166,247,191,207,92,35,224,175,104,246,158,90,178,186,194,187,109,65,53,235,37,93,38,71,16,195,109,212,74,84,104,29,66,30,140,133,63,5,230,232,137,167,7,97,104,125,161,184,158,209,238,51,61,27,193,69,127,97,71,9,36,103,163,29,166,247,62,85,237,198,139,8,242,100,202,249,215,155,87,29,199,236,160,128,28,12,213,175,213,74,16,189,45,60,40,4,38,202,144,124,145,117,90,155,118,62,168,78,94,89,202,252,79,59,95,14,225,100,131,99,180,132,89,142,102,119,101,49,55,235,238,33,6,153,16,250,99,39,68,153,145,234,17,135,200,162,205,210,115,212,35,81,152,138,109,232,43,91,107,13,170,251,64,216,26,124,7,32,150,64,119,107,134,95,49,210,209,45,225,164,128,82,240,74,50,54,215,63,225,24,207,3,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,27,142,208,243,140,53,102,109,211,142,95,51,50,121,7,218,150,33,7,22,97,234,8,61,134,75,251,32,147,200,214,69,17,132,23,49,207,163,35,100,143,169,84,81,5,165,35,102,82,246,2,191,167,116,188,245,223,38,246,103,17,39,64,95,10,84,14,159,255,81,121,184,222,10,5,211,77,201,37,34,48,124,157,37,155,194,142,74,235,190,134,150,220,206,9,76,18,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,27,98,158,81,252,117,57,87,151,13,71,208,204,239,165,224,40,115,18,172,84,220,196,188,235,57,112,41,144,177,132,81,43,130,5,32,15,55,78,18,22,21,205,201,60,225,230,227,220,69,22,151,238,68,44,168,166,118,151,29,175,94,45,112,15,223,155,220,158,176,35,72,47,139,179,96,142,251,13,150,179,154,98,170,145,224,36,36,163,164,119,241,149,167,32,35,22,253,108,130,92,87,241,144,91,132,140,131,134,229,93,147,100,2,40,39,244,62,137,140,98,217,116,82,135,97,164,81,4,0,0,0,11,115,105,103,109,97,95,50,95,102,102,116,0,0,0,64,26,141,19,130,22,57,178,253,45,174,105,33,254,211,78,41,199,199,138,218,176,228,120,119,90,38,236,120,206,157,91,69,135,96,238,116,54,64,43,225,114,53,19,14,138,172,200,56,194,178,154,135,71,119,157,224,169,105,157,144,117,206,119,82,10,198,97,226,62,145,120,157,211,176,173,105,118,45,82,96,143,93,180,169,198,242,47,212,29,226,193,90,39,174,88,11,118,160,218,132,254,165,160,82,238,218,59,14,4,67,138,162,74,154,171,16,185,31,224,208,79,192,211,127,213,234,72,28,201,254,138,98,232,167,23,204,186,56,54,183,33,110,192,134,29,74,1,124,237,37,140,226,113,188,39,213,235,21,103,92,208,31,249,127,10,210,69,180,120,14,113,111,40,52,241,248,252,233,220,187,223,173,107,77,102,22,205,241,161,247,86,63,28,181,24,247,90,221,89,144,189,224,189,249,217,186,21,53,233,1,14,130,60,191,99,123,200,202,244,117,16,141,225,73,163,212,122,54,79,229,166,122,188,238,145,180,135,2,236,159,160,84,28,61,174,204,96,183,73,6,134,6,245,152,159,80,32,92,175,14,164,145,79,144,34,32,157,248,125,251,125,1,190,42,66,169,50,59,206,158,17,93,49,149,240,225,52,8,36,140,201,96,251,53,135,178,210,228,11,98,229,108,35,32,249,206,150,153,170,213,135,105,72,30,0,138,9,126,127,56,200,190,182,113,10,114,137,120,162,75,49,137,134,59,97,7,186,37,143,68,39,203,50,118,176,8,255,147,244,156,138,83,113,51,70,216,139,153,219,142,102,137,159,157,142,142,156,48,239,99,225,54,214,109,18,26,234,56,83,23,75,96,84,89,144,159,155,15,250,81,70,232,126,211,52,220,137,190,152,212,177,31,112,182,51,132,1,77,72,91,21,184,155,207,7,39,116,152,205,74,92,31,232,21,168,133,246,162,77,208,49,105,79,116,160,133,57,208,62,241,125,125,202,185,231,1,31,41,242,213,145,153,63,44,75,189,13,207,12,216,141,29,197,225,92,195,180,156,247,182,229,139,6,3,165,204,2,7,15,58,116,255,60,51,107,64,17,169,197,119,144,216,123,247,24,172,104,172,156,116,190,98,158,21,14,119,117,203,47,97,63,73,186,251,50,12,110,18,130,7,67,81,116,58,108,255,159,188,205,246,45,236,33,19,135,203,219,47,184,119,55,65,93,54,7,157,140,52,48,248,20,251,246,132,25,94,135,213,40,97,220,213,83,229,152,201,192,157,10,86,209,215,242,205,28,26,208,210,5,144,11,99,117,94,201,106,82,32,246,217,164,147,94,251,21,237,243,233,0,77,154,157,242,87,201,159,138,65,141,103,142,202,142,214,205,50,56,3,125,103,84,19,171,222,38,239,131,194,187,179,109,36,107,243,22,43,202,77,140,7,102,141,174,189,7,235,203,185,248,74,98,65,189,200,151,244,143,25,238,164,233,97,229,7,252,235,220,125,161,242,75,6,215,221,32,212,124,243,247,45,68,107,164,138,187,63,225,46,179,133,22,18,60,33,63,171,61,29,30,156,57,151,111,66,184,134,232,210,247,205,75,114,113,176,66,142,192,123,57,139,65,113,116,82,44,72,195,158,158,103,238,33,247,118,115,68,204,78,163,8,16,183,203,209,19,254,197,38,175,45,222,151,15,189,234,190,129,145,97,241,28,62,222,0,118,206,242,92,34,238,115,253,42,147,186,124,105,1,159,162,141,250,24,122,144,147,187,80,216,243,148,25,87,186,223,94,21,122,68,44,225,203,5,154,158,154,138,28,208,98,209,224,249,202,237,38,175,219,99,52,210,83,150,10,109,220,182,100,31,153,47,83,45,184,173,40,249,101,177,239,16,114,253,232,201,194,89,107,130,47,252,178,19,82,155,94,192,248,12,223,192,1,130,26,254,91,132,174,227,64,104,245,102,3,82,217,147,13,4,7,243,229,121,239,89,94,91,246,43,119,92,172,237,83,112,30,49,246,174,205,242,91,69,65,66,110,122,116,192,198,57,26,67,63,155,53,80,126,139,214,124,217,226,1,132,141,108,61,36,142,6,70,220,155,97,77,219,61,66,71,40,53,2,117,58,159,67,245,197,143,212,192,39,243,96,153,87,171,103,51,213,139,253,46,126,242,30,110,236,53,21,227,45,155,116,213,166,183,165,169,11,243,52,185,205,55,146,86,120,134,111,9,111,239,75,70,110,22,244,163,117,107,220,43,174,164,134,174,61,140,140,187,252,212,211,76,95,64,68,81,46,32,181,51,56,248,54,137,161,191,133,167,110,36,204,255,153,173,177,188,213,113,242,48,159,150,205,240,64,13,163,139,255,148,143,95,39,44,55,148,233,103,56,74,155,200,183,153,238,55,121,166,51,200,145,72,25,162,108,119,16,105,120,70,19,14,133,53,152,238,219,110,100,241,203,57,41,191,151,209,74,166,87,63,116,5,94,67,166,168,227,7,196,112,38,34,189,196,254,59,50,41,239,191,171,75,138,144,163,175,56,162,227,10,1,114,247,139,116,237,156,172,173,54,249,127,30,102,184,115,68,69,225,11,39,166,82,235,217,174,94,221,21,245,166,254,254,237,173,41,248,238,145,100,242,111,242,28,143,13,250,205,18,14,210,46,193,7,6,196,230,197,51,147,93,114,80,58,102,45,244,143,219,202,165,159,191,151,152,60,121,24,143,202,144,25,162,145,181,177,1,144,153,22,232,146,54,101,101,92,247,163,61,64,150,2,46,2,117,244,80,70,82,180,198,253,211,8,35,92,195,24,217,143,54,84,72,202,146,202,4,237,153,34,123,200,129,75,52,177,142,230,175,174,233,152,183,146,116,60,68,250,197,67,138,67,73,7,53,10,162,123,184,156,210,1,98,10,86,173,220,30,94,95,92,85,117,163,61,171,246,81,176,205,222,72,241,220,55,44,219,123,189,231,75,79,176,85,216,227,211,177,79,66,72,43,81,205,231,110,10,160,176,9,86,248,24,145,108,74,77,94,93,225,204,163,160,109,77,58,18,5,35,184,236,119,23,120,117,90,166,234,194,145,44,24,217,174,7,223,20,194,57,113,53,109,236,153,121,107,59,100,44,254,154,15,21,195,181,167,238,216,220,137,137,205,81,14,208,153,255,47,138,240,63,134,53,213,37,52,61,186,80,51,12,150,119,196,157,72,144,134,11,31,90,1,10,194,78,34,162,148,188,193,50,174,183,89,32,193,112,169,214,8,86,188,37,254,222,210,43,216,190,96,3,148,90,168,31,145,98,94,60,109,233,141,211,37,2,155,24,237,249,24,40,150,153,184,151,91,61,117,132,251,85,234,118,212,52,170,67,78,89,74,218,48,176,14,15,191,35,18,164,189,167,232,102,12,232,108,192,170,6,68,96,242,137,4,164,23,244,109,209,146,186,7,2,187,207,198,2,147,71,39,102,102,234,112,219,116,184,227,163,14,38,143,133,40,41,22,106,33,67,189,142,158,26,0,161,228,105,214,162,7,71,68,234,2,234,201,248,149,228,232,90,130,164,238,180,158,213,40,107,76,48,224,238,139,146,86,144,26,36,9,22,4,169,177,119,254,143,6,91,98,223,132,33,28,99,153,113,33,52,204,81,12,251,176,88,143,22,7,23,24,135,202,35,144,141,142,206,251,33,233,23,75,98,111,167,166,19,27,105,27,135,205,112,222,13,60,65,13,126,36,142,197,199,248,61,95,24,112,235,11,136,251,87,0,230,95,122,206,216,105,192,243,1,108,231,1,0,72,25,94,92,53,141,208,157,86,30,15,8,222,125,24,150,64,2,26,57,141,90,236,128,237,250,180,22,167,113,207,141,48,137,218,133,63,94,113,66,11,119,96,246,249,57,134,65,133,4,139,137,22,148,235,3,187,15,159,10,189,136,71,246,180,186,95,126,33,110,238,21,41,47,118,122,197,204,14,171,182,230,39,86,71,19,244,177,90,229,144,33,66,46,179,253,140,150,38,23,14,56,39,2,222,23,13,73,174,180,245,204,114,126,41,95,245,75,26,167,139,82,154,43,54,239,110,41,246,68,216,117,44,99,203,192,29,74,238,150,90,60,190,183,213,184,17,5,214,249,216,153,130,53,126,104,211,242,7,253,203,40,72,167,60,69,112,5,95,115,69,135,46,249,154,172,60,78,147,32,133,194,251,95,32,44,66,15,4,231,99,165,147,17,66,245,21,82,244,23,31,127,72,72,188,119,107,82,100,242,141,208,111,95,32,128,54,116,184,17,47,75,157,11,49,240,163,30,45,1,248,100,69,185,30,2,107,222,222,217,248,76,86,229,89,3,130,65,242,36,167,152,101,197,171,242,218,108,46,177,36,82,117,123,99,187,62,251,97,23,31,55,147,150,95,37,198,3,30,182,97,227,192,125,115,153,30,174,255,5,6,247,64,145,157,179,235,29,145,105,24,192,125,77,206,9,49,5,25,254,253,255,65,224,25,10,188,248,90,234,253,149,133,112,12,89,35,22,182,154,184,168,58,182,184,54,253,62,78,224,102,193,30,184,119,8,196,216,84,168,121,106,130,31,96,69,34,0,0,0,16,115,105,103,109,97,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,139,239,220,158,151,61,117,127,32,145,71,177,44,23,63,95,110,108,9,116,121,98,177,141,207,8,193,57,53,123,55,43,61,157,45,9,170,165,85,169,236,51,14,199,161,1,119,114,196,208,177,48,72,242,150,184,12,20,142,244,0,91,87,17,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,7,0,0,144,11,183,45,219,248,19,18,84,251,89,107,25,140,106,137,138,253,231,49,10,36,97,91,40,36,37,190,82,33,0,0,240,17,168,32,192,185,130,231,176,87,241,176,46,2,100,172,177,134,252,88,194,96,165,101,7,207,28,238,60,244,52,18,139,77,109,21,4,179,69,26,122,139,211,19,112,3,84,155,248,119,32,116,104,132,175,5,134,191,28,192,32,202,146,156,35,118,85,7,120,27,150,165,205,108,166,31,230,253,231,161,179,183,106,62,90,127,224,241,39,186,23,179,60,53,54,144,34,48,146,28,210,164,15,17,253,111,70,68,17,242,173,241,44,96,0,175,40,150,248,14,57,39,107,212,20,78,82,175,149,237,151,31,214,51,93,57,234,138,21,200,236,169,155,87,67,49,112,26,213,194,244,50,69,52,32,224,25,130,169,204,189,78,168,55,116,47,241,241,103,142,74,27,202,223,50,104,211,20,31,196,11,137,179,83,159,252,91,199,25,6,25,45,100,193,5,69,182,91,74,53,69,246,35,191,46,189,254,63,240,167,225,37,123,138,182,127,28,105,68,233,44,70,142,29,61,166,69,238,240,147,17,65,138,142,214,254,131,41,152,13,27,131,195,252,140,215,38,43,149,41,90,71,54,0,0,0,7,115,105,103,109,97,95,51,0,0,0,16,66,229,26,140,193,165,55,119,15,12,248,174,63,135,26,175,80,19,58,243,40,169,191,223,164,134,73,168,176,59,157,2,41,171,35,235,69,101,127,197,69,244,81,73,63,185,245,150,95,138,250,14,115,109,193,123,161,161,227,167,40,98,248,26,25,223,69,20,172,77,143,172,36,24,106,8,195,118,199,159,2,31,80,156,155,199,128,196,124,218,219,128,13,43,164,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,52,102,152,102,110,80,39,205,200,21,113,241,44,110,114,162,202,98,215,184,74,145,200,227,222,107,157,167,234,124,100,25,60,233,187,48,141,189,81,177,166,163,210,90,38,51,8,107,89,76,51,209,155,219,235,64,50,133,147,255,14,19,23,3,186,250,43,233,140,91,221,35,87,237,145,194,251,236,164,166,248,4,77,115,38,194,33,130,12,81,36,69,167,36,53,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,230,217,194,233,70,125,59,175,108,61,203,137,75,243,39,202,7,209,220,145,103,152,150,30,115,160,178,188,216,1,153,28,129,199,23,66,244,67,106,216,29,124,11,245,201,162,243,159,134,255,60,77,156,187,74,106,106,78,194,120,111,237,11,3,193,97,220,85,115,122,193,180,129,127,69,178,66,223,93,55,95,173,155,225,64,130,201,173,190,62,139,220,78,52,238,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,136,22,65,247,231,78,29,193,184,81,69,154,109,191,91,238,108,194,245,64,231,220,177,39,113,183,84,219,104,134,176,14,248,163,8,194,146,251,193,172,170,248,46,60,48,151,41,7,97,109,103,159,23,185,94,94,55,69,47,247,22,50,146,49,139,136,250,168,176,250,191,145,184,27,113,43,178,205,192,240,44,46,103,20,94,21,180,42,205,43,27,25,120,38,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,11,115,105,103,109,97,95,51,95,102,102,116,0,0,0,64,191,253,180,148,17,83,17,218,184,24,171,24,59,180,212,99,81,211,86,128,62,212,212,32,94,228,8,19,60,97,136,33,96,43,188,198,181,253,213,136,98,98,195,1,56,235,243,226,77,62,219,48,103,219,108,76,187,182,65,124,62,28,29,88,112,241,239,105,239,73,221,94,253,41,211,235,143,44,174,93,121,95,132,35,156,17,187,244,141,72,0,112,37,46,181,94,54,136,168,51,99,243,72,0,217,218,230,181,251,143,64,44,217,115,29,22,196,120,71,153,174,96,247,16,246,130,221,45,57,171,32,4,199,135,199,161,103,106,205,159,96,6,58,177,79,110,250,213,58,227,246,182,68,96,27,89,49,117,104,86,234,188,195,80,96,68,94,181,59,174,247,254,101,3,25,47,88,18,135,241,4,226,11,205,30,148,221,125,169,89,178,65,140,72,242,253,59,202,230,184,228,91,61,239,17,207,104,171,91,166,199,245,0,238,12,56,78,36,129,220,92,63,208,40,47,241,44,8,60,180,112,101,94,80,169,211,139,127,70,55,125,254,105,117,146,76,73,13,132,30,133,230,202,219,228,90,77,145,33,151,131,228,44,139,68,183,187,68,133,227,31,223,239,47,46,94,114,96,231,21,59,68,177,152,164,241,78,24,130,84,224,48,2,58,108,134,23,207,74,62,222,254,213,175,255,108,120,128,112,30,137,101,184,88,148,4,28,118,75,43,173,243,208,61,170,11,6,134,146,69,205,59,58,247,117,172,223,177,43,207,166,119,89,35,173,174,235,3,56,125,83,80,87,184,74,177,156,240,241,55,143,116,95,251,197,235,183,144,246,61,169,65,159,179,90,160,148,92,67,130,107,95,132,7,102,229,15,235,163,112,221,156,166,125,235,58,160,221,240,7,91,166,25,187,4,74,252,91,206,165,72,159,46,95,174,38,87,198,46,81,210,101,217,93,84,225,70,200,190,169,137,114,206,39,81,215,133,45,15,153,52,56,126,82,161,220,65,69,25,239,32,195,130,164,18,244,31,140,20,165,113,53,42,178,241,154,37,54,93,240,200,214,105,192,65,29,174,109,180,38,26,14,174,255,101,97,109,234,5,76,120,51,46,156,45,79,81,50,143,121,91,89,109,22,123,62,244,63,62,115,253,61,147,199,150,169,148,125,108,172,254,251,196,238,200,241,12,253,81,201,46,78,4,59,154,233,185,128,6,246,219,238,98,43,251,160,252,238,20,120,157,146,157,232,1,47,173,218,148,220,123,121,135,84,114,69,43,98,144,31,146,113,51,104,160,78,210,192,84,148,137,240,204,252,238,77,240,200,231,226,164,243,92,109,82,42,47,66,12,49,84,174,127,121,137,123,237,81,198,252,220,147,247,165,67,132,146,180,239,78,249,145,219,244,200,13,220,85,43,126,81,216,88,79,156,211,22,129,243,38,59,133,118,210,150,28,215,248,5,118,190,66,176,18,6,108,198,3,13,248,223,66,178,19,240,128,198,78,21,221,31,3,87,10,49,21,58,58,222,249,250,108,210,215,48,131,221,60,237,160,161,193,128,155,144,175,2,61,211,83,242,157,66,67,40,13,175,100,25,51,176,249,224,183,209,154,120,123,253,185,180,20,43,46,17,141,180,81,223,120,32,180,95,173,221,32,230,141,13,154,103,222,218,12,55,69,156,176,67,81,60,65,250,194,53,78,11,254,192,248,23,46,205,122,120,39,116,41,17,155,208,247,250,171,184,244,47,10,87,54,16,182,111,134,110,198,200,225,27,82,64,255,72,123,122,251,209,101,196,63,225,77,215,136,21,221,94,186,158,116,67,225,84,37,112,21,83,105,160,249,7,140,85,12,80,248,108,252,151,49,199,5,40,237,21,179,215,127,159,119,227,167,149,205,160,33,43,176,193,230,124,248,175,129,203,11,149,129,204,18,37,208,119,21,28,248,254,209,35,53,147,68,172,35,244,26,116,235,7,225,117,248,118,131,148,155,25,171,96,68,17,108,228,173,26,11,171,99,69,229,167,215,195,69,248,93,71,243,197,161,226,157,219,3,151,240,241,52,36,135,158,145,121,24,234,185,121,84,180,59,126,198,27,179,30,198,233,255,182,17,47,218,197,37,30,148,58,35,154,94,185,226,28,189,242,173,104,120,89,35,231,94,95,64,32,26,220,213,167,177,209,64,11,72,76,59,1,254,99,37,12,116,70,193,26,100,24,187,231,11,54,31,82,231,134,188,4,238,25,192,49,110,208,36,191,178,89,192,117,231,57,181,176,133,5,143,99,155,143,228,208,144,187,52,221,155,187,46,84,223,141,242,230,226,207,44,210,165,0,100,20,91,81,53,94,150,224,241,99,20,238,175,92,218,62,66,92,52,200,14,252,200,110,75,26,48,33,14,195,187,166,39,193,255,107,236,38,185,5,255,198,120,23,56,0,127,59,3,78,136,22,114,237,213,87,100,122,88,207,117,69,156,6,110,225,61,128,85,53,129,249,236,203,69,179,85,167,229,163,39,22,214,25,144,43,42,179,239,210,27,130,61,202,26,222,242,165,193,59,30,195,164,143,62,88,171,143,143,161,87,209,40,125,38,90,187,31,183,7,126,166,243,186,138,29,56,36,57,194,144,10,148,228,75,24,104,24,25,229,110,171,96,228,81,12,239,254,114,22,121,172,106,156,152,42,119,7,35,11,184,234,200,8,171,126,176,36,188,159,88,48,120,234,228,6,25,182,203,128,36,253,98,8,142,153,5,30,141,240,135,45,236,128,82,173,134,124,22,167,197,220,212,169,104,53,12,162,25,175,155,173,73,16,165,2,19,133,38,22,172,37,33,240,72,232,92,141,195,162,12,173,238,90,133,241,71,79,119,17,51,81,32,213,118,166,19,71,140,252,131,45,84,157,125,138,58,0,29,168,95,63,25,223,22,243,102,55,18,92,131,207,80,118,162,120,133,185,145,158,220,142,102,235,140,121,73,94,224,229,239,148,221,246,59,105,56,114,144,229,113,141,143,93,58,105,200,199,92,25,38,14,112,22,137,157,20,27,83,202,158,147,151,118,27,143,172,248,195,155,122,228,170,231,231,186,77,131,132,180,2,129,237,30,146,155,10,254,55,246,106,9,161,102,20,189,175,249,40,15,146,202,3,139,76,102,181,218,72,212,214,147,99,202,233,210,214,252,184,255,127,159,98,77,250,246,186,239,117,112,151,0,190,22,225,241,134,60,85,195,18,177,62,28,140,203,30,115,53,229,166,213,248,35,29,99,71,151,147,123,23,144,238,120,58,30,204,241,13,177,135,65,45,209,35,48,183,47,8,203,246,253,185,40,82,106,22,141,138,73,176,217,151,37,5,96,96,5,101,9,107,55,108,147,12,38,249,131,200,46,192,122,31,15,69,238,234,171,37,81,89,18,220,253,240,234,77,206,63,189,56,129,185,196,208,9,46,39,36,33,143,153,19,213,75,237,184,162,171,107,149,48,205,64,252,244,233,229,104,111,239,195,42,199,121,175,105,143,6,83,255,194,118,199,5,38,201,250,72,148,81,46,169,129,224,237,91,207,39,136,33,15,184,75,208,74,160,221,140,14,96,164,235,222,137,49,157,217,89,62,218,3,186,55,102,166,91,1,149,13,130,82,214,185,99,180,170,204,217,76,220,112,4,218,185,140,172,195,139,66,134,88,20,11,123,102,230,32,47,83,82,110,174,208,126,94,253,209,176,121,160,102,190,63,83,29,229,94,140,239,12,136,96,197,61,254,24,189,76,145,67,163,176,250,220,140,84,144,206,206,69,212,211,6,187,185,0,107,96,109,205,247,98,59,15,145,169,52,38,133,145,40,97,181,198,166,153,166,112,51,124,177,186,26,47,31,90,66,26,160,88,50,50,255,38,3,20,13,114,126,39,202,11,122,213,250,178,225,88,142,25,113,118,82,161,69,227,47,211,50,47,66,232,80,6,122,54,102,96,192,97,127,144,158,234,243,142,94,35,195,230,123,254,84,43,173,131,147,68,168,175,118,47,97,51,16,129,242,179,111,170,64,252,81,188,1,240,31,206,224,134,192,63,28,42,140,23,227,219,144,221,70,170,93,62,119,26,125,108,24,113,250,42,45,90,246,170,66,139,19,62,86,102,243,171,185,122,219,92,112,35,78,31,143,26,196,20,62,236,53,137,98,186,13,248,172,75,13,23,39,56,202,59,229,22,4,163,202,151,79,161,65,131,228,18,29,23,17,85,100,155,3,60,76,141,1,106,27,140,68,75,133,203,93,185,43,149,183,146,184,22,83,178,72,238,213,15,152,148,166,96,213,242,116,12,1,20,182,123,54,80,184,247,137,191,27,234,65,99,219,26,38,129,153,62,92,45,71,245,198,15,68,24,98,157,146,144,125,196,157,182,252,27,48,92,135,248,160,100,108,232,151,164,234,119,248,168,189,162,232,183,183,172,193,87,163,172,138,156,117,98,220,148,216,248,69,7,179,255,55,51,135,25,71,166,218,100,45,71,45,122,217,199,94,155,0,5,82,125,142,132,184,71,187,142,96,190,11,48,122,118,101,172,171,13,199,125,218,193,83,62,111,101,131,108,198,49,114,27,0,0,0,16,115,105,103,109,97,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,63,124,173,181,226,74,173,248,190,133,203,131,255,198,96,45,247,41,148,93,43,253,118,217,169,217,154,63,231,124,64,36,204,201,111,205,99,99,197,113,236,96,168,124,216,161,239,22,107,170,143,84,86,69,161,143,147,167,34,168,75,227,143,27,234,128,156,191,131,194,134,234,16,193,212,125,120,82,212,220,163,49,98,15,99,120,142,178,138,170,28,94,162,235,58,19,199,140,10,184,173,237,232,228,123,84,156,254,133,48,130,169,213,228,57,35,11,15,248,141,178,124,29,77,195,135,42,12,102,97,93,18,182,41,218,17,149,177,137,83,162,178,105,176,36,122,39,209,214,61,210,122,210,142,116,174,19,49,187,29,188,113,226,162,129,165,213,150,142,207,49,105,2,250,104,204,144,24,245,231,233,199,163,227,123,25,56,45,188,66,129,42,160,5,61,87,114,86,118,54,32,98,177,254,98,215,207,202,25,66,137,67,130,70,216,68,191,214,38,139,171,30,203,20,38,0,0,160,245,115,138,19,144,181,134,17,194,122,180,247,211,29,51,57,23,89,234,91,49,198,93,109,13,165,227,46,242,165,226,6,101,229,64,83,119,77,3,144,247,141,44,48,246,84,33,94,63,169,222,147,175,18,129,148,224,65,168,58,139,22,239,109,147,10,90,127,92,16,218,73,109,223,190,184,6,190,13,86,140,109,199,128,213,6,87,232,210,154,114,24,166,218,121,41,160,226,187,149,146,223,122,252,31,238,81,174,85,106,136,207,217,102,56,151,26,247,17,222,251,230,254,24,196,98,210,230,233,79,140,154,164,60,171,178,166,230,188,181,152,135,207,80,110,83,185,255,28,140,163,236,113,243,12,31,208,49,143,112,110,142,247,244,121,123,131,68,75,19,23,121,189,131,228,254,170,246,145,161,146,87,191,217,87,224,165,69,161,183,207,65,159,209,76,232,87,9,101,107,156,89,137,166,245,220,153,160,135,233,163,184,225,199,60,79,200,97,146,63,84,68,240,226,45,237,29,33,75,72,129,63,222,103,203,4,101,131,67,237,54,132,98,220,53,200,51,230,49,108,34,65,0,0,0,7,115,105,103,109,97,95,52,0,0,0,16,181,39,240,95,21,56,61,69,99,238,239,38,185,165,36,151,218,130,113,126,54,89,43,10,163,14,75,168,227,174,236,15,220,158,20,65,138,19,204,144,233,5,219,91,135,172,158,139,78,115,79,51,2,74,28,119,109,192,129,46,223,103,6,31,41,51,223,168,170,78,177,139,158,203,147,150,123,201,43,151,186,24,134,149,46,130,120,190,104,101,55,249,211,145,130,9,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,110,123,180,112,213,182,160,84,27,197,140,158,234,190,77,80,38,237,6,220,214,203,189,205,93,213,160,93,112,106,29,20,250,147,54,153,97,201,142,254,37,65,46,173,166,70,0,79,95,188,150,71,129,216,251,191,161,165,65,172,192,134,45,22,48,157,67,219,162,231,236,184,46,215,253,120,74,162,210,82,8,216,111,103,212,250,34,133,218,54,97,25,41,194,49,1,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,188,38,183,111,117,33,158,248,149,111,65,250,34,171,52,249,47,42,194,55,184,200,143,193,122,103,170,96,106,143,238,10,231,241,133,164,163,202,79,0,220,150,230,178,155,72,91,119,86,84,120,253,118,133,176,54,180,140,63,78,227,12,104,35,157,184,204,54,232,199,94,219,184,9,85,48,225,199,198,145,5,232,202,111,28,133,230,105,228,228,142,37,72,26,102,17,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,160,94,32,100,39,186,161,144,97,134,151,56,169,113,128,22,178,19,197,55,69,155,175,207,15,95,81,194,157,232,220,35,212,79,213,175,229,203,16,2,146,236,158,184,144,74,182,159,77,236,89,179,108,50,101,173,198,115,61,240,5,147,162,48,250,194,58,239,17,13,158,74,54,129,177,17,163,247,222,39,71,45,202,193,255,12,218,137,76,245,153,207,165,35,252,44,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,0,0,0,11,115,105,103,109,97,95,52,95,102,102,116,0,0,0,64,58,95,86,149,157,135,226,187,87,128,241,147,65,190,235,8,184,188,236,164,60,225,87,16,85,170,44,53,36,254,214,23,64,161,158,54,39,121,97,208,165,206,80,176,197,30,80,51,123,145,29,222,4,182,104,191,125,86,119,134,92,244,88,17,117,169,219,98,53,166,13,195,16,165,125,200,81,220,212,148,89,93,183,231,131,143,173,205,195,244,139,222,61,23,220,79,103,236,4,11,25,128,151,75,219,27,5,97,126,237,70,206,209,11,74,30,236,135,174,130,88,167,200,16,29,75,191,31,186,26,103,217,81,87,191,159,183,108,74,6,17,154,196,158,41,202,90,59,127,195,95,218,117,128,144,128,41,14,116,4,213,255,92,100,123,66,106,22,226,212,200,235,34,82,97,132,134,244,38,109,70,235,78,35,150,147,182,56,66,238,46,25,127,21,201,216,153,116,156,146,18,107,78,101,130,194,236,35,18,25,163,195,50,93,62,159,168,178,204,11,212,13,164,87,112,186,96,211,32,74,217,228,71,52,62,122,146,143,203,143,77,254,167,10,45,110,24,254,39,131,14,90,255,115,151,85,195,127,220,48,126,61,31,157,87,213,30,82,153,203,183,147,48,213,100,51,178,11,139,254,111,192,92,90,116,103,6,85,47,241,153,179,115,58,197,226,49,24,199,145,109,118,145,136,184,171,235,180,33,136,21,245,238,106,168,53,60,101,179,42,117,35,244,205,17,180,184,54,201,186,218,172,221,137,200,216,49,131,165,90,74,71,158,165,120,58,18,75,106,61,100,87,50,40,186,160,120,216,215,174,63,22,84,176,204,188,241,198,225,73,168,153,183,187,247,45,70,69,166,230,77,96,97,50,141,231,127,216,166,34,151,206,171,34,112,121,150,139,116,143,156,214,60,127,59,255,237,129,15,97,138,227,192,66,169,75,88,189,165,44,97,221,242,107,115,83,243,245,53,158,191,250,248,113,64,213,56,226,153,15,64,151,108,45,242,94,244,87,193,200,19,71,248,232,0,205,125,72,9,7,192,135,192,253,219,217,75,175,61,18,109,85,228,45,27,28,85,94,231,45,27,213,107,172,183,135,105,252,65,164,171,168,157,222,200,216,107,109,47,90,211,30,101,13,119,85,172,72,68,4,135,44,228,70,236,1,255,183,116,37,9,47,10,226,191,28,251,184,245,88,40,29,79,220,68,195,158,9,240,31,83,142,193,46,143,34,196,53,134,21,133,92,191,167,129,48,229,170,133,102,113,19,7,253,146,137,126,195,104,222,232,166,69,47,62,7,229,232,217,250,237,143,83,38,20,130,70,121,77,215,142,78,31,152,197,41,224,244,61,158,46,116,1,226,169,208,48,3,174,115,103,166,27,39,37,172,115,60,91,184,221,179,157,227,98,42,67,123,27,83,251,146,30,96,61,96,101,36,45,80,134,63,19,109,253,176,105,186,100,227,178,205,28,26,249,54,122,195,227,108,130,250,185,228,143,205,55,4,229,82,209,19,146,216,96,204,190,26,84,112,32,115,206,225,24,53,239,91,37,119,92,234,86,175,55,196,179,163,185,135,182,137,223,81,174,231,157,167,236,4,196,183,225,149,52,199,221,206,114,143,48,204,146,8,18,114,179,98,176,37,192,79,134,89,118,68,219,203,187,28,135,39,109,23,81,78,165,216,152,7,92,130,78,83,137,19,51,136,152,17,187,58,251,90,221,49,44,40,98,57,182,158,222,187,5,4,13,183,108,202,217,95,142,156,20,32,235,134,143,252,144,66,224,83,249,29,127,156,140,26,19,88,229,97,153,101,143,142,50,174,186,142,146,7,107,75,207,199,175,176,137,100,173,71,201,46,45,125,162,49,112,19,149,248,94,225,26,198,72,194,243,223,24,191,71,113,146,35,218,109,110,67,176,119,108,165,9,157,57,161,128,3,194,85,109,22,153,230,70,169,43,17,62,44,130,226,16,220,123,50,246,184,11,185,180,162,211,14,97,206,124,82,18,197,22,42,68,204,27,142,197,196,245,147,155,156,233,191,189,31,243,49,198,150,249,4,14,135,28,80,74,246,120,45,168,249,247,47,90,97,121,29,4,159,255,121,240,152,242,194,220,23,74,16,169,60,49,147,253,156,127,134,198,117,9,43,98,240,187,86,41,155,138,84,238,50,204,79,111,15,192,28,249,75,126,118,52,30,193,221,88,226,85,185,131,149,103,185,3,42,197,24,209,194,179,246,246,94,184,143,52,28,103,117,88,112,171,129,43,52,1,84,205,28,99,36,155,66,75,104,12,21,116,64,114,210,219,129,186,65,208,26,184,230,250,225,0,43,77,22,35,254,140,133,123,228,84,200,65,73,38,151,244,161,186,20,194,252,247,45,108,86,23,168,24,237,50,97,112,106,56,42,48,235,139,43,163,37,131,160,239,222,237,154,70,235,19,9,169,70,48,235,109,173,147,235,52,162,53,36,180,74,210,65,200,127,60,148,79,217,105,137,107,65,146,23,234,88,45,67,249,42,147,199,175,190,74,71,216,39,125,71,93,201,42,165,167,27,36,82,207,34,26,231,189,84,106,230,171,41,255,82,70,249,64,115,177,171,21,101,109,207,15,241,92,111,143,208,114,184,194,63,106,8,238,228,113,38,143,131,243,153,173,44,145,90,206,94,176,237,35,4,89,110,31,248,171,221,165,95,186,68,77,126,156,14,246,9,174,149,162,104,254,183,139,86,21,137,178,54,212,211,249,122,201,106,238,112,250,131,23,159,103,142,103,228,202,74,76,18,0,130,54,179,93,31,133,37,236,128,231,215,179,120,32,101,12,64,170,148,182,2,27,146,164,185,183,22,140,216,248,98,3,26,74,129,136,203,67,35,91,118,98,92,230,96,234,161,41,181,240,239,224,215,244,102,108,99,176,94,129,47,120,143,241,198,7,214,92,190,157,17,203,21,24,171,57,174,9,67,5,67,202,34,116,17,8,172,139,224,53,161,226,74,84,25,38,50,223,121,176,145,124,10,1,224,218,187,183,56,238,147,0,80,5,3,118,229,206,214,51,77,57,128,109,199,163,232,84,122,21,67,82,6,175,9,130,193,220,158,125,223,173,197,169,173,197,248,245,205,132,105,86,164,61,57,154,80,116,121,16,90,34,171,57,158,218,81,121,59,160,41,228,111,93,186,185,235,190,102,109,98,15,19,83,177,214,221,239,119,202,130,28,29,205,87,250,29,246,37,8,231,24,234,90,219,168,255,27,127,175,164,155,220,174,145,10,55,58,222,20,206,124,46,16,163,247,148,136,15,20,81,237,122,122,214,85,31,239,209,98,18,98,136,17,155,104,192,220,38,170,85,45,79,36,157,15,224,3,250,231,15,191,0,177,198,229,102,132,238,76,16,195,199,2,125,128,65,234,7,168,218,170,201,174,101,227,113,150,139,235,108,218,197,159,12,2,145,187,3,190,63,13,49,96,112,91,214,116,154,30,112,144,237,44,54,43,91,141,167,168,212,85,8,30,241,16,4,193,40,202,240,19,242,83,12,155,206,130,115,211,72,180,114,110,230,81,241,239,159,29,9,44,147,136,34,65,226,102,10,15,50,221,171,220,68,71,152,188,42,43,153,12,163,228,61,102,234,188,179,23,187,245,194,207,53,149,196,147,191,177,92,126,115,33,171,127,215,133,72,62,164,187,239,156,33,138,27,55,139,44,112,238,189,182,151,222,135,31,143,143,199,99,84,192,171,94,133,248,118,183,249,226,130,81,217,244,16,173,27,78,238,58,95,96,178,124,103,66,206,108,138,181,78,144,1,98,235,135,237,32,99,134,16,77,95,4,215,188,160,152,78,58,24,239,68,215,236,221,158,53,11,245,49,142,40,86,36,90,66,48,225,171,112,233,175,246,222,233,170,35,229,2,61,139,5,15,141,73,137,188,175,238,30,218,17,79,90,53,43,131,143,125,130,254,219,26,49,117,62,34,251,53,196,42,216,97,185,152,134,25,124,242,161,56,3,66,248,216,33,235,33,220,248,94,36,78,136,85,108,75,170,178,179,168,123,215,219,70,48,1,176,195,148,189,14,116,208,63,151,156,35,164,1,157,219,46,116,118,138,115,72,233,216,28,172,230,103,33,138,157,70,109,37,248,124,59,49,83,203,137,186,100,226,10,80,13,239,182,54,139,31,195,61,53,15,187,206,186,252,81,8,255,12,157,34,216,81,122,125,1,75,138,150,214,139,64,12,199,23,237,242,189,145,138,240,200,177,151,47,1,195,39,197,23,222,56,199,211,68,54,0,58,134,155,137,178,161,162,19,216,90,126,98,221,28,165,56,219,73,95,28,144,107,171,17,100,98,6,0,240,244,108,113,102,118,15,246,89,27,209,86,74,51,203,237,102,99,127,155,76,182,251,144,202,97,33,152,195,225,120,112,123,175,12,205,89,101,22,54,55,75,68,56,191,221,247,157,36,16,124,230,245,137,80,242,248,86,1,82,254,14,100,62,205,255,34,109,95,210,63,192,219,78,60,89,145,111,61,173,88,56,177,85,89,221,29,154,62,154,57,219,203,174,194,22,1,60,64,67,88,149,26,114,41,99,172,45,0,0,0,16,115,105,103,109,97,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,18,233,76,93,171,141,87,229,230,139,134,77,45,136,34,96,209,90,91,63,102,89,87,177,120,202,102,31,228,53,56,12,180,101,190,71,79,64,83,121,98,117,241,57,146,231,161,116,240,107,134,7,159,143,175,88,212,210,67,87,20,226,205,11,91,37,134,198,243,18,38,174,254,144,62,125,40,250,225,121,7,238,248,177,220,222,23,33,15,169,31,3,119,103,101,23,179,173,80,90,166,93,194,109,93,19,128,143,189,210,107,59,179,188,41,62,133,213,53,227,102,171,254,155,62,46,132,22,229,69,174,172,45,108,238,85,239,75,23,76,209,220,136,80,124,52,35,90,226,2,145,241,224,228,105,143,165,134,168,31,198,169,141,192,170,77,111,109,206,24,222,97,78,65,20,50,140,245,14,178,5,154,126,122,26,103,105,64,190,29,141,14,174,187,15,253,249,253,165,102,215,152,241,179,178,104,156,75,85,45,191,21,54,7,62,148,29,120,47,220,179,48,166,31,27,0,0,80,154,230,212,40,82,223,142,214,164,127,121,61,211,81,164,168,63,90,119,112,102,228,59,192,29,70,148,26,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,239,22,179,146,232,103,138,94,170,228,50,44,27,96,17,200,139,253,37,66,80,236,248,6,177,213,202,193,142,24,44,36,77,154,65,168,68,181,142,202,46,251,199,63,182,0,146,179,108,236,250,121,23,182,160,95,85,205,237,137,94,108,150,36,23,127,99,48,16,51,91,89,128,175,228,251,207,149,95,75,185,38,31,114,83,205,193,5,159,245,20,131,208,98,41,29,58,115,245,55,230,7,249,94,21,28,29,123,194,183,177,126,135,115,71,94,171,54,88,42,119,35,20,148,175,198,57,36,28,186,81,67,102,137,243,237,161,36,162,45,119,11,171,215,224,35,94,39,212,66,191,198,72,187,199,81,205,199,187,16,59,86,114,47,233,167,114,214,194,87,219,23,250,166,31,246,208,98,114,207,176,171,209,61,15,57,200,160,180,48,215,33,97,250,194,152,33,159,107,13,113,14,8,123,229,16,100,93,67,22,248,61,52,255,119,115,106,201,10,86,199,47,153,27,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,49,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,46,66,171,35,91,184,96,144,102,117,242,109,44,83,104,7,132,120,43,156,180,69,60,152,123,180,69,188,165,96,11,196,4,47,29,66,12,197,122,137,233,42,72,106,132,45,155,251,23,98,201,206,229,114,44,5,245,52,187,103,183,16,74,23,15,172,196,208,238,218,251,49,160,122,184,187,91,114,176,92,40,251,244,47,167,109,39,85,247,59,249,34,173,246,93,43,33,168,179,37,187,204,112,159,14,180,80,135,102,79,87,98,125,59,187,166,118,109,248,48,60,145,94,4,51,203,136,80,20,199,25,238,33,198,3,67,5,34,1,41,17,223,5,17,121,229,199,164,33,225,6,30,100,55,181,249,229,103,146,175,39,13,9,198,133,18,154,84,111,120,253,131,251,29,58,105,24,202,71,158,93,60,209,69,184,50,59,112,51,8,140,126,46,118,247,161,59,36,61,205,61,63,143,236,116,40,135,128,243,193,59,24,99,84,210,155,32,14,87,210,51,179,217,13,16,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,49,191,84,220,148,219,148,81,221,27,126,75,77,245,127,44,164,228,44,229,204,112,9,184,60,117,90,117,59,18,67,160,43,210,226,189,227,206,122,88,90,102,40,79,245,26,77,56,16,251,142,178,155,67,25,75,195,244,228,201,41,98,4,77,33,85,59,47,1,185,249,175,163,22,184,253,29,214,55,215,255,97,99,81,218,72,30,251,192,237,166,14,52,124,240,56,15,89,76,218,52,199,132,66,53,221,31,50,19,249,144,209,170,33,157,218,10,73,77,31,124,152,65,45,174,167,197,19,28,58,230,17,206,205,241,158,62,111,111,144,104,105,226,34,175,119,144,220,95,213,62,50,84,242,234,55,251,10,188,180,8,245,246,57,90,21,81,111,24,170,227,238,247,114,150,254,55,240,104,100,165,48,186,90,184,32,5,243,142,221,16,74,50,139,8,94,180,111,184,20,6,82,225,204,4,32,97,179,52,155,28,105,30,98,115,180,151,27,73,95,173,191,116,86,32,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,49,95,102,102,116,0,0,0,64,140,103,87,66,166,138,247,159,31,154,36,121,27,152,208,193,182,71,14,162,66,134,110,190,60,11,96,145,210,46,198,95,108,227,22,21,195,139,240,147,205,30,117,36,166,25,81,67,39,147,155,237,59,8,108,121,44,115,80,21,63,134,227,73,231,126,174,61,98,20,150,255,253,37,63,92,122,100,59,77,90,38,219,113,174,56,146,157,24,83,226,159,234,123,140,2,232,45,149,145,108,19,155,216,138,244,173,56,43,250,71,246,66,33,59,153,249,80,120,210,209,90,128,255,196,198,145,85,244,70,240,104,143,199,50,213,73,51,146,54,30,61,126,10,4,93,101,150,216,149,79,229,242,12,27,224,27,33,228,85,100,232,226,122,182,17,216,186,114,187,122,134,198,82,59,5,192,57,90,9,176,118,154,17,226,119,178,199,193,180,95,74,45,233,188,178,46,160,162,13,134,80,217,211,161,149,21,247,130,185,30,181,210,219,218,189,104,39,246,148,162,189,148,3,49,171,101,159,133,91,159,173,109,132,64,178,71,20,12,78,178,231,161,233,124,188,66,10,59,222,121,111,155,117,167,21,154,142,187,119,202,36,174,24,40,2,186,245,49,221,178,166,130,8,59,40,168,203,106,153,173,160,43,134,220,54,78,93,216,166,108,139,69,1,34,227,150,81,203,200,205,171,214,84,20,251,222,235,176,176,178,86,194,79,191,60,84,129,135,29,210,192,225,172,200,213,42,48,204,118,231,75,243,120,198,171,213,196,111,84,229,60,179,25,213,128,153,216,253,77,207,37,196,139,40,2,230,140,30,28,65,96,64,181,19,157,238,85,132,116,58,92,19,177,25,147,93,53,129,5,116,1,212,14,13,79,111,49,248,192,107,243,73,166,236,215,25,90,75,34,72,202,18,50,99,26,128,172,157,170,144,245,72,116,69,25,255,173,143,176,144,53,144,188,53,176,244,29,77,137,110,163,227,90,183,189,40,110,96,23,116,97,130,251,224,174,62,67,44,211,245,181,92,71,120,49,28,47,7,115,210,153,236,247,51,233,52,247,184,75,151,70,110,144,227,196,200,126,177,31,67,53,141,14,75,37,184,149,244,47,175,20,37,163,41,88,242,172,249,9,215,37,171,85,120,17,7,110,186,187,239,16,211,86,145,183,57,87,248,170,149,49,208,110,174,2,248,89,26,112,146,211,7,242,223,32,215,252,173,33,150,45,6,17,209,93,206,10,126,38,215,110,166,141,90,242,153,54,151,91,107,248,39,253,168,66,96,3,116,13,80,90,216,108,158,18,51,67,43,158,183,33,138,102,132,223,242,24,131,117,49,235,159,237,223,81,234,154,25,236,242,248,109,61,103,123,118,50,57,37,107,24,161,58,37,148,101,208,95,35,125,75,120,55,101,214,33,62,237,44,78,74,53,28,212,45,16,51,212,12,116,191,250,51,133,223,133,58,157,170,20,31,217,87,12,205,8,239,115,103,253,118,13,4,215,108,236,254,125,188,142,82,229,83,188,237,243,200,124,93,123,43,227,148,16,54,54,45,76,248,126,39,23,229,21,198,91,179,220,110,27,214,157,30,175,184,38,53,63,38,19,86,24,249,255,208,210,51,30,158,25,20,22,239,161,174,254,149,117,213,81,227,74,152,243,4,171,43,214,174,58,211,82,169,115,22,2,171,15,83,0,24,57,21,24,216,43,200,21,147,123,37,194,15,152,179,129,42,170,65,48,14,36,222,136,239,56,105,26,223,99,134,196,125,69,148,254,217,229,135,70,208,247,17,109,56,216,250,95,30,79,239,28,216,201,131,152,4,204,148,109,44,221,235,85,126,162,130,153,145,159,235,89,42,232,36,190,31,113,193,127,47,192,211,58,78,101,146,41,58,38,187,59,237,62,167,23,250,164,34,87,48,200,124,231,97,187,242,95,151,171,3,2,63,178,120,60,111,238,57,52,247,122,93,60,54,22,160,160,203,58,214,221,169,140,29,85,14,40,73,52,181,182,247,12,46,144,77,52,126,126,98,36,104,48,20,99,181,128,145,91,4,224,78,181,41,191,3,142,113,235,217,125,57,3,61,166,25,216,171,30,221,29,2,124,111,156,78,143,77,22,43,95,193,220,144,3,147,191,40,21,44,64,242,226,117,74,133,94,89,207,193,180,26,8,2,13,2,253,57,56,113,2,241,9,216,249,202,242,244,245,252,207,114,196,62,130,50,184,151,182,35,1,162,29,29,150,73,5,185,185,111,223,254,159,117,20,25,125,151,88,154,197,31,105,22,133,4,168,120,35,202,224,37,70,79,93,168,4,162,156,224,214,219,200,65,52,46,167,226,98,97,237,116,178,248,126,233,203,47,5,243,254,179,249,87,158,4,25,144,86,251,185,217,25,26,56,0,158,69,107,255,195,5,106,249,112,162,118,189,29,206,190,137,215,141,12,87,75,185,181,51,144,110,25,172,246,20,20,234,168,113,193,18,38,6,195,197,19,55,107,211,251,119,149,78,160,197,183,76,128,7,0,182,41,216,63,89,193,129,156,36,97,137,106,119,121,35,247,233,35,207,45,252,132,98,233,194,209,103,202,88,180,118,127,92,136,12,251,208,53,70,142,137,184,41,12,202,52,69,138,139,225,68,105,158,50,213,34,6,127,110,111,53,122,217,208,226,239,173,23,20,106,46,243,175,22,171,198,253,244,19,148,37,116,10,61,209,61,232,6,178,184,87,51,55,13,47,238,121,47,220,39,48,194,86,175,219,106,95,32,80,73,241,59,223,67,37,6,170,90,105,44,237,239,166,196,81,31,78,104,118,212,103,55,63,177,188,121,123,251,186,107,189,122,17,49,28,152,234,73,85,243,107,119,181,201,138,165,59,204,194,151,165,11,192,155,66,36,183,199,87,159,23,43,178,219,135,97,82,78,97,211,48,59,116,44,190,175,101,150,42,90,8,121,64,149,92,130,158,29,191,165,143,109,235,140,13,77,216,71,205,185,24,112,206,146,139,213,169,52,243,149,14,208,99,192,158,56,205,227,241,55,227,219,81,194,151,135,150,77,246,128,178,25,115,64,89,31,161,231,159,168,83,24,34,208,120,51,71,248,232,15,89,14,151,94,179,35,141,27,83,120,70,100,2,217,95,216,127,174,210,12,196,153,61,174,92,213,15,90,134,204,205,242,97,81,186,2,190,99,8,51,107,99,168,126,208,176,55,19,150,152,230,189,14,237,186,89,83,9,235,140,186,228,94,148,207,209,210,179,247,0,35,48,108,31,176,53,213,25,76,29,130,108,198,21,223,160,58,231,23,252,99,163,165,182,69,244,182,210,26,56,237,27,24,219,45,103,252,103,85,40,190,139,198,233,60,70,207,181,243,88,38,253,64,36,254,28,94,70,68,132,111,86,72,115,92,236,66,68,32,249,187,128,217,106,66,215,56,242,29,86,3,180,77,229,196,36,113,113,91,183,200,182,100,148,13,124,11,13,81,45,247,114,247,181,61,208,228,249,52,239,160,154,162,199,37,57,53,164,197,58,164,36,26,70,22,74,225,235,40,152,159,252,252,45,36,23,147,9,83,222,212,232,9,139,117,122,18,27,129,208,123,167,81,154,182,119,53,22,88,52,155,44,199,130,72,67,74,52,241,3,150,56,217,86,215,123,33,68,1,163,239,191,255,179,87,16,133,198,90,123,79,233,177,71,204,206,238,52,255,159,161,23,184,235,46,73,6,176,230,186,70,236,25,41,109,147,11,201,115,218,12,99,118,254,195,5,189,221,220,98,61,9,21,1,148,194,66,104,221,182,207,207,17,47,138,92,221,252,25,203,149,211,221,206,178,155,248,30,246,67,107,21,25,86,66,180,165,238,147,147,51,187,243,21,42,191,77,24,220,58,195,156,98,58,180,71,156,186,114,26,132,215,69,74,213,197,55,220,170,144,29,239,196,18,55,177,52,21,122,59,55,144,77,183,54,246,152,57,208,109,198,143,119,30,112,15,209,173,56,121,157,247,216,196,141,90,101,65,88,20,203,206,225,60,53,194,144,128,174,118,56,78,6,56,102,40,0,166,76,67,211,60,131,115,46,200,216,138,211,224,8,157,186,196,86,57,129,209,38,34,118,251,68,125,57,236,14,146,4,95,41,117,79,80,154,250,112,149,73,228,113,216,73,52,154,1,224,121,141,147,55,131,179,151,205,131,57,164,251,238,125,243,83,164,218,230,222,141,223,222,235,53,174,167,28,88,221,17,16,169,40,9,17,52,217,22,150,23,165,214,92,61,209,105,248,161,24,78,232,225,227,60,234,196,173,67,0,170,139,177,34,106,87,141,235,217,66,94,227,79,118,222,73,106,186,114,68,206,133,75,70,114,121,38,236,96,65,79,58,204,70,142,30,104,6,21,228,124,39,183,137,27,243,93,81,122,56,209,165,71,221,164,229,205,161,220,6,0,103,231,2,23,89,137,134,205,111,134,248,88,49,26,72,105,186,207,35,103,153,114,184,75,229,37,192,34,86,223,81,141,160,80,12,159,163,230,145,230,215,4,165,179,246,186,22,169,244,133,52,165,207,12,234,98,124,87,200,124,99,117,98,239,23,167,89,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,255,255,239,151,144,100,75,64,76,93,11,42,214,57,27,19,65,43,33,22,216,62,164,187,149,201,148,186,177,80,23,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,50,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,14,51,164,102,85,24,96,3,61,120,164,145,213,235,71,51,219,186,248,148,239,184,208,39,74,166,251,223,25,179,77,125,45,243,244,156,118,204,110,82,237,143,151,66,4,34,230,84,93,135,33,192,3,161,160,33,46,210,130,116,89,198,150,97,20,101,42,98,45,45,38,54,216,132,178,96,227,123,20,15,193,186,158,30,117,97,149,241,75,86,227,229,144,32,251,238,35,161,130,19,112,100,97,205,123,243,188,165,215,88,129,230,127,159,189,95,22,94,36,165,62,43,241,255,108,2,89,35,38,66,241,193,168,177,198,186,52,107,186,40,52,74,204,26,249,203,215,188,238,176,32,183,147,241,198,44,214,83,32,229,30,35,223,235,108,150,128,253,70,91,14,23,243,44,94,92,116,73,62,32,90,245,218,212,58,16,232,228,89,174,161,52,30,21,204,68,67,249,3,78,162,193,93,97,106,10,65,109,150,2,178,196,85,146,109,155,4,243,152,155,82,196,158,83,9,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,33,207,91,153,138,15,139,192,74,170,60,225,29,165,136,52,117,255,183,109,19,180,186,120,38,173,68,131,168,50,79,75,51,14,11,99,121,199,134,143,86,1,217,118,117,38,2,223,202,213,54,193,125,21,165,46,138,87,29,189,135,172,183,2,28,156,213,157,194,102,207,171,107,12,190,88,150,204,211,36,103,162,185,98,12,85,176,94,108,211,188,75,80,82,83,117,12,96,125,236,127,47,148,20,200,157,179,19,162,239,102,77,168,189,154,33,107,88,33,171,121,254,174,49,116,112,245,64,10,191,14,62,71,226,46,39,15,38,182,144,69,254,27,25,47,145,128,196,146,5,37,153,36,56,217,4,11,31,46,127,17,222,32,20,131,253,116,228,252,53,98,162,134,27,138,215,179,19,26,97,39,193,106,123,125,25,184,76,135,196,172,47,18,236,51,187,172,154,241,147,161,207,18,88,15,62,167,198,145,90,166,188,43,36,216,180,179,54,7,150,142,174,175,16,39,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,50,95,102,102,116,0,0,0,64,214,90,137,226,146,231,40,124,5,150,178,77,250,118,75,100,21,229,183,87,237,71,199,69,60,1,128,251,249,47,26,23,9,33,46,108,163,250,193,5,157,160,135,90,19,166,82,83,238,190,102,63,248,171,116,56,227,81,42,128,128,19,134,15,37,180,39,108,225,191,138,154,52,221,19,238,223,170,4,151,233,48,120,219,54,195,15,122,179,252,163,106,114,55,203,6,102,156,97,72,96,170,82,21,65,30,103,125,89,164,120,53,179,14,0,102,14,173,87,249,13,13,203,20,0,66,179,92,220,76,4,119,143,105,126,224,157,166,62,240,103,148,7,115,126,145,107,32,37,110,144,154,193,237,31,102,201,75,101,12,193,123,32,101,120,111,211,199,176,170,222,21,124,169,221,234,81,46,118,94,26,210,49,24,25,151,53,2,48,122,79,48,156,252,161,141,115,167,94,246,229,152,215,65,68,84,32,227,46,103,23,101,121,65,49,121,116,157,103,207,221,165,27,32,33,36,174,88,116,107,156,187,129,177,237,67,168,77,35,156,117,105,166,201,0,78,215,198,158,99,151,167,34,204,242,83,123,218,181,105,89,9,53,246,1,127,134,145,161,224,175,133,203,12,41,63,161,96,43,15,54,179,74,53,62,181,159,44,192,180,181,161,24,37,166,248,110,227,87,149,164,127,96,33,148,117,50,171,142,24,119,3,217,171,69,45,189,85,64,64,227,144,244,109,207,108,61,146,20,179,8,0,142,185,167,144,99,190,13,48,29,95,175,255,209,208,98,143,153,194,195,16,191,236,171,215,163,24,33,137,70,104,176,89,213,212,23,93,143,83,63,249,212,127,6,10,208,249,75,91,232,86,16,16,79,64,227,38,127,135,238,69,85,91,42,196,51,225,171,52,206,150,245,108,125,92,212,99,166,139,31,3,227,133,188,71,211,81,70,211,99,28,23,162,132,71,161,157,99,50,204,126,87,73,250,0,136,117,153,157,9,140,164,33,100,219,91,12,26,250,116,202,29,166,161,201,216,162,180,126,54,89,132,148,46,223,248,53,118,37,9,143,105,252,229,52,51,47,52,18,180,249,24,153,149,160,27,149,96,136,179,49,73,180,254,18,247,210,68,129,156,242,10,167,97,224,108,117,53,70,164,54,187,200,50,32,52,211,193,130,255,196,63,209,224,147,175,119,129,110,213,134,99,60,244,149,107,63,114,24,95,6,222,70,77,144,95,226,230,63,22,221,18,80,189,17,118,210,52,53,23,219,117,135,18,237,246,222,228,235,103,36,182,68,35,16,34,222,174,148,168,35,19,138,219,144,214,15,84,61,207,172,31,94,125,99,162,109,34,79,181,69,251,191,142,97,179,58,169,189,30,209,196,206,22,200,194,248,83,45,71,153,224,168,206,27,48,36,86,217,88,17,82,17,88,138,20,101,32,42,18,250,164,93,60,103,132,187,67,72,242,103,141,33,68,11,151,234,230,3,220,165,19,140,20,43,249,242,106,168,11,41,227,90,225,146,194,1,149,75,63,203,185,191,78,95,178,37,191,141,212,181,70,116,86,47,3,213,16,27,229,16,68,45,106,157,148,93,135,44,96,233,45,40,111,55,163,142,251,198,190,69,250,122,217,97,96,186,221,212,4,43,154,195,12,90,79,175,18,140,210,53,13,41,143,220,164,214,25,80,107,85,207,251,15,224,144,96,206,150,172,0,231,238,233,77,54,66,120,156,9,18,185,71,217,34,144,180,189,114,53,64,140,193,59,231,232,235,239,92,148,45,112,227,237,108,172,66,215,24,149,88,31,94,132,191,182,242,50,138,202,83,5,120,105,177,249,217,218,188,151,150,178,215,141,10,177,137,119,142,58,23,15,16,21,122,4,105,32,123,45,154,156,92,230,12,187,230,42,13,221,178,119,129,106,156,118,81,118,173,49,224,221,19,192,130,129,176,113,71,60,211,118,135,81,85,134,22,24,187,28,137,196,246,234,165,238,245,29,159,164,136,251,202,143,9,7,84,99,3,229,17,200,220,100,123,190,151,99,128,116,103,60,136,175,237,75,155,116,248,204,54,174,30,63,220,234,43,211,228,139,31,255,104,248,92,55,132,123,94,223,64,123,142,254,158,193,92,159,34,145,252,127,123,184,221,251,226,41,16,160,124,238,32,121,239,234,27,3,56,57,220,5,203,253,95,119,176,166,211,156,64,77,14,245,91,107,126,21,102,151,26,215,196,138,235,248,222,94,69,179,58,30,155,151,113,244,135,168,23,22,136,192,181,32,217,253,76,104,27,20,94,67,69,224,21,101,30,3,17,34,164,212,234,235,99,185,141,248,27,105,66,234,188,193,230,235,229,150,99,54,43,206,124,217,38,85,26,27,212,247,216,247,157,205,147,119,197,46,159,51,179,70,103,156,247,140,160,253,200,210,89,229,110,244,2,250,53,17,222,4,60,183,15,35,148,145,186,124,52,186,235,153,159,60,155,221,117,146,191,74,12,241,217,42,242,208,87,3,71,202,178,42,229,31,49,25,158,48,236,45,65,78,207,144,38,48,214,202,145,66,199,166,235,158,106,6,253,43,188,237,63,238,21,138,9,197,244,5,185,234,70,237,18,160,122,158,61,24,147,171,215,219,33,98,190,4,71,182,145,218,209,4,74,153,235,12,147,164,1,126,158,255,185,106,172,137,154,210,126,197,190,159,146,34,83,47,113,131,171,238,250,35,205,154,35,162,93,23,48,247,103,0,148,132,62,55,108,162,51,132,200,224,178,9,165,241,154,191,29,231,121,148,44,97,240,6,20,247,169,155,41,157,47,36,202,118,0,62,37,65,179,227,101,247,68,85,169,158,110,193,107,160,215,90,23,228,92,166,68,7,19,15,254,169,193,60,112,6,102,71,163,17,20,140,59,69,24,62,216,69,208,4,250,206,189,57,205,49,15,224,13,12,201,45,179,179,144,103,224,71,252,169,156,170,173,250,71,153,155,205,136,213,185,150,107,45,103,116,146,16,101,188,7,33,108,80,177,118,204,192,132,161,16,27,176,79,236,86,0,181,66,139,171,201,186,149,184,126,14,213,12,123,64,206,20,139,109,34,93,206,70,239,241,104,8,237,221,72,155,212,49,165,158,192,235,201,204,132,167,104,153,49,179,243,30,3,52,123,230,54,248,231,148,231,117,229,15,250,137,29,184,233,29,92,193,231,42,207,48,147,197,162,161,2,92,132,53,223,37,75,169,24,182,112,132,16,139,195,155,42,79,70,8,117,39,65,45,49,30,64,20,4,94,212,73,128,224,61,140,98,86,252,86,198,216,97,157,126,7,234,151,58,20,225,252,19,127,57,196,91,50,147,122,135,212,181,76,71,150,128,119,172,57,18,241,81,191,125,17,164,217,109,47,142,217,118,187,123,218,236,112,216,64,124,16,237,13,59,240,172,13,105,82,37,80,163,42,61,225,31,203,105,170,63,201,121,130,216,27,219,97,136,140,199,193,242,254,74,123,110,225,164,230,110,174,6,53,169,57,199,76,43,129,235,3,118,196,17,123,212,115,88,4,72,240,103,221,88,221,35,48,9,132,110,163,25,45,63,48,52,225,33,90,92,244,81,123,15,196,222,11,138,134,100,251,102,118,149,50,187,82,75,18,227,184,249,146,19,62,237,69,239,152,186,195,216,68,1,186,27,176,10,0,74,38,166,221,33,140,108,7,183,128,154,163,146,10,150,119,179,253,0,0,106,49,151,187,3,208,35,60,188,125,173,215,144,241,180,212,123,252,255,129,226,20,145,141,239,18,203,36,53,92,42,3,179,149,121,238,72,219,238,167,6,143,47,97,89,139,80,99,145,251,161,208,1,163,52,88,155,173,78,181,233,35,160,49,228,254,196,199,26,86,49,239,26,167,52,96,141,87,186,47,146,117,5,92,83,128,90,160,167,162,182,71,98,61,252,44,235,110,128,162,166,116,188,177,194,43,96,200,253,133,163,192,102,68,47,150,54,7,151,13,223,210,244,250,122,131,47,43,172,6,160,228,149,4,95,139,156,173,228,54,29,239,69,236,136,216,223,105,63,213,124,134,209,39,181,246,243,136,2,58,213,116,170,196,13,116,91,80,201,198,126,126,4,227,140,47,96,240,49,141,44,18,235,63,111,162,3,8,84,228,24,92,185,17,87,253,251,124,118,169,217,162,138,26,127,46,191,0,1,174,72,177,171,240,4,215,74,50,253,170,177,219,77,63,118,90,19,188,209,136,76,194,100,1,144,47,58,19,131,175,126,24,31,207,162,247,20,92,108,204,174,212,131,15,207,64,247,1,235,98,134,213,166,154,194,111,248,82,215,27,31,33,49,184,186,221,159,127,201,31,11,30,197,163,77,43,182,6,93,119,111,118,155,113,193,161,28,192,219,127,8,114,208,130,132,82,77,158,13,69,29,14,159,4,111,7,64,90,37,3,46,203,20,171,185,123,238,102,81,89,3,69,53,101,105,199,109,37,113,103,164,81,106,55,155,138,101,96,252,68,62,1,149,134,100,231,136,40,84,219,214,200,81,239,214,75,216,107,64,162,0,176,34,65,26,141,204,184,10,123,60,110,95,4,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,255,255,63,180,196,250,247,105,25,190,170,191,76,54,82,65,135,164,153,133,123,173,10,235,116,209,46,124,41,91,37,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,51,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,30,35,157,169,95,228,105,148,207,233,229,251,4,60,63,43,10,160,109,12,169,117,31,103,96,110,17,210,172,146,65,210,37,183,204,247,224,211,98,27,241,244,230,26,132,22,49,174,162,172,121,177,33,207,20,62,103,111,74,129,251,123,227,171,25,30,144,243,107,127,80,58,16,143,172,5,107,133,120,193,89,122,72,13,67,85,3,142,160,112,205,168,116,74,152,178,38,153,81,1,53,104,92,25,165,161,184,10,207,25,195,54,90,166,103,151,52,152,10,201,136,155,227,201,197,198,218,145,7,189,200,149,47,157,137,50,100,180,115,40,87,181,146,36,121,178,231,212,187,128,58,80,195,171,216,95,198,63,174,26,22,57,181,17,84,26,103,166,30,62,31,170,234,59,130,79,208,200,52,162,86,174,228,99,189,237,148,89,128,84,183,234,13,180,160,231,74,206,202,206,6,68,44,214,95,236,250,89,57,67,40,113,72,208,8,155,232,215,218,100,113,213,99,153,2,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,17,222,98,86,144,175,139,77,116,167,138,189,116,12,169,8,30,189,234,116,216,64,38,233,87,187,142,95,52,224,12,146,10,74,51,8,15,192,146,198,82,156,137,158,245,49,183,133,133,176,222,207,95,231,48,18,81,186,85,176,229,246,106,184,22,227,111,12,132,20,165,167,51,2,196,179,14,195,111,114,206,226,15,116,62,97,66,194,23,185,210,136,108,40,182,177,9,104,174,254,186,43,153,200,158,239,183,174,170,46,37,253,205,182,240,233,76,30,59,135,47,142,188,103,27,172,115,210,40,68,55,106,192,246,107,175,223,220,252,144,34,147,85,15,175,170,112,172,197,53,11,0,245,125,199,209,26,51,160,73,26,200,74,238,155,121,142,59,37,83,81,15,143,12,102,228,87,148,35,223,42,8,97,236,250,59,11,216,96,30,151,121,34,77,95,24,165,197,42,19,61,77,68,227,25,92,237,217,238,25,48,16,57,230,60,181,207,81,197,204,111,157,234,202,45,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,51,95,102,102,116,0,0,0,64,35,78,187,82,59,37,0,36,159,227,108,143,178,14,98,127,139,139,229,145,187,218,16,246,184,215,52,9,122,28,155,95,168,94,69,163,171,84,87,255,142,3,13,132,17,3,188,179,111,155,52,148,33,219,29,104,237,112,103,173,167,61,241,53,99,233,160,154,96,107,127,53,107,148,232,127,69,241,205,224,120,59,21,69,191,77,141,86,78,166,101,53,250,242,9,11,227,10,46,15,192,75,40,14,102,215,102,72,63,102,117,76,198,163,67,177,108,195,230,103,32,31,228,72,200,110,112,51,199,82,24,85,75,236,111,183,165,107,23,23,139,164,44,84,16,207,245,46,149,23,194,120,13,175,185,143,207,97,19,84,31,15,94,63,206,194,176,24,128,10,252,30,122,232,179,248,64,123,19,53,59,115,25,215,121,86,234,29,17,142,163,70,10,16,135,120,36,185,56,155,180,112,28,54,158,42,247,166,125,188,142,147,105,97,55,124,86,115,167,40,166,63,62,12,14,157,246,65,167,154,243,253,225,140,110,104,47,206,158,113,33,226,38,37,97,14,123,90,133,8,32,60,81,55,17,1,94,38,176,59,16,217,127,91,254,220,197,32,162,180,20,181,206,193,25,89,7,129,140,245,17,6,205,166,133,208,185,92,166,194,254,215,195,93,102,134,36,148,113,110,234,130,130,157,89,63,131,103,255,244,154,63,156,199,104,91,64,141,48,2,245,96,7,31,106,249,49,56,238,95,227,45,113,226,188,157,78,16,45,141,11,199,251,157,248,192,93,39,168,133,28,44,187,77,47,157,245,153,5,58,221,224,217,119,223,244,116,140,247,138,197,23,77,148,67,57,108,94,72,146,207,250,176,65,143,49,87,60,222,98,173,16,62,47,245,188,188,151,164,246,153,178,213,164,42,19,136,170,91,44,75,78,151,250,106,21,169,245,252,213,94,238,97,15,246,191,192,16,11,172,145,170,133,232,63,71,84,8,115,148,242,246,41,10,205,164,65,54,9,33,244,206,114,250,172,165,38,135,27,4,227,0,80,89,134,45,62,246,233,68,203,143,142,8,26,134,16,46,27,53,36,190,164,51,76,38,157,80,59,112,254,212,36,221,159,165,158,160,14,119,171,121,26,64,33,15,161,155,61,130,244,43,162,58,212,152,154,89,169,22,216,231,245,185,202,60,51,109,139,20,151,184,8,65,184,82,214,225,4,46,181,144,81,76,201,194,240,185,79,89,85,75,127,18,32,49,82,110,210,14,195,189,195,17,124,151,141,186,85,202,127,238,147,28,168,13,17,121,50,139,153,37,156,173,50,66,186,6,37,5,109,110,159,206,26,117,90,64,43,178,119,146,136,66,182,71,240,66,25,86,210,137,232,98,8,252,31,33,72,55,17,231,72,26,56,97,62,10,191,133,99,216,110,6,220,230,24,151,108,71,177,52,79,119,135,228,100,128,123,86,137,42,138,211,175,113,130,62,219,33,113,26,106,204,123,137,55,200,202,226,236,47,225,97,6,56,145,58,173,57,3,107,144,234,140,136,46,30,50,35,42,68,118,3,151,152,170,246,68,199,174,75,234,59,34,130,2,182,19,82,7,177,143,5,178,48,154,48,61,119,76,110,90,130,237,67,209,181,200,243,34,207,144,3,249,29,242,50,79,121,214,162,229,100,25,50,142,136,219,100,162,106,8,138,134,102,63,179,54,226,179,59,218,236,200,153,134,41,70,247,226,21,78,177,41,86,231,255,96,6,7,250,83,5,50,58,211,253,249,49,226,138,232,180,110,161,128,138,78,19,220,193,33,212,210,240,182,36,43,240,224,244,117,236,176,12,174,137,157,105,70,135,91,61,93,144,213,212,240,169,89,47,95,76,239,149,55,53,249,255,197,233,182,69,214,90,146,251,13,80,228,182,221,203,61,143,91,80,190,164,42,11,30,25,207,140,198,225,136,74,38,243,3,34,32,238,62,117,195,210,91,148,44,197,255,115,216,149,61,149,70,61,179,236,118,21,125,90,146,152,183,203,137,13,8,114,96,0,254,134,89,162,59,105,40,48,34,237,10,199,132,243,172,34,8,45,203,13,208,29,249,65,8,187,56,210,244,154,218,98,57,39,255,171,218,93,130,41,236,167,173,61,19,69,241,7,147,221,189,39,114,55,40,23,126,210,170,121,154,166,243,192,81,141,37,16,82,238,219,51,250,201,26,98,79,25,134,171,229,130,220,65,171,231,247,217,51,137,244,73,138,36,234,67,254,156,108,166,25,231,208,114,78,192,55,43,35,85,197,251,30,85,221,3,123,220,108,132,149,117,137,171,99,106,200,255,134,213,125,125,204,123,104,134,135,26,169,154,139,55,153,68,16,148,29,38,12,48,29,24,153,182,53,98,129,13,183,138,191,248,251,102,201,200,206,245,168,158,132,212,135,229,11,84,17,120,231,20,215,2,84,68,222,176,44,124,44,96,229,126,203,101,114,44,83,48,248,37,17,72,42,69,230,59,192,149,1,234,78,65,21,94,85,4,170,127,212,38,49,199,120,215,131,253,234,253,67,225,31,187,23,5,112,147,226,18,85,24,249,94,117,87,39,181,148,198,109,231,46,93,14,215,146,34,63,227,252,136,158,136,75,162,31,185,10,38,173,24,24,60,195,230,53,46,185,253,72,51,237,74,198,108,38,182,155,34,69,114,18,40,243,193,44,129,135,225,113,201,242,14,8,37,2,145,102,64,56,140,64,214,82,233,186,59,216,150,120,118,34,240,27,105,213,204,88,236,85,86,201,73,157,42,46,77,69,136,173,6,206,5,207,236,209,1,47,17,171,211,72,85,62,195,39,230,22,32,248,180,238,172,232,201,35,163,12,152,139,224,66,29,68,99,134,54,112,174,161,37,11,246,57,226,20,225,84,21,105,89,29,97,170,202,214,51,182,71,170,158,153,85,242,81,190,137,226,37,210,196,76,34,114,57,174,169,231,111,104,130,229,94,83,68,241,90,189,8,200,66,19,123,236,214,226,0,115,116,224,179,72,193,127,91,156,174,19,136,37,41,90,146,121,231,22,38,48,72,59,208,7,28,244,90,192,123,232,55,71,98,17,99,56,154,176,206,84,234,52,130,182,145,193,56,47,79,158,86,113,127,129,135,76,0,136,131,192,78,188,59,35,189,19,74,43,71,160,17,156,70,100,73,104,56,8,33,15,139,83,136,90,181,179,101,0,157,170,107,1,77,45,89,139,103,164,209,212,190,200,190,146,131,46,179,250,28,82,146,168,249,41,100,249,80,74,201,232,140,135,31,245,64,21,52,251,73,233,27,121,255,38,20,112,164,131,193,93,249,24,168,174,51,206,141,71,241,50,42,88,188,22,124,216,172,155,28,38,161,127,144,74,207,31,43,198,126,12,241,49,50,215,73,56,105,54,68,193,1,31,33,117,7,54,28,9,83,50,34,96,144,85,97,58,69,58,72,55,189,165,125,236,67,117,74,134,201,154,10,121,122,117,89,185,237,40,75,208,107,225,19,25,62,234,211,27,94,178,237,165,114,217,20,189,190,24,105,147,227,161,150,154,39,62,13,52,51,244,60,168,228,3,78,75,65,115,88,233,171,69,184,132,113,52,204,78,161,52,223,144,243,228,23,213,40,242,29,58,88,57,140,197,189,205,41,61,66,181,103,37,29,182,118,147,230,12,164,59,107,108,63,47,218,166,18,59,235,189,255,140,38,70,171,156,177,15,26,233,72,5,250,7,138,96,72,47,95,177,178,107,7,152,20,119,116,30,72,114,90,113,63,70,131,95,77,38,55,233,36,55,161,150,255,148,156,18,186,57,64,144,15,23,30,130,208,222,139,46,136,173,3,181,10,72,199,9,55,24,84,42,57,10,176,113,163,142,222,167,191,140,10,219,157,168,36,142,3,170,253,65,100,151,14,41,78,232,199,175,171,36,146,171,85,194,99,197,253,80,145,163,112,32,47,64,58,214,45,235,49,12,113,208,220,117,27,5,54,240,108,86,73,14,240,129,46,66,66,113,7,199,232,55,254,149,203,223,65,91,7,236,33,47,0,23,132,206,75,28,25,220,224,62,82,119,161,91,10,12,47,144,66,78,113,3,54,223,166,72,62,67,164,249,39,209,131,131,111,45,143,53,45,186,51,64,229,80,8,245,61,61,137,172,42,234,118,119,215,158,33,196,237,49,59,166,221,181,133,28,141,252,192,210,22,222,228,233,136,186,186,143,49,147,215,20,120,102,243,173,47,4,185,79,79,20,153,251,217,98,7,83,36,237,144,139,23,205,20,239,221,207,34,246,80,69,120,36,147,54,73,162,141,60,13,76,60,167,169,147,32,85,14,132,248,39,191,151,177,205,98,149,60,173,99,129,3,238,167,80,206,206,220,109,95,188,88,0,118,245,240,66,180,142,108,201,150,211,172,149,54,112,103,1,8,128,77,99,3,70,61,160,191,57,125,56,25,219,241,165,187,73,248,54,147,209,9,241,151,179,3,255,102,61,95,29,80,222,55,144,38,141,105,226,28,83,100,103,153,28,124,91,187,149,115,146,243,149,37,247,120,79,145,125,194,111,78,3,86,111,97,224,15,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,255,255,159,60,3,175,96,2,118,101,208,12,219,254,96,18,117,156,144,62,217,203,184,240,179,167,231,202,82,1,3,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,52,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,46,19,150,236,105,176,115,37,98,91,39,102,52,140,54,35,57,133,226,131,98,50,110,166,118,54,39,196,63,114,53,39,30,123,164,82,75,219,86,228,244,89,54,243,3,11,124,7,232,209,209,162,63,253,136,90,160,12,18,142,157,49,48,246,30,215,245,132,170,209,122,62,72,153,166,170,242,142,220,115,242,57,242,251,16,73,113,42,245,138,183,107,88,116,53,118,41,146,32,239,233,255,76,71,18,225,36,41,64,35,237,186,92,10,106,80,212,136,54,61,139,53,118,197,255,253,170,100,25,56,160,105,182,136,76,170,147,253,44,40,122,32,89,46,249,152,247,236,136,80,84,233,242,101,234,146,182,43,60,80,13,80,139,55,43,50,67,49,58,178,160,246,91,147,142,118,84,165,131,165,212,29,52,67,248,244,225,255,135,109,27,5,46,84,117,138,66,55,135,49,175,87,107,4,207,22,157,122,4,225,246,158,188,196,233,234,132,230,188,95,113,89,119,67,44,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,50,238,105,19,134,227,129,188,225,53,73,83,69,188,177,16,239,215,117,253,30,132,215,169,65,243,120,109,161,0,25,61,18,134,91,173,164,184,158,253,78,55,58,198,117,61,108,44,64,139,134,222,65,185,188,245,23,29,142,163,67,65,30,110,17,42,10,123,69,194,122,163,251,247,201,14,135,185,11,192,53,35,102,133,112,109,212,37,195,158,232,197,136,254,24,238,6,111,223,16,6,148,168,154,49,176,75,144,57,37,251,120,203,82,238,48,173,45,15,19,45,244,41,108,225,116,163,255,22,201,95,150,57,11,169,55,176,147,67,145,255,39,143,5,47,196,96,148,248,101,241,102,197,195,181,158,42,71,18,20,35,178,116,200,180,245,167,146,77,112,64,124,151,253,65,241,251,20,45,93,46,79,87,93,120,94,94,99,58,120,129,195,50,173,138,117,173,92,110,176,148,57,5,181,170,49,75,185,35,124,97,226,196,241,91,101,51,67,227,209,111,25,215,32,4,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,52,95,102,102,116,0,0,0,64,109,65,237,242,39,130,49,0,133,223,250,99,145,237,220,33,234,40,143,71,102,156,105,125,184,205,84,115,161,29,239,22,71,156,92,218,179,174,236,248,128,102,146,173,15,96,37,20,241,119,2,233,74,10,199,151,247,143,164,218,206,103,92,92,162,30,26,185,115,12,86,20,51,188,118,139,243,31,203,82,101,158,51,48,254,29,91,235,18,240,88,225,244,252,172,63,97,121,250,197,179,226,223,74,28,1,32,141,109,16,166,139,54,145,8,126,129,31,198,142,92,209,46,94,3,234,145,58,175,88,44,99,75,142,187,194,249,222,195,208,212,251,181,188,138,3,252,184,225,239,2,46,220,143,190,21,125,140,148,10,125,162,155,25,36,22,142,105,79,106,25,40,120,39,138,6,48,200,176,11,92,20,1,150,218,21,159,57,242,161,247,92,121,35,108,83,105,192,244,131,20,185,26,164,64,233,1,147,41,106,135,67,16,199,141,55,98,233,24,99,225,39,197,40,253,21,63,11,2,181,14,200,100,73,98,128,71,31,130,151,135,11,170,131,46,90,191,94,191,237,11,147,101,63,248,14,63,114,170,45,159,189,6,57,216,89,146,188,17,184,17,148,23,198,7,112,0,22,77,107,154,24,236,85,231,78,11,44,143,208,71,222,42,119,204,223,141,150,183,180,9,63,64,146,54,18,88,168,147,162,175,164,220,195,32,45,28,176,77,85,6,49,26,224,112,144,68,154,54,156,4,226,11,35,158,130,220,9,203,104,67,233,247,131,245,16,39,222,67,250,16,23,182,174,178,114,179,37,8,167,226,232,73,28,161,44,158,147,2,106,202,180,14,99,48,176,222,34,19,232,67,80,237,66,209,34,203,49,101,41,48,99,73,228,50,169,214,30,5,9,32,127,184,223,68,85,220,97,100,13,218,91,49,12,226,67,127,153,179,216,89,192,172,124,103,56,224,131,178,37,87,214,179,135,133,141,32,155,76,139,219,97,175,242,53,110,39,96,247,71,115,227,51,89,214,61,227,250,200,15,71,192,231,245,128,35,2,53,167,30,61,216,137,116,28,246,122,222,157,39,149,130,48,190,150,161,0,80,167,200,2,242,72,238,116,96,163,198,89,238,112,70,122,145,10,222,6,163,184,12,169,81,137,172,117,17,1,224,144,170,176,10,172,162,180,229,182,98,149,186,88,234,173,69,124,15,65,132,151,67,11,27,197,81,69,245,129,145,184,114,148,185,235,212,130,80,46,10,112,232,110,160,17,156,229,65,36,150,198,168,151,184,113,244,44,11,0,20,182,129,138,39,37,209,137,243,157,253,245,204,10,48,31,63,184,134,18,19,52,21,58,223,21,197,221,45,45,75,136,238,133,82,120,1,24,236,235,216,130,199,146,76,125,99,68,78,203,110,113,236,29,231,97,91,46,98,170,122,84,52,80,111,249,144,210,97,69,69,179,100,32,237,134,133,27,216,109,146,207,63,6,143,192,12,227,231,117,157,42,29,206,54,222,104,43,237,203,125,227,227,53,154,173,155,130,201,118,238,71,96,254,80,239,76,135,73,40,120,71,146,5,56,44,26,220,102,112,238,199,98,114,0,20,196,103,29,34,163,230,119,148,71,189,140,110,177,226,33,7,83,164,53,109,224,173,66,150,182,139,86,110,5,160,228,52,248,48,180,229,97,13,168,158,112,126,110,164,75,239,229,228,22,255,203,26,52,59,65,20,82,188,25,227,26,122,137,62,75,4,154,216,179,27,73,40,141,189,15,4,7,48,232,96,134,239,213,84,210,197,13,34,43,36,90,141,44,213,18,146,229,61,28,158,120,196,63,5,225,222,148,62,50,180,234,2,118,200,62,247,118,20,23,176,136,201,161,254,246,179,200,239,169,138,168,14,145,157,56,78,235,108,60,250,91,97,58,106,239,55,125,150,132,194,78,222,150,11,19,160,77,16,19,145,188,238,134,247,211,110,234,154,159,148,147,20,66,194,53,93,139,232,241,106,14,94,33,244,96,193,29,30,123,45,130,60,217,187,226,224,117,114,5,152,162,34,244,174,132,241,77,102,80,221,7,68,204,15,32,204,86,102,116,125,23,151,3,33,65,128,237,74,37,79,161,89,196,193,116,130,231,121,198,124,110,248,80,183,137,237,14,67,242,97,29,239,191,136,147,160,164,244,43,85,103,25,152,207,211,143,18,161,13,152,253,127,54,111,247,66,81,189,56,130,10,101,152,42,20,48,26,21,96,226,89,62,129,128,61,162,191,15,226,255,155,63,166,197,61,183,127,130,55,164,83,23,163,116,218,187,207,210,246,131,90,94,21,157,5,55,7,141,13,104,209,3,148,182,7,170,171,45,63,197,249,197,85,197,69,31,60,98,127,55,174,87,104,105,67,225,34,44,107,6,219,3,247,49,40,172,80,144,177,149,251,19,138,157,84,156,39,163,92,113,92,84,32,54,149,148,79,148,247,22,145,12,109,145,84,217,138,185,197,177,253,35,88,191,45,54,11,95,9,128,51,160,216,173,107,160,49,10,244,112,67,17,173,250,147,243,98,54,253,232,130,252,26,114,82,83,179,152,62,97,84,159,115,170,207,57,69,195,215,241,171,38,52,143,252,129,214,108,238,25,150,3,70,127,138,171,199,30,74,203,66,217,15,133,211,53,148,14,59,77,178,204,152,0,74,82,209,32,197,185,111,236,111,180,33,98,114,33,79,224,84,50,93,207,186,105,108,66,96,87,39,189,95,115,250,234,148,231,49,39,63,41,181,112,87,35,46,125,123,249,78,156,110,184,41,167,97,2,144,46,191,253,223,1,136,198,120,204,163,211,182,240,171,157,195,171,118,176,152,250,174,33,219,24,1,168,86,127,179,253,142,14,176,66,83,237,164,185,45,135,221,181,158,210,233,249,230,161,57,8,253,73,145,183,173,27,255,59,53,113,74,151,136,132,238,19,168,45,231,107,48,109,26,10,229,142,122,90,129,195,65,52,94,140,190,227,68,59,151,109,42,196,124,112,198,134,192,92,238,5,220,82,230,178,125,41,252,224,51,33,31,224,143,144,47,103,137,225,199,146,104,158,42,2,87,0,121,14,248,143,103,175,91,195,172,219,159,122,23,92,167,250,63,98,236,45,175,6,199,172,114,26,48,17,19,201,147,240,187,70,14,149,37,48,156,91,21,34,232,190,211,7,164,188,226,120,174,51,149,10,88,239,184,152,199,178,43,203,37,48,237,56,249,128,242,97,107,50,23,175,49,47,253,15,198,34,170,178,141,144,52,253,207,142,94,172,245,199,17,251,60,12,79,36,87,177,100,135,33,134,232,34,222,81,249,128,251,193,106,178,173,46,56,36,204,23,67,163,48,239,47,59,81,173,81,171,130,125,192,175,62,68,130,53,145,102,225,224,185,21,201,188,56,161,236,216,190,240,11,28,162,163,36,31,246,109,193,124,170,206,109,81,146,68,108,145,60,119,131,62,183,112,86,108,129,64,168,87,58,16,114,23,198,132,83,135,66,13,123,228,79,181,79,179,63,46,187,20,57,113,125,36,38,217,76,111,230,183,121,11,162,22,20,81,255,255,10,98,161,196,86,118,99,57,245,249,30,138,140,19,188,4,195,186,112,52,253,238,254,152,41,145,247,120,133,119,61,174,13,138,235,175,27,222,255,136,239,121,172,85,206,228,199,254,120,223,207,95,156,8,16,145,163,93,162,196,253,18,23,186,3,104,96,115,56,12,68,157,84,162,64,181,141,70,29,123,84,114,236,60,14,2,160,81,241,156,243,243,117,23,18,168,70,186,172,179,32,77,104,84,136,219,128,55,68,140,200,127,21,207,195,57,190,162,30,229,4,203,64,147,215,211,53,80,16,46,97,30,159,218,123,90,8,220,140,14,232,50,33,250,134,7,213,123,105,110,17,87,139,213,172,69,77,1,74,146,29,152,88,10,105,103,184,168,235,236,193,102,50,102,237,254,122,84,69,240,161,254,233,34,166,215,102,134,182,46,14,112,1,218,125,66,10,32,184,212,248,177,202,77,64,42,240,249,167,143,216,80,161,202,77,92,28,58,218,43,112,224,86,125,59,68,233,117,176,34,100,141,95,134,247,203,119,202,77,154,72,159,111,86,211,228,81,208,210,46,101,174,163,192,122,53,80,194,0,2,72,108,102,90,73,245,16,183,58,45,48,193,226,199,181,113,234,3,215,240,14,155,55,8,72,54,232,53,84,174,84,22,84,211,114,75,21,129,143,156,123,93,78,12,180,140,69,132,118,202,158,97,98,218,28,204,36,54,153,84,0,148,238,93,179,122,178,127,196,71,27,89,159,191,31,60,72,214,188,206,148,102,68,182,251,185,71,151,182,127,234,176,48,128,216,49,22,150,61,252,96,237,97,222,229,42,88,233,13,246,222,198,16,80,90,94,23,107,106,197,233,50,143,5,52,93,175,43,228,37,137,160,135,211,25,143,184,21,163,208,54,216,149,239,70,12,112,67,222,181,147,163,94,77,220,125,27,134,76,96,66,177,149,92,155,243,159,30,1,157,131,128,163,72,1,111,195,50,39,49,176,60,132,45,18,21,163,197,75,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,255,255,239,88,55,69,13,44,67,198,111,162,81,251,151,64,187,21,9,174,124,58,31,32,147,175,129,140,202,11,17,0,0,0,10,116,97,98,108,101,95,116,121,112,101,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,30,82,178,224,80,236,86,255,211,3,177,3,253,2,113,15,85,147,182,36,251,136,237,88,101,236,47,202,18,129,23,111,12,107,69,231,161,189,134,192,229,197,248,145,4,57,80,162,210,60,113,221,199,68,184,232,187,151,243,90,21,91,253,204,9,243,94,63,176,136,209,45,104,112,190,22,212,104,76,170,143,59,75,65,217,121,185,184,162,33,15,96,201,204,192,103,30,175,228,55,6,53,128,113,161,116,228,104,245,69,45,222,122,215,184,237,214,124,204,188,57,247,203,8,249,147,184,125,2,76,66,26,155,218,64,203,213,216,71,41,238,115,63,7,249,254,183,140,84,17,237,132,52,125,163,198,245,123,4,122,48,246,50,160,174,250,189,201,83,4,124,55,138,198,45,66,148,237,248,154,223,204,129,102,125,43,238,201,43,239,39,100,14,215,34,255,51,79,118,76,217,188,192,119,127,70,205,147,80,129,197,107,112,22,55,156,60,41,21,9,21,162,20,200,22,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,17,175,77,31,159,167,158,226,111,141,191,181,124,69,119,36,211,201,161,92,134,45,88,247,82,61,112,103,206,241,54,245,35,150,186,24,78,214,110,33,94,203,119,39,117,15,152,145,85,32,231,163,185,113,141,103,252,145,172,214,203,23,81,151,38,14,161,192,63,11,36,180,219,32,178,162,165,223,155,137,152,33,13,64,168,60,140,151,21,8,145,209,23,166,141,252,17,82,27,200,233,94,117,112,162,28,140,80,132,2,187,85,173,133,159,147,170,57,121,147,126,50,212,40,232,222,149,230,45,182,189,229,68,77,170,248,177,73,153,73,5,29,145,96,87,187,248,117,174,91,158,27,60,214,156,156,204,105,152,78,48,11,205,95,65,153,55,24,240,140,244,129,239,129,186,241,147,111,95,230,161,233,195,233,58,254,177,103,181,131,38,0,34,42,221,0,188,68,127,149,106,212,175,65,250,1,27,160,215,219,146,21,17,160,14,180,123,0,139,40,204,208,57,156,25,0,0,0,14,116,97,98,108,101,95,116,121,112,101,95,102,102,116,0,0,0,68,63,116,37,210,253,76,32,248,133,76,106,55,99,0,186,166,64,161,224,103,116,243,36,14,192,52,171,131,82,66,69,23,205,165,255,221,186,49,91,154,219,187,239,250,167,188,231,226,165,182,205,152,18,217,194,73,34,84,19,232,23,92,120,35,171,73,53,239,10,84,101,236,233,79,221,189,165,238,217,83,133,204,64,11,147,57,181,49,209,233,131,151,72,93,22,95,105,191,200,234,228,134,1,88,67,90,59,122,180,103,227,142,117,219,244,74,46,175,72,243,107,8,4,9,23,253,11,30,9,65,220,138,211,68,65,254,65,110,185,15,251,44,89,41,114,31,219,135,104,236,29,7,167,75,129,182,21,11,54,14,5,85,165,176,204,200,24,38,18,235,163,3,128,43,49,207,115,148,59,177,216,143,98,154,87,24,204,202,109,82,167,3,192,213,215,183,17,132,170,172,72,233,77,89,144,167,114,91,145,188,40,8,153,1,37,115,176,241,231,28,77,114,214,71,67,50,29,198,190,54,102,39,124,56,6,20,120,171,92,80,169,22,160,12,102,182,78,190,42,153,191,249,249,187,36,56,184,66,193,149,167,74,69,247,188,20,52,224,121,241,129,159,220,171,203,143,248,240,89,107,251,237,218,245,7,106,152,93,242,152,35,85,154,200,97,85,225,160,177,239,135,168,180,216,78,49,142,47,64,212,142,26,255,51,156,14,209,73,151,91,192,240,206,251,45,73,54,138,242,201,12,30,16,80,177,158,234,114,80,247,246,212,102,123,174,144,158,64,239,138,118,10,202,42,165,28,188,246,253,242,204,200,137,138,154,77,249,118,214,237,182,64,8,40,125,212,20,17,232,144,114,250,251,61,204,93,251,43,5,240,202,228,207,97,104,101,72,187,30,56,31,86,177,120,255,29,124,173,190,105,51,201,33,177,50,27,42,10,217,157,41,89,39,147,85,168,142,36,238,247,220,159,18,20,243,248,18,33,215,216,180,150,46,244,234,51,189,73,62,172,118,161,155,232,78,153,95,187,89,103,110,218,84,91,57,243,112,184,251,113,37,254,114,36,225,84,94,206,46,45,212,112,1,100,40,149,24,30,171,184,29,235,145,98,188,237,167,55,177,149,126,228,235,116,226,130,4,41,37,206,3,76,237,228,239,46,103,198,242,90,78,127,211,255,12,66,168,140,109,34,82,35,25,51,108,28,150,250,76,237,178,241,246,59,86,43,61,35,169,2,122,68,203,59,177,76,6,131,45,170,28,110,91,244,245,221,25,224,44,207,105,113,109,227,125,69,68,168,167,167,198,31,1,67,45,46,15,34,178,173,147,41,32,125,66,64,50,200,16,137,48,172,224,186,63,149,57,42,203,140,183,63,165,145,247,231,42,137,222,12,68,206,119,22,182,65,22,91,241,11,228,243,107,103,179,147,241,157,80,80,213,132,80,26,58,98,165,117,101,156,125,92,220,165,160,102,29,155,127,73,104,2,183,195,111,14,174,41,30,130,173,75,232,76,151,56,185,133,70,179,72,252,197,227,26,245,237,92,54,187,170,26,158,155,37,21,222,49,218,163,196,233,91,64,246,211,184,236,30,11,138,74,37,171,3,94,147,169,168,197,46,147,52,102,215,134,61,226,96,22,2,94,225,9,163,16,8,168,153,193,54,102,122,109,233,192,24,249,77,62,201,2,0,135,161,81,125,117,173,71,116,234,206,17,185,103,49,67,220,230,86,10,143,116,56,188,225,29,119,75,146,204,252,57,79,65,20,200,219,178,248,114,127,64,236,3,4,179,232,35,8,134,26,98,123,82,152,210,211,46,87,139,108,119,14,35,238,210,214,228,240,250,176,196,24,159,153,212,247,165,96,23,112,151,96,50,50,198,80,181,141,107,33,4,79,89,64,229,193,223,79,44,98,50,20,111,214,243,23,160,178,216,193,57,164,110,247,45,107,44,44,27,127,51,39,23,166,41,41,220,88,35,247,92,46,149,187,38,50,243,195,225,113,36,138,82,26,71,5,233,171,168,98,55,141,29,193,76,230,138,118,201,224,109,60,231,232,177,247,162,51,29,127,53,58,236,197,55,219,114,177,186,20,176,59,250,222,55,48,73,188,68,219,163,0,210,66,198,114,163,248,234,172,40,170,75,179,138,202,65,255,6,123,4,43,10,17,44,136,172,240,127,71,255,73,120,217,61,192,151,5,255,162,143,189,193,202,199,205,23,58,93,44,127,176,62,199,169,141,112,81,21,90,220,240,97,104,210,174,111,28,46,129,207,1,12,54,92,25,183,165,132,226,54,171,136,85,66,114,61,53,217,71,92,236,165,102,230,33,129,255,39,111,171,236,196,193,52,215,91,162,217,188,156,181,88,229,238,22,108,141,50,184,141,67,191,133,71,124,27,59,251,134,243,52,248,231,24,79,65,21,2,53,226,212,123,86,23,133,148,102,43,105,205,15,196,91,111,171,159,151,247,232,133,15,113,168,21,149,174,139,154,6,22,0,171,111,51,108,82,53,92,213,150,159,137,132,208,192,166,81,142,43,91,16,160,101,24,162,192,78,145,100,84,65,186,154,167,4,197,66,65,123,215,116,159,223,25,210,44,18,182,232,121,25,193,173,126,174,79,234,192,157,173,192,54,138,3,193,91,150,89,62,81,91,199,148,50,59,90,177,137,212,162,123,179,163,187,186,124,36,105,136,184,197,193,74,49,248,36,31,105,77,226,203,74,118,0,197,227,63,101,139,68,221,141,180,87,162,186,84,135,247,126,107,22,41,36,172,197,122,24,97,235,152,192,185,46,71,242,52,195,11,160,74,180,235,120,181,209,181,194,243,20,254,221,12,143,145,102,210,62,70,0,148,83,175,184,164,50,144,114,32,93,217,200,24,209,176,151,142,146,228,50,150,0,21,159,3,75,160,172,81,175,125,138,237,205,186,109,232,22,168,71,196,205,118,40,157,92,243,129,161,130,48,41,31,211,0,21,194,17,158,119,73,49,248,175,54,193,88,129,111,21,128,91,48,124,142,195,232,162,95,38,86,109,125,43,236,84,67,2,248,58,32,113,59,178,233,211,43,20,73,181,198,95,20,132,68,65,142,149,78,124,34,181,22,15,182,150,46,76,238,149,134,151,49,173,219,159,202,107,182,243,204,13,245,84,46,57,125,36,29,17,28,10,44,244,81,120,97,112,72,144,13,55,148,244,219,248,66,174,100,139,71,224,226,241,111,80,200,44,1,175,236,46,250,87,113,122,246,25,4,38,31,217,90,139,187,13,170,201,134,94,46,227,220,190,118,55,208,9,252,112,128,114,11,238,105,102,187,157,53,198,86,51,162,220,148,52,116,120,189,1,144,184,29,45,69,8,235,111,5,19,232,144,246,60,188,170,232,174,154,175,30,183,111,253,92,171,155,207,25,55,133,162,232,118,115,129,55,46,67,180,66,75,39,95,12,1,195,235,4,231,45,0,175,152,31,251,62,64,210,97,30,45,121,124,85,78,133,136,57,91,198,150,136,22,202,48,129,46,222,188,63,116,167,216,59,193,75,198,11,99,14,98,117,236,139,142,63,46,221,197,148,81,111,12,26,37,4,33,127,125,26,154,166,121,2,136,192,151,111,128,92,227,88,203,243,100,26,27,93,138,225,57,23,222,201,161,99,29,85,70,197,91,103,127,91,200,78,36,121,171,247,108,129,106,193,160,250,243,27,55,244,91,241,18,153,210,198,50,172,44,111,2,187,14,183,60,80,239,137,12,210,142,180,126,138,205,156,21,71,122,230,90,193,82,191,18,55,119,171,145,217,80,172,126,63,188,68,78,137,199,49,157,39,126,38,78,33,177,83,51,10,227,96,39,132,171,107,26,10,147,255,17,240,82,154,156,107,240,90,48,8,214,89,193,90,216,231,141,122,216,28,22,143,78,56,239,93,181,121,152,39,66,195,48,102,60,62,133,246,219,229,48,208,119,152,149,89,94,149,30,72,6,121,67,110,138,110,36,11,117,230,62,99,63,199,248,238,84,126,143,253,190,11,81,233,29,135,144,123,45,16,238,145,48,130,216,110,50,180,92,157,240,104,117,62,125,7,187,135,56,100,0,223,248,208,152,101,185,233,180,190,145,173,167,23,198,102,192,10,68,7,71,101,60,92,159,245,169,1,177,51,7,176,34,172,178,139,147,146,9,190,52,94,250,208,44,189,30,58,166,31,120,83,10,25,159,250,44,242,13,45,207,101,42,60,96,16,68,168,179,137,231,37,146,16,240,133,7,146,90,182,58,183,36,14,197,39,229,170,59,46,194,235,232,128,32,92,21,120,242,185,227,145,248,95,165,10,250,127,232,105,74,70,100,169,41,70,70,125,180,175,52,86,83,1,9,132,61,59,22,173,198,52,155,104,38,221,142,146,147,46,116,235,31,112,30,85,173,129,117,44,189,252,62,74,6,192,115,169,2,1,231,253,81,117,89,0,206,241,121,234,196,229,247,105,168,189,101,245,138,169,190,49,1,212,193,138,36,145,74,199,71,166,192,104,108,136,166,15,163,220,210,247,208,161,228,151,132,242,243,148,159,127,230,163,218,175,45,75,166,73,214,193,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,116,97,98,108,101,95,116,121,112,101,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,0,0,0,4,105,100,95,49,0,0,0,16,9,7,189,101,40,63,65,146,149,170,131,124,180,174,156,183,142,32,255,187,69,201,142,223,19,137,178,68,252,230,236,4,34,221,0,60,165,210,133,75,74,43,118,44,190,216,0,150,242,207,10,5,236,224,49,185,178,137,155,194,57,198,121,38,167,161,2,121,178,29,243,136,91,113,202,119,138,187,66,190,152,204,14,16,4,142,248,245,101,19,156,48,60,0,25,42,201,147,11,92,21,176,251,189,120,88,176,143,82,252,183,58,35,230,115,38,241,214,185,149,54,105,124,79,183,194,215,46,201,242,155,176,250,97,96,194,32,131,106,192,75,224,143,140,247,77,166,113,47,124,235,204,69,101,149,83,255,233,138,3,4,112,174,36,231,51,60,125,172,204,148,169,15,13,114,34,110,6,117,195,9,231,26,239,36,67,56,174,132,114,162,50,75,32,170,204,216,194,157,134,144,175,230,21,247,90,116,77,107,47,141,129,139,228,194,111,5,22,211,42,118,180,201,7,111,37,122,73,95,188,35,100,173,76,168,21,24,33,174,119,122,152,72,158,129,181,210,170,51,183,173,235,219,73,174,7,241,248,66,250,95,255,114,214,2,178,35,169,152,223,43,87,66,205,248,58,115,148,143,206,241,181,35,116,82,66,185,24,211,34,255,115,255,159,196,201,119,254,145,152,36,44,196,175,12,100,102,106,60,32,91,91,130,148,66,144,214,218,54,5,84,94,253,214,105,22,163,35,206,91,150,39,11,187,185,120,149,121,106,104,107,21,118,112,201,203,107,105,133,119,241,35,50,108,244,243,6,132,154,238,176,116,176,15,67,122,68,252,10,96,5,82,126,204,180,208,248,117,139,74,10,181,50,31,49,13,100,175,141,220,83,166,119,217,60,101,1,174,56,130,217,159,81,133,137,225,50,225,191,217,64,101,79,63,27,26,247,143,81,43,53,0,90,47,125,0,204,245,133,105,138,20,192,63,4,181,101,188,83,119,10,156,207,235,60,5,104,27,175,223,85,147,175,123,22,226,7,173,192,15,86,51,84,193,101,190,106,117,45,121,91,62,0,41,3,142,216,116,220,21,139,218,133,22,41,130,144,4,235,15,255,15,53,109,26,151,86,85,175,88,55,168,75,3,210,135,40,205,114,223,247,21,0,0,0,8,105,100,95,49,95,102,102,116,0,0,0,64,20,136,95,195,77,154,152,231,244,131,240,98,164,73,17,96,59,209,58,249,111,110,102,154,71,185,225,105,133,48,85,7,36,241,127,156,76,178,93,20,48,28,238,65,29,97,23,238,104,145,228,179,253,177,146,221,145,58,157,114,150,7,181,76,35,78,75,173,93,121,87,113,133,128,162,50,52,0,111,213,153,49,230,183,168,225,21,101,44,75,243,162,225,25,242,39,166,47,227,55,222,237,129,17,4,177,109,247,170,172,63,199,159,76,128,214,151,10,242,218,196,87,99,50,132,18,128,74,118,0,75,181,244,117,243,74,143,162,129,199,65,249,117,100,122,96,56,198,95,234,204,226,21,214,144,76,78,188,7,73,86,109,200,191,18,116,126,165,195,131,16,225,165,132,39,201,20,42,227,186,143,57,153,24,117,17,11,224,5,175,75,77,100,89,108,119,82,87,6,171,131,208,113,210,197,135,84,160,190,13,232,176,240,239,235,176,88,170,215,25,153,177,39,70,166,215,54,166,200,138,82,86,42,37,82,204,174,120,121,89,214,93,244,253,225,213,47,133,230,195,58,219,80,222,11,17,226,38,25,235,150,98,20,3,194,160,142,67,30,155,223,234,75,233,28,222,51,244,31,249,159,227,116,111,177,36,5,48,117,227,125,188,245,40,234,48,46,171,83,97,76,216,151,12,230,67,255,36,80,99,245,65,180,183,201,179,218,145,63,31,92,219,45,62,33,247,248,4,103,188,109,163,62,128,6,144,114,180,101,45,88,27,19,205,45,41,227,128,88,144,203,73,97,228,166,109,41,222,9,23,34,236,148,21,229,165,172,114,19,127,137,148,225,54,113,155,178,135,19,103,25,232,233,44,41,149,136,198,110,64,47,81,78,17,31,96,24,237,229,77,205,173,227,73,72,95,202,139,22,156,211,11,228,62,1,7,166,174,237,232,117,238,234,14,241,143,248,2,156,224,7,138,229,189,57,217,179,35,204,121,248,115,3,155,247,215,94,2,128,129,78,120,59,0,3,57,224,135,76,109,84,53,137,221,46,182,145,236,111,114,200,198,253,194,18,163,203,142,249,53,30,235,15,132,226,233,51,83,168,250,73,74,13,142,118,39,121,106,162,211,148,74,139,65,59,230,101,90,177,180,197,20,57,245,27,47,43,180,114,226,23,105,12,150,200,212,9,196,167,135,213,40,242,133,111,171,138,221,73,143,97,8,243,15,27,218,236,114,20,246,210,170,7,130,234,129,97,160,145,134,113,202,43,88,124,155,214,4,48,168,172,37,182,185,252,67,18,241,101,34,238,56,34,203,96,188,121,83,178,241,69,210,169,15,31,116,249,79,60,115,147,128,43,224,127,67,91,56,11,215,6,13,173,23,9,170,25,253,90,14,223,38,140,251,18,110,217,99,145,114,6,71,15,229,202,14,26,128,55,83,172,6,96,138,0,182,139,73,81,43,61,251,86,15,32,94,169,94,20,157,16,101,251,66,165,233,218,231,54,247,211,94,158,122,25,234,41,158,192,254,161,0,205,212,88,230,210,115,228,197,75,250,227,120,232,224,251,226,152,195,185,86,179,36,63,166,13,130,28,142,218,111,95,99,181,237,40,219,118,148,253,175,160,206,78,9,150,226,106,65,113,168,47,47,33,95,243,29,221,65,103,159,209,170,32,73,61,68,140,150,125,73,181,5,156,151,251,17,15,103,27,66,57,145,15,232,1,23,43,21,48,88,94,255,108,30,231,12,154,11,99,53,82,105,143,102,85,67,177,194,163,254,61,34,63,105,137,216,208,75,211,240,142,243,200,51,79,192,32,179,156,115,0,87,202,94,40,176,160,11,29,80,97,13,46,71,68,236,251,200,20,16,83,98,14,103,32,92,228,213,210,210,136,81,102,71,253,229,122,48,255,217,134,52,182,223,115,106,253,212,70,69,154,30,239,183,97,224,42,64,41,173,183,105,101,8,33,243,35,95,97,11,79,236,29,219,131,59,13,166,214,251,165,242,233,88,88,162,210,239,243,2,56,99,191,65,135,76,227,192,74,71,126,188,24,205,255,146,214,222,194,151,245,212,116,253,1,17,255,241,27,151,12,165,156,38,104,198,115,234,115,60,34,50,23,232,4,240,139,207,85,69,31,67,150,118,162,83,232,11,75,123,116,125,4,124,237,67,59,125,139,197,230,165,24,55,5,199,131,230,188,247,177,145,142,174,120,138,135,158,202,14,3,130,164,143,55,146,31,71,234,94,211,130,145,219,0,251,160,245,192,23,121,156,70,64,221,236,161,48,228,200,166,92,56,113,165,161,43,80,182,174,242,160,226,244,12,221,103,120,171,211,187,91,176,238,230,176,66,51,96,255,243,55,119,85,28,69,44,119,239,241,2,61,70,2,59,112,252,123,221,191,245,246,115,46,15,219,181,162,190,31,162,104,247,53,202,67,105,178,77,244,235,69,15,210,102,133,157,172,107,87,68,251,181,124,227,214,44,40,46,92,0,237,183,172,239,42,246,74,148,88,43,187,166,137,194,17,62,240,92,191,66,8,214,224,85,101,221,0,3,61,176,117,107,245,91,163,125,102,188,94,96,41,196,189,84,0,230,219,158,199,46,73,110,186,6,234,78,231,34,209,27,157,74,149,100,157,28,138,86,179,95,83,254,208,104,123,164,227,215,90,150,33,62,219,241,252,208,166,44,233,148,210,216,41,156,69,17,11,143,66,13,91,24,10,222,19,255,86,176,108,202,104,57,99,34,11,117,36,59,238,239,219,163,230,32,169,9,150,235,87,161,158,148,72,119,86,54,29,147,77,69,183,28,146,70,208,22,223,136,68,205,35,196,239,166,165,214,57,60,51,79,197,83,57,252,138,197,23,170,115,37,144,70,33,162,244,138,237,247,3,149,93,108,166,225,37,221,89,82,108,8,124,196,27,180,224,178,138,46,62,167,67,64,21,43,250,198,176,251,192,203,236,67,160,198,148,153,92,59,96,28,108,5,172,103,151,199,73,114,104,33,24,176,6,172,201,253,251,255,252,115,96,171,175,54,212,89,90,224,184,227,212,195,31,40,102,91,130,168,152,23,107,99,49,97,92,174,238,1,107,152,171,3,143,251,193,133,205,26,122,82,209,84,201,13,174,142,96,98,56,202,220,57,249,227,89,243,16,2,131,66,254,131,12,40,151,196,242,99,95,215,230,13,27,190,164,181,250,199,232,73,118,173,28,170,171,27,49,190,52,31,145,38,165,80,239,73,120,155,213,165,22,76,90,242,106,156,19,27,159,197,198,252,129,27,46,236,156,64,59,190,0,127,200,10,71,207,124,142,212,34,123,71,55,120,225,56,186,37,87,41,209,198,65,78,239,43,63,156,10,164,23,100,167,17,113,170,78,201,195,214,100,240,196,73,110,51,172,179,136,99,186,252,190,49,7,59,249,101,52,202,99,41,15,187,44,102,175,15,60,157,3,19,235,104,243,251,142,72,190,90,40,10,79,209,85,54,174,64,56,45,9,4,170,145,25,35,185,40,65,153,219,44,252,243,135,29,42,161,131,33,41,254,114,145,218,63,138,189,202,206,156,139,175,228,128,150,30,44,149,86,3,41,251,146,75,131,8,148,207,50,132,192,82,77,124,162,237,186,15,231,77,234,117,33,22,224,140,139,28,37,163,140,101,209,16,125,159,170,132,11,111,255,128,209,109,30,244,203,142,4,205,93,17,70,30,61,41,253,54,170,36,220,6,56,55,93,29,26,88,214,39,231,248,82,77,194,176,239,211,53,251,210,140,214,230,45,144,171,243,253,177,1,57,154,122,84,12,241,97,118,110,74,193,47,112,52,51,83,170,128,244,94,115,196,60,77,89,145,217,37,40,183,104,91,21,65,196,149,167,236,176,28,230,2,206,73,41,248,152,134,91,39,201,144,222,191,149,35,234,65,72,249,184,89,24,242,8,237,224,141,148,117,191,144,8,160,110,65,205,189,116,130,17,65,192,70,133,9,68,59,3,218,232,246,46,88,201,228,30,59,151,93,69,36,233,187,18,246,20,129,187,45,81,108,237,183,53,198,128,91,105,33,156,66,237,60,6,32,135,118,57,195,190,149,157,7,125,235,67,231,129,6,27,136,165,213,178,122,43,70,25,184,70,207,181,71,147,115,55,127,128,72,60,199,200,163,214,63,63,104,21,43,109,152,243,62,203,183,243,83,34,62,158,199,242,145,30,147,96,251,239,195,211,113,77,161,108,148,252,199,154,119,146,17,212,53,155,120,74,220,142,34,51,155,148,91,20,76,47,16,156,118,236,111,128,183,30,156,142,120,145,100,121,138,51,165,225,167,207,91,72,204,224,163,142,187,35,240,195,189,211,45,235,57,237,40,44,235,93,125,199,99,46,31,155,249,225,154,240,164,125,157,137,254,166,194,12,205,58,115,20,85,125,41,56,173,185,43,207,182,65,101,7,158,152,142,3,74,183,250,75,187,38,81,8,147,206,20,250,252,253,88,176,21,28,211,1,43,179,159,179,238,68,163,0,232,109,244,27,55,249,220,106,127,101,148,193,220,105,78,239,246,200,97,136,96,194,162,192,35,144,91,214,55,86,0,0,0,13,105,100,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,63,124,173,181,226,74,173,248,190,133,203,131,255,198,96,45,247,41,148,93,43,253,118,217,169,217,154,63,231,124,64,36,144,91,22,233,35,165,66,128,163,160,79,122,152,64,38,139,249,155,234,222,60,223,198,73,165,161,46,60,158,210,57,44,139,239,220,158,151,61,117,127,32,145,71,177,44,23,63,95,110,108,9,116,121,98,177,141,207,8,193,57,53,123,55,43,179,119,61,61,116,15,34,195,70,230,39,157,139,31,56,121,127,7,5,86,32,110,130,34,32,252,197,166,23,202,133,4,102,97,93,18,182,41,218,17,149,177,137,83,162,178,105,176,36,122,39,209,214,61,210,122,210,142,116,174,19,49,187,29,243,73,45,74,12,78,178,19,218,57,121,196,248,86,103,167,33,109,75,175,2,133,234,104,203,254,40,144,106,60,137,37,7,0,0,144,11,183,45,219,248,19,18,84,251,89,107,25,140,106,137,138,253,231,49,10,36,97,91,40,36,37,190,82,255,112,208,107,171,109,13,147,85,120,162,143,180,162,76,232,79,89,7,231,125,206,186,227,84,3,173,239,147,115,76,74,195,131,82,42,69,160,22,143,99,91,167,111,145,9,7,35,195,134,110,165,65,142,41,151,169,102,200,130,254,31,136,60,114,164,233,246,3,70,129,7,127,64,35,121,248,143,65,197,192,20,24,36,48,172,217,38,174,158,52,134,71,202,142,52,119,16,35,65,144,173,78,8,2,80,43,66,100,185,40,241,75,68,249,142,243,40,239,226,131,55,162,136,176,33,145,53,79,136,194,162,179,219,161,196,219,250,74,86,5,177,47,215,58,169,253,172,76,29,30,78,51,68,157,27,206,210,66,92,156,158,162,205,113,193,233,117,141,47,233,159,238,29,254,159,149,54,219,49,150,77,206,245,128,177,238,19,210,107,13,67,15,182,210,149,27,157,17,116,72,167,249,46,152,121,0,169,152,67,183,83,106,6,182,7,136,65,58,50,123,96,63,59,0,0,0,4,105,100,95,50,0,0,0,16,150,136,10,163,222,108,153,106,77,191,132,249,117,179,6,195,158,0,91,65,159,222,23,187,73,81,115,145,154,85,160,18,195,5,58,235,8,47,24,191,209,33,158,142,56,19,55,229,139,78,194,243,136,238,182,241,2,183,244,10,51,129,145,11,252,136,136,214,164,229,149,223,72,173,12,186,59,145,1,161,242,217,74,74,233,46,6,54,181,98,167,185,215,115,249,21,167,247,62,69,129,188,109,76,131,213,131,115,32,132,139,69,36,69,34,2,211,81,37,104,255,234,65,158,160,138,140,36,164,244,231,105,31,132,201,121,207,100,183,115,152,6,238,47,213,57,20,198,83,71,115,48,169,59,121,181,234,62,240,17,248,81,145,85,96,152,70,19,152,157,72,81,64,73,140,39,204,145,83,241,22,135,138,225,170,64,70,168,35,118,15,16,62,112,37,155,145,193,147,80,29,23,101,146,35,87,246,85,137,199,7,193,156,28,22,24,82,194,245,43,203,175,170,5,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,11,214,172,238,45,113,176,212,196,207,116,178,192,223,113,190,108,32,103,14,158,241,218,48,107,79,31,100,134,161,235,22,21,105,9,183,147,31,3,240,7,99,10,197,196,175,155,89,121,146,166,52,162,126,182,5,166,135,66,68,157,36,176,254,28,139,65,126,40,136,132,130,126,57,103,81,93,192,125,150,36,147,65,186,66,65,141,157,71,147,10,252,190,22,79,55,13,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,11,242,213,30,165,184,73,140,222,53,72,132,197,162,164,180,240,37,15,133,93,136,138,228,25,17,148,18,245,190,28,33,39,195,158,125,187,4,58,160,132,3,56,56,120,195,88,209,140,252,215,19,211,14,5,226,134,183,33,168,177,76,175,148,13,60,197,211,85,213,201,53,149,241,68,246,207,40,130,165,12,78,117,116,51,239,108,150,34,143,112,152,60,185,219,136,7,254,108,130,76,235,230,114,159,21,253,60,0,46,70,199,140,95,128,168,117,245,206,220,26,3,21,132,104,212,242,181,36,0,0,0,8,105,100,95,50,95,102,102,116,0,0,0,64,239,128,183,10,174,227,207,142,102,224,145,118,238,35,197,15,75,98,54,44,43,124,121,174,53,54,131,218,19,32,255,18,255,44,136,245,67,32,219,34,245,214,233,183,5,230,162,141,208,158,1,37,188,188,35,77,16,92,157,142,32,163,194,29,161,104,30,132,47,252,123,62,97,22,53,97,138,106,134,7,164,114,17,57,61,104,80,251,177,240,188,235,196,88,175,94,229,140,21,110,54,94,177,176,26,170,50,213,254,1,96,180,252,87,133,87,253,210,105,64,62,33,195,171,232,232,71,41,64,106,130,113,173,107,77,51,16,140,128,195,5,227,118,236,5,33,55,192,92,215,145,61,171,207,40,197,38,16,60,92,55,245,130,115,242,120,72,253,72,190,2,34,121,30,100,0,231,72,187,234,61,7,14,214,1,148,249,115,254,102,26,70,168,83,18,151,26,188,84,66,158,93,197,179,252,166,28,202,2,215,125,133,217,51,39,240,52,202,224,241,132,20,208,50,103,17,107,211,5,32,41,66,164,45,12,40,77,223,116,143,176,220,167,214,111,191,149,99,150,124,34,20,70,115,106,72,221,93,201,140,209,80,20,21,216,123,24,151,197,35,138,169,153,90,58,170,95,196,200,19,101,17,100,81,153,211,133,12,150,183,28,85,92,188,146,50,124,185,103,46,170,112,2,162,182,48,161,149,107,3,184,224,21,176,127,201,220,232,224,3,247,199,184,83,111,157,165,125,180,106,167,4,105,101,86,22,22,188,178,4,210,41,93,48,194,46,238,237,213,199,131,91,115,151,33,212,202,223,90,2,230,109,135,39,243,76,227,184,136,145,225,194,204,233,172,77,148,125,24,129,217,128,166,54,29,224,244,174,232,76,87,236,220,240,80,158,215,72,198,241,81,247,194,34,159,7,3,208,240,126,54,164,129,12,204,36,28,217,99,12,3,197,219,85,174,144,92,40,69,233,38,79,240,79,22,214,186,68,21,39,199,60,152,212,141,26,36,88,149,126,21,97,70,102,132,246,245,60,83,179,94,55,15,3,250,166,135,239,41,158,217,203,77,171,184,187,32,150,69,81,117,4,105,202,226,134,137,8,215,68,15,153,97,5,34,66,67,39,135,216,98,50,123,241,219,224,96,47,235,193,170,89,100,252,59,198,226,183,153,169,229,19,219,100,27,131,63,149,159,154,77,12,58,155,247,246,56,180,237,214,33,107,97,40,96,130,55,42,171,177,23,147,178,192,117,46,136,56,121,49,3,123,104,24,235,112,164,215,4,44,78,136,251,189,166,46,233,4,161,216,137,155,34,207,165,158,227,249,30,146,140,89,114,157,150,190,79,42,139,240,47,13,19,207,31,188,84,76,132,139,30,69,43,57,181,219,69,175,60,233,160,95,160,185,238,177,255,27,217,183,68,46,9,26,113,99,75,169,251,24,68,171,43,155,31,156,61,217,92,68,153,111,113,45,152,214,79,46,107,4,102,44,102,110,109,115,71,117,210,142,91,10,27,45,181,251,65,173,171,32,212,203,220,243,91,210,52,28,239,112,90,236,136,110,103,170,67,9,141,163,127,88,17,94,233,229,168,76,23,236,55,252,111,103,179,69,51,222,80,253,16,65,249,115,154,204,140,166,214,150,206,145,192,184,240,44,229,140,84,5,129,89,155,136,136,205,125,167,248,121,158,205,126,163,55,166,170,16,218,143,62,49,86,12,127,97,14,34,156,65,80,100,164,96,198,43,70,224,28,38,167,129,227,29,33,242,44,203,82,193,185,220,40,48,13,127,56,120,203,43,165,181,184,112,43,203,249,183,78,56,100,98,241,251,82,72,219,209,100,1,64,126,251,157,105,74,235,157,79,246,213,34,209,78,123,151,12,254,218,188,26,241,214,241,167,119,235,46,245,64,46,170,214,169,181,150,63,235,98,180,6,88,12,53,184,175,226,56,189,184,52,93,233,18,170,92,199,222,70,59,38,172,73,90,200,14,117,243,138,199,246,196,134,144,17,22,247,249,116,38,243,176,107,16,124,233,133,159,243,189,46,247,247,85,143,251,249,238,173,94,109,217,219,80,75,167,124,47,89,211,175,215,107,45,248,247,1,40,209,85,89,100,186,100,200,127,110,159,233,165,55,87,191,1,66,20,250,25,249,42,237,84,252,181,20,231,18,124,5,10,145,7,128,65,97,95,180,3,77,102,134,125,117,151,109,217,168,103,45,143,122,42,163,56,24,46,175,62,239,167,99,230,193,211,21,251,230,104,19,143,41,237,206,125,23,16,59,183,60,117,121,50,8,83,125,169,205,49,101,251,101,83,146,254,32,244,196,69,26,42,66,172,85,107,85,57,150,6,205,39,17,209,120,40,106,78,99,193,215,25,130,34,136,54,169,117,49,179,141,249,174,181,60,243,225,89,95,177,134,108,213,138,234,61,0,55,14,3,175,86,50,63,83,123,69,54,80,7,78,2,158,89,159,186,204,45,6,172,4,174,92,20,47,149,225,137,15,124,119,5,47,236,129,216,70,230,142,17,64,163,189,189,30,71,168,201,186,131,203,39,18,176,91,54,248,43,78,244,17,109,184,5,110,35,208,24,173,187,54,18,171,179,58,192,92,171,26,174,60,30,71,219,148,180,17,214,35,146,45,126,174,90,131,29,129,125,48,54,224,146,148,163,127,134,99,7,102,206,144,227,107,206,20,63,249,69,191,135,162,39,63,204,126,1,54,6,196,235,80,13,128,5,93,216,159,40,229,109,152,105,126,16,224,160,176,170,249,250,255,144,29,95,138,189,96,38,114,55,161,144,95,239,53,83,61,119,194,221,150,127,181,89,112,164,17,91,225,142,233,89,199,115,29,78,165,182,133,80,108,31,127,24,51,252,232,247,110,162,166,175,20,204,234,40,227,135,85,133,195,191,196,181,25,166,68,215,126,196,139,98,149,16,138,176,127,186,68,13,242,185,108,253,236,245,7,37,239,18,132,238,29,14,18,97,167,179,228,242,13,30,151,191,146,47,145,46,162,124,185,117,144,31,175,184,162,52,126,47,215,23,48,180,144,159,49,246,63,18,110,140,176,182,66,209,168,25,31,173,125,14,26,49,87,135,3,233,237,57,128,78,185,199,203,58,122,31,94,161,49,148,183,102,178,243,173,214,59,59,49,213,130,219,53,234,150,131,100,155,250,149,6,215,143,230,234,16,63,143,148,30,89,150,219,115,180,77,189,197,181,81,62,179,93,95,96,61,3,109,45,52,190,222,132,16,169,117,100,2,96,109,42,127,29,133,49,20,218,148,15,157,53,74,143,188,161,174,178,60,20,199,122,123,143,241,172,21,246,172,153,208,56,51,221,208,146,60,8,51,170,119,8,181,252,66,191,112,146,199,9,208,53,109,191,52,169,133,170,141,54,37,28,88,9,190,168,50,184,114,55,117,150,184,197,90,65,10,52,22,128,108,12,141,46,226,28,152,185,50,16,166,202,93,174,18,112,66,153,133,72,220,106,73,78,132,155,208,105,63,76,246,195,124,249,44,62,64,187,62,194,125,195,102,77,227,106,127,109,226,252,79,48,53,156,148,214,95,138,224,249,83,23,191,4,219,208,31,138,193,10,22,73,230,130,112,81,47,236,238,147,104,209,77,86,130,95,150,53,30,81,51,202,50,150,68,195,28,8,216,87,124,236,159,18,182,56,236,114,184,79,247,51,229,65,77,229,60,171,142,242,111,77,10,236,60,236,142,143,36,91,219,194,145,107,224,169,161,231,189,253,149,143,107,196,89,72,29,168,43,39,1,214,66,163,119,10,93,225,116,116,58,193,26,125,21,90,218,60,251,5,100,152,242,199,93,207,200,233,112,221,20,8,177,29,45,225,29,81,67,47,7,70,239,19,207,197,29,187,109,99,140,134,129,240,157,110,72,66,94,138,15,162,201,149,13,22,69,0,145,214,35,187,216,156,121,139,216,92,50,26,32,132,122,192,4,185,211,22,216,175,248,213,132,242,131,12,77,150,176,227,108,67,27,124,56,151,142,179,156,82,153,177,247,62,116,42,196,150,43,160,46,26,215,64,192,46,202,51,14,59,40,111,241,125,36,123,190,243,117,168,40,136,231,108,178,48,141,87,11,45,139,223,150,6,156,109,3,153,163,138,204,137,152,231,21,86,52,5,143,195,249,126,74,187,92,208,22,1,141,187,19,226,97,45,161,14,155,137,88,222,245,146,227,159,90,236,116,53,55,248,5,241,183,236,237,13,176,51,226,229,183,123,34,181,143,139,23,146,27,142,214,109,165,52,203,87,175,225,1,178,91,207,228,136,170,181,116,241,52,208,241,233,240,69,205,244,67,173,137,239,138,59,230,201,136,242,48,239,224,57,91,51,80,181,209,181,192,44,131,205,5,254,148,225,184,245,172,155,197,247,176,250,167,109,247,176,39,31,44,222,129,94,140,217,36,41,117,18,242,115,187,152,173,21,32,246,176,213,52,152,131,103,50,134,166,53,134,73,114,154,93,164,109,189,125,62,48,123,144,236,18,142,29,27,13,236,24,38,245,168,210,65,225,200,166,214,195,180,24,123,40,249,146,174,161,73,149,69,73,0,0,0,13,105,100,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,204,201,111,205,99,99,197,113,236,96,168,124,216,161,239,22,107,170,143,84,86,69,161,143,147,167,34,168,75,227,143,27,179,173,80,90,166,93,194,109,93,19,128,143,189,210,107,59,179,188,41,62,133,213,53,227,102,171,254,155,62,46,132,22,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,188,113,226,162,129,165,213,150,142,207,49,105,2,250,104,204,144,24,245,231,233,199,163,227,123,25,56,45,188,66,129,42,27,0,0,80,154,230,212,40,82,223,142,214,164,127,121,61,211,81,164,168,63,90,119,112,102,228,59,192,29,70,148,26,244,52,18,139,77,109,21,4,179,69,26,122,139,211,19,112,3,84,155,248,119,32,116,104,132,175,5,134,191,28,192,32,202,146,156,35,118,85,7,120,27,150,165,205,108,166,31,230,253,231,161,179,183,106,62,90,127,224,241,39,186,23,179,60,53,54,144,34,48,146,28,210,164,15,17,253,111,70,68,17,242,173,241,44,96,0,175,40,150,248,14,57,39,107,212,20,78,82,175,149,237,151,31,214,51,93,57,234,138,21,200,236,169,155,87,67,49,112,26,213,194,244,50,69,52,32,224,25,130,169,204,189,78,168,55,116,47,241,241,103,142,74,27,202,223,50,104,211,20,31,196,11,137,179,83,159,252,91,199,25,6,25,45,100,193,5,69,182,91,74,53,69,246,35,191,46,189,254,63,240,167,225,37,123,138,182,127,28,105,68,233,44,70,142,29,61,166,69,238,240,147,17,65,138,142,214,254,131,41,152,13,27,131,195,252,140,215,38,43,149,41,90,71,54,0,0,0,4,105,100,95,51,0,0,0,16,81,10,115,192,155,197,30,205,74,100,175,47,183,134,184,114,46,45,88,160,43,248,147,185,76,181,204,69,115,113,21,46,191,5,58,43,185,88,144,175,140,95,184,167,22,114,103,68,23,237,188,237,174,215,117,16,92,54,46,134,103,71,0,10,46,113,61,110,87,177,140,87,29,214,145,174,42,30,237,125,151,72,89,37,2,182,77,42,47,3,181,132,110,56,3,7,167,247,62,69,129,188,109,76,131,213,131,115,32,132,139,69,36,69,34,2,211,81,37,104,255,234,65,158,160,138,140,36,9,129,249,55,202,23,34,242,238,60,184,222,182,68,76,34,123,35,40,244,77,144,120,5,22,172,59,219,82,59,209,5,233,239,108,207,251,131,192,169,133,5,204,185,10,181,96,4,55,62,68,175,65,153,34,46,181,197,11,59,31,200,80,35,126,83,147,128,131,74,165,72,93,226,41,173,71,146,111,170,99,172,214,129,107,113,7,205,12,246,109,40,136,37,40,26,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,11,103,207,132,109,157,162,107,171,66,15,177,155,151,192,115,122,71,157,42,10,151,197,93,245,86,210,7,65,17,11,161,15,105,9,183,147,31,3,240,7,99,10,197,196,175,155,89,121,146,166,52,162,126,182,5,166,135,66,68,157,36,176,254,28,13,181,202,51,236,109,111,189,244,254,162,87,216,206,67,138,55,112,146,156,246,1,173,202,14,83,241,132,55,79,46,6,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,11,65,165,14,122,36,107,23,29,166,48,90,73,139,68,239,64,201,194,87,100,92,61,54,188,153,12,83,96,14,229,64,29,209,0,162,81,213,88,68,170,132,95,251,149,176,4,201,135,52,211,161,147,45,173,249,129,131,252,176,61,222,14,239,9,72,134,100,205,204,139,64,230,33,185,90,198,253,104,147,117,42,243,190,61,82,28,78,246,222,83,29,175,68,161,10,9,254,108,130,76,235,230,114,159,21,253,60,0,46,70,199,140,95,128,168,117,245,206,220,26,3,21,132,104,212,242,181,36,0,0,0,8,105,100,95,51,95,102,102,116,0,0,0,64,34,213,255,253,215,182,91,175,210,248,73,143,209,241,197,211,193,112,239,120,44,52,149,137,121,214,24,2,2,160,234,51,149,25,37,47,203,115,187,150,255,227,46,204,155,171,7,95,140,49,188,252,1,16,101,151,50,197,242,86,0,117,203,17,77,171,238,173,77,163,124,18,108,187,248,66,50,68,85,131,74,139,41,190,206,26,202,178,179,246,194,41,28,158,43,16,183,150,102,246,45,138,206,11,128,2,216,233,218,31,66,53,23,29,228,218,41,137,242,24,228,6,187,78,192,146,182,95,149,162,152,71,251,72,205,26,214,151,119,146,234,140,160,84,132,53,159,20,124,155,53,110,112,140,18,205,189,232,20,76,62,215,140,142,19,230,147,1,36,154,129,187,120,192,208,135,71,127,153,97,208,41,224,249,190,250,181,6,59,103,130,27,90,6,55,238,124,42,164,174,222,66,157,91,107,76,141,133,45,22,48,200,180,138,26,249,165,162,58,178,241,149,128,5,232,214,194,154,17,67,185,244,144,231,109,128,121,56,11,97,178,215,101,73,179,123,35,185,167,157,134,123,29,152,176,3,65,208,233,150,18,22,196,228,193,157,60,31,216,248,152,118,89,98,85,247,59,42,239,89,59,15,61,153,140,116,57,45,49,215,229,40,194,63,59,28,17,29,189,148,253,25,15,219,193,162,51,93,29,124,207,184,160,39,16,123,172,89,27,94,159,98,160,202,62,133,39,79,252,114,0,246,14,105,110,67,63,60,105,58,87,55,21,231,123,7,81,220,56,53,186,37,71,164,197,113,74,1,110,246,186,217,61,93,210,18,70,138,17,160,212,151,171,11,119,206,24,14,198,35,17,19,153,0,42,213,48,28,16,102,107,167,41,38,87,165,21,198,9,57,231,64,74,63,98,0,69,133,66,57,156,28,209,22,87,35,19,124,99,147,93,237,103,141,191,247,126,216,88,29,227,200,193,135,229,225,246,215,218,176,191,76,96,77,98,26,66,64,178,107,27,45,203,79,244,9,207,210,168,2,209,9,63,227,57,216,244,69,156,245,157,229,90,177,134,49,147,72,147,94,25,121,42,49,11,144,147,149,166,124,42,2,51,240,222,200,76,71,213,62,244,249,187,138,71,208,6,65,153,155,21,45,239,144,3,187,135,161,37,114,45,91,83,213,35,227,241,44,188,63,49,206,55,119,65,143,138,209,150,219,21,3,25,9,165,134,71,13,78,240,160,23,160,135,180,208,221,129,190,206,234,212,80,181,102,93,102,227,50,205,21,159,186,157,231,18,239,183,52,92,179,159,227,76,153,31,232,55,107,144,37,51,25,124,44,163,53,251,47,187,211,71,83,66,6,57,230,44,82,205,98,2,214,199,227,207,87,46,254,41,7,117,71,82,214,192,2,165,183,203,124,237,197,209,8,87,137,211,248,69,167,191,144,185,127,197,196,180,93,45,101,126,96,190,244,210,121,48,229,115,146,245,218,67,164,221,244,158,39,63,196,51,46,68,241,115,60,39,92,190,174,142,147,205,181,14,228,6,1,213,88,201,83,134,58,120,121,252,105,115,207,6,42,68,193,37,1,66,184,127,125,20,127,17,106,72,124,55,67,249,79,122,204,102,64,163,42,172,141,186,228,44,29,116,155,0,45,80,146,140,34,55,133,173,21,12,227,211,17,152,176,103,251,129,159,92,105,127,94,25,186,155,61,194,26,188,217,29,18,89,171,43,9,6,26,73,155,3,17,8,225,29,237,98,96,115,78,185,173,236,137,99,213,208,151,189,248,241,59,76,70,67,80,89,96,65,180,247,180,84,173,5,109,76,138,84,142,68,49,96,81,196,231,138,244,90,5,21,116,16,245,82,140,221,182,243,36,4,100,148,178,138,140,231,173,153,161,62,30,116,163,125,177,44,225,239,43,27,219,99,178,63,132,51,34,32,225,94,42,188,59,220,104,129,30,190,192,50,184,130,206,179,176,15,168,153,77,115,7,182,15,63,219,183,174,60,142,242,75,147,241,8,248,214,144,167,52,151,6,144,253,100,243,183,247,233,192,7,131,234,5,16,213,43,63,0,110,80,53,128,135,253,68,73,13,199,242,70,155,166,33,138,39,159,18,183,104,46,57,93,248,222,176,178,50,68,76,2,2,46,150,19,76,139,223,163,217,157,227,120,193,151,252,160,243,122,84,113,74,10,77,90,8,158,220,235,82,1,184,125,53,54,222,213,222,214,119,237,71,97,164,248,178,92,236,75,231,253,138,238,60,54,101,95,119,82,123,62,242,190,74,18,239,81,178,206,181,154,48,234,11,65,52,248,124,111,59,64,140,64,158,86,39,171,47,165,242,53,200,58,156,219,239,187,220,30,75,142,29,114,70,251,226,176,87,16,123,231,212,24,238,152,96,26,208,117,160,227,211,236,135,135,100,86,123,245,53,83,165,247,21,120,116,3,67,173,142,234,99,183,184,33,138,77,112,8,86,204,147,198,44,247,16,55,32,65,194,233,156,23,21,209,36,192,8,170,223,45,120,224,21,29,49,79,219,221,73,213,44,102,1,225,227,103,11,77,110,167,72,38,184,30,211,154,193,28,2,146,52,48,44,190,59,103,18,181,28,154,3,38,71,202,169,109,215,175,11,248,79,173,98,252,79,41,4,17,18,225,124,39,235,182,125,60,203,22,23,65,79,211,150,174,176,11,225,30,179,148,125,127,99,4,123,68,95,82,162,168,141,181,218,161,122,91,244,45,60,3,113,156,163,96,58,200,41,2,245,211,72,164,195,60,85,29,103,220,135,15,70,197,47,118,186,67,98,244,85,2,37,22,112,118,80,139,208,24,196,153,27,220,71,79,66,189,12,12,212,116,177,40,179,25,252,214,135,157,251,65,187,157,140,95,190,12,131,30,239,158,123,42,93,66,200,72,88,105,98,75,42,54,155,2,103,130,57,206,163,193,13,43,13,213,238,157,255,120,199,134,47,37,126,61,1,23,97,69,95,128,113,219,194,77,93,78,225,7,41,58,65,137,69,167,25,77,21,151,121,161,48,196,188,144,92,185,150,11,188,170,50,90,233,59,202,89,146,26,37,113,189,98,42,94,1,237,235,103,112,25,142,102,177,156,100,1,94,18,166,214,83,254,69,142,182,190,44,103,27,6,166,10,206,254,15,153,251,114,15,126,139,1,38,178,167,125,14,112,169,179,124,105,227,62,89,169,197,26,15,216,238,36,255,0,138,99,101,161,16,42,242,41,31,73,65,236,148,53,9,218,51,171,66,154,174,169,198,22,76,77,14,207,11,91,212,222,114,26,105,107,227,92,90,236,60,139,167,233,106,251,250,78,219,95,35,25,82,46,100,83,78,12,30,172,26,33,11,109,157,131,32,13,133,45,130,107,136,22,253,206,73,202,149,23,45,181,112,101,66,180,94,215,161,166,135,168,195,75,127,41,39,229,112,185,21,197,54,107,10,154,85,132,136,200,129,66,236,47,70,143,134,170,121,165,120,147,140,30,69,23,195,96,79,240,126,99,50,25,107,231,254,22,78,84,141,80,155,95,191,24,87,124,247,188,244,208,208,221,110,75,232,5,215,35,105,221,33,80,222,253,58,47,161,236,177,64,141,223,111,121,4,107,100,147,223,146,227,188,131,159,188,224,245,65,180,207,129,14,0,51,204,104,207,137,23,187,252,57,155,213,109,158,234,208,158,30,178,59,227,175,162,130,15,208,201,83,41,179,224,42,97,228,131,38,64,174,41,42,87,57,164,247,178,234,212,185,176,242,113,78,112,112,206,25,247,33,229,4,100,118,59,36,59,63,20,167,183,8,155,149,156,10,134,122,192,218,90,226,77,2,155,151,175,72,79,118,217,4,96,66,165,89,158,247,167,201,38,22,198,56,100,170,182,173,182,87,142,195,159,194,158,227,72,26,232,248,108,148,91,19,162,86,185,54,245,178,144,189,174,67,155,212,176,126,243,170,237,225,179,179,253,0,31,16,19,248,244,150,55,80,221,167,239,40,248,46,238,122,204,121,104,63,238,141,155,228,205,143,73,127,186,69,15,225,75,169,46,159,96,104,86,125,177,84,21,91,182,36,175,44,121,216,63,80,214,51,40,99,202,7,225,55,29,161,229,200,80,23,251,187,159,36,78,29,5,236,60,16,82,111,138,88,166,172,163,69,115,65,23,144,89,194,107,79,216,4,27,107,193,65,5,222,34,158,81,193,132,70,112,21,10,125,122,147,51,113,255,71,165,242,159,179,19,187,148,247,195,29,133,181,96,143,169,34,19,56,181,37,81,197,4,62,58,82,186,194,90,157,93,227,208,66,2,65,176,220,99,213,71,239,147,61,68,61,122,155,137,85,28,90,224,114,73,80,29,180,247,174,221,5,80,61,57,82,72,173,37,220,170,76,206,15,163,50,173,188,235,56,95,237,204,90,86,182,176,87,122,226,68,198,229,163,189,53,90,239,148,108,197,154,25,209,38,158,106,233,89,135,17,187,131,67,61,64,56,87,127,62,144,14,193,156,185,151,51,89,115,72,249,199,34,233,57,136,153,154,21,116,188,124,37,225,254,128,17,5,211,251,201,9,0,0,0,13,105,100,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,91,37,134,198,243,18,38,174,254,144,62,125,40,250,225,121,7,238,248,177,220,222,23,33,15,169,31,3,119,103,101,23,61,157,45,9,170,165,85,169,236,51,14,199,161,1,119,114,196,208,177,48,72,242,150,184,12,20,142,244,0,91,87,17,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,174,187,15,253,249,253,165,102,215,152,241,179,178,104,156,75,85,45,191,21,54,7,62,148,29,120,47,220,179,48,166,31,33,0,0,240,17,168,32,192,185,130,231,176,87,241,176,46,2,100,172,177,134,252,88,194,96,165,101,7,207,28,238,60,242,165,226,6,101,229,64,83,119,77,3,144,247,141,44,48,246,84,33,94,63,169,222,147,175,18,129,148,224,65,168,58,139,22,239,109,147,10,90,127,92,16,218,73,109,223,190,184,6,190,13,86,140,109,199,128,213,6,87,232,210,154,114,24,166,218,121,41,160,226,187,149,146,223,122,252,31,238,81,174,85,106,136,207,217,102,56,151,26,247,17,222,251,230,254,24,196,98,210,230,233,79,140,154,164,60,171,178,166,230,188,181,152,135,207,80,110,83,185,255,28,140,163,236,113,243,12,31,208,49,143,112,110,142,247,244,121,123,131,68,75,19,23,121,189,131,228,254,170,246,145,161,146,87,191,217,87,224,165,69,161,183,207,65,159,209,76,232,87,9,101,107,156,89,137,166,245,220,153,160,135,233,163,184,225,199,60,79,200,97,146,63,84,68,240,226,45,237,29,33,75,72,129,63,222,103,203,4,101,131,67,237,54,132,98,220,53,200,51,230,49,108,34,65,0,0,0,4,105,100,95,52,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,105,100,95,52,95,102,102,116,0,0,0,64,71,255,255,143,23,136,181,241,5,167,253,8,160,35,125,242,173,36,135,105,28,159,253,205,217,65,35,67,251,78,131,7,2,93,154,102,198,161,219,84,71,245,123,124,140,164,209,251,233,17,138,244,207,75,189,6,217,97,118,148,162,74,48,43,141,113,239,24,99,32,129,112,131,150,79,14,200,174,198,187,196,103,13,121,246,177,88,13,123,130,49,210,95,221,159,22,65,194,17,224,192,221,54,103,202,117,28,67,104,217,130,77,198,0,131,231,216,96,84,114,252,109,39,46,189,48,16,24,89,141,128,226,196,206,211,54,241,74,231,9,154,192,120,184,185,109,71,187,72,121,100,190,49,84,208,187,1,191,180,12,15,29,228,31,47,5,61,54,17,52,5,235,70,40,0,197,5,56,245,185,48,112,241,224,59,203,123,49,241,17,218,45,37,101,14,144,234,222,182,221,121,184,129,142,112,31,2,192,235,29,177,219,53,14,88,103,172,9,37,179,157,144,166,35,58,35,217,121,208,64,76,188,173,26,248,82,5,7,103,103,61,17,179,75,139,14,219,79,252,192,4,61,108,103,125,27,131,252,183,118,248,75,190,26,91,218,253,167,146,157,245,30,85,195,30,164,100,136,29,3,252,125,33,211,242,27,161,10,202,37,178,130,118,95,102,21,186,154,80,161,66,153,31,171,150,183,178,114,78,104,137,251,67,138,57,68,166,218,158,30,147,30,121,165,98,28,188,47,105,122,40,127,217,202,241,30,215,151,88,134,49,103,198,161,90,91,153,75,182,95,112,48,245,180,225,172,188,66,106,99,236,244,25,97,52,57,21,16,199,176,76,152,194,42,65,253,110,229,128,241,150,32,67,40,145,132,14,206,254,214,191,80,195,84,110,251,17,180,241,39,214,159,105,203,56,20,120,196,139,180,93,245,184,75,194,47,10,164,206,59,226,15,214,108,95,80,95,137,106,211,69,123,124,56,172,118,232,3,49,42,89,109,175,227,233,209,126,26,15,66,46,155,22,182,147,91,95,32,31,100,139,118,60,147,148,5,62,156,79,91,169,152,199,7,11,168,80,21,116,48,230,45,42,254,45,82,54,17,5,7,80,240,181,83,134,123,53,248,108,235,40,92,139,195,231,109,247,56,215,250,28,26,226,191,52,168,208,174,170,52,218,53,84,127,85,10,87,39,207,31,160,46,129,5,136,13,83,207,97,160,93,88,112,12,136,181,75,36,109,73,47,48,96,250,21,135,63,14,183,225,30,68,83,218,156,90,52,78,140,57,134,226,96,93,44,33,12,226,60,249,92,175,217,182,55,0,101,154,61,176,164,28,24,132,228,217,172,205,219,129,60,68,190,109,217,41,212,41,103,26,254,19,254,210,234,147,127,14,142,241,36,38,102,168,83,253,151,9,21,37,203,142,219,205,51,7,22,20,213,45,118,93,103,143,40,60,2,226,248,41,72,15,61,151,16,26,86,253,43,62,72,61,228,142,231,151,124,41,227,181,29,13,41,10,2,65,118,221,96,76,208,167,121,41,14,39,207,85,104,53,202,194,227,181,228,147,199,177,251,37,155,69,94,44,164,196,172,54,9,42,154,214,88,241,231,20,50,246,24,49,8,120,33,152,255,119,2,234,105,10,132,48,5,49,16,20,111,119,245,139,247,118,105,194,164,74,238,167,92,222,97,1,109,4,3,170,167,162,171,12,150,149,19,77,44,28,174,27,221,80,196,210,193,142,74,223,118,11,157,111,63,94,49,210,95,115,201,248,101,188,40,172,90,99,221,96,68,70,93,24,140,178,63,0,88,181,131,138,84,160,245,239,249,166,34,131,6,146,124,139,219,66,23,239,68,189,63,193,198,10,46,13,60,215,19,142,170,164,78,255,101,21,136,134,127,82,66,162,182,20,25,174,39,231,11,12,240,251,157,16,237,194,207,39,4,148,57,145,6,26,158,254,240,74,87,75,101,221,113,138,193,88,224,7,227,128,119,171,62,61,140,133,127,37,142,47,30,28,49,212,19,197,139,136,126,9,4,6,94,100,167,165,198,153,171,78,30,213,152,231,104,241,94,245,115,252,46,7,139,234,70,127,44,162,136,40,72,123,177,184,119,175,249,219,76,108,9,161,151,31,238,138,119,181,203,147,71,182,219,14,135,154,166,203,230,251,214,199,24,37,157,209,108,0,254,175,29,173,82,132,112,200,72,87,46,94,62,200,102,83,194,11,253,133,240,112,234,61,148,117,220,121,94,187,59,230,250,130,40,93,245,47,234,150,165,181,71,86,143,247,11,79,144,18,187,0,0,80,16,99,14,150,28,58,117,234,240,172,234,93,12,140,123,153,80,236,162,162,121,254,63,127,234,77,69,89,0,163,101,121,97,73,232,50,219,235,246,118,4,44,150,84,208,158,120,14,157,63,227,105,122,222,236,45,67,82,152,53,117,142,16,199,196,202,66,23,159,74,35,229,200,33,161,148,245,72,245,137,118,217,71,99,216,189,49,240,133,191,40,74,193,61,238,255,102,13,141,32,88,107,86,176,40,247,228,2,244,175,127,27,148,42,76,254,86,210,59,148,40,108,184,72,169,114,127,253,98,28,240,80,49,150,139,233,246,15,239,151,0,67,187,71,36,18,60,178,33,236,146,6,228,221,19,84,243,226,27,192,248,229,134,81,17,173,109,8,74,168,103,139,180,120,13,73,60,27,175,143,23,117,231,144,244,138,238,50,221,154,241,79,61,12,13,170,168,40,241,100,32,177,101,144,206,146,81,39,55,125,72,9,167,54,62,15,72,12,34,61,200,220,38,102,87,170,119,203,116,198,122,160,139,201,0,233,124,159,79,183,225,124,197,32,87,127,94,133,121,53,75,69,127,3,72,105,47,159,5,109,199,6,117,75,254,50,114,49,101,237,227,94,8,3,131,109,87,194,65,239,242,128,39,86,56,218,77,93,177,139,93,114,104,70,34,82,78,55,72,165,35,249,79,144,30,35,23,117,15,182,41,126,63,194,41,66,111,225,134,58,197,206,7,88,185,102,74,116,183,5,118,49,227,24,170,124,59,36,218,206,248,228,201,118,47,61,88,48,13,75,30,51,107,168,89,36,54,236,88,146,92,151,82,64,243,255,181,106,170,96,95,115,228,90,226,208,78,124,133,56,113,123,241,17,41,20,4,55,95,140,4,248,126,28,118,40,228,16,153,55,52,119,40,172,199,139,5,205,44,81,6,49,248,91,49,164,69,219,237,26,195,144,19,106,38,253,33,213,61,120,86,140,132,135,111,70,250,210,179,222,251,202,73,70,243,189,209,68,17,53,48,44,195,192,83,143,5,90,43,189,37,171,196,102,29,48,247,215,139,56,88,26,149,135,84,48,28,210,213,225,249,152,141,118,29,218,34,3,219,124,225,212,132,184,149,23,68,47,21,173,107,210,107,137,14,162,171,70,32,64,203,55,87,60,25,83,72,171,30,116,59,198,16,41,235,144,98,212,235,133,24,99,0,113,1,34,136,68,88,84,122,74,180,187,186,161,148,87,194,230,92,108,81,194,176,110,155,108,175,40,208,48,108,34,199,6,221,223,132,63,156,63,246,29,195,230,202,59,234,208,234,224,13,89,83,32,195,51,162,44,30,41,192,189,196,238,22,252,164,84,12,115,244,54,155,229,1,204,41,24,217,243,162,210,228,1,108,170,1,168,102,179,106,249,87,102,213,225,119,114,47,187,207,136,243,50,140,162,152,80,255,174,193,165,41,183,42,228,83,57,87,54,100,179,214,196,36,78,188,225,107,168,230,152,2,231,170,83,217,245,253,158,177,13,99,59,82,57,249,201,130,169,152,250,81,123,56,64,137,213,187,220,139,142,103,156,74,87,106,52,94,59,83,169,30,193,41,177,201,239,138,222,94,218,78,31,178,56,225,106,109,19,158,134,233,53,223,145,224,107,184,76,147,136,10,84,48,116,90,197,125,150,132,75,52,242,5,79,77,172,255,88,197,232,244,99,189,170,79,117,185,128,26,69,37,175,59,13,102,92,121,168,171,213,213,131,81,114,54,126,90,61,57,10,7,207,119,196,248,220,133,97,161,86,107,72,118,77,192,223,207,53,64,253,205,64,125,3,151,41,69,205,179,30,134,119,145,72,137,129,14,131,35,1,31,146,154,83,198,40,236,81,125,70,117,136,188,203,234,108,17,126,37,174,3,156,233,84,69,164,148,100,99,68,197,177,248,217,248,56,254,107,198,78,33,209,37,137,49,150,27,168,43,243,245,197,248,87,34,251,137,10,41,197,20,3,215,60,102,119,58,49,228,227,206,11,20,38,56,255,163,215,110,237,50,108,192,170,243,22,87,180,78,182,7,137,234,78,4,205,113,160,153,89,119,21,185,96,251,72,59,95,218,101,193,58,25,33,110,116,109,68,249,97,213,107,178,229,219,138,151,46,158,230,236,81,123,101,89,20,65,239,236,191,9,188,213,33,36,208,105,160,156,3,176,126,252,194,87,25,37,226,36,250,126,73,6,85,5,122,15,111,61,173,47,18,70,103,20,56,85,234,108,205,145,83,13,211,130,244,250,186,11,234,211,202,217,77,56,78,0,0,0,13,105,100,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,18,233,76,93,171,141,87,229,230,139,134,77,45,136,34,96,209,90,91,63,102,89,87,177,120,202,102,31,228,53,56,12,180,101,190,71,79,64,83,121,98,117,241,57,146,231,161,116,240,107,134,7,159,143,175,88,212,210,67,87,20,226,205,11,234,128,156,191,131,194,134,234,16,193,212,125,120,82,212,220,163,49,98,15,99,120,142,178,138,170,28,94,162,235,58,19,199,140,10,184,173,237,232,228,123,84,156,254,133,48,130,169,213,228,57,35,11,15,248,141,178,124,29,77,195,135,42,12,229,69,174,172,45,108,238,85,239,75,23,76,209,220,136,80,124,52,35,90,226,2,145,241,224,228,105,143,165,134,168,31,198,169,141,192,170,77,111,109,206,24,222,97,78,65,20,50,140,245,14,178,5,154,126,122,26,103,105,64,190,29,141,14,160,5,61,87,114,86,118,54,32,98,177,254,98,215,207,202,25,66,137,67,130,70,216,68,191,214,38,139,171,30,203,20,38,0,0,160,245,115,138,19,144,181,134,17,194,122,180,247,211,29,51,57,23,89,234,91,49,198,93,109,13,165,227,46,239,22,179,146,232,103,138,94,170,228,50,44,27,96,17,200,139,253,37,66,80,236,248,6,177,213,202,193,142,24,44,36,77,154,65,168,68,181,142,202,46,251,199,63,182,0,146,179,108,236,250,121,23,182,160,95,85,205,237,137,94,108,150,36,23,127,99,48,16,51,91,89,128,175,228,251,207,149,95,75,185,38,31,114,83,205,193,5,159,245,20,131,208,98,41,29,58,115,245,55,230,7,249,94,21,28,29,123,194,183,177,126,135,115,71,94,171,54,88,42,119,35,20,148,175,198,57,36,28,186,81,67,102,137,243,237,161,36,162,45,119,11,171,215,224,35,94,39,212,66,191,198,72,187,199,81,205,199,187,16,59,86,114,47,233,167,114,214,194,87,219,23,250,166,31,246,208,98,114,207,176,171,209,61,15,57,200,160,180,48,215,33,97,250,194,152,33,159,107,13,113,14,8,123,229,16,100,93,67,22,248,61,52,255,119,115,106,201,10,86,199,47,153,27,0,0,0,0,0,0,0,0,0,0,0,0,0],"verification_key":[0,0,0,2,0,0,0,16,0,0,0,0,0,0,0,23,0,0,0,4,73,68,95,49,20,49,49,179,12,40,156,67,239,232,192,60,207,165,125,56,234,109,137,210,58,227,28,229,113,75,197,218,168,106,118,142,13,192,44,120,142,211,61,165,182,104,114,235,249,88,92,141,122,188,18,1,205,106,171,211,81,16,126,56,63,147,205,25,0,0,0,4,73,68,95,50,16,10,73,113,157,83,107,100,184,223,158,5,39,248,52,205,186,193,200,45,174,64,92,152,107,137,91,238,31,26,95,127,23,203,156,211,170,18,143,125,129,57,31,10,14,41,78,37,236,111,70,47,21,23,211,58,187,241,102,166,83,8,0,217,0,0,0,4,73,68,95,51,43,202,144,96,224,0,83,238,84,20,36,120,164,118,157,225,218,57,5,32,64,106,223,171,38,240,66,41,186,158,47,146,26,64,232,125,119,70,91,3,93,140,174,66,227,136,72,159,215,222,73,255,126,254,118,41,247,125,250,215,95,10,80,132,0,0,0,4,73,68,95,52,46,234,100,140,135,50,89,107,19,20,254,42,77,47,5,54,63,12,153,78,145,206,202,210,88,53,51,142,222,226,41,79,10,180,152,134,194,185,75,208,189,63,110,209,219,190,44,178,103,29,42,229,29,49,193,33,4,51,195,151,43,182,69,120,0,0,0,3,81,95,49,17,6,177,58,190,50,155,216,217,204,157,44,38,98,209,188,147,72,214,64,225,47,196,203,134,200,239,193,35,83,200,124,0,151,151,74,98,154,19,122,227,132,196,28,91,51,187,224,199,208,219,86,44,248,10,45,0,91,175,105,0,76,80,224,0,0,0,3,81,95,50,11,179,73,194,52,84,255,76,100,220,198,200,195,79,126,184,253,168,129,202,234,240,9,67,198,81,215,253,244,134,246,229,9,112,67,97,123,110,149,178,1,76,151,252,222,99,33,165,184,102,181,73,19,200,56,79,46,254,157,40,209,127,48,75,0,0,0,3,81,95,51,10,205,230,201,195,86,211,30,31,11,118,99,63,185,237,42,175,255,250,203,54,114,46,10,202,57,105,201,0,17,21,133,29,33,237,17,42,61,17,54,236,88,93,39,202,111,155,250,58,42,154,151,126,214,164,84,166,202,180,8,55,94,142,190,0,0,0,3,81,95,52,2,214,253,158,132,219,231,75,117,49,225,128,20,5,161,194,146,17,123,26,23,254,254,157,224,191,217,237,241,168,75,249,41,60,106,179,192,106,6,105,175,19,57,58,130,198,10,69,154,59,42,11,118,141,164,90,199,175,127,42,236,64,252,66,0,0,0,12,81,95,65,82,73,84,72,77,69,84,73,67,21,117,73,158,206,175,178,185,32,253,18,117,203,174,240,27,101,142,44,200,94,145,166,118,174,247,207,210,94,132,179,216,19,205,139,201,233,65,52,30,115,10,15,92,236,197,65,191,84,239,217,8,59,22,154,67,4,24,116,58,219,123,89,226,0,0,0,5,81,95,65,85,88,21,90,15,81,254,199,140,51,255,206,183,54,77,105,215,172,39,229,112,174,80,188,24,5,9,118,78,179,254,249,72,21,28,28,71,32,190,212,74,89,29,151,203,199,43,110,68,182,68,153,151,19,168,211,198,110,144,84,170,87,38,50,76,118,0,0,0,3,81,95,67,29,39,169,134,181,204,152,42,167,195,70,120,27,109,4,246,159,247,84,178,54,108,25,0,203,224,231,232,76,172,239,237,23,87,44,72,240,224,111,147,47,192,204,255,209,89,200,28,140,119,29,102,48,85,159,71,78,77,188,19,247,10,90,81,0,0,0,10,81,95,69,76,76,73,80,84,73,67,10,211,75,94,141,183,42,90,207,68,39,84,108,114,148,190,110,212,244,210,82,167,144,89,229,5,249,171,193,189,243,237,30,91,38,121,10,38,235,52,2,23,221,154,210,141,191,144,160,73,244,42,56,82,172,212,94,111,82,31,36,180,144,14,0,0,0,3,81,95,77,35,138,46,11,151,121,7,27,160,31,103,97,76,21,77,4,141,192,51,165,254,115,2,194,153,213,83,210,5,184,25,132,1,182,212,122,27,243,20,18,53,23,24,27,222,45,237,213,196,85,215,172,85,209,217,65,23,225,47,80,98,152,61,34,0,0,0,6,81,95,83,79,82,84,44,188,231,190,238,48,118,183,141,172,224,73,67,214,157,13,158,40,170,109,0,224,70,133,39,129,165,242,8,22,100,92,43,194,126,194,225,97,46,162,132,176,139,204,85,182,242,253,145,93,17,191,237,189,192,229,157,224,158,91,40,149,32,128,0,0,0,7,83,73,71,77,65,95,49,43,90,227,204,129,65,188,154,155,46,76,69,134,126,153,33,167,33,20,80,94,233,153,240,161,200,127,247,94,247,80,123,42,218,250,131,76,239,152,182,154,45,139,63,250,79,108,104,31,249,163,28,78,161,171,92,176,121,207,152,170,154,168,193,0,0,0,7,83,73,71,77,65,95,50,42,156,121,156,239,126,82,19,132,22,151,51,129,134,245,1,150,87,113,70,135,150,150,28,132,199,148,142,42,169,207,43,6,218,61,216,5,223,113,238,102,96,230,96,163,157,71,50,141,237,222,74,220,107,26,198,111,70,252,227,151,107,139,116,0,0,0,7,83,73,71,77,65,95,51,5,103,47,224,134,19,76,147,223,227,161,72,230,3,212,9,139,54,245,151,71,224,53,22,140,111,179,202,118,63,102,49,23,138,85,224,7,117,190,57,162,221,182,96,198,73,57,186,144,8,75,30,85,169,79,107,76,117,185,76,22,201,22,51,0,0,0,7,83,73,71,77,65,95,52,3,169,243,237,73,240,108,142,27,166,4,165,102,73,134,0,154,28,153,207,102,169,190,248,69,103,201,82,130,52,61,50,7,88,133,69,78,170,52,250,245,26,34,213,206,147,70,216,252,151,4,20,215,103,108,219,229,77,110,133,243,202,80,33,0,0,0,7,84,65,66,76,69,95,49,2,195,151,7,60,138,188,230,212,20,12,155,150,18,9,221,120,59,255,26,28,252,153,155,178,152,89,207,177,108,70,252,43,123,186,45,30,255,252,224,208,51,245,150,180,208,48,117,5,153,190,103,13,181,147,175,134,225,146,63,232,161,187,24,0,0,0,7,84,65,66,76,69,95,50,44,113,197,139,102,73,143,144,59,59,187,218,61,5,206,143,251,87,26,75,60,248,53,51,243,247,27,153,160,79,110,107,3,157,206,55,249,77,27,189,151,204,234,50,162,36,254,42,250,239,188,189,8,12,132,220,234,144,181,79,78,10,133,143,0,0,0,7,84,65,66,76,69,95,51,39,220,68,151,126,254,107,55,70,162,144,112,111,79,114,117,120,60,115,207,229,104,71,216,72,253,147,182,59,243,32,131,10,83,102,38,109,215,183,26,16,179,86,3,2,38,162,222,12,191,46,220,143,8,91,22,215,54,82,177,94,206,216,245,0,0,0,7,84,65,66,76,69,95,52,19,96,151,215,158,27,10,227,115,37,94,135,96,196,153,0,167,88,142,196,214,128,156,144,187,69,16,5,163,222,48,119,19,221,117,21,204,172,64,149,48,45,32,79,6,240,191,242,89,93,119,189,247,46,74,205,176,176,180,57,105,134,13,152,0,0,0,10,84,65,66,76,69,95,84,89,80,69,22,255,53,1,54,145,33,212,16,180,69,146,146,57,186,5,127,226,17,218,209,183,6,228,154,59,85,146,15,172,32,236,30,25,9,135,235,217,207,72,15,96,139,130,19,74,0,235,128,7,103,60,30,209,11,131,74,105,90,223,0,104,82,42,0,0,0,0,0]} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr deleted file mode 100644 index 72f614f1e63..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr +++ /dev/null @@ -1,80 +0,0 @@ -// Tests arithmetic operations on integers -fn main() { - let x: u32 = 6; - let y: u32 = 2; - - assert((x + y) == add(x, y)); - - assert((x - y) == sub(x, y)); - - assert((x * y) == mul(x, y)); - - assert((x / y) == div(x, y)); - - // TODO SSA => ACIR has some issues with i32 ops - assert(check_signed_div(6, 2, 3)); - - assert(eq(1, 2) == false); - assert(eq(1, 1)); - - assert(lt(x, y) == false); - assert(lt(y, x)); - - assert((x & y) == and(x, y)); - assert((x | y) == or(x, y)); - - // TODO SSA => ACIR has some issues with xor ops - - assert(check_xor(x, y, 4)); - assert((x >> y) == shr(x, y)); - assert((x << y) == shl(x, y)); -} - -unconstrained fn add(x : u32, y : u32) -> u32 { - x + y -} - -unconstrained fn sub(x : u32, y : u32) -> u32 { - x - y -} - -unconstrained fn mul(x : u32, y : u32) -> u32 { - x * y -} - -unconstrained fn div(x : u32, y : u32) -> u32 { - x / y -} - -unconstrained fn check_signed_div(x: i32, y: i32, result: i32) -> bool { - (x / y) == result -} - -unconstrained fn eq(x : u32, y : u32) -> bool { - x == y -} - -unconstrained fn lt(x : u32, y : u32) -> bool { - x < y -} - -unconstrained fn and(x : u32, y : u32) -> u32 { - x & y -} - -unconstrained fn or(x : u32, y : u32) -> u32 { - x | y -} - -unconstrained fn check_xor(x : u32, y : u32, result: u32) -> bool { - (x ^ y) == result -} - -unconstrained fn shr(x : u32, y : u32) -> u32 { - x >> y -} - -unconstrained fn shl(x : u32, y : u32) -> u32 { - x << y -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml deleted file mode 100644 index 22cd5b7c12f..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -sum = "6" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr deleted file mode 100644 index 7240264b2a8..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is basic looping on brillig -fn main(sum: u32){ - assert(loop(4) == sum); -} - -unconstrained fn loop(x: u32) -> u32 { - let mut sum = 0; - for i in 0..x { - sum = sum + i; - } - sum -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr deleted file mode 100644 index 1cab78ecb95..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr +++ /dev/null @@ -1,28 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is modulo operations on brillig -fn main() { - assert(modulo(47, 3) == 2); - assert(modulo(2, 3) == 2); - assert(signed_modulo(5, 3) == 2); - assert(signed_modulo(2, 3) == 2); - - let minus_two: i4 = 14; - let minus_three: i4 = 13; - let minus_five: i4 = 11; - - // (5 / -3) * -3 + 2 = -1 * -3 + 2 = 3 + 2 = 5 - assert(signed_modulo(5, minus_three) == 2); - // (-5 / 3) * 3 - 2 = -1 * 3 - 2 = -3 - 2 = -5 - assert(signed_modulo(minus_five, 3) == minus_two); - // (-5 / -3) * -3 - 2 = 1 * -3 - 2 = -3 - 2 = -5 - assert(signed_modulo(minus_five, minus_three) == minus_two); -} - -unconstrained fn modulo(x: u32, y: u32) -> u32 { - x % y -} - -unconstrained fn signed_modulo(x: i4, y: i4) -> i4 { - x % y -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml deleted file mode 100644 index a0397e89477..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr deleted file mode 100644 index bc94810efb9..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -// Tests a very simple Brillig function. -// -// The features being tested is not instruction on brillig -fn main(x: Field, y : Field) { - assert(false == not_operator(x as bool)); - assert(true == not_operator(y as bool)); -} - -unconstrained fn not_operator(x : bool) -> bool { - !x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml deleted file mode 100644 index 2b26a4ce471..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "10" - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr deleted file mode 100644 index 3f4f718b81d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr +++ /dev/null @@ -1,23 +0,0 @@ -// Tests oracle usage in brillig/unconstrained functions -fn main(x: Field) { - // call through a brillig wrapper - oracle_print_array_wrapper([x, x]); - - // TODO(#1615) Nargo currently only supports resolving one foreign call - // oracle_print_wrapper(x); -} - -#[oracle(oracle_print_impl)] -unconstrained fn oracle_print(_x : Field) -> Field {} - -unconstrained fn oracle_print_wrapper(x: Field) { - oracle_print(x); -} - -#[oracle(oracle_print_array_impl)] -unconstrained fn oracle_print_array(_arr : [Field; 2]) -> Field {} - -unconstrained fn oracle_print_array_wrapper(arr: [Field; 2]) { - oracle_print_array(arr); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml deleted file mode 100644 index f489cbac003..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "10" -y = "10" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr deleted file mode 100644 index 57af8120b33..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -fn main(x: Field, y: Field) { - let z = x == y; - let t = z as u8; - assert(t == 1); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml deleted file mode 100644 index ec8d8e34856..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -a = [1, 2, 3] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr deleted file mode 100644 index 04f08bb70c5..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -fn main(a: [Field; 3]) { - let i = 1; - - // Using a comptime variable as a parameter should not make it non-comptime - let ii = foo(i); - let elem1 = a[i]; - - // Nor should using it in an expression with a non-comptime variable. - let two = i + ii; - assert(i == ii); - - let elem2 = a[i]; - assert(elem1 == elem2); - assert(two == 2); -} - -fn foo(x: Field) -> Field { x } diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml deleted file mode 100644 index 745ce7c2361..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 5 -y = 6 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr deleted file mode 100644 index 0461fd9c4cb..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -fn main(x: Field, y: Field) { - let flag = (x == 1) | (y == 2); - assert(flag | false == flag); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml deleted file mode 100644 index fe9e83b06aa..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -_x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr deleted file mode 100644 index 4cc6c739181..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -// This is a test for simple return with a constant. -// -// Note: There's a possibility in the future that -// a test before ACIR gen optimizes this test. -fn main(_x : Field) -> pub Field { - 5 -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml deleted file mode 100644 index 97d5b1e0eed..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 3 -y = 2 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr deleted file mode 100644 index 53e094eb4cc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -fn main(x : Field, y : pub Field) { - assert(x * 2 == y * 3); -} - -contract Foo { - fn double(x: Field) -> pub Field { x * 2 } - fn triple(x: Field) -> pub Field { x * 3 } -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml deleted file mode 100644 index 07890234a19..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr deleted file mode 100644 index d84be844d8e..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -// Example that uses the distinct keyword -fn main(x: pub Field) -> distinct pub [Field;2] { - [x+1, x] -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml deleted file mode 100644 index 4a5c2a916f0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "Baby Jubjub sanity checks" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr deleted file mode 100644 index 3372e969d4b..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr +++ /dev/null @@ -1,226 +0,0 @@ -// Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc - -use dep::std::ec::tecurve::affine::Curve as AffineCurve; -use dep::std::ec::tecurve::affine::Point as Gaffine; -use dep::std::ec::tecurve::curvegroup::Curve; -use dep::std::ec::tecurve::curvegroup::Point as G; - -use dep::std::ec::swcurve::affine::Point as SWGaffine; -use dep::std::ec::swcurve::curvegroup::Point as SWG; - -use dep::std::ec::montcurve::affine::Point as MGaffine; -use dep::std::ec::montcurve::curvegroup::Point as MG; - -fn main() { - // This test only makes sense if Field is the right prime field. - if 21888242871839275222246405745257275088548364400416034343698204186575808495617 == 0 - { - // Define Baby Jubjub (ERC-2494) parameters in affine representation - let bjj_affine = AffineCurve::new(168700, 168696, Gaffine::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905)); - - // Test addition - let p1_affine = Gaffine::new(17777552123799933955779906779655732241715742912184938656739573121738514868268, 2626589144620713026669568689430873010625803728049924121243784502389097019475); - let p2_affine = Gaffine::new(16540640123574156134436876038791482806971768689494387082833631921987005038935, 20819045374670962167435360035096875258406992893633759881276124905556507972311); - - let p3_affine = bjj_affine.add(p1_affine, p2_affine); - assert( - p3_affine.eq(Gaffine::new( - 7916061937171219682591368294088513039687205273691143098332585753343424131937, - 14035240266687799601661095864649209771790948434046947201833777492504781204499 - )) - ); - - // Test scalar multiplication - let p4_affine = bjj_affine.mul(2, p1_affine); - assert( - p4_affine.eq(Gaffine::new( - 6890855772600357754907169075114257697580319025794532037257385534741338397365, - 4338620300185947561074059802482547481416142213883829469920100239455078257889 - )) - ); - assert(p4_affine.eq(bjj_affine.bit_mul([0,1], p1_affine))); - - // Test subtraction - let p5_affine = bjj_affine.subtract(p3_affine, p3_affine); - assert(p5_affine.eq(Gaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_affine.contains(bjj_affine.gen) & - bjj_affine.contains(p1_affine) & - bjj_affine.contains(p2_affine) & - bjj_affine.contains(p3_affine) & - bjj_affine.contains(p4_affine) & - bjj_affine.contains(p5_affine) - ); - - // Test CurveGroup equivalents - let bjj = bjj_affine.into_group(); // Baby Jubjub - - let p1 = p1_affine.into_group(); - let p2 = p2_affine.into_group(); - let p3 = p3_affine.into_group(); - let p4 = p4_affine.into_group(); - let p5 = p5_affine.into_group(); - - // Test addition - assert(p3.eq(bjj.add(p1, p2))); - - // Test scalar multiplication - assert(p4.eq(bjj.mul(2, p1))); - assert(p4.eq(bjj.bit_mul([0,1], p1))); - - // Test subtraction - assert(G::zero().eq(bjj.subtract(p3, p3))); - assert(p5.eq(G::zero())); - - // Check that these points are on the curve - assert( - bjj.contains(bjj.gen) & - bjj.contains(p1) & - bjj.contains(p2) & - bjj.contains(p3) & - bjj.contains(p4) & - bjj.contains(p5) - ); - - // Test SWCurve equivalents of the above - // First the affine representation - let bjj_swcurve_affine = bjj_affine.into_swcurve(); - - let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine); - let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine); - let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine); - let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine); - let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine); - - // Addition - assert( - p3_swcurve_affine.eq( - bjj_swcurve_affine.add( - p1_swcurve_affine, - p2_swcurve_affine - ) - ) - ); - - // Doubling - assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine))); - assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0,1], p1_swcurve_affine))); - - // Subtraction - assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(p3_swcurve_affine, p3_swcurve_affine))); - assert(p5_swcurve_affine.eq(SWGaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_swcurve_affine.contains(bjj_swcurve_affine.gen) & - bjj_swcurve_affine.contains(p1_swcurve_affine) & - bjj_swcurve_affine.contains(p2_swcurve_affine) & - bjj_swcurve_affine.contains(p3_swcurve_affine) & - bjj_swcurve_affine.contains(p4_swcurve_affine) & - bjj_swcurve_affine.contains(p5_swcurve_affine) - ); - - // Then the CurveGroup representation - let bjj_swcurve = bjj.into_swcurve(); - - let p1_swcurve = bjj.map_into_swcurve(p1); - let p2_swcurve = bjj.map_into_swcurve(p2); - let p3_swcurve = bjj.map_into_swcurve(p3); - let p4_swcurve = bjj.map_into_swcurve(p4); - let p5_swcurve = bjj.map_into_swcurve(p5); - - // Addition - assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve,p2_swcurve))); - - // Doubling - assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve))); - assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0,1], p1_swcurve))); - - // Subtraction - assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve))); - assert(p5_swcurve.eq(SWG::zero())); - - // Check that these points are on the curve - assert( - bjj_swcurve.contains(bjj_swcurve.gen) & - bjj_swcurve.contains(p1_swcurve) & - bjj_swcurve.contains(p2_swcurve) & - bjj_swcurve.contains(p3_swcurve) & - bjj_swcurve.contains(p4_swcurve) & - bjj_swcurve.contains(p5_swcurve) - ); - - // Test MontCurve conversions - // First the affine representation - let bjj_montcurve_affine = bjj_affine.into_montcurve(); - - let p1_montcurve_affine = p1_affine.into_montcurve(); - let p2_montcurve_affine = p2_affine.into_montcurve(); - let p3_montcurve_affine = p3_affine.into_montcurve(); - let p4_montcurve_affine = p4_affine.into_montcurve(); - let p5_montcurve_affine = p5_affine.into_montcurve(); - - // Addition - assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(p1_montcurve_affine, p2_montcurve_affine))); - - // Doubling - assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine))); - assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0,1], p1_montcurve_affine))); - - // Subtraction - assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(p3_montcurve_affine, p3_montcurve_affine))); - assert(p5_montcurve_affine.eq(MGaffine::zero())); - - // Check that these points are on the curve - assert( - bjj_montcurve_affine.contains(bjj_montcurve_affine.gen) & - bjj_montcurve_affine.contains(p1_montcurve_affine) & - bjj_montcurve_affine.contains(p2_montcurve_affine) & - bjj_montcurve_affine.contains(p3_montcurve_affine) & - bjj_montcurve_affine.contains(p4_montcurve_affine) & - bjj_montcurve_affine.contains(p5_montcurve_affine) - ); - - // Then the CurveGroup representation - let bjj_montcurve = bjj.into_montcurve(); - - let p1_montcurve = p1_montcurve_affine.into_group(); - let p2_montcurve = p2_montcurve_affine.into_group(); - let p3_montcurve = p3_montcurve_affine.into_group(); - let p4_montcurve = p4_montcurve_affine.into_group(); - let p5_montcurve = p5_montcurve_affine.into_group(); - - // Addition - assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve))); - - // Doubling - assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve))); - assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0,1], p1_montcurve))); - - // Subtraction - assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve))); - assert(p5_montcurve.eq(MG::zero())); - - // Check that these points are on the curve - assert( - bjj_montcurve.contains(bjj_montcurve.gen) & - bjj_montcurve.contains(p1_montcurve) & - bjj_montcurve.contains(p2_montcurve) & - bjj_montcurve.contains(p3_montcurve) & - bjj_montcurve.contains(p4_montcurve) & - bjj_montcurve.contains(p5_montcurve) - ); - - // Elligator 2 map-to-curve - let ell2_pt_map = bjj_affine.elligator2_map(27); - - assert(ell2_pt_map.eq(MGaffine::new(7972459279704486422145701269802978968072470631857513331988813812334797879121, 8142420778878030219043334189293412482212146646099536952861607542822144507872).into_tecurve())); - - // SWU map-to-curve - let swu_pt_map = bjj_affine.swu_map(5,27); - - assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(2162719247815120009132293839392097468339661471129795280520343931405114293888, 5341392251743377373758788728206293080122949448990104760111875914082289313973)))); - } -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml deleted file mode 100644 index 7199d3305bf..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "ECDSA secp256k1 verification" -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml deleted file mode 100644 index 412c7b36e4c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml +++ /dev/null @@ -1,209 +0,0 @@ - -hashed_message = [ - 0x3a, - 0x73, - 0xf4, - 0x12, - 0x3a, - 0x5c, - 0xd2, - 0x12, - 0x1f, - 0x21, - 0xcd, - 0x7e, - 0x8d, - 0x35, - 0x88, - 0x35, - 0x47, - 0x69, - 0x49, - 0xd0, - 0x35, - 0xd9, - 0xc2, - 0xda, - 0x68, - 0x06, - 0xb4, - 0x63, - 0x3a, - 0xc8, - 0xc1, - 0xe2, -] -message = [ - 0x49, - 0x6e, - 0x73, - 0x74, - 0x72, - 0x75, - 0x63, - 0x74, - 0x69, - 0x6f, - 0x6e, - 0x73, - 0x20, - 0x75, - 0x6e, - 0x63, - 0x6c, - 0x65, - 0x61, - 0x72, - 0x2c, - 0x20, - 0x61, - 0x73, - 0x6b, - 0x20, - 0x61, - 0x67, - 0x61, - 0x69, - 0x6e, - 0x20, - 0x6c, - 0x61, - 0x74, - 0x65, - 0x72, - 0x2e, -] -pub_key_x = [ - 0xa0, - 0x43, - 0x4d, - 0x9e, - 0x47, - 0xf3, - 0xc8, - 0x62, - 0x35, - 0x47, - 0x7c, - 0x7b, - 0x1a, - 0xe6, - 0xae, - 0x5d, - 0x34, - 0x42, - 0xd4, - 0x9b, - 0x19, - 0x43, - 0xc2, - 0xb7, - 0x52, - 0xa6, - 0x8e, - 0x2a, - 0x47, - 0xe2, - 0x47, - 0xc7, -] -pub_key_y = [ - 0x89, - 0x3a, - 0xba, - 0x42, - 0x54, - 0x19, - 0xbc, - 0x27, - 0xa3, - 0xb6, - 0xc7, - 0xe6, - 0x93, - 0xa2, - 0x4c, - 0x69, - 0x6f, - 0x79, - 0x4c, - 0x2e, - 0xd8, - 0x77, - 0xa1, - 0x59, - 0x3c, - 0xbe, - 0xe5, - 0x3b, - 0x03, - 0x73, - 0x68, - 0xd7, -] -signature = [ - 0xe5, - 0x08, - 0x1c, - 0x80, - 0xab, - 0x42, - 0x7d, - 0xc3, - 0x70, - 0x34, - 0x6f, - 0x4a, - 0x0e, - 0x31, - 0xaa, - 0x2b, - 0xad, - 0x8d, - 0x97, - 0x98, - 0xc3, - 0x80, - 0x61, - 0xdb, - 0x9a, - 0xe5, - 0x5a, - 0x4e, - 0x8d, - 0xf4, - 0x54, - 0xfd, - 0x28, - 0x11, - 0x98, - 0x94, - 0x34, - 0x4e, - 0x71, - 0xb7, - 0x87, - 0x70, - 0xcc, - 0x93, - 0x1d, - 0x61, - 0xf4, - 0x80, - 0xec, - 0xbb, - 0x0b, - 0x89, - 0xd6, - 0xeb, - 0x69, - 0x69, - 0x01, - 0x61, - 0xe4, - 0x9a, - 0x71, - 0x5f, - 0xcd, - 0x55, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr deleted file mode 100644 index dfac8673b38..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr +++ /dev/null @@ -1,11 +0,0 @@ -use dep::std; - - -fn main(message : [u8;38],hashed_message : [u8;32], pub_key_x : [u8;32], pub_key_y : [u8;32], signature : [u8;64]) { - // Hash the message, since secp256k1 expects a hashed_message - let expected= std::hash::sha256(message); - assert(hashed_message == expected); - - let valid_signature = std::ecdsa_secp256k1::verify_signature(pub_key_x, pub_key_y, signature, hashed_message); - assert(valid_signature); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml deleted file mode 100644 index 85f1e9f96f2..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2" -y = "2" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr deleted file mode 100644 index bfde9d3c957..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr +++ /dev/null @@ -1,57 +0,0 @@ -struct Bar { - one: Field, - two: Field, - other: T, -} - -fn foo(bar: Bar) { - assert(bar.one == bar.two); -} - -struct BigInt { - limbs: [u32; N], -} - -impl BigInt { - // `N` is in scope of all methods in the impl - fn first(first: BigInt, second: BigInt) -> Self { - assert(first.limbs != second.limbs); - first - } - - fn second(first: BigInt, second: Self) -> Self { - assert(first.limbs != second.limbs); - second - } -} - -impl Bar { - fn get_other(self) -> Field { - self.other - } -} - -fn main(x: Field, y: Field) { - let bar1: Bar = Bar { one: x, two: y, other: 0 }; - let bar2 = Bar { one: x, two: y, other: [0] }; - - foo(bar1); - foo(bar2); - - // Test generic impls - let int1 = BigInt { limbs: [1] }; - let int2 = BigInt { limbs: [2] }; - let BigInt { limbs } = int1.second(int2).first(int1); - assert(limbs == int2.limbs); - - // Test impl exclusively for Bar - assert(bar1.get_other() == bar1.other); - - // Expected type error - // assert(bar2.get_other() == bar2.other); - - let one = x; - let two = y; - let nested_generics: Bar> = Bar { one, two, other: Bar { one, two, other: 0 } }; - assert(nested_generics.other.other == bar1.get_other()); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml deleted file mode 100644 index 66f7feb1dda..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] -c = [3, 3, 3] -d = [5, 5, 5, 5, 5] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr deleted file mode 100644 index e52efc52eae..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr +++ /dev/null @@ -1,5 +0,0 @@ -fn from_baz(x : [Field; crate::foo::MAGIC_NUMBER]) { - for i in 0..crate::foo::MAGIC_NUMBER { - assert(x[i] == crate::foo::MAGIC_NUMBER); - }; -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr deleted file mode 100644 index 2db74fb1ff7..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr +++ /dev/null @@ -1,11 +0,0 @@ -mod bar; - -global N: Field = 5; -global MAGIC_NUMBER: Field = 3; -global TYPE_INFERRED = 42; - -fn from_foo(x : [Field; bar::N]) { - for i in 0..bar::N { - assert(x[i] == bar::N); - }; -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr deleted file mode 100644 index 1b4d472b1e8..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr +++ /dev/null @@ -1,5 +0,0 @@ -global N: Field = 5; - -fn from_bar(x : Field) -> Field { - x * N -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr deleted file mode 100644 index 9bcca2b8071..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr +++ /dev/null @@ -1,88 +0,0 @@ -mod foo; -mod baz; - -global M: Field = 32; -global L: Field = 10; // Unused globals currently allowed -global N: Field = 5; -global T_LEN = 2; // Type inference is allowed on globals -//global N: Field = 5; // Uncomment to see duplicate globals error - -struct Dummy { - x: [Field; N], - y: [Field; foo::MAGIC_NUMBER] -} - -fn main(a: [Field; M + N - N], b: [Field; 30 + N / 2], c : pub [Field; foo::MAGIC_NUMBER], d: [Field; foo::bar::N]) { - let test_struct = Dummy { x: d, y: c }; - - for i in 0..foo::MAGIC_NUMBER { - assert(c[i] == foo::MAGIC_NUMBER); - assert(test_struct.y[i] == foo::MAGIC_NUMBER); - } - - assert(N != M); - - let expected: u32 = 42; - assert(foo::TYPE_INFERRED == expected); - - let mut y = 5; - let mut x = M; - for i in 0..N*N { - let M: comptime Field = 10; - x = M; - - y = i; - } - assert(y == 24); - assert(x == 10); - - let q = multiplyByM(3); - assert(q == 96); - - arrays_neq(a, b); - - let t: [Field; T_LEN] = [N, M]; - assert(t[1] == 32); - - assert(15 == mysubmodule::my_helper()); - - let add_submodules_N = mysubmodule::N + foo::bar::N; - assert(15 == add_submodules_N); - let add_from_bar_N = mysubmodule::N + foo::bar::from_bar(1); - assert(15 == add_from_bar_N); - - // Example showing an array filled with (mysubmodule::N + 2) 0's - let sugared = [0; mysubmodule::N + 2]; - assert(sugared[mysubmodule::N + 1] == 0); - - let arr: [Field; mysubmodule::N] = [N; 10]; - assert((arr[0] == 5) & (arr[9] == 5)); - - foo::from_foo(d); - baz::from_baz(c); -} - -fn multiplyByM(x: Field) -> Field { - x * M -} - -fn arrays_neq(a: [Field; M], b: [Field; M]) { - assert(a != b); -} - -mod mysubmodule { - use dep::std; - - global N: Field = 10; - global L: Field = 50; - - fn my_bool_or(x: u1, y: u1) { - assert(x | y == 1); - } - - fn my_helper() -> comptime Field { - let N: comptime Field = 15; // Like in Rust, local variables override globals - let x = N; - x - } -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml deleted file mode 100644 index f6597d3f78a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -input = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr deleted file mode 100644 index ffc334179ee..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -use dep::std; - -fn main(input : Field) -> pub Field { - std::hash::hash_to_field([input]) -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml deleted file mode 100644 index 84aeb36ac21..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -a=0 -c=[2, 4, 3, 0, ] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr deleted file mode 100644 index 5105c18c7de..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr +++ /dev/null @@ -1,16 +0,0 @@ - -fn main(a: u32, mut c: [u32; 4]){ - if a == c[0] { - assert(c[0] == 0); - } else if a == c[1] { - assert(c[1] == 0); - } else if a == c[2] { - assert(c[2] == 0); - } else if a == c[3] { - // expect to match this case - assert(c[3] == 0); - } else { - assert(c[0] == 10); - } -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml deleted file mode 100644 index d65c4011d3f..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml +++ /dev/null @@ -1,35 +0,0 @@ -x = 0xbd -result = [ - 0x5a, - 0x50, - 0x2f, - 0x9f, - 0xca, - 0x46, - 0x7b, - 0x26, - 0x6d, - 0x5b, - 0x78, - 0x33, - 0x65, - 0x19, - 0x37, - 0xe8, - 0x05, - 0x27, - 0x0c, - 0xa3, - 0xf3, - 0xaf, - 0x1c, - 0x0d, - 0xd2, - 0x46, - 0x2d, - 0xca, - 0x4b, - 0x3b, - 0x1a, - 0xbf, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr deleted file mode 100644 index ba3ed7d07af..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr +++ /dev/null @@ -1,22 +0,0 @@ -// Keccak256 example -// -use dep::std; - -fn main(x: Field, result: [u8; 32]) { - // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field - // The padding is taken care of by the program - let digest = std::hash::keccak256([x as u8], 1); - assert(digest == result); - - //#1399: variable meesage size - let message_size = 4; - let hash_a = std::hash::keccak256([1,2,3,4], message_size); - let hash_b = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size); - - assert(hash_a == hash_b); - - let message_size_big = 8; - let hash_c = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size_big); - - assert(hash_a != hash_c); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml deleted file mode 100644 index fb93b9aa2a7..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml deleted file mode 100644 index f932e0b4817..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = true -y = [true, false] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr deleted file mode 100644 index 0615a7dbca4..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -fn main(x : bool, y: [bool;2]) { - if x { - assert(1 != 2); - } - - assert(x); - assert(y[0] != y[1]); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml deleted file mode 100644 index fb93b9aa2a7..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml deleted file mode 100644 index 63e9878811a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "8" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr deleted file mode 100644 index 06347eb0919..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn main(x: pub Field) -> pub Field { - x -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml deleted file mode 100644 index fca4a077df4..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml +++ /dev/null @@ -1,11 +0,0 @@ -old_root = "0x285785b10eca49cf456b935f1c9787ff571f306c1bc62549c31a9199a633f9f8" -old_leaf = "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0" -old_hash_path = [ - "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", - "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", - "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", -] -new_root = "0x2d05c2650e6c2ef02c6dc7fae7f517b8ac191386666c0b5a68130a8c11092f5f" -leaf = "0x085ca53be9c9d95b57e6e5fc91c5d531ad9e63e85dd71af7e35562991774b435" -index = "0" -mimc_input = [12,45,78,41] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr deleted file mode 100644 index 3de10520037..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr +++ /dev/null @@ -1,21 +0,0 @@ -use dep::std; - -fn main( - old_root: Field, - old_leaf: Field, - old_hash_path: [Field; 3], - new_root: pub Field, - leaf: Field, - index: Field, - mimc_input: [Field; 4], -) { - assert(old_root == std::merkle::compute_merkle_root(old_leaf, index, old_hash_path)); - - let calculated_root = std::merkle::compute_merkle_root(leaf, index, old_hash_path); - assert(new_root == calculated_root); - - let h = std::hash::mimc_bn254(mimc_input); - // Regression test for PR #891 - std::println(h); - assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml deleted file mode 100644 index c0a0cdfbeb0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2" -y = "13" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr deleted file mode 100644 index 1f771fa9425..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn hello(x : Field) -> Field { - x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr deleted file mode 100644 index 167f7e671a0..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -mod foo; -// This is a comment. -// -// `main` is the entry point to a binary -// -// You can have a `Binary` or a `Library` -// Release : 0.2 -// -// To run a proof on the command line, type `cargo run prove {proof_name}` -// -// To verify that proof, type `cargo run verify {proof_name}` -fn main(x: Field, y: pub Field) { - assert(x != foo::hello(y)); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml deleted file mode 100644 index 39a4ddb9d15..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ - - x = "5" - y = "15" - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr deleted file mode 100644 index ee0d20082f5..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr +++ /dev/null @@ -1,5 +0,0 @@ -mod bar; - -fn hello(x : Field) -> Field { - x -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr deleted file mode 100644 index a92fb81dceb..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn from_bar(x : Field) -> Field { - x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr deleted file mode 100644 index 8862e5a8650..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -mod foo; - -// An example of the module system -fn main(x: Field, y: Field) { - assert(x != foo::bar::from_bar(y)); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml deleted file mode 100644 index d435609bb1a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml +++ /dev/null @@ -1,290 +0,0 @@ -bn254_modulus_be_bytes = [ - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, -] -bn254_modulus_be_bits = [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 1, - 1, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr deleted file mode 100644 index 4a13a6e06ba..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr +++ /dev/null @@ -1,27 +0,0 @@ -use dep::std; - -fn main(bn254_modulus_be_bytes : [u8; 32], bn254_modulus_be_bits : [u1; 254]) -> pub Field { - let modulus_size = std::field::modulus_num_bits(); - // NOTE: The constraints used in this circuit will only work when testing nargo with the plonk bn254 backend - assert(modulus_size == 254); - - let modulus_be_byte_array = std::field::modulus_be_bytes(); - for i in 0..32 { - assert(modulus_be_byte_array[i] == bn254_modulus_be_bytes[i]); - } - let modulus_le_byte_array = std::field::modulus_le_bytes(); - for i in 0..32 { - assert(modulus_le_byte_array[i] == bn254_modulus_be_bytes[31-i]); - } - - let modulus_be_bits = std::field::modulus_be_bits(); - for i in 0..254 { - assert(modulus_be_bits[i] == bn254_modulus_be_bits[i]); - } - let modulus_le_bits = std::field::modulus_le_bits(); - for i in 0..254 { - assert(modulus_le_bits[i] == bn254_modulus_be_bits[253-i]); - } - - modulus_size -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr deleted file mode 100644 index f1efafc19fd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr +++ /dev/null @@ -1,39 +0,0 @@ -fn main() { - let a = id([1, 2]); - let b = id([1, 2, 3]); - - let itWorks1 = MyStruct { data: a }; - assert(itWorks1.data[1] == 2); - let itWorks2 = MyStruct { data: b }; - assert(itWorks2.data[1] == 2); - - let c = [1, 2]; - let itAlsoWorks = MyStruct { data: c }; - assert(itAlsoWorks.data[1] == 2); - - assert(foo(itWorks2).data[0] == itWorks2.data[0] + 1); -} - -fn id(x: [Field; I]) -> [Field; I] { - x -} - -struct MyStruct { - data: [Field; S], -} - -impl MyStruct { - fn insert(mut self: Self, index: comptime Field, elem: Field) -> Self { - // Regression test for numeric generics on impls - assert(index as u64 < S as u64); - - self.data[index] = elem; - self - } -} - -fn foo(mut s: MyStruct<2+1>) -> MyStruct<10/2-2> { - s.data[0] = s.data[0] + 1; - s -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml deleted file mode 100644 index 2fb3b1e1abf..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml +++ /dev/null @@ -1,6 +0,0 @@ -x = "0" -y = "1" -salt = "42" - -out_x = "0x0c5e1ddecd49de44ed5e5798d3f6fb7c71fe3d37f5bee8664cf88a445b5ba0af" -out_y = "0x230294a041e26fe80b827c2ef5cb8784642bbaa83842da2714d62b1f3c4f9752" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr deleted file mode 100644 index 37fc3f61188..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -use dep::std; - -fn main(x: Field, y: Field, salt: Field, out_x: Field, out_y: Field ) { - let res = std::hash::pedersen([x, y]); - assert(res[0] == out_x); - assert(res[1] == out_y); - - let raw_data = [x,y]; - let mut state = 0; - for i in 0..2 { - state = state * 8 + raw_data[i]; - } - state += salt; - let hash = std::hash::pedersen([state]); - assert(std::hash::pedersen([43])[0] == hash[0]); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml deleted file mode 100644 index 465ef562de4..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr deleted file mode 100644 index c7986cb7af3..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use dep::std; - -fn main(x: Field, y: Field) { - let p = x == y; - assert(p == true); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml deleted file mode 100644 index 8b137891791..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr deleted file mode 100644 index 4c1f771ae6c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr +++ /dev/null @@ -1,23 +0,0 @@ -use dep::std; -struct Item { - id: Field, -} - -impl Item { - fn log(self) { - let id = self.id; - std::println(id); - } -} - -fn create(something: V) -> V { - something -} - -fn main() { - let a = Item { id: 1 }; - let b = create(a); - let _id = b.id; - // Regression for: cannot find this method - b.log(); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml deleted file mode 100644 index 69b91cb5f31..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml +++ /dev/null @@ -1,7 +0,0 @@ -a = "1" -a_pub_x = "0x0000000000000000000000000000000000000000000000000000000000000001" -a_pub_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" - -b = "2" -b_pub_x = "0x06ce1b0827aafa85ddeb49cdaa36306d19a74caa311e13d46d8bc688cdbffffe" -b_pub_y = "0x1c122f81a3a14964909ede0ba2a6855fc93faf6fa1a788bf467be7e7a43f80ac" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr deleted file mode 100644 index d9d267f1dcd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr +++ /dev/null @@ -1,22 +0,0 @@ -use dep::std; - -fn main( - a: Field, - a_pub_x: pub Field, - a_pub_y: pub Field, - b: Field, - b_pub_x: pub Field, - b_pub_y: pub Field -) { - let mut priv_key = a; - let mut pub_x: Field = a_pub_x; - let mut pub_y: Field = a_pub_y; - if a != 1 { // Change `a` in Prover.toml to test input `b` - priv_key = b; - pub_x = b_pub_x; - pub_y = b_pub_y; - } - let res = std::scalar_mul::fixed_base(priv_key); - assert(res[0] == pub_x); - assert(res[1] == pub_y); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml deleted file mode 100644 index c5c3ab5101a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml +++ /dev/null @@ -1,9 +0,0 @@ -message = [0,1,2,3,4,5,6,7,8,9] -pub_key_x = "0x17cbd3ed3151ccfd170efe1d54280a6a4822640bf5c369908ad74ea21518a9c5" -pub_key_y = "0x0e0456e3795c1a31f20035b741cd6158929eeccd320d299cfcac962865a6bc74" -signature = [ - 5, 202, 31, 146, 81, 242, 246, 69, 43, 107, 249, 153, 198, 44, 14, 111, 191, 121, 137, 166, - 160, 103, 18, 181, 243, 233, 226, 95, 67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, - 205, 69, 33, 236, 163, 83, 194, 84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, - 250, 39, 239, -] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr deleted file mode 100644 index c0933b23029..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -use dep::std; - -// Note: If main has any unsized types, then the verifier will never be able -// to figure out the circuit instance -fn main(message: [u8; 10], pub_key_x: Field, pub_key_y: Field, signature: [u8; 64]) { - // Is there ever a situation where someone would want - // to ensure that a signature was invalid? - let valid_signature = std::schnorr::verify_signature(pub_key_x,pub_key_y,signature, message); - assert(valid_signature); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml deleted file mode 100644 index c4df1b749bb..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml +++ /dev/null @@ -1,36 +0,0 @@ - -x = 0xbd -result = [ - 0x68, - 0x32, - 0x57, - 0x20, - 0xaa, - 0xbd, - 0x7c, - 0x82, - 0xf3, - 0x0f, - 0x55, - 0x4b, - 0x31, - 0x3d, - 0x05, - 0x70, - 0xc9, - 0x5a, - 0xcc, - 0xbb, - 0x7d, - 0xc4, - 0xb5, - 0xaa, - 0xe1, - 0x12, - 0x04, - 0xc0, - 0x8f, - 0xfe, - 0x73, - 0x2b, -] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr deleted file mode 100644 index fd5340e2384..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr +++ /dev/null @@ -1,19 +0,0 @@ -// Sha256 example -// -// Calls Sha256 from the standard library. -// -// The Compiler sees this special function and creates an ACIR gate -// -// The ACIR SHA256 gate is passed to PLONK who should -// know how to create the necessary constraints. -// -// Not yet here: For R1CS, it is more about manipulating arithmetic gates to get performance -// This can be done in ACIR! -use dep::std; - -fn main(x: Field, result: [u8; 32]) { - // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field - // The padding is taken care of by the program - let digest = std::hash::sha256([x as u8]); - assert(digest == result); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml deleted file mode 100644 index 3d2b4b14efe..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 1 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr deleted file mode 100644 index 016c4fedf40..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// A simple program to test that SSA array values elements -// aren't disconnected from their instruction results, and -// that dead instruction elemination looks inside of arrays -// when deciding whether of not an instruction should be -// retained. -fn main(x: Field) -> pub [Field; 1] { - [x + 1] -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml deleted file mode 100644 index 66f0b9ccc1c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -xs = [0, 1] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr deleted file mode 100644 index 8dc9b138496..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -// This program tests: -// - the allocation of virtual arrays for array params to main -// - load instructions for such arrays - -fn main(xs : [Field; 2]) -> pub Field { - xs[1] -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml deleted file mode 100644 index aa3715f9b3d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -a = 1 -b = 0 -c = "10" -d = "11" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr deleted file mode 100644 index 9ab738ae04d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -fn main(a: bool, b: bool, c: u8, d: u8) -> pub u8 { - let i = a & b; - let j = a ^ b; - let k = a | b; - let x = c & d; - let y = c ^ d; - let z = c | d; - (i as u8) + (j as u8) + (k as u8) + x + y + z -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml deleted file mode 100644 index ed94d313315..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "3" -y = "4" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr deleted file mode 100644 index 671ea6cf35e..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is comparison -fn main(x : Field, y : Field) { - assert(x as u32 < y as u32); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml deleted file mode 100644 index 7d4290a117a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 1 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr deleted file mode 100644 index 502aceac546..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -// A simple program to test mutable variables - -fn main(x : Field) -> pub Field { - let mut y = 2; - y += x; - y -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml deleted file mode 100644 index b3accc9dd32..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = false \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr deleted file mode 100644 index 0069932cf24..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr +++ /dev/null @@ -1,4 +0,0 @@ -// A simple program for testing the NOT op -fn main(x : bool) -> pub bool { - !x -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml deleted file mode 100644 index 2c1854573a4..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 1 -y = 2 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr deleted file mode 100644 index 5f49aa548bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// Simple program for testing the logging -// of single witnesses and witness arrays. -use dep::std; - -fn main(x : Field, y : pub Field) { - std::println(x); - std::println([x, y]); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml deleted file mode 100644 index 07890234a19..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr deleted file mode 100644 index 59b03556d94..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -// The feature being tested is handling of -// a binary operation. -fn main(x : Field) -> pub Field { - x + 1 -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml deleted file mode 100644 index c2b2ccfd9f1..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -_x = "3" -_y = "4" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr deleted file mode 100644 index b87f216b461..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr +++ /dev/null @@ -1,9 +0,0 @@ -// Tests a very simple program. -// -// The features being tested are: -// - Abi generation of private and public -// main parameters. -// -// This program will never fail since there are -// no assertions being applied. -fn main(_x : Field, _y : pub Field) {} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml deleted file mode 100644 index 670888e37cd..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml deleted file mode 100644 index 1ddfb7dc8e4..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = 2 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr deleted file mode 100644 index 4d07d8bd368..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr +++ /dev/null @@ -1,10 +0,0 @@ -// Simple program to test to_radix - -use dep::std; - -fn main(x : Field) { - let bits = x.to_le_bits(3); - assert(bits[0] == 0); - assert(bits[1] == 1); - assert(bits[2] == 0); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml deleted file mode 100644 index 07890234a19..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr deleted file mode 100644 index 9a4b9033493..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -// Tests a very simple program. -// -// The features being tested is casting to an integer -fn main(x : Field) { - let _z = x as u32; -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml deleted file mode 100644 index 5a9b2f21b9b..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml +++ /dev/null @@ -1,11 +0,0 @@ -# Random test key -priv_key = "0x000000000000000000000000000000000000000000000000000000616c696365" -note_root = "0x21386402d57460963f45f32577dc3902c38a6f6fab9ec7b1b708a92e48745de7" -index = "0" -note_hash_path = [ - "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", - "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", - "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", -] -to_pubkey_x = "0x0000000000000000000000000000000000000000000000000000000000000001" -to_pubkey_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr deleted file mode 100644 index 18fccd862b5..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr +++ /dev/null @@ -1,35 +0,0 @@ -use dep::std; - -fn main( - // Public key of note - // all notes have the same denomination - priv_key: Field, - - // Merkle membership proof - note_root: pub Field, - index: Field, - note_hash_path: [Field; 3], - - // Receiver public key - to_pubkey_x: Field, - to_pubkey_y: Field, -) -> pub [Field; 2] { - // Compute public key from private key to show ownership - let pubkey = std::scalar_mul::fixed_base(priv_key); - let pubkey_x = pubkey[0]; - let pubkey_y = pubkey[1]; - - // Compute input note commitment - let note_commitment = std::hash::pedersen([pubkey_x, pubkey_y]); - - // Compute input note nullifier - let nullifier = std::hash::pedersen([note_commitment[0], index, priv_key]); - - // Compute output note nullifier - let receiver_note_commitment = std::hash::pedersen([to_pubkey_x, to_pubkey_y]); - - // Check that the input note nullifier is in the root - assert(note_root == std::merkle::compute_merkle_root(note_commitment[0], index, note_hash_path)); - - [nullifier[0], receiver_note_commitment[0]] -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml deleted file mode 100644 index 07890234a19..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr deleted file mode 100644 index 1bcbbde2eb5..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr +++ /dev/null @@ -1,8 +0,0 @@ -// Tests a very simple program. -// -// The features being tested are left and right shifts. -fn main(x : u32) { - let z = x >> 4; - let t = x << 4; - assert(z == t >> 8); -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml deleted file mode 100644 index 0d1bd92b5de..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -message = "hello world" -y = 5 -hex_as_string = "0x41" -hex_as_field = "0x41" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr deleted file mode 100644 index bee2370201c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr +++ /dev/null @@ -1,56 +0,0 @@ -use dep::std; - -fn main(message : pub str<11>, y : Field, hex_as_string : str<4>, hex_as_field : Field) { - let mut bad_message = "hello world"; - - assert(message == "hello world"); - bad_message = "helld world"; - let x = 10; - let z = x * 5; - std::println(10); - - std::println(z); // x * 5 in println not yet supported - std::println(x); - - let array = [1, 2, 3, 5, 8]; - assert(y == 5); // Change to y != 5 to see how the later print statements are not called - std::println(array); - - std::println(bad_message); - assert(message != bad_message); - - let hash = std::hash::pedersen([x]); - std::println(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); -} - -#[test] -fn test_prints_strings() { - let message = "hello world!"; - - std::println(message); - std::println("goodbye world"); -} - -#[test] -fn test_prints_array() { - let array = [1, 2, 3, 5, 8]; - - // TODO: Printing structs currently not supported - // let s = Test { a: 1, b: 2, c: [3, 4] }; - // std::println(s); - - std::println(array); - - let hash = std::hash::pedersen(array); - std::println(hash); -} - -struct Test { - a: Field, - b: Field, - c: [Field; 2], -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml deleted file mode 100644 index 7d59cc81807..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "0" -y = "1" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr deleted file mode 100644 index 6d61393920d..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr +++ /dev/null @@ -1,77 +0,0 @@ -use dep::std; - -struct Foo { - bar: Field, - array: [Field; 2], -} - -struct Pair { - first: Foo, - second: Field, -} - -impl Foo { - fn default(x: Field,y: Field) -> Self { - Self { bar: 0, array: [x,y] } - } -} - -impl Pair { - fn foo(p: Self) -> Foo { - p.first - } - - fn bar(self) -> Field { - self.foo().bar - } -} - -struct Nested { - a: Field, - b: Field -} -struct MyStruct { - my_bool: bool, - my_int: u32, - my_nest: Nested, -} -fn test_struct_in_tuple(a_bool : bool,x:Field, y:Field) -> (MyStruct, bool) { - let my_struct = MyStruct { - my_bool: a_bool, - my_int: 5, - my_nest: Nested{a:x,b:y}, - }; - (my_struct, a_bool) -} - -struct Animal { - legs: Field, - eyes: u8, -} - -fn get_dog() -> Animal { - let dog = Animal { legs: 4, eyes: 2 }; - dog -} - -fn main(x: Field, y: Field) { - let first = Foo::default(x,y); - let p = Pair { first, second: 1 }; - - assert(p.bar() == x); - assert(p.second == y); - assert(p.first.array[0] != p.first.array[1]); - - // Nested structs - let (struct_from_tuple, a_bool) = test_struct_in_tuple(true,x,y); - assert(struct_from_tuple.my_bool == true); - assert(a_bool == true); - assert(struct_from_tuple.my_int == 5); - assert(struct_from_tuple.my_nest.a == 0); - - // Regression test for issue #670 - let Animal { legs, eyes } = get_dog(); - let six = legs + eyes as Field; - - assert(six == 6); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml deleted file mode 100644 index 70640bba4cc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml +++ /dev/null @@ -1,3 +0,0 @@ -[y] -foo = "5" -bar = "7" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr deleted file mode 100644 index 0d6e411addf..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -// Note that fields are not in alphabetical order. -// We want to check that this ordering is maintained -struct myStruct { - foo: u32, - bar: Field, -} - -fn main(y : pub myStruct) { - assert(y.foo == 5); - assert(y.bar == 7); -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml deleted file mode 100644 index 339da5b1a00..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml +++ /dev/null @@ -1,19 +0,0 @@ -x = "5" - -[y] -foo = "5" -bar = "10" -message = "hello" - -[z] -val = "1" -array = [0, 1] -message = "helld" - -[a] -baz = 0 - -[a.bar_struct] -val = "1" -array = [0, 1] -message = "hello" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr deleted file mode 100644 index 281769cfb07..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr +++ /dev/null @@ -1,6 +0,0 @@ -mod bar; - -struct fooStruct { - bar_struct: bar::barStruct, - baz: Field, -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr deleted file mode 100644 index d1963f4a0a7..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr +++ /dev/null @@ -1,7 +0,0 @@ -global N = 2; - -struct barStruct { - val: Field, - array: [Field; 2], - message: str<5>, -} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr deleted file mode 100644 index fe77ed6eee6..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr +++ /dev/null @@ -1,36 +0,0 @@ -use dep::std; - -mod foo; - -struct myStruct { - foo: u32, - bar: Field, - message: str<5>, -} - -fn main(x : Field, y : pub myStruct, z: pub foo::bar::barStruct, a: pub foo::fooStruct) -> pub Field { - let struct_from_bar = foo::bar::barStruct { val: 1, array: [0, 1], message: "hello" }; - - check_inner_struct(a, z); - - for i in 0 .. struct_from_bar.array.len() { - assert(struct_from_bar.array[i] == z.array[i]); - } - assert(z.val == struct_from_bar.val); - - assert((struct_from_bar.val * x) == x); - - assert(x != y.bar); - - assert(y.message == "hello"); - assert(a.bar_struct.message == struct_from_bar.message); - - a.bar_struct.array[1] -} - -fn check_inner_struct(a: foo::fooStruct, z: foo::bar::barStruct) { - assert(a.bar_struct.val == z.val); - for i in 0.. a.bar_struct.array.len() { - assert(a.bar_struct.array[i] == z.array[i]); - } -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml deleted file mode 100644 index d9434868157..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ - - [package] - authors = [""] - compiler_version = "0.1" - - [dependencies] - \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml deleted file mode 100644 index b6626a67e19..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 1 -y = 0 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr deleted file mode 100644 index 9bfe382663f..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ -use mysubmodule::my_helper; - -fn main(x: u1, y: u1) { - my_helper(); - mysubmodule::my_bool_or(x, y); -} - -mod mysubmodule { - use dep::std; - - fn my_bool_or(x: u1, y: u1) { - assert(x | y == 1); - } - - fn my_helper() {} -} - diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml deleted file mode 100644 index 07fe857ac7c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "2040124" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr deleted file mode 100644 index f5831e8c524..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -fn main(x : Field) -> pub [u8; 31] { - // The result of this byte array will be big-endian - let byte_array = x.to_be_bytes(31); - let mut bytes = [0; 31]; - for i in 0..31 { - bytes[i] = byte_array[i]; - } - assert(bytes[30] == 60); - assert(bytes[29] == 33); - assert(bytes[28] == 31); - bytes -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml deleted file mode 100644 index bc4693e434a..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "2040124" -a = "0x2000000000000000000000000000000000000000000000000000000000000000" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr deleted file mode 100644 index f76df026db7..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr +++ /dev/null @@ -1,25 +0,0 @@ -use dep::std; - -fn main(x : Field, a: Field) { - let y: Field = 2040124; - let be_byte_array = y.to_be_bytes(31); - let le_byte_array = x.to_le_bytes(31); - - assert(le_byte_array[0] == 60); - assert(le_byte_array[0] == be_byte_array[30]); - assert(le_byte_array[1] == be_byte_array[29]); - assert(le_byte_array[2] == be_byte_array[28]); - - let z = 0 - 1; - let p_bytes = std::field::modulus_le_bytes(); - let z_bytes = z.to_le_bytes(32); - assert(p_bytes[10] == z_bytes[10]); - assert(p_bytes[0] == z_bytes[0] as u8 + 1 as u8); - - let p_bits = std::field::modulus_le_bits(); - let z_bits = z.to_le_bits(std::field::modulus_num_bits() as u32); - assert(z_bits[0] == 0); - assert(p_bits[100] == z_bits[100]); - - a.to_le_bits(std::field::modulus_num_bits() as u32); -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml deleted file mode 100644 index 07fe857ac7c..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "2040124" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr deleted file mode 100644 index a5476ec13bf..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::std; - -fn main(x : Field) -> pub [u8; 4] { - // The result of this byte array will be little-endian - let byte_array = x.to_le_bytes(31); - let mut first_four_bytes = [0; 4]; - for i in 0..4 { - first_four_bytes[i] = byte_array[i]; - } - // Issue #617 fix - // We were incorrectly mapping our output array from bit decomposition functions during acir generation - first_four_bytes[3] = byte_array[31]; - first_four_bytes -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml deleted file mode 100644 index 5082c6e12ec..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml deleted file mode 100644 index a0397e89477..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "1" -y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml deleted file mode 100644 index 6028aef164e..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.6.0" - -[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml deleted file mode 100644 index 11497a473bc..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml +++ /dev/null @@ -1 +0,0 @@ -x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr deleted file mode 100644 index 6a3e59c5fed..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr +++ /dev/null @@ -1,2 +0,0 @@ -unconstrained fn main() { -} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml deleted file mode 100644 index e0b467ce5da..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.1" - -[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml deleted file mode 100644 index f28f2f8cc48..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = "5" -y = "10" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr deleted file mode 100644 index e893c938fc3..00000000000 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr +++ /dev/null @@ -1,5 +0,0 @@ -fn main(x : u32, y : pub u32) { - let m = x ^ y; - - assert(m != 10); -} \ No newline at end of file From 6d1a45bb5c1408005603efc31a470270779cedb9 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 7 Jul 2023 10:17:25 +0000 Subject: [PATCH 51/51] Revert "temp: remove unused tests for debugging" This reverts commit daac68475aad7398decbf1af657ead7a058e82af. --- .../tests/test_data/1_mul/Nargo.toml | 5 + .../tests/test_data/1_mul/Prover.toml | 3 + .../tests/test_data/1_mul/src/main.nr | 9 + .../tests/test_data/2_div/Nargo.toml | 5 + .../tests/test_data/2_div/Prover.toml | 3 + .../tests/test_data/2_div/src/main.nr | 7 + .../tests/test_data/3_add/Nargo.toml | 5 + .../tests/test_data/3_add/Prover.toml | 3 + .../tests/test_data/3_add/src/main.nr | 8 + .../tests/test_data/4_sub/Nargo.toml | 5 + .../tests/test_data/4_sub/Prover.toml | 3 + .../tests/test_data/4_sub/src/main.nr | 5 + .../tests/test_data/5_over/Nargo.toml | 5 + .../tests/test_data/5_over/Prover.toml | 2 + .../tests/test_data/5_over/src/main.nr | 9 + crates/nargo_cli/tests/test_data/6/Nargo.toml | 5 + .../nargo_cli/tests/test_data/6/Prover.toml | 39 +++ .../nargo_cli/tests/test_data/6/src/main.nr | 20 ++ crates/nargo_cli/tests/test_data/7/Nargo.toml | 5 + .../nargo_cli/tests/test_data/7/Prover.toml | 38 +++ .../nargo_cli/tests/test_data/7/src/main.nr | 10 + .../tests/test_data/7_function/Nargo.toml | 5 + .../tests/test_data/7_function/Prover.toml | 6 + .../tests/test_data/7_function/src/main.nr | 149 +++++++++ .../tests/test_data/8_integration/Nargo.toml | 5 + .../tests/test_data/8_integration/Prover.toml | 5 + .../tests/test_data/8_integration/src/main.nr | 283 +++++++++++++++++ .../tests/test_data/9_conditional/Nargo.toml | 5 + .../tests/test_data/9_conditional/Prover.toml | 38 +++ .../tests/test_data/9_conditional/src/main.nr | 277 +++++++++++++++++ .../tests/test_data/array_dynamic/Nargo.toml | 5 + .../tests/test_data/array_dynamic/Prover.toml | 9 + .../tests/test_data/array_dynamic/src/main.nr | 32 ++ .../tests/test_data/array_len/Nargo.toml | 5 + .../tests/test_data/array_len/Prover.toml | 2 + .../tests/test_data/array_len/src/main.nr | 23 ++ .../tests/test_data/array_neq/Nargo.toml | 5 + .../tests/test_data/array_neq/Prover.toml | 2 + .../tests/test_data/array_neq/src/main.nr | 4 + .../tests/test_data/array_sort/Nargo.toml | 5 + .../tests/test_data/array_sort/Prover.toml | 1 + .../tests/test_data/array_sort/src/main.nr | 6 + .../tests/test_data/assert/Nargo.toml | 5 + .../tests/test_data/assert/Prover.toml | 1 + .../tests/test_data/assert/src/main.nr | 3 + .../tests/test_data/assign_ex/Nargo.toml | 7 + .../tests/test_data/assign_ex/Prover.toml | 2 + .../tests/test_data/assign_ex/src/main.nr | 6 + .../tests/test_data/bit_and/Nargo.toml | 5 + .../tests/test_data/bit_and/Prover.toml | 2 + .../tests/test_data/bit_and/src/main.nr | 18 ++ .../test_data/bit_shifts_comptime/Nargo.toml | 5 + .../test_data/bit_shifts_comptime/Prover.toml | 1 + .../test_data/bit_shifts_comptime/src/main.nr | 13 + .../test_data/bit_shifts_runtime/Nargo.toml | 5 + .../test_data/bit_shifts_runtime/Prover.toml | 2 + .../test_data/bit_shifts_runtime/src/main.nr | 12 + .../tests/test_data/bool_not/Nargo.toml | 7 + .../tests/test_data/bool_not/Prover.toml | 1 + .../tests/test_data/bool_not/src/main.nr | 5 + .../tests/test_data/bool_or/Nargo.toml | 7 + .../tests/test_data/bool_or/Prover.toml | 2 + .../tests/test_data/bool_or/src/main.nr | 7 + .../tests/test_data/cast_bool/Nargo.toml | 7 + .../tests/test_data/cast_bool/Prover.toml | 2 + .../tests/test_data/cast_bool/src/main.nr | 6 + .../comptime_array_access/Nargo.toml | 5 + .../comptime_array_access/Prover.toml | 1 + .../comptime_array_access/src/main.nr | 17 + .../tests/test_data/comptime_fail/Nargo.toml | 5 + .../tests/test_data/comptime_fail/Prover.toml | 1 + .../tests/test_data/comptime_fail/src/main.nr | 15 + .../comptime_recursion_regression/Nargo.toml | 5 + .../comptime_recursion_regression/Prover.toml | 2 + .../comptime_recursion_regression/src/main.nr | 4 + .../tests/test_data/contracts/Nargo.toml | 5 + .../tests/test_data/contracts/Prover.toml | 2 + .../tests/test_data/contracts/src/main.nr | 8 + .../tests/test_data/ec_baby_jubjub/Nargo.toml | 6 + .../test_data/ec_baby_jubjub/src/main.nr | 226 ++++++++++++++ .../test_data/ecdsa_secp256k1/Nargo.toml | 6 + .../test_data/ecdsa_secp256k1/Prover.toml | 209 +++++++++++++ .../test_data/ecdsa_secp256k1/src/main.nr | 11 + .../tests/test_data/eddsa/Nargo.toml | 5 + .../tests/test_data/eddsa/Prover.toml | 3 + .../tests/test_data/eddsa/src/main.nr | 55 ++++ .../tests/test_data/generics/Nargo.toml | 7 + .../tests/test_data/generics/Prover.toml | 2 + .../tests/test_data/generics/src/main.nr | 57 ++++ .../tests/test_data/global_consts/Nargo.toml | 7 + .../tests/test_data/global_consts/Prover.toml | 4 + .../tests/test_data/global_consts/src/baz.nr | 5 + .../tests/test_data/global_consts/src/foo.nr | 11 + .../test_data/global_consts/src/foo/bar.nr | 5 + .../tests/test_data/global_consts/src/main.nr | 88 ++++++ .../tests/test_data/hash_to_field/Nargo.toml | 5 + .../tests/test_data/hash_to_field/Prover.toml | 1 + .../tests/test_data/hash_to_field/src/main.nr | 5 + .../higher_order_functions/Nargo.toml | 5 + .../higher_order_functions/Prover.toml | 1 + .../tests/test_data/if_else_chain/Nargo.toml | 5 + .../tests/test_data/if_else_chain/Prover.toml | 2 + .../tests/test_data/if_else_chain/src/main.nr | 16 + .../tests/test_data/keccak256/Nargo.toml | 5 + .../tests/test_data/keccak256/Prover.toml | 35 +++ .../tests/test_data/keccak256/src/main.nr | 22 ++ .../tests/test_data/main_bool_arg/Nargo.toml | 6 + .../tests/test_data/main_bool_arg/Prover.toml | 2 + .../tests/test_data/main_bool_arg/src/main.nr | 8 + .../tests/test_data/main_return/Nargo.toml | 6 + .../tests/test_data/main_return/Prover.toml | 1 + .../tests/test_data/main_return/src/main.nr | 3 + .../tests/test_data/merkle_insert/Nargo.toml | 7 + .../tests/test_data/merkle_insert/Prover.toml | 11 + .../tests/test_data/merkle_insert/src/main.nr | 21 ++ .../tests/test_data/modules/Nargo.toml | 5 + .../tests/test_data/modules/Prover.toml | 2 + .../tests/test_data/modules/src/foo.nr | 3 + .../tests/test_data/modules/src/main.nr | 14 + .../tests/test_data/modules_more/Nargo.toml | 5 + .../tests/test_data/modules_more/Prover.toml | 4 + .../tests/test_data/modules_more/src/foo.nr | 5 + .../test_data/modules_more/src/foo/bar.nr | 3 + .../tests/test_data/modules_more/src/main.nr | 6 + .../tests/test_data/modulus/Nargo.toml | 5 + .../tests/test_data/modulus/Prover.toml | 290 ++++++++++++++++++ .../tests/test_data/modulus/src/main.nr | 27 ++ .../test_data/numeric_generics/Nargo.toml | 7 + .../test_data/numeric_generics/Prover.toml | 0 .../test_data/numeric_generics/src/main.nr | 39 +++ .../tests/test_data/pedersen_check/Nargo.toml | 7 + .../test_data/pedersen_check/Prover.toml | 6 + .../test_data/pedersen_check/src/main.nr | 17 + .../test_data/poseidon_bn254_hash/Nargo.toml | 6 + .../test_data/poseidon_bn254_hash/Prover.toml | 4 + .../test_data/poseidon_bn254_hash/src/main.nr | 10 + .../poseidonsponge_x5_254/Nargo.toml | 6 + .../poseidonsponge_x5_254/Prover.toml | 1 + .../poseidonsponge_x5_254/src/main.nr | 9 + .../tests/test_data/pred_eq/Nargo.toml | 7 + .../tests/test_data/pred_eq/Prover.toml | 2 + .../tests/test_data/pred_eq/src/main.nr | 6 + .../tests/test_data/range_fail/Nargo.toml | 5 + .../tests/test_data/range_fail/Prover.toml | 2 + .../tests/test_data/range_fail/src/main.nr | 8 + .../tests/test_data/regression/Nargo.toml | 5 + .../tests/test_data/regression/Prover.toml | 2 + .../tests/test_data/regression/src/main.nr | 101 ++++++ .../tests/test_data/scalar_mul/Nargo.toml | 5 + .../tests/test_data/scalar_mul/Prover.toml | 7 + .../tests/test_data/scalar_mul/src/main.nr | 22 ++ .../tests/test_data/schnorr/Nargo.toml | 5 + .../tests/test_data/schnorr/Prover.toml | 9 + .../tests/test_data/schnorr/src/main.nr | 10 + .../tests/test_data/sha256/Nargo.toml | 5 + .../tests/test_data/sha256/Prover.toml | 36 +++ .../tests/test_data/sha256/src/main.nr | 19 ++ .../tests/test_data/sha2_blocks/Nargo.toml | 5 + .../tests/test_data/sha2_blocks/Prover.toml | 4 + .../tests/test_data/sha2_blocks/src/main.nr | 22 ++ .../tests/test_data/sha2_byte/Nargo.toml | 5 + .../tests/test_data/sha2_byte/Prover.toml | 5 + .../tests/test_data/sha2_byte/src/main.nr | 11 + .../tests/test_data/simple_shield/Nargo.toml | 5 + .../tests/test_data/simple_shield/Prover.toml | 11 + .../tests/test_data/simple_shield/src/main.nr | 35 +++ .../tests/test_data/strings/Nargo.toml | 5 + .../tests/test_data/strings/Prover.toml | 4 + .../tests/test_data/strings/src/main.nr | 56 ++++ .../tests/test_data/struct/Nargo.toml | 7 + .../tests/test_data/struct/Prover.toml | 2 + .../tests/test_data/struct/src/main.nr | 77 +++++ .../struct_fields_ordering/Nargo.toml | 5 + .../struct_fields_ordering/Prover.toml | 3 + .../struct_fields_ordering/src/main.nr | 14 + .../tests/test_data/struct_inputs/Nargo.toml | 5 + .../tests/test_data/struct_inputs/Prover.toml | 19 ++ .../tests/test_data/struct_inputs/src/foo.nr | 6 + .../test_data/struct_inputs/src/foo/bar.nr | 7 + .../tests/test_data/struct_inputs/src/main.nr | 36 +++ .../tests/test_data/submodules/Nargo.toml | 7 + .../tests/test_data/submodules/Prover.toml | 2 + .../tests/test_data/submodules/src/main.nr | 17 + .../tests/test_data/to_be_bytes/Nargo.toml | 5 + .../tests/test_data/to_be_bytes/Prover.toml | 1 + .../tests/test_data/to_be_bytes/src/main.nr | 14 + .../tests/test_data/to_bits/Nargo.toml | 5 + .../tests/test_data/to_bits/src/main.nr | 24 ++ .../test_data/to_bytes_integration/Nargo.toml | 5 + .../to_bytes_integration/Prover.toml | 2 + .../to_bytes_integration/src/main.nr | 27 ++ .../tests/test_data/to_le_bytes/Nargo.toml | 5 + .../tests/test_data/to_le_bytes/Prover.toml | 1 + .../tests/test_data/to_le_bytes/src/main.nr | 14 + .../tests/test_data/tuples/Nargo.toml | 5 + .../tests/test_data/tuples/Prover.toml | 2 + .../tests/test_data/tuples/src/main.nr | 29 ++ .../nargo_cli/tests/test_data/xor/Nargo.toml | 5 + .../nargo_cli/tests/test_data/xor/Prover.toml | 2 + .../nargo_cli/tests/test_data/xor/src/main.nr | 5 + .../1327_concrete_in_generic/Nargo.toml | 5 + .../1327_concrete_in_generic/Prover.toml | 1 + .../1327_concrete_in_generic/src/main.nr | 78 +++++ .../test_data_ssa_refactor/1_mul/Nargo.toml | 5 + .../test_data_ssa_refactor/1_mul/Prover.toml | 3 + .../test_data_ssa_refactor/1_mul/src/main.nr | 9 + .../test_data_ssa_refactor/2_div/Nargo.toml | 5 + .../test_data_ssa_refactor/2_div/Prover.toml | 3 + .../test_data_ssa_refactor/2_div/src/main.nr | 7 + .../test_data_ssa_refactor/3_add/Nargo.toml | 5 + .../test_data_ssa_refactor/3_add/Prover.toml | 3 + .../test_data_ssa_refactor/3_add/src/main.nr | 8 + .../test_data_ssa_refactor/4_sub/Nargo.toml | 5 + .../test_data_ssa_refactor/4_sub/Prover.toml | 3 + .../test_data_ssa_refactor/4_sub/src/main.nr | 5 + .../test_data_ssa_refactor/5_over/Nargo.toml | 5 + .../test_data_ssa_refactor/5_over/Prover.toml | 2 + .../test_data_ssa_refactor/5_over/src/main.nr | 9 + .../tests/test_data_ssa_refactor/6/Nargo.toml | 5 + .../test_data_ssa_refactor/6/Prover.toml | 39 +++ .../test_data_ssa_refactor/6/src/main.nr | 20 ++ .../tests/test_data_ssa_refactor/7/Nargo.toml | 5 + .../test_data_ssa_refactor/7/Prover.toml | 38 +++ .../test_data_ssa_refactor/7/src/main.nr | 10 + .../7_function/Nargo.toml | 5 + .../7_function/Prover.toml | 6 + .../8_integration/Nargo.toml | 5 + .../8_integration/Prover.toml | 5 + .../8_integration/src/main.nr | 283 +++++++++++++++++ .../arithmetic_binary_operations/Nargo.toml | 5 + .../arithmetic_binary_operations/Prover.toml | 3 + .../arithmetic_binary_operations/src/main.nr | 12 + .../array_len/Nargo.toml | 5 + .../array_len/Prover.toml | 2 + .../array_len/src/main.nr | 23 ++ .../array_neq/Nargo.toml | 5 + .../array_neq/Prover.toml | 2 + .../array_neq/src/main.nr | 4 + .../array_sort/Nargo.toml | 5 + .../array_sort/Prover.toml | 1 + .../array_sort/src/main.nr | 6 + .../test_data_ssa_refactor/assert/Nargo.toml | 5 + .../test_data_ssa_refactor/assert/Prover.toml | 1 + .../test_data_ssa_refactor/assert/src/main.nr | 3 + .../assert_statement/Nargo.toml | 5 + .../assert_statement/Prover.toml | 2 + .../assert_statement/src/main.nr | 6 + .../assign_ex/Nargo.toml | 7 + .../assign_ex/Prover.toml | 2 + .../assign_ex/src/main.nr | 6 + .../test_data_ssa_refactor/bit_and/Nargo.toml | 5 + .../bit_and/Prover.toml | 2 + .../bit_and/src/main.nr | 18 ++ .../bit_shifts_comptime/Nargo.toml | 5 + .../bit_shifts_comptime/Prover.toml | 1 + .../bit_shifts_comptime/src/main.nr | 13 + .../blackbox_func_simple_call/Nargo.toml | 5 + .../blackbox_func_simple_call/Prover.toml | 2 + .../blackbox_func_simple_call/src/main.nr | 9 + .../bool_not/Nargo.toml | 7 + .../bool_not/Prover.toml | 1 + .../bool_not/src/main.nr | 5 + .../test_data_ssa_refactor/bool_or/Nargo.toml | 7 + .../bool_or/Prover.toml | 2 + .../bool_or/src/main.nr | 7 + .../brillig_arrays/Nargo.toml | 5 + .../brillig_arrays/Prover.toml | 1 + .../brillig_arrays/src/main.nr | 29 ++ .../brillig_assert/Nargo.toml | 5 + .../brillig_assert/Prover.toml | 1 + .../brillig_assert/src/main.nr | 11 + .../brillig_assert_fail/Nargo.toml | 5 + .../brillig_assert_fail/Prover.toml | 1 + .../brillig_assert_fail/src/main.nr | 11 + .../brillig_calls/Nargo.toml | 5 + .../brillig_calls/Prover.toml | 1 + .../brillig_calls/src/main.nr | 45 +++ .../brillig_calls_array/Nargo.toml | 5 + .../brillig_calls_array/Prover.toml | 1 + .../brillig_calls_array/src/main.nr | 16 + .../brillig_calls_conditionals/Nargo.toml | 5 + .../brillig_calls_conditionals/Prover.toml | 1 + .../brillig_calls_conditionals/src/main.nr | 36 +++ .../brillig_cast/Nargo.toml | 5 + .../brillig_cast/Prover.toml | 0 .../brillig_cast/src/main.nr | 50 +++ .../brillig_conditional/Nargo.toml | 5 + .../brillig_conditional/Prover.toml | 1 + .../brillig_conditional/src/main.nr | 14 + .../Nargo.toml | 5 + .../Prover.toml | 0 .../src/main.nr | 25 ++ .../brillig_identity_function/Nargo.toml | 5 + .../brillig_identity_function/Prover.toml | 2 + .../brillig_identity_function/src/main.nr | 35 +++ .../brillig_identity_function/target/c.json | 1 + .../Nargo.toml | 5 + .../Prover.toml | 0 .../src/main.nr | 80 +++++ .../brillig_loop/Nargo.toml | 5 + .../brillig_loop/Prover.toml | 1 + .../brillig_loop/src/main.nr | 14 + .../brillig_modulo/Nargo.toml | 5 + .../brillig_modulo/Prover.toml | 0 .../brillig_modulo/src/main.nr | 28 ++ .../brillig_not/Nargo.toml | 5 + .../brillig_not/Prover.toml | 2 + .../brillig_not/src/main.nr | 11 + .../brillig_oracle/Nargo.toml | 5 + .../brillig_oracle/Prover.toml | 2 + .../brillig_oracle/src/main.nr | 23 ++ .../cast_bool/Nargo.toml | 7 + .../cast_bool/Prover.toml | 2 + .../cast_bool/src/main.nr | 6 + .../comptime_array_access/Nargo.toml | 5 + .../comptime_array_access/Prover.toml | 1 + .../comptime_array_access/src/main.nr | 17 + .../comptime_recursion_regression/Nargo.toml | 5 + .../comptime_recursion_regression/Prover.toml | 2 + .../comptime_recursion_regression/src/main.nr | 4 + .../constant_return/Nargo.toml | 5 + .../constant_return/Prover.toml | 1 + .../constant_return/src/main.nr | 7 + .../contracts/Nargo.toml | 5 + .../contracts/Prover.toml | 2 + .../contracts/src/main.nr | 8 + .../distinct_keyword/Nargo.toml | 5 + .../distinct_keyword/Prover.toml | 1 + .../distinct_keyword/src/main.nr | 4 + .../ec_baby_jubjub/Nargo.toml | 6 + .../ec_baby_jubjub/src/main.nr | 226 ++++++++++++++ .../ecdsa_secp256k1/Nargo.toml | 6 + .../ecdsa_secp256k1/Prover.toml | 209 +++++++++++++ .../ecdsa_secp256k1/src/main.nr | 11 + .../generics/Nargo.toml | 7 + .../generics/Prover.toml | 2 + .../generics/src/main.nr | 57 ++++ .../global_consts/Nargo.toml | 7 + .../global_consts/Prover.toml | 4 + .../global_consts/src/baz.nr | 5 + .../global_consts/src/foo.nr | 11 + .../global_consts/src/foo/bar.nr | 5 + .../global_consts/src/main.nr | 88 ++++++ .../hash_to_field/Nargo.toml | 5 + .../hash_to_field/Prover.toml | 1 + .../hash_to_field/src/main.nr | 5 + .../if_else_chain/Nargo.toml | 5 + .../if_else_chain/Prover.toml | 2 + .../if_else_chain/src/main.nr | 16 + .../keccak256/Nargo.toml | 5 + .../keccak256/Prover.toml | 35 +++ .../keccak256/src/main.nr | 22 ++ .../main_bool_arg/Nargo.toml | 6 + .../main_bool_arg/Prover.toml | 2 + .../main_bool_arg/src/main.nr | 8 + .../main_return/Nargo.toml | 6 + .../main_return/Prover.toml | 1 + .../main_return/src/main.nr | 3 + .../merkle_insert/Nargo.toml | 7 + .../merkle_insert/Prover.toml | 11 + .../merkle_insert/src/main.nr | 21 ++ .../test_data_ssa_refactor/modules/Nargo.toml | 5 + .../modules/Prover.toml | 2 + .../test_data_ssa_refactor/modules/src/foo.nr | 3 + .../modules/src/main.nr | 14 + .../modules_more/Nargo.toml | 5 + .../modules_more/Prover.toml | 4 + .../modules_more/src/foo.nr | 5 + .../modules_more/src/foo/bar.nr | 3 + .../modules_more/src/main.nr | 6 + .../test_data_ssa_refactor/modulus/Nargo.toml | 5 + .../modulus/Prover.toml | 290 ++++++++++++++++++ .../modulus/src/main.nr | 27 ++ .../numeric_generics/Nargo.toml | 7 + .../numeric_generics/Prover.toml | 0 .../numeric_generics/src/main.nr | 39 +++ .../pedersen_check/Nargo.toml | 7 + .../pedersen_check/Prover.toml | 6 + .../pedersen_check/src/main.nr | 17 + .../test_data_ssa_refactor/pred_eq/Nargo.toml | 7 + .../pred_eq/Prover.toml | 2 + .../pred_eq/src/main.nr | 6 + .../Nargo.toml | 5 + .../Prover.toml | 1 + .../src/main.nr | 23 ++ .../scalar_mul/Nargo.toml | 5 + .../scalar_mul/Prover.toml | 7 + .../scalar_mul/src/main.nr | 22 ++ .../test_data_ssa_refactor/schnorr/Nargo.toml | 5 + .../schnorr/Prover.toml | 9 + .../schnorr/src/main.nr | 10 + .../test_data_ssa_refactor/sha256/Nargo.toml | 5 + .../test_data_ssa_refactor/sha256/Prover.toml | 36 +++ .../test_data_ssa_refactor/sha256/src/main.nr | 19 ++ .../simple_add_and_ret_arr/Nargo.toml | 5 + .../simple_add_and_ret_arr/Prover.toml | 1 + .../simple_add_and_ret_arr/src/main.nr | 8 + .../simple_array_param/Nargo.toml | 5 + .../simple_array_param/Prover.toml | 1 + .../simple_array_param/src/main.nr | 7 + .../simple_bitwise/Nargo.toml | 5 + .../simple_bitwise/Prover.toml | 4 + .../simple_bitwise/src/main.nr | 9 + .../simple_comparison/Nargo.toml | 5 + .../simple_comparison/Prover.toml | 2 + .../simple_comparison/src/main.nr | 6 + .../simple_mut/Nargo.toml | 5 + .../simple_mut/Prover.toml | 1 + .../simple_mut/src/main.nr | 7 + .../simple_not/Nargo.toml | 5 + .../simple_not/Prover.toml | 1 + .../simple_not/src/main.nr | 4 + .../simple_print/Nargo.toml | 5 + .../simple_print/Prover.toml | 2 + .../simple_print/src/main.nr | 8 + .../simple_program_addition/Nargo.toml | 5 + .../simple_program_addition/Prover.toml | 1 + .../simple_program_addition/src/main.nr | 5 + .../simple_program_no_body/Nargo.toml | 5 + .../simple_program_no_body/Prover.toml | 2 + .../simple_program_no_body/src/main.nr | 9 + .../simple_radix/Nargo.toml | 5 + .../simple_radix/Prover.toml | 1 + .../simple_radix/src/main.nr | 10 + .../simple_range/Nargo.toml | 5 + .../simple_range/Prover.toml | 1 + .../simple_range/src/main.nr | 6 + .../simple_shield/Nargo.toml | 5 + .../simple_shield/Prover.toml | 11 + .../simple_shield/src/main.nr | 35 +++ .../simple_shift_left_right/Nargo.toml | 5 + .../simple_shift_left_right/Prover.toml | 1 + .../simple_shift_left_right/src/main.nr | 8 + .../test_data_ssa_refactor/strings/Nargo.toml | 5 + .../strings/Prover.toml | 4 + .../strings/src/main.nr | 56 ++++ .../test_data_ssa_refactor/struct/Nargo.toml | 7 + .../test_data_ssa_refactor/struct/Prover.toml | 2 + .../test_data_ssa_refactor/struct/src/main.nr | 77 +++++ .../struct_fields_ordering/Nargo.toml | 5 + .../struct_fields_ordering/Prover.toml | 3 + .../struct_fields_ordering/src/main.nr | 14 + .../struct_inputs/Nargo.toml | 5 + .../struct_inputs/Prover.toml | 19 ++ .../struct_inputs/src/foo.nr | 6 + .../struct_inputs/src/foo/bar.nr | 7 + .../struct_inputs/src/main.nr | 36 +++ .../submodules/Nargo.toml | 7 + .../submodules/Prover.toml | 2 + .../submodules/src/main.nr | 17 + .../to_be_bytes/Nargo.toml | 5 + .../to_be_bytes/Prover.toml | 1 + .../to_be_bytes/src/main.nr | 14 + .../to_bytes_integration/Nargo.toml | 5 + .../to_bytes_integration/Prover.toml | 2 + .../to_bytes_integration/src/main.nr | 25 ++ .../to_le_bytes/Nargo.toml | 5 + .../to_le_bytes/Prover.toml | 1 + .../to_le_bytes/src/main.nr | 14 + .../test_data_ssa_refactor/tuples/Nargo.toml | 5 + .../test_data_ssa_refactor/tuples/Prover.toml | 2 + .../unconstrained_empty/Nargo.toml | 5 + .../unconstrained_empty/Prover.toml | 1 + .../unconstrained_empty/src/main.nr | 2 + .../test_data_ssa_refactor/xor/Nargo.toml | 5 + .../test_data_ssa_refactor/xor/Prover.toml | 2 + .../test_data_ssa_refactor/xor/src/main.nr | 5 + 467 files changed, 6789 insertions(+) create mode 100644 crates/nargo_cli/tests/test_data/1_mul/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/1_mul/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/1_mul/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/2_div/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/2_div/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/2_div/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/3_add/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/3_add/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/3_add/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/4_sub/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/4_sub/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/4_sub/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/5_over/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/5_over/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/5_over/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/6/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/6/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/6/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/7/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/7/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/7/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/7_function/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/7_function/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/7_function/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/8_integration/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/8_integration/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/8_integration/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/9_conditional/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/9_conditional/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/array_len/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/array_len/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/array_len/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/array_neq/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/array_neq/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/array_neq/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/array_sort/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/array_sort/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/array_sort/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/assert/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/assert/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/assert/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/assign_ex/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/assign_ex/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/bit_and/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_and/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_and/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/bool_not/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/bool_not/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/bool_not/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/bool_or/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/bool_or/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/bool_or/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/cast_bool/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/cast_bool/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/contracts/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/contracts/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/contracts/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/eddsa/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/eddsa/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/eddsa/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/generics/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/generics/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/generics/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/global_consts/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/global_consts/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/baz.nr create mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data/global_consts/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/keccak256/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/keccak256/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/keccak256/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/main_return/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/main_return/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/main_return/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/modules/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/modules/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/modules/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data/modules/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/modules_more/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/modules_more/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data/modules_more/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/modulus/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/modulus/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/modulus/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/pred_eq/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/pred_eq/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/range_fail/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/range_fail/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/range_fail/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/regression/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/regression/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/regression/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/schnorr/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/schnorr/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/schnorr/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/sha256/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/sha256/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/sha256/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/simple_shield/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/simple_shield/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/strings/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/strings/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/strings/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/struct/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/struct/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/struct/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/submodules/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/submodules/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/submodules/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/to_bits/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/to_bits/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/tuples/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/tuples/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/tuples/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data/xor/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/xor/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/xor/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr diff --git a/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml b/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/1_mul/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/1_mul/Prover.toml b/crates/nargo_cli/tests/test_data/1_mul/Prover.toml new file mode 100644 index 00000000000..9bff601c75a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/1_mul/Prover.toml @@ -0,0 +1,3 @@ +x = "3" +y = "4" +z = "429981696" diff --git a/crates/nargo_cli/tests/test_data/1_mul/src/main.nr b/crates/nargo_cli/tests/test_data/1_mul/src/main.nr new file mode 100644 index 00000000000..4587b4b5947 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/1_mul/src/main.nr @@ -0,0 +1,9 @@ +// Test unsafe integer multiplication with overflow: 12^8 = 429 981 696 +// The circuit should handle properly the growth of the bit size +fn main(mut x: u32, y: u32, z: u32) { + x *= y; + x *= x; //144 + x *= x; //20736 + x *= x; //429 981 696 + assert(x == z); +} diff --git a/crates/nargo_cli/tests/test_data/2_div/Nargo.toml b/crates/nargo_cli/tests/test_data/2_div/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/2_div/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/2_div/Prover.toml b/crates/nargo_cli/tests/test_data/2_div/Prover.toml new file mode 100644 index 00000000000..ee6f0ef229a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/2_div/Prover.toml @@ -0,0 +1,3 @@ +x = "7" +y = "3" +z = "2" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/2_div/src/main.nr b/crates/nargo_cli/tests/test_data/2_div/src/main.nr new file mode 100644 index 00000000000..ff0dee755cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data/2_div/src/main.nr @@ -0,0 +1,7 @@ +// Testing integer division: 7/3 = 2 +fn main(mut x: u32, y: u32, z: u32) { + let a = x % y; + assert(x / y == z); + assert(a == x - z*y); + assert((50 as u64) % (9 as u64) == 5); +} diff --git a/crates/nargo_cli/tests/test_data/3_add/Nargo.toml b/crates/nargo_cli/tests/test_data/3_add/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/3_add/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/3_add/Prover.toml b/crates/nargo_cli/tests/test_data/3_add/Prover.toml new file mode 100644 index 00000000000..5d777c023db --- /dev/null +++ b/crates/nargo_cli/tests/test_data/3_add/Prover.toml @@ -0,0 +1,3 @@ +x = "3" +y = "4" +z = "7" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/3_add/src/main.nr b/crates/nargo_cli/tests/test_data/3_add/src/main.nr new file mode 100644 index 00000000000..2884415b81a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/3_add/src/main.nr @@ -0,0 +1,8 @@ +// Test integer addition: 3 + 4 = 7 +fn main(mut x: u32, y: u32, z: u32) { + x += y; + assert(x == z); + + x *= 8; + assert(x>9); +} diff --git a/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml b/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/4_sub/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/4_sub/Prover.toml b/crates/nargo_cli/tests/test_data/4_sub/Prover.toml new file mode 100644 index 00000000000..1240475dee3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/4_sub/Prover.toml @@ -0,0 +1,3 @@ +x = "12" +y = "2418266113" +z = "1876701195" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/4_sub/src/main.nr b/crates/nargo_cli/tests/test_data/4_sub/src/main.nr new file mode 100644 index 00000000000..80fc0177e41 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/4_sub/src/main.nr @@ -0,0 +1,5 @@ +// Test unsafe integer subtraction with underflow: 12 - 2418266113 = 1876701195 modulo 2^32 +fn main(mut x: u32, y: u32, z: u32) { + x -= y; + assert(x == z); +} diff --git a/crates/nargo_cli/tests/test_data/5_over/Nargo.toml b/crates/nargo_cli/tests/test_data/5_over/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/5_over/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/5_over/Prover.toml b/crates/nargo_cli/tests/test_data/5_over/Prover.toml new file mode 100644 index 00000000000..9a1986329ca --- /dev/null +++ b/crates/nargo_cli/tests/test_data/5_over/Prover.toml @@ -0,0 +1,2 @@ +x = "43046721" +y = "3793632897" diff --git a/crates/nargo_cli/tests/test_data/5_over/src/main.nr b/crates/nargo_cli/tests/test_data/5_over/src/main.nr new file mode 100644 index 00000000000..4fdff16c5c0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/5_over/src/main.nr @@ -0,0 +1,9 @@ +// Test unsafe integer arithmetic +// Test odd bits integer +fn main(mut x: u32, y: u32) { + x = x * x; + assert(y == x); + + let c:u3 = 2; + assert(c > x as u3); +} diff --git a/crates/nargo_cli/tests/test_data/6/Nargo.toml b/crates/nargo_cli/tests/test_data/6/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/6/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/6/Prover.toml b/crates/nargo_cli/tests/test_data/6/Prover.toml new file mode 100644 index 00000000000..1c52aef063c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/6/Prover.toml @@ -0,0 +1,39 @@ + +# hello as bytes +# used : https://emn178.github.io/online-tools/sha256.html +x = [104, 101, 108, 108, 111] + +result = [ + 0x2c, + 0xf2, + 0x4d, + 0xba, + 0x5f, + 0xb0, + 0xa3, + 0x0e, + 0x26, + 0xe8, + 0x3b, + 0x2a, + 0xc5, + 0xb9, + 0xe2, + 0x9e, + 0x1b, + 0x16, + 0x1e, + 0x5c, + 0x1f, + 0xa7, + 0x42, + 0x5e, + 0x73, + 0x04, + 0x33, + 0x62, + 0x93, + 0x8b, + 0x98, + 0x24, +] diff --git a/crates/nargo_cli/tests/test_data/6/src/main.nr b/crates/nargo_cli/tests/test_data/6/src/main.nr new file mode 100644 index 00000000000..8b350de16c1 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/6/src/main.nr @@ -0,0 +1,20 @@ +// Sha256 circuit where the input is 5 bytes +// not five field elements since sha256 operates over +// bytes. +// +// If you do not cast, it will take all the bytes from the field element! + +// Mimc input is an array of field elements +// The function is called mimc_bn254 to emphasize its parameters are chosen for bn254 curve, it should be used only with a proving system using the same curve (e.g Plonk from Aztec) +use dep::std; + +fn main(x: [u8; 5], result: pub [u8; 32]) { + let mut digest = std::hash::sha256(x); + digest[0] = 5 as u8; + digest = std::hash::sha256(x); + assert(digest == result); + + let y = [12,45,78,41]; + let h = std::hash::mimc_bn254(y); + assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); +} diff --git a/crates/nargo_cli/tests/test_data/7/Nargo.toml b/crates/nargo_cli/tests/test_data/7/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7/Prover.toml b/crates/nargo_cli/tests/test_data/7/Prover.toml new file mode 100644 index 00000000000..bc3784726d2 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7/Prover.toml @@ -0,0 +1,38 @@ + +# hello as bytes +# https://toolkitbay.com/tkb/tool/BLAKE2s_256 +x = [104, 101, 108, 108, 111] +result = [ + 0x19, + 0x21, + 0x3b, + 0xac, + 0xc5, + 0x8d, + 0xee, + 0x6d, + 0xbd, + 0xe3, + 0xce, + 0xb9, + 0xa4, + 0x7c, + 0xbb, + 0x33, + 0x0b, + 0x3d, + 0x86, + 0xf8, + 0xcc, + 0xa8, + 0x99, + 0x7e, + 0xb0, + 0x0b, + 0xe4, + 0x56, + 0xf1, + 0x40, + 0xca, + 0x25, +] diff --git a/crates/nargo_cli/tests/test_data/7/src/main.nr b/crates/nargo_cli/tests/test_data/7/src/main.nr new file mode 100644 index 00000000000..a6bba978644 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7/src/main.nr @@ -0,0 +1,10 @@ +// This is the same as Blake2s example. +// +// Pre-alpha dependencies must now be prefixed with the word "dep". +// The line below indicates that we would like to pull in the standard library dependency. +use dep::std; + +fn main(x: [u8; 5], result: [u8; 32]) { + let digest = std::hash::blake2s(x); + assert(digest == result); +} diff --git a/crates/nargo_cli/tests/test_data/7_function/Nargo.toml b/crates/nargo_cli/tests/test_data/7_function/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7_function/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7_function/Prover.toml b/crates/nargo_cli/tests/test_data/7_function/Prover.toml new file mode 100644 index 00000000000..9140e7f7530 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7_function/Prover.toml @@ -0,0 +1,6 @@ +x = "59" +y = "5" +a = "1" + +arr1=[3320379920, 1938147428, 1942509796, 1795943184, 24853, 0, 0, 0, 0] +arr2=[2912727897, 3590519536, 1687587470, 3896107618, 1092831095, 0, 0, 0, 0] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/7_function/src/main.nr b/crates/nargo_cli/tests/test_data/7_function/src/main.nr new file mode 100644 index 00000000000..5a23b493871 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/7_function/src/main.nr @@ -0,0 +1,149 @@ +//Tests for function calling +use dep::std; + +fn f1(mut x: Field) -> Field { + x = x + 1; + x = f2(x); + x +} + +fn f2(mut x: Field) -> Field{ + x += 2; + x +} + +// Simple example +fn test0(mut a: Field) { + a = f2(a); + assert(a == 3); +} + +// Nested call +fn test1(mut a: Field) { + a = f1(a); + assert(a == 4); +} + +fn test2(z: Field, t: u32 ) { + let a = z + t as Field; + assert(a == 64); + let e = pow(z, t as Field); + assert(e == 714924299); +} + +fn pow(base: Field, exponent: Field) -> Field { + let mut r = 1 as Field; + let b = exponent.to_le_bits(32 as u32); + for i in 1..33 { + r = r*r; + r = (b[32-i] as Field) * (r * base) + (1 - b[32-i] as Field) * r; + } + r +} + +fn test3(x: [u8; 3]) -> [u8; 3] { + let mut buffer = [0 as u8; 3]; + for i in 0..3 { + buffer[i] = x[i]; + } + assert(buffer == x); + buffer +} + +fn test_multiple(x: u32, y: u32) -> (u32, u32) { + (y,x) +} + +fn test_multiple2() -> my_struct { + my_struct { a: 5 as u32, b: 7 as u32 } +} + +fn test_multiple3(x: u32, y: u32) { + assert(x == y); +} + +struct my_struct { + a: u32, + b: u32, +} + +struct my2 { + aa: my_struct, + bb: my_struct, +} + +fn test_multiple4(s: my_struct) { + assert(s.a == s.b+2); +} + +fn test_multiple5(a: (u32, u32)) { + assert(a.0 == a.1+2); +} + + +fn test_multiple6(a: my2, b: my_struct, c: (my2, my_struct)) { + test_multiple4(a.aa); + test_multiple5((b.a, b.b)); + assert(c.0.aa.a == c.1.a); +} + + +fn foo(a: [Field]) -> [Field] { + a +} +fn bar() -> [Field] { + foo([0]) +} +fn main(x: u32 , y: u32 , a: Field, arr1: [u32; 9], arr2: [u32; 9]) { + let mut ss: my_struct = my_struct { b: x, a: x+2, }; + test_multiple4(ss); + test_multiple5((ss.a,ss.b)); + let my = my2 { + aa: ss, + bb: ss, + }; + ss.a = 61; + test_multiple6(my, ss, (my,ss)); + + let my_block = { + let mut ab = f2(a); + ab = ab + a; + (x,ab) + }; + assert(my_block.1 == 4); + + test0(a); + test1(a); + test2(x as Field, y); + assert(bar()[0] == 0); + + let mut b = [0 as u8, 5 as u8, 2 as u8]; + let c = test3(b); + assert(b == c); + b[0] = 1 as u8; + let cc = test3(b); + assert(c != cc); + let e = test_multiple(x, y); + assert(e.1 == e.0 + 54 as u32); + let d = test_multiple2(); + assert(d.b == d.a + 2 as u32); + test_multiple3(y, y); + + //Regression test for issue #628: + let result = first(arr_to_field(arr1), arr_to_field(arr2)); + assert(result[0] == arr1[0] as Field); +} + + +// Issue #628 +fn arr_to_field(arr: [u32; 9]) -> [Field; 9] { + let mut as_field: [Field; 9] = [0 as Field; 9]; + for i in 0..9 { + as_field[i] = arr[i] as Field; + } + as_field +} + +fn first(a: [Field; 9], _b: [Field; 9]) -> [Field; 9] { + a +} diff --git a/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml b/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/8_integration/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/8_integration/Prover.toml b/crates/nargo_cli/tests/test_data/8_integration/Prover.toml new file mode 100644 index 00000000000..e4b4fa41073 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/8_integration/Prover.toml @@ -0,0 +1,5 @@ +a=[867393132, 2339025230, 220695592, 603045882, 2511105607, 2829384008, 3709060370, 165831136, 1055242736, 1021386699, 504214651, 3662346416, 1830680088, 3882307476, 2426040416, 1802701977, 2663953820, 442532338, 1174156258, 2943965281, 2059435796, 2505576606, 666729718, 3602851575, 2784009587, 3495199106, 1721163808, 3787454896, 315490254, 2761503044, 1222736857, 3669200722, 1595984236, 1113969718, 486680564, 3162990949, 3264361924, 2006416798, 2386200406, 315797713, 2613961431, 2248446788, 1487182619, 1426297375, 1728644913, 1251844809, 1725705662, 1593325285, 2204175104, 2086772782, 3535562424, 171941432, 1454717338, 346500936, 3226869878, 1868934392, 4256057877, 1568150812, 3256749490, 2594788417, 1807197388, 3087252400, 1649310565, 2748668146, 3716823811, 3800017989, 932498547, 2480193018, 333760602, 97095822, 4100736518, 2777593334, 2339587180, 3771453942, 3867894936, 3650805881, 1824779553, 1642205658, 4264337791, 4071013475, 1985859040, 4202403275, 2148375036, 2428793574, 314105769, 4225849095, 3500808841, 2684237013, 848348764, 723628347, 1455798875, 3707853370, 1746878741, 1139375098, 3478206320, 3069213335, 112605790, 2440244355, 1471127557, 4092108893] +b=[3828535814, 348916743, 1199414553, 737248839, 756047272, 1292160882, 4257951637, 291617875, 2966142224, 3814394488, 3878026466, 700807834, 2969962294, 1306796485, 3854250602, 898180304, 3427925197, 604266260, 1075521373, 3406840156, 3396422198, 890966269, 1079444598, 988299705, 3071209797, 3808577073, 2135889094, 1194271359, 4006125262, 566871018, 1292670770, 3445252242, 1897364157, 1587048323, 1240078226, 1678980405, 262815752, 304362997, 1104680912, 2632486420, 2463291218, 2187725560, 1870618568, 2652926282, 3004775258, 1952884887, 561428664, 2467226612, 2683547316, 3452779168, 976229927, 1449738410, 3252038428, 2805606398, 1462658417, 1592183545, 2019693157, 3278803512, 3026040550, 566335611, 703403330, 936890230, 2567824938, 890552997, 4217401169, 258050408, 29872215, 812502992, 3871770414, 4261908330, 3703871063, 2429703152, 1496772760, 3466865862, 2739387475, 547994854, 240736540, 3737530356, 545555875, 1243531855, 826369375, 392660683, 262937837, 3055809624, 1979941188, 3982865811, 2062520214, 1365494964, 3851477194, 4086198942, 4210993448, 3262645997, 766395054, 1585427862, 1824837360, 105660195, 3008983983, 845249279, 2566786179, 205438487] +c=[867393132, 2339025230, 220695592, 603045882, ] +d=[3828535814, 348916743, 1199414553, 737248839, ] +m=[77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data/8_integration/src/main.nr b/crates/nargo_cli/tests/test_data/8_integration/src/main.nr new file mode 100644 index 00000000000..56b02650c27 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/8_integration/src/main.nr @@ -0,0 +1,283 @@ +fn matrix_mul_2(a: [u32; 4], b: [u32; 4]) ->[u32; 4] { + let mut c = [0 as u32; 4]; + for i in 0..2 { + for j in 0..2 { + c[i+2*j] = 0; + for k in 0..2 { + c[i+2*j] += a[i+2*k] * b[k+2*j]; + } + } + } + c +} + +fn matrix_mul_10(a: [u32; 100], b: [u32; 100]) -> [u32; 100] { + let mut c = [0 as u32; 100]; + for i in 0..10 { + for j in 0..10 { + c[i+10*j] = 0 as u32; + + for k in 0..10 { + c[i+10*j] += a[i+10*k] * b[k+10*j]; + } + } + } + c +} + + +fn siggy(x: u32) -> u32 { + x * (10 as u32) +} + + +fn test4 (mut a: [u32; 4]) -> [u32; 4] { + for i in 3..4 { + a[i] = siggy(a[i-2]); + } + a +} + +fn iterate1(mut a0: u32) -> u32{ + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = 1 as u32; + let mut f = 2 as u32; + let mut g = 3 as u32; + let mut h = 4 as u32; + + for _i in 0..2 { + t1 = h; + h = g; + g = f; + a = t1 + t2; + } + a0 += a; + a0 +} + +fn array_noteq(a: [u32; 4], b: [u32; 4]) { + assert(a != b); +} + +fn test3(mut b: [Field; 4]) -> [Field; 4] { + for i in 0..4 { + b[i] = i; + } + b +} + +fn iterate2(mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + + let mut a = hash[0]; + let mut e = hash[4]; + let mut f = hash[5]; + let mut g = hash[6]; + let mut h = hash[7]; + + for _i in 0..2 { + t1 = ch2(e, f); + h = g; + g = f; + a = t1; + } + + hash[0] = hash[0] + a; + hash +} + +fn iterate3( mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = hash[0]; + let mut b = hash[1]; + let mut c = hash[2]; + let mut d = hash[3]; + let mut e = hash[4]; + let mut f = hash[5]; + let mut g = hash[6]; + let mut h = hash[7]; + + for _i in 0..3 { + t1 = ep2(e)+ch2(e, f); + h = g; + g = f; + a = t1+t2; + } + assert(a == 2470696267); + hash[0] = hash[0] + a; + hash[1] = hash[1] + b; + hash[2] = hash[2] + c; + hash[3] = hash[3] + d; + hash[4] = hash[4] + e; + hash[5] = hash[5] + f; + hash[6] = hash[6] + g; + hash[7] = hash[7] + h; + hash +} + + +fn test5() { + let mut sha_hash = [ + 0 as u32, 1, 2, 3, + 4, 5, 6, 7 + ]; + + sha_hash = iterate2(sha_hash); + + assert(sha_hash[0] == 9); +} + + +fn ch2(x: u32, y: u32) -> u32 { + x + y +} + +fn ep2(x: u32) -> u32 { + (2 as u32) * too(x) +} + +fn too(x: u32) -> u32 { + (x + 17 as u32) * (x + 3 as u32) +} + +fn test6(x: [u8; 32]) -> [u32; 8] { + let mut sha_m = [0 as u32; 64]; + + let mut sha_hash = [ + 1 as u32, 2, 3, 4, 5, 6, 7, 8 + ]; + + let mut buffer = [0 as u8; 64]; + for i in 0..32 { + buffer[i] = x[i]; + } + + sha_m = iterate6_1(sha_m, buffer); + sha_hash = iterate6_2(sha_m, sha_hash); + sha_hash +} + +fn iterate6_1(mut sha_m: [u32; 64], next_chunk: [u8; 64]) -> [u32; 64] { + let mut j = 0; + for i in 0..16 { + j = (i ) * 4; + sha_m[i] = ((next_chunk[j] as u32) << 24 as u32) + | ((next_chunk[j + 1] as u32) << 16 as u32) + | ((next_chunk[j + 2] as u32) << 8 as u32) + | (next_chunk[j + 3] as u32); + } + for i in 16..64 { + sha_m[i] = sig1(sha_m[i - 2])+(sha_m[i - 7])+(sig0(sha_m[i - 15]))+(sha_m[i - 16]); + } + sha_m +} + +fn iterate6_2(sha_m: [u32; 64], mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = 1 as u32; + let mut b = 2 as u32; + let mut c = 3 as u32; + let mut d = 4 as u32; + let mut e = 5 as u32; + let mut f = 6 as u32; + let mut g = 7 as u32; + let mut h = 8 as u32; + + for i in 0..11 { + t1 = h + ep1(e) + ch(e, f, g) + sha_m[i]; + t2 = epo(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d+t1; + d = c; + c = b; + b = a; + a = t1+t2; + } + + hash[0] = hash[0]+a; + hash[1] = hash[1]+b; + hash[2] = hash[2]+c; + hash[3] = hash[3]+d; + hash[4] = hash[4]+e; + hash[5] = hash[5]+f; + hash[6] = hash[6]+g; + hash[7] = hash[7]+h; + hash +} + +fn rot_right(a: u32, b: u32) -> u32 { + ((a >> b) | (a << (32 as u32 - b))) +} + + +fn ch(x: u32, y: u32, z: u32) -> u32 { + ((x & y) ^ (!x & z)) +} + + +fn maj(x: u32, y: u32, z: u32) -> u32 { + ((x & y) ^ (x & z) ^ (y & z)) +} + + +fn epo(x: u32) -> u32 { + (rot_right(x, 2) ^ rot_right(x, 13) ^ rot_right(x, 22)) +} + +fn ep1(x: u32) -> u32 { + (rot_right(x, 6) ^ rot_right(x, 11) ^ rot_right(x, 25)) +} + +fn sig0(x: u32) -> u32 { + (rot_right(x, 7) ^ rot_right(x, 18) ^ (x >> 3)) +} + +fn sig1(x: u32) -> u32 { + (rot_right(x, 17) ^ rot_right(x, 19) ^ (x >> 10)) +} + + +fn main(a: [u32; 100], b: [u32; 100], c: [u32; 4], mut d: [u32; 4], m: [u8; 32]) { + let e = matrix_mul_10(a,b); + assert(e[6] == 1866842232); + let f = matrix_mul_2(c,d); + assert(f[3] == 2082554100); + + let mut a = [1 as u32, 2, 3, 4]; + a = test4(a); + assert(a[3] == 20); + a = test4(c); + assert(a[3] == c[1] * 10); + + d[0] += c[0]; + d[0] += c[1]; + assert(d[0] == 2739986880); + + let h = iterate1(1); + assert(h == 4); + + let x = d; + array_noteq(x, [d[0], d[1], d[2], 0]); + + let mut h5 = [d[0] as Field, d[1] as Field, d[2] as Field, d[3] as Field]; + let t5 = test3(h5); + assert(t5[3] == 3); + h5 = test3(h5); + assert(h5[3] == 3); + + test5(); + + let mut sha_hash = [ + 0x6a09e667 as u32, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + sha_hash = iterate3(sha_hash); + + let h6 = test6(m); + assert(h6[0]== 523008072); //31.. 3800709683 +} diff --git a/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml b/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/9_conditional/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml b/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml new file mode 100644 index 00000000000..baad8be126a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/9_conditional/Prover.toml @@ -0,0 +1,38 @@ +c=[2, 4, 3, 0, ] +a=0 +x = [104, 101, 108, 108, 111] + +result = [ + 0x2c, + 0xf2, + 0x4d, + 0xba, + 0x5f, + 0xb0, + 0xa3, + 0x0e, + 0x26, + 0xe8, + 0x3b, + 0x2a, + 0xc5, + 0xb9, + 0xe2, + 0x9e, + 0x1b, + 0x16, + 0x1e, + 0x5c, + 0x1f, + 0xa7, + 0x42, + 0x5e, + 0x73, + 0x04, + 0x33, + 0x62, + 0x93, + 0x8b, + 0x98, + 0x24, +] diff --git a/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr b/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr new file mode 100644 index 00000000000..48ac639ecf0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/9_conditional/src/main.nr @@ -0,0 +1,277 @@ +use dep::std; + +fn sort(mut a: [u32; 4]) -> [u32; 4] { + for i in 1..4 { + for j in 0..i { + if a[i] < a[j] { + let c = a[j]; + a[j] = a[i]; + a[i] = c; + } + } + } + a +} + +fn call_intrinsic(x: [u8; 5], result: [u8; 32]) { + let mut digest = std::hash::sha256(x); + digest[0] = 5 as u8; + digest = std::hash::sha256(x); + assert(digest == result); +} + +fn must_be_zero(x: u8) { + assert(x == 0); +} + +fn test3 (x: u8) { + if x == 0 { + must_be_zero(x); + } +} + +fn test4() -> [u32; 4] { + let b: [u32; 4] = [1,2,3,4]; + b +} + +fn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]){ + // Regression test for issue #547 + // Warning: it must be kept at the start of main + let arr: [u8; 2] = [1, 2]; + if arr[0] != arr[1] { + for i in 0..1 { + assert(i != 2); + } + } + + //Issue reported in #421 + if a == c[0] { + assert(c[0] == 0); + } else { + if a == c[1] { + assert(c[1] == 0); + } else { + if a == c[2] { + assert(c[2] == 0); + } + } + } + + //Regression for to_le_bits() constant evaluation + // binary array representation of u8 1 + let as_bits_hardcode_1 = [1, 0]; + let mut c1 = 0; + for i in 0..2 { + let mut as_bits = (arr[i] as Field).to_le_bits(2); + c1 = c1 + as_bits[0] as Field; + + if i == 0 { + assert(arr[i] == 1);// 1 + for k in 0..2 { + assert(as_bits_hardcode_1[k] == as_bits[k]); + } + } + if i == 1 { + assert(arr[i] == 2);//2 + for k in 0..2 { + assert(as_bits_hardcode_1[k] != as_bits[k]); + } + } + } + assert(c1==1); + + //Regression for Issue #579 + let result1_true = test(true); + assert(result1_true.array_param[0] == 1); + let result1_false = test(false); + assert(result1_false.array_param[0] == 0); + + //Test case for short-circuit + let mut data = [0 as u32; 32]; + let mut ba = a; + for i in 0..32 { + let i_u32 = i as u32; + if i_u32 == a { + for j in 0..4 { + data[i + j] = c[4 - 1 - j]; + for k in 0..4 { + ba = ba +data[k]; + } + if ba == 4864 { + c[3]=ba; + } + } + } + } + assert(data[31] == 0); + assert(ba != 13); + //regression for short-circuit2 + if 35 == a { + assert(false); + } + bar(a as Field); + + if a == 3 { + c = test4(); + } + assert(c[1] != 2); + call_intrinsic(x, result); + + //Test case for conditional with arrays from function parameters + let b = sort([1,2,3,4]); + assert(b[0] == 1); + + if a == 0 { + must_be_zero(0); + c[0] = 3; + } else { + must_be_zero(1); + c[0] = 1; + c[1] = c[2] / a + 11 % a; + let f1 = a as Field; + assert(10/f1 != 0); + } + assert(c[0] == 3); + + let mut y = 0; + if a == 0 { + let digest = std::hash::sha256(x); + y = digest[0]; + } else { + y = 5; + } + assert(y == result[0]); + c = sort(c); + assert(c[0]==0); + + //test 1 + let mut x: u32 = 0; + if a == 0 { + c[0] = 12; + if a != 0 { + x = 6; + } else { + x = 2; + assert(x == 2); + } + } else { + x = 5; + assert(x == 5); + } + if c[0] == 0 { + x = 3; + } + assert(x == 2); + + //test2: loops! + x = 0; + x = a - a; + for i in 0..4 { + if c[i] == 0 { + x = i as u32 +2; + } + } + assert(x == 0); + + test3(1); + + if a == 0 { + c = test4(); + } else { + assert(c[1] != 2); + } + if false { + c[1] = 5; + } + assert(c[1] == 2); + + test5(4); + + // Regression for issue #661: + let mut c_661 :[u32;1]=[0]; + if a > 5 { + c_661 = issue_661_foo(issue_661_bar(c), a); + } else { + c_661 = issue_661_foo(issue_661_bar(c), x); + } + assert(c_661[0] < 20000); + + // Test case for function synchronisation + let mut c_sync = 0; + if a == 42 { + c_sync = foo2(); + } else { + c_sync = foo2() + foo2(); + } + assert(c_sync == 6); + + // Regression for predicate simplification + safe_inverse(0); +} + +fn test5(a : u32) { + if a > 1 { + let q = a / 2; + assert(q == 2); + } +} + + + +fn foo() { + let mut x = 1; + x /= 0; +} + +fn bar(x:Field) { + if x == 15 { + foo(); + } +} + + +struct MyStruct579 { + array_param: [u32; 2] +} + +impl MyStruct579 { + fn new(array_param: [u32; 2]) -> MyStruct579 { + MyStruct579 { + array_param: array_param + } + } +} + +fn test(flag: bool) -> MyStruct579 { + let mut my_struct = MyStruct579::new([0; 2]); + + if flag == true { + my_struct= MyStruct579::new([1; 2]); + } + my_struct +} + +fn issue_661_foo(array: [u32;4], b:u32) ->[u32;1] { + [array[0]+b] +} + +fn issue_661_bar(a : [u32;4]) ->[u32;4] { + let mut b:[u32;4] = [0;4]; + b[0]=a[0]+1; + b +} + +fn foo2() -> Field { + 3 +} + +fn safe_inverse(n: Field) -> Field +{ + if n == 0 { + 0 + } + else { + 1 / n + } +} diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml b/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_dynamic/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml b/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml new file mode 100644 index 00000000000..750b3129ec9 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_dynamic/Prover.toml @@ -0,0 +1,9 @@ +x = [104, 101, 108, 108, 111] +z = "59" +t = "10" +index = [0,1,2,3,4] +index2 = [0,1,2,3,4] +offset = 1 +sublen = 2 + + diff --git a/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr b/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr new file mode 100644 index 00000000000..69e5fdc93db --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_dynamic/src/main.nr @@ -0,0 +1,32 @@ + +fn main(x: [u32; 5], mut z: u32, t: u32, index: [Field;5], index2: [Field;5], offset: Field, sublen: Field) { + let idx = (z - 5*t - 5) as Field; + //dynamic array test + dyn_array(x, idx, idx - 3); + + //regression for issue 1283 + let mut s = 0; + let x3 = [246,159,32,176,8]; + for i in 0..5 { + s += x3[index[i]]; + } + assert(s!=0); + + if 3 < (sublen as u32) { + assert(index[offset + 3] == index2[3]); + } +} + +fn dyn_array(mut x: [u32; 5], y: Field, z: Field) { + assert(x[y] == 111); + assert(x[z] == 101); + x[z] = 0; + assert(x[y] == 111); + assert(x[1] == 0); + if y as u32 < 10 { + x[y] = x[y] - 2; + } else { + x[y] = 0; + } + assert(x[4] == 109); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_len/Nargo.toml b/crates/nargo_cli/tests/test_data/array_len/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_len/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_len/Prover.toml b/crates/nargo_cli/tests/test_data/array_len/Prover.toml new file mode 100644 index 00000000000..3c3295e6848 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_len/Prover.toml @@ -0,0 +1,2 @@ +len3 = [1, 2, 3] +len4 = [1, 2, 3, 4] diff --git a/crates/nargo_cli/tests/test_data/array_len/src/main.nr b/crates/nargo_cli/tests/test_data/array_len/src/main.nr new file mode 100644 index 00000000000..9099cfa2144 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_len/src/main.nr @@ -0,0 +1,23 @@ +use dep::std; + +fn len_plus_1(array: [T]) -> Field { + array.len() + 1 +} + +fn add_lens(a: [T], b: [Field]) -> Field { + a.len() + b.len() +} + +fn nested_call(b: [Field]) -> Field { + len_plus_1(b) +} + +fn main(len3: [u8; 3], len4: [Field; 4]) { + assert(len_plus_1(len3) == 4); + assert(len_plus_1(len4) == 5); + assert(add_lens(len3, len4) == 7); + assert(nested_call(len4) == 5); + + // std::array::len returns a comptime value + assert(len4[len3.len()] == 4); +} diff --git a/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml b/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_neq/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_neq/Prover.toml b/crates/nargo_cli/tests/test_data/array_neq/Prover.toml new file mode 100644 index 00000000000..3aad77f6d4d --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_neq/Prover.toml @@ -0,0 +1,2 @@ +a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data/array_neq/src/main.nr b/crates/nargo_cli/tests/test_data/array_neq/src/main.nr new file mode 100644 index 00000000000..be734dea368 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_neq/src/main.nr @@ -0,0 +1,4 @@ +// Simple example of checking where two arrays are different +fn main(a: [Field; 32], b: [Field; 32]) { + assert(a != b); +} diff --git a/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml b/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_sort/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/array_sort/Prover.toml b/crates/nargo_cli/tests/test_data/array_sort/Prover.toml new file mode 100644 index 00000000000..e0d79da4da6 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_sort/Prover.toml @@ -0,0 +1 @@ +xs = [2, 1, 3] diff --git a/crates/nargo_cli/tests/test_data/array_sort/src/main.nr b/crates/nargo_cli/tests/test_data/array_sort/src/main.nr new file mode 100644 index 00000000000..17df7b23551 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/array_sort/src/main.nr @@ -0,0 +1,6 @@ +fn main(xs : [u8; 3]) { + let sorted = xs.sort(); + assert(sorted[0] == 1); + assert(sorted[1] == 2); + assert(sorted[2] == 3); +} diff --git a/crates/nargo_cli/tests/test_data/assert/Nargo.toml b/crates/nargo_cli/tests/test_data/assert/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assert/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/assert/Prover.toml b/crates/nargo_cli/tests/test_data/assert/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assert/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data/assert/src/main.nr b/crates/nargo_cli/tests/test_data/assert/src/main.nr new file mode 100644 index 00000000000..00e94414c0b --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assert/src/main.nr @@ -0,0 +1,3 @@ +fn main(x: Field) { + assert(x == 1); +} diff --git a/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml b/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assign_ex/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml b/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml new file mode 100644 index 00000000000..8c12ebba6cf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assign_ex/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "2" diff --git a/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr b/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr new file mode 100644 index 00000000000..b0626d63c8e --- /dev/null +++ b/crates/nargo_cli/tests/test_data/assign_ex/src/main.nr @@ -0,0 +1,6 @@ +fn main(x: Field, y: Field) { + let mut z = x + y; + assert(z == 3); + z = x * y; + assert(z == 2); +} diff --git a/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_and/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_and/Prover.toml b/crates/nargo_cli/tests/test_data/bit_and/Prover.toml new file mode 100644 index 00000000000..40ce2b0bc27 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_and/Prover.toml @@ -0,0 +1,2 @@ +x = "0x00" +y = "0x10" diff --git a/crates/nargo_cli/tests/test_data/bit_and/src/main.nr b/crates/nargo_cli/tests/test_data/bit_and/src/main.nr new file mode 100644 index 00000000000..f4805960a33 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_and/src/main.nr @@ -0,0 +1,18 @@ +// You can only do bit operations with integers. +// (Kobi/Daira/Circom/#37) https://github.com/iden3/circom/issues/37 +fn main(x : Field, y : Field) { + let x_as_u8 = x as u8; + let y_as_u8 = y as u8; + + assert((x_as_u8 & y_as_u8) == x_as_u8); + + //bitwise and with 1 bit: + let flag = (x == 0) & (y == 16); + assert(flag); + + //bitwise and with odd bits: + let x_as_u11 = x as u11; + let y_as_u11 = y as u11; + assert((x_as_u11 & y_as_u11) == x_as_u11); +} + diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml new file mode 100644 index 00000000000..cfd62c406cb --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/Prover.toml @@ -0,0 +1 @@ +x = 64 diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr new file mode 100644 index 00000000000..c1c6890febb --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_comptime/src/main.nr @@ -0,0 +1,13 @@ +fn main(x: u64) { + let two: u64 = 2; + let three: u64 = 3; + + // comptime shifts on comptime values + assert(two << 2 == 8); + assert((two << 3) / 8 == two); + assert((three >> 1) == 1); + + // comptime shifts on runtime values + assert(x << 1 == 128); + assert(x >> 2 == 16); +} diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml new file mode 100644 index 00000000000..67bf6a6a234 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/Prover.toml @@ -0,0 +1,2 @@ +x = 64 +y = 1 diff --git a/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr new file mode 100644 index 00000000000..903a5f35463 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bit_shifts_runtime/src/main.nr @@ -0,0 +1,12 @@ +fn main(x: u64, y: u64) { + // These are currently unimplemented and panic with "ShiftLeft and ShiftRight operations with shifts which are only known at runtime are not yet implemented." + // See: https://github.com/noir-lang/noir/issues/1265 + + // runtime shifts on comptime values + assert(64 << y == 128); + assert(64 >> y == 32); + + // runtime shifts on runtime values + assert(x << y == 128); + assert(x >> y == 32); +} diff --git a/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml b/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_not/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bool_not/Prover.toml b/crates/nargo_cli/tests/test_data/bool_not/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_not/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data/bool_not/src/main.nr b/crates/nargo_cli/tests/test_data/bool_not/src/main.nr new file mode 100644 index 00000000000..d6b4d7a9fad --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_not/src/main.nr @@ -0,0 +1,5 @@ +use dep::std; +fn main(x: u1) { + assert(!x == 0); +} + diff --git a/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml b/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_or/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/bool_or/Prover.toml b/crates/nargo_cli/tests/test_data/bool_or/Prover.toml new file mode 100644 index 00000000000..a0397e89477 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_or/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "0" diff --git a/crates/nargo_cli/tests/test_data/bool_or/src/main.nr b/crates/nargo_cli/tests/test_data/bool_or/src/main.nr new file mode 100644 index 00000000000..4a74027e4aa --- /dev/null +++ b/crates/nargo_cli/tests/test_data/bool_or/src/main.nr @@ -0,0 +1,7 @@ +use dep::std; +fn main(x: u1, y: u1) { + assert(x | y == 1); + + assert(x | y | x == 1); +} + diff --git a/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml b/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/cast_bool/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml b/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml new file mode 100644 index 00000000000..f489cbac003 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/cast_bool/Prover.toml @@ -0,0 +1,2 @@ +x = "10" +y = "10" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr b/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr new file mode 100644 index 00000000000..57af8120b33 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/cast_bool/src/main.nr @@ -0,0 +1,6 @@ +fn main(x: Field, y: Field) { + let z = x == y; + let t = z as u8; + assert(t == 1); +} + diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_array_access/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml new file mode 100644 index 00000000000..ec8d8e34856 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_array_access/Prover.toml @@ -0,0 +1 @@ +a = [1, 2, 3] diff --git a/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr new file mode 100644 index 00000000000..04f08bb70c5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_array_access/src/main.nr @@ -0,0 +1,17 @@ +fn main(a: [Field; 3]) { + let i = 1; + + // Using a comptime variable as a parameter should not make it non-comptime + let ii = foo(i); + let elem1 = a[i]; + + // Nor should using it in an expression with a non-comptime variable. + let two = i + ii; + assert(i == ii); + + let elem2 = a[i]; + assert(elem1 == elem2); + assert(two == 2); +} + +fn foo(x: Field) -> Field { x } diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_fail/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml new file mode 100644 index 00000000000..7d4290a117a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_fail/Prover.toml @@ -0,0 +1 @@ +x = 1 diff --git a/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr new file mode 100644 index 00000000000..ad9ecc2f689 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_fail/src/main.nr @@ -0,0 +1,15 @@ +fn main(x: Field) { + let my_const = 2; + let array = [0, 1, 2, 3]; + + // Error here: + let foo = my_const + x; + assert(array[foo] == x); + + let my_const2 = 3; + assert(array[my_const2] == 3); + + // Using a comptime variable where a non-comptime variable is expected should be fine + main(my_const2); + assert(x != 0); +} diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml new file mode 100644 index 00000000000..745ce7c2361 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/Prover.toml @@ -0,0 +1,2 @@ +x = 5 +y = 6 diff --git a/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr new file mode 100644 index 00000000000..0461fd9c4cb --- /dev/null +++ b/crates/nargo_cli/tests/test_data/comptime_recursion_regression/src/main.nr @@ -0,0 +1,4 @@ +fn main(x: Field, y: Field) { + let flag = (x == 1) | (y == 2); + assert(flag | false == flag); +} diff --git a/crates/nargo_cli/tests/test_data/contracts/Nargo.toml b/crates/nargo_cli/tests/test_data/contracts/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/contracts/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/contracts/Prover.toml b/crates/nargo_cli/tests/test_data/contracts/Prover.toml new file mode 100644 index 00000000000..97d5b1e0eed --- /dev/null +++ b/crates/nargo_cli/tests/test_data/contracts/Prover.toml @@ -0,0 +1,2 @@ +x = 3 +y = 2 diff --git a/crates/nargo_cli/tests/test_data/contracts/src/main.nr b/crates/nargo_cli/tests/test_data/contracts/src/main.nr new file mode 100644 index 00000000000..53e094eb4cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data/contracts/src/main.nr @@ -0,0 +1,8 @@ +fn main(x : Field, y : pub Field) { + assert(x * 2 == y * 3); +} + +contract Foo { + fn double(x: Field) -> pub Field { x * 2 } + fn triple(x: Field) -> pub Field { x * 3 } +} diff --git a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml new file mode 100644 index 00000000000..4a5c2a916f0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "Baby Jubjub sanity checks" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr new file mode 100644 index 00000000000..3372e969d4b --- /dev/null +++ b/crates/nargo_cli/tests/test_data/ec_baby_jubjub/src/main.nr @@ -0,0 +1,226 @@ +// Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc + +use dep::std::ec::tecurve::affine::Curve as AffineCurve; +use dep::std::ec::tecurve::affine::Point as Gaffine; +use dep::std::ec::tecurve::curvegroup::Curve; +use dep::std::ec::tecurve::curvegroup::Point as G; + +use dep::std::ec::swcurve::affine::Point as SWGaffine; +use dep::std::ec::swcurve::curvegroup::Point as SWG; + +use dep::std::ec::montcurve::affine::Point as MGaffine; +use dep::std::ec::montcurve::curvegroup::Point as MG; + +fn main() { + // This test only makes sense if Field is the right prime field. + if 21888242871839275222246405745257275088548364400416034343698204186575808495617 == 0 + { + // Define Baby Jubjub (ERC-2494) parameters in affine representation + let bjj_affine = AffineCurve::new(168700, 168696, Gaffine::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905)); + + // Test addition + let p1_affine = Gaffine::new(17777552123799933955779906779655732241715742912184938656739573121738514868268, 2626589144620713026669568689430873010625803728049924121243784502389097019475); + let p2_affine = Gaffine::new(16540640123574156134436876038791482806971768689494387082833631921987005038935, 20819045374670962167435360035096875258406992893633759881276124905556507972311); + + let p3_affine = bjj_affine.add(p1_affine, p2_affine); + assert( + p3_affine.eq(Gaffine::new( + 7916061937171219682591368294088513039687205273691143098332585753343424131937, + 14035240266687799601661095864649209771790948434046947201833777492504781204499 + )) + ); + + // Test scalar multiplication + let p4_affine = bjj_affine.mul(2, p1_affine); + assert( + p4_affine.eq(Gaffine::new( + 6890855772600357754907169075114257697580319025794532037257385534741338397365, + 4338620300185947561074059802482547481416142213883829469920100239455078257889 + )) + ); + assert(p4_affine.eq(bjj_affine.bit_mul([0,1], p1_affine))); + + // Test subtraction + let p5_affine = bjj_affine.subtract(p3_affine, p3_affine); + assert(p5_affine.eq(Gaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_affine.contains(bjj_affine.gen) & + bjj_affine.contains(p1_affine) & + bjj_affine.contains(p2_affine) & + bjj_affine.contains(p3_affine) & + bjj_affine.contains(p4_affine) & + bjj_affine.contains(p5_affine) + ); + + // Test CurveGroup equivalents + let bjj = bjj_affine.into_group(); // Baby Jubjub + + let p1 = p1_affine.into_group(); + let p2 = p2_affine.into_group(); + let p3 = p3_affine.into_group(); + let p4 = p4_affine.into_group(); + let p5 = p5_affine.into_group(); + + // Test addition + assert(p3.eq(bjj.add(p1, p2))); + + // Test scalar multiplication + assert(p4.eq(bjj.mul(2, p1))); + assert(p4.eq(bjj.bit_mul([0,1], p1))); + + // Test subtraction + assert(G::zero().eq(bjj.subtract(p3, p3))); + assert(p5.eq(G::zero())); + + // Check that these points are on the curve + assert( + bjj.contains(bjj.gen) & + bjj.contains(p1) & + bjj.contains(p2) & + bjj.contains(p3) & + bjj.contains(p4) & + bjj.contains(p5) + ); + + // Test SWCurve equivalents of the above + // First the affine representation + let bjj_swcurve_affine = bjj_affine.into_swcurve(); + + let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine); + let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine); + let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine); + let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine); + let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine); + + // Addition + assert( + p3_swcurve_affine.eq( + bjj_swcurve_affine.add( + p1_swcurve_affine, + p2_swcurve_affine + ) + ) + ); + + // Doubling + assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine))); + assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0,1], p1_swcurve_affine))); + + // Subtraction + assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(p3_swcurve_affine, p3_swcurve_affine))); + assert(p5_swcurve_affine.eq(SWGaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_swcurve_affine.contains(bjj_swcurve_affine.gen) & + bjj_swcurve_affine.contains(p1_swcurve_affine) & + bjj_swcurve_affine.contains(p2_swcurve_affine) & + bjj_swcurve_affine.contains(p3_swcurve_affine) & + bjj_swcurve_affine.contains(p4_swcurve_affine) & + bjj_swcurve_affine.contains(p5_swcurve_affine) + ); + + // Then the CurveGroup representation + let bjj_swcurve = bjj.into_swcurve(); + + let p1_swcurve = bjj.map_into_swcurve(p1); + let p2_swcurve = bjj.map_into_swcurve(p2); + let p3_swcurve = bjj.map_into_swcurve(p3); + let p4_swcurve = bjj.map_into_swcurve(p4); + let p5_swcurve = bjj.map_into_swcurve(p5); + + // Addition + assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve,p2_swcurve))); + + // Doubling + assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve))); + assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0,1], p1_swcurve))); + + // Subtraction + assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve))); + assert(p5_swcurve.eq(SWG::zero())); + + // Check that these points are on the curve + assert( + bjj_swcurve.contains(bjj_swcurve.gen) & + bjj_swcurve.contains(p1_swcurve) & + bjj_swcurve.contains(p2_swcurve) & + bjj_swcurve.contains(p3_swcurve) & + bjj_swcurve.contains(p4_swcurve) & + bjj_swcurve.contains(p5_swcurve) + ); + + // Test MontCurve conversions + // First the affine representation + let bjj_montcurve_affine = bjj_affine.into_montcurve(); + + let p1_montcurve_affine = p1_affine.into_montcurve(); + let p2_montcurve_affine = p2_affine.into_montcurve(); + let p3_montcurve_affine = p3_affine.into_montcurve(); + let p4_montcurve_affine = p4_affine.into_montcurve(); + let p5_montcurve_affine = p5_affine.into_montcurve(); + + // Addition + assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(p1_montcurve_affine, p2_montcurve_affine))); + + // Doubling + assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine))); + assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0,1], p1_montcurve_affine))); + + // Subtraction + assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(p3_montcurve_affine, p3_montcurve_affine))); + assert(p5_montcurve_affine.eq(MGaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_montcurve_affine.contains(bjj_montcurve_affine.gen) & + bjj_montcurve_affine.contains(p1_montcurve_affine) & + bjj_montcurve_affine.contains(p2_montcurve_affine) & + bjj_montcurve_affine.contains(p3_montcurve_affine) & + bjj_montcurve_affine.contains(p4_montcurve_affine) & + bjj_montcurve_affine.contains(p5_montcurve_affine) + ); + + // Then the CurveGroup representation + let bjj_montcurve = bjj.into_montcurve(); + + let p1_montcurve = p1_montcurve_affine.into_group(); + let p2_montcurve = p2_montcurve_affine.into_group(); + let p3_montcurve = p3_montcurve_affine.into_group(); + let p4_montcurve = p4_montcurve_affine.into_group(); + let p5_montcurve = p5_montcurve_affine.into_group(); + + // Addition + assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve))); + + // Doubling + assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve))); + assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0,1], p1_montcurve))); + + // Subtraction + assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve))); + assert(p5_montcurve.eq(MG::zero())); + + // Check that these points are on the curve + assert( + bjj_montcurve.contains(bjj_montcurve.gen) & + bjj_montcurve.contains(p1_montcurve) & + bjj_montcurve.contains(p2_montcurve) & + bjj_montcurve.contains(p3_montcurve) & + bjj_montcurve.contains(p4_montcurve) & + bjj_montcurve.contains(p5_montcurve) + ); + + // Elligator 2 map-to-curve + let ell2_pt_map = bjj_affine.elligator2_map(27); + + assert(ell2_pt_map.eq(MGaffine::new(7972459279704486422145701269802978968072470631857513331988813812334797879121, 8142420778878030219043334189293412482212146646099536952861607542822144507872).into_tecurve())); + + // SWU map-to-curve + let swu_pt_map = bjj_affine.swu_map(5,27); + + assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(2162719247815120009132293839392097468339661471129795280520343931405114293888, 5341392251743377373758788728206293080122949448990104760111875914082289313973)))); + } +} diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml new file mode 100644 index 00000000000..7199d3305bf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "ECDSA secp256k1 verification" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml new file mode 100644 index 00000000000..412c7b36e4c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/Prover.toml @@ -0,0 +1,209 @@ + +hashed_message = [ + 0x3a, + 0x73, + 0xf4, + 0x12, + 0x3a, + 0x5c, + 0xd2, + 0x12, + 0x1f, + 0x21, + 0xcd, + 0x7e, + 0x8d, + 0x35, + 0x88, + 0x35, + 0x47, + 0x69, + 0x49, + 0xd0, + 0x35, + 0xd9, + 0xc2, + 0xda, + 0x68, + 0x06, + 0xb4, + 0x63, + 0x3a, + 0xc8, + 0xc1, + 0xe2, +] +message = [ + 0x49, + 0x6e, + 0x73, + 0x74, + 0x72, + 0x75, + 0x63, + 0x74, + 0x69, + 0x6f, + 0x6e, + 0x73, + 0x20, + 0x75, + 0x6e, + 0x63, + 0x6c, + 0x65, + 0x61, + 0x72, + 0x2c, + 0x20, + 0x61, + 0x73, + 0x6b, + 0x20, + 0x61, + 0x67, + 0x61, + 0x69, + 0x6e, + 0x20, + 0x6c, + 0x61, + 0x74, + 0x65, + 0x72, + 0x2e, +] +pub_key_x = [ + 0xa0, + 0x43, + 0x4d, + 0x9e, + 0x47, + 0xf3, + 0xc8, + 0x62, + 0x35, + 0x47, + 0x7c, + 0x7b, + 0x1a, + 0xe6, + 0xae, + 0x5d, + 0x34, + 0x42, + 0xd4, + 0x9b, + 0x19, + 0x43, + 0xc2, + 0xb7, + 0x52, + 0xa6, + 0x8e, + 0x2a, + 0x47, + 0xe2, + 0x47, + 0xc7, +] +pub_key_y = [ + 0x89, + 0x3a, + 0xba, + 0x42, + 0x54, + 0x19, + 0xbc, + 0x27, + 0xa3, + 0xb6, + 0xc7, + 0xe6, + 0x93, + 0xa2, + 0x4c, + 0x69, + 0x6f, + 0x79, + 0x4c, + 0x2e, + 0xd8, + 0x77, + 0xa1, + 0x59, + 0x3c, + 0xbe, + 0xe5, + 0x3b, + 0x03, + 0x73, + 0x68, + 0xd7, +] +signature = [ + 0xe5, + 0x08, + 0x1c, + 0x80, + 0xab, + 0x42, + 0x7d, + 0xc3, + 0x70, + 0x34, + 0x6f, + 0x4a, + 0x0e, + 0x31, + 0xaa, + 0x2b, + 0xad, + 0x8d, + 0x97, + 0x98, + 0xc3, + 0x80, + 0x61, + 0xdb, + 0x9a, + 0xe5, + 0x5a, + 0x4e, + 0x8d, + 0xf4, + 0x54, + 0xfd, + 0x28, + 0x11, + 0x98, + 0x94, + 0x34, + 0x4e, + 0x71, + 0xb7, + 0x87, + 0x70, + 0xcc, + 0x93, + 0x1d, + 0x61, + 0xf4, + 0x80, + 0xec, + 0xbb, + 0x0b, + 0x89, + 0xd6, + 0xeb, + 0x69, + 0x69, + 0x01, + 0x61, + 0xe4, + 0x9a, + 0x71, + 0x5f, + 0xcd, + 0x55, +] diff --git a/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr new file mode 100644 index 00000000000..dfac8673b38 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/ecdsa_secp256k1/src/main.nr @@ -0,0 +1,11 @@ +use dep::std; + + +fn main(message : [u8;38],hashed_message : [u8;32], pub_key_x : [u8;32], pub_key_y : [u8;32], signature : [u8;64]) { + // Hash the message, since secp256k1 expects a hashed_message + let expected= std::hash::sha256(message); + assert(hashed_message == expected); + + let valid_signature = std::ecdsa_secp256k1::verify_signature(pub_key_x, pub_key_y, signature, hashed_message); + assert(valid_signature); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml b/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml new file mode 100644 index 00000000000..48db376fb19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/eddsa/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.3.2" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/eddsa/Prover.toml b/crates/nargo_cli/tests/test_data/eddsa/Prover.toml new file mode 100644 index 00000000000..53555202ca6 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/eddsa/Prover.toml @@ -0,0 +1,3 @@ +_priv_key_a = 123 +_priv_key_b = 456 +msg = 789 diff --git a/crates/nargo_cli/tests/test_data/eddsa/src/main.nr b/crates/nargo_cli/tests/test_data/eddsa/src/main.nr new file mode 100644 index 00000000000..8de38011aaf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/eddsa/src/main.nr @@ -0,0 +1,55 @@ +use dep::std::compat; +use dep::std::ec::consts::te::baby_jubjub; +use dep::std::hash; +use dep::std::eddsa::eddsa_poseidon_verify; +use dep::std; + +fn main(msg: pub Field, _priv_key_a: Field, _priv_key_b: Field) { + // Skip this test for non-bn254 backends + if compat::is_bn254() { + let bjj = baby_jubjub(); + + let pub_key_a = bjj.curve.mul(_priv_key_a, bjj.curve.gen); + // let pub_key_b = bjj.curve.mul(_priv_key_b, bjj.curve.gen); + + // Manually computed as fields can't use modulo. Importantantly the commitment is within + // the subgroup order. Note that choice of hash is flexible for this step. + // let r_a = hash::pedersen([_priv_key_a, msg])[0] % bjj.suborder; // modulus computed manually + let r_a = 1414770703199880747815475415092878800081323795074043628810774576767372531818; + // let r_b = hash::pedersen([_priv_key_b, msg])[0] % bjj.suborder; // modulus computed manually + let r_b = 571799555715456644614141527517766533395606396271089506978608487688924659618; + + let r8_a = bjj.curve.mul(r_a, bjj.base8); + let r8_b = bjj.curve.mul(r_b, bjj.base8); + + // let h_a: [Field; 6] = hash::poseidon::bn254::hash_5([ + // r8_a.x, + // r8_a.y, + // pub_key_a.x, + // pub_key_a.y, + // msg, + // ]); + + // let h_b: [Field; 6] = hash::poseidon::bn254::hash_5([ + // r8_b.x, + // r8_b.y, + // pub_key_b.x, + // pub_key_b.y, + // msg, + // ]); + + // let s_a = (r_a + _priv_key_a * h_a) % bjj.suborder; // modulus computed manually + let s_a = 30333430637424319196043722294837632681219980330991241982145549329256671548; + // let s_b = (r_b + _priv_key_b * h_b) % bjj.suborder; // modulus computed manually + let s_b = 1646085314320208098241070054368798527940102577261034947654839408482102287019; + + // User A verifies their signature over the message + assert(eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_a, r8_a.x, r8_a.y, msg)); + + // User B's signature over the message can't be used with user A's pub key + assert(!eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_b, r8_b.x, r8_b.y, msg)); + + // User A's signature over the message can't be used with another message + assert(!eddsa_poseidon_verify(pub_key_a.x, pub_key_a.y, s_a, r8_a.x, r8_a.y, msg + 1)); + } +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/generics/Nargo.toml b/crates/nargo_cli/tests/test_data/generics/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/generics/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/generics/Prover.toml b/crates/nargo_cli/tests/test_data/generics/Prover.toml new file mode 100644 index 00000000000..85f1e9f96f2 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/generics/Prover.toml @@ -0,0 +1,2 @@ +x = "2" +y = "2" diff --git a/crates/nargo_cli/tests/test_data/generics/src/main.nr b/crates/nargo_cli/tests/test_data/generics/src/main.nr new file mode 100644 index 00000000000..bfde9d3c957 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/generics/src/main.nr @@ -0,0 +1,57 @@ +struct Bar { + one: Field, + two: Field, + other: T, +} + +fn foo(bar: Bar) { + assert(bar.one == bar.two); +} + +struct BigInt { + limbs: [u32; N], +} + +impl BigInt { + // `N` is in scope of all methods in the impl + fn first(first: BigInt, second: BigInt) -> Self { + assert(first.limbs != second.limbs); + first + } + + fn second(first: BigInt, second: Self) -> Self { + assert(first.limbs != second.limbs); + second + } +} + +impl Bar { + fn get_other(self) -> Field { + self.other + } +} + +fn main(x: Field, y: Field) { + let bar1: Bar = Bar { one: x, two: y, other: 0 }; + let bar2 = Bar { one: x, two: y, other: [0] }; + + foo(bar1); + foo(bar2); + + // Test generic impls + let int1 = BigInt { limbs: [1] }; + let int2 = BigInt { limbs: [2] }; + let BigInt { limbs } = int1.second(int2).first(int1); + assert(limbs == int2.limbs); + + // Test impl exclusively for Bar + assert(bar1.get_other() == bar1.other); + + // Expected type error + // assert(bar2.get_other() == bar2.other); + + let one = x; + let two = y; + let nested_generics: Bar> = Bar { one, two, other: Bar { one, two, other: 0 } }; + assert(nested_generics.other.other == bar1.get_other()); +} diff --git a/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml b/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/Prover.toml b/crates/nargo_cli/tests/test_data/global_consts/Prover.toml new file mode 100644 index 00000000000..66f7feb1dda --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/Prover.toml @@ -0,0 +1,4 @@ +a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +c = [3, 3, 3] +d = [5, 5, 5, 5, 5] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr b/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr new file mode 100644 index 00000000000..e52efc52eae --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/src/baz.nr @@ -0,0 +1,5 @@ +fn from_baz(x : [Field; crate::foo::MAGIC_NUMBER]) { + for i in 0..crate::foo::MAGIC_NUMBER { + assert(x[i] == crate::foo::MAGIC_NUMBER); + }; +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr b/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr new file mode 100644 index 00000000000..2db74fb1ff7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/src/foo.nr @@ -0,0 +1,11 @@ +mod bar; + +global N: Field = 5; +global MAGIC_NUMBER: Field = 3; +global TYPE_INFERRED = 42; + +fn from_foo(x : [Field; bar::N]) { + for i in 0..bar::N { + assert(x[i] == bar::N); + }; +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr new file mode 100644 index 00000000000..1b4d472b1e8 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/src/foo/bar.nr @@ -0,0 +1,5 @@ +global N: Field = 5; + +fn from_bar(x : Field) -> Field { + x * N +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/global_consts/src/main.nr b/crates/nargo_cli/tests/test_data/global_consts/src/main.nr new file mode 100644 index 00000000000..9bcca2b8071 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/global_consts/src/main.nr @@ -0,0 +1,88 @@ +mod foo; +mod baz; + +global M: Field = 32; +global L: Field = 10; // Unused globals currently allowed +global N: Field = 5; +global T_LEN = 2; // Type inference is allowed on globals +//global N: Field = 5; // Uncomment to see duplicate globals error + +struct Dummy { + x: [Field; N], + y: [Field; foo::MAGIC_NUMBER] +} + +fn main(a: [Field; M + N - N], b: [Field; 30 + N / 2], c : pub [Field; foo::MAGIC_NUMBER], d: [Field; foo::bar::N]) { + let test_struct = Dummy { x: d, y: c }; + + for i in 0..foo::MAGIC_NUMBER { + assert(c[i] == foo::MAGIC_NUMBER); + assert(test_struct.y[i] == foo::MAGIC_NUMBER); + } + + assert(N != M); + + let expected: u32 = 42; + assert(foo::TYPE_INFERRED == expected); + + let mut y = 5; + let mut x = M; + for i in 0..N*N { + let M: comptime Field = 10; + x = M; + + y = i; + } + assert(y == 24); + assert(x == 10); + + let q = multiplyByM(3); + assert(q == 96); + + arrays_neq(a, b); + + let t: [Field; T_LEN] = [N, M]; + assert(t[1] == 32); + + assert(15 == mysubmodule::my_helper()); + + let add_submodules_N = mysubmodule::N + foo::bar::N; + assert(15 == add_submodules_N); + let add_from_bar_N = mysubmodule::N + foo::bar::from_bar(1); + assert(15 == add_from_bar_N); + + // Example showing an array filled with (mysubmodule::N + 2) 0's + let sugared = [0; mysubmodule::N + 2]; + assert(sugared[mysubmodule::N + 1] == 0); + + let arr: [Field; mysubmodule::N] = [N; 10]; + assert((arr[0] == 5) & (arr[9] == 5)); + + foo::from_foo(d); + baz::from_baz(c); +} + +fn multiplyByM(x: Field) -> Field { + x * M +} + +fn arrays_neq(a: [Field; M], b: [Field; M]) { + assert(a != b); +} + +mod mysubmodule { + use dep::std; + + global N: Field = 10; + global L: Field = 50; + + fn my_bool_or(x: u1, y: u1) { + assert(x | y == 1); + } + + fn my_helper() -> comptime Field { + let N: comptime Field = 15; // Like in Rust, local variables override globals + let x = N; + x + } +} diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml b/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/hash_to_field/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml b/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml new file mode 100644 index 00000000000..f6597d3f78a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/hash_to_field/Prover.toml @@ -0,0 +1 @@ +input = "1" diff --git a/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr b/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr new file mode 100644 index 00000000000..ffc334179ee --- /dev/null +++ b/crates/nargo_cli/tests/test_data/hash_to_field/src/main.nr @@ -0,0 +1,5 @@ +use dep::std; + +fn main(input : Field) -> pub Field { + std::hash::hash_to_field([input]) +} diff --git a/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml b/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/higher_order_functions/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml b/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/higher_order_functions/Prover.toml @@ -0,0 +1 @@ + diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml b/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/if_else_chain/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml b/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml new file mode 100644 index 00000000000..84aeb36ac21 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/if_else_chain/Prover.toml @@ -0,0 +1,2 @@ +a=0 +c=[2, 4, 3, 0, ] diff --git a/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr b/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr new file mode 100644 index 00000000000..5105c18c7de --- /dev/null +++ b/crates/nargo_cli/tests/test_data/if_else_chain/src/main.nr @@ -0,0 +1,16 @@ + +fn main(a: u32, mut c: [u32; 4]){ + if a == c[0] { + assert(c[0] == 0); + } else if a == c[1] { + assert(c[1] == 0); + } else if a == c[2] { + assert(c[2] == 0); + } else if a == c[3] { + // expect to match this case + assert(c[3] == 0); + } else { + assert(c[0] == 10); + } +} + diff --git a/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml b/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/keccak256/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/keccak256/Prover.toml b/crates/nargo_cli/tests/test_data/keccak256/Prover.toml new file mode 100644 index 00000000000..d65c4011d3f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/keccak256/Prover.toml @@ -0,0 +1,35 @@ +x = 0xbd +result = [ + 0x5a, + 0x50, + 0x2f, + 0x9f, + 0xca, + 0x46, + 0x7b, + 0x26, + 0x6d, + 0x5b, + 0x78, + 0x33, + 0x65, + 0x19, + 0x37, + 0xe8, + 0x05, + 0x27, + 0x0c, + 0xa3, + 0xf3, + 0xaf, + 0x1c, + 0x0d, + 0xd2, + 0x46, + 0x2d, + 0xca, + 0x4b, + 0x3b, + 0x1a, + 0xbf, +] diff --git a/crates/nargo_cli/tests/test_data/keccak256/src/main.nr b/crates/nargo_cli/tests/test_data/keccak256/src/main.nr new file mode 100644 index 00000000000..ba3ed7d07af --- /dev/null +++ b/crates/nargo_cli/tests/test_data/keccak256/src/main.nr @@ -0,0 +1,22 @@ +// Keccak256 example +// +use dep::std; + +fn main(x: Field, result: [u8; 32]) { + // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field + // The padding is taken care of by the program + let digest = std::hash::keccak256([x as u8], 1); + assert(digest == result); + + //#1399: variable meesage size + let message_size = 4; + let hash_a = std::hash::keccak256([1,2,3,4], message_size); + let hash_b = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size); + + assert(hash_a == hash_b); + + let message_size_big = 8; + let hash_c = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size_big); + + assert(hash_a != hash_c); +} diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml b/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml new file mode 100644 index 00000000000..fb93b9aa2a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_bool_arg/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml b/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml new file mode 100644 index 00000000000..f932e0b4817 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_bool_arg/Prover.toml @@ -0,0 +1,2 @@ +x = true +y = [true, false] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr b/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr new file mode 100644 index 00000000000..0615a7dbca4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_bool_arg/src/main.nr @@ -0,0 +1,8 @@ +fn main(x : bool, y: [bool;2]) { + if x { + assert(1 != 2); + } + + assert(x); + assert(y[0] != y[1]); +} diff --git a/crates/nargo_cli/tests/test_data/main_return/Nargo.toml b/crates/nargo_cli/tests/test_data/main_return/Nargo.toml new file mode 100644 index 00000000000..fb93b9aa2a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_return/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/main_return/Prover.toml b/crates/nargo_cli/tests/test_data/main_return/Prover.toml new file mode 100644 index 00000000000..63e9878811a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_return/Prover.toml @@ -0,0 +1 @@ +x = "8" diff --git a/crates/nargo_cli/tests/test_data/main_return/src/main.nr b/crates/nargo_cli/tests/test_data/main_return/src/main.nr new file mode 100644 index 00000000000..06347eb0919 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/main_return/src/main.nr @@ -0,0 +1,3 @@ +fn main(x: pub Field) -> pub Field { + x +} diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml b/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/merkle_insert/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml b/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml new file mode 100644 index 00000000000..fca4a077df4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/merkle_insert/Prover.toml @@ -0,0 +1,11 @@ +old_root = "0x285785b10eca49cf456b935f1c9787ff571f306c1bc62549c31a9199a633f9f8" +old_leaf = "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0" +old_hash_path = [ + "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", + "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", + "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", +] +new_root = "0x2d05c2650e6c2ef02c6dc7fae7f517b8ac191386666c0b5a68130a8c11092f5f" +leaf = "0x085ca53be9c9d95b57e6e5fc91c5d531ad9e63e85dd71af7e35562991774b435" +index = "0" +mimc_input = [12,45,78,41] diff --git a/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr b/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr new file mode 100644 index 00000000000..3de10520037 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/merkle_insert/src/main.nr @@ -0,0 +1,21 @@ +use dep::std; + +fn main( + old_root: Field, + old_leaf: Field, + old_hash_path: [Field; 3], + new_root: pub Field, + leaf: Field, + index: Field, + mimc_input: [Field; 4], +) { + assert(old_root == std::merkle::compute_merkle_root(old_leaf, index, old_hash_path)); + + let calculated_root = std::merkle::compute_merkle_root(leaf, index, old_hash_path); + assert(new_root == calculated_root); + + let h = std::hash::mimc_bn254(mimc_input); + // Regression test for PR #891 + std::println(h); + assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); +} diff --git a/crates/nargo_cli/tests/test_data/modules/Nargo.toml b/crates/nargo_cli/tests/test_data/modules/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules/Prover.toml b/crates/nargo_cli/tests/test_data/modules/Prover.toml new file mode 100644 index 00000000000..c0a0cdfbeb0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules/Prover.toml @@ -0,0 +1,2 @@ +x = "2" +y = "13" diff --git a/crates/nargo_cli/tests/test_data/modules/src/foo.nr b/crates/nargo_cli/tests/test_data/modules/src/foo.nr new file mode 100644 index 00000000000..1f771fa9425 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules/src/foo.nr @@ -0,0 +1,3 @@ +fn hello(x : Field) -> Field { + x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules/src/main.nr b/crates/nargo_cli/tests/test_data/modules/src/main.nr new file mode 100644 index 00000000000..167f7e671a0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules/src/main.nr @@ -0,0 +1,14 @@ +mod foo; +// This is a comment. +// +// `main` is the entry point to a binary +// +// You can have a `Binary` or a `Library` +// Release : 0.2 +// +// To run a proof on the command line, type `cargo run prove {proof_name}` +// +// To verify that proof, type `cargo run verify {proof_name}` +fn main(x: Field, y: pub Field) { + assert(x != foo::hello(y)); +} diff --git a/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml b/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules_more/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/Prover.toml b/crates/nargo_cli/tests/test_data/modules_more/Prover.toml new file mode 100644 index 00000000000..39a4ddb9d15 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules_more/Prover.toml @@ -0,0 +1,4 @@ + + x = "5" + y = "15" + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr b/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr new file mode 100644 index 00000000000..ee0d20082f5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules_more/src/foo.nr @@ -0,0 +1,5 @@ +mod bar; + +fn hello(x : Field) -> Field { + x +} diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr new file mode 100644 index 00000000000..a92fb81dceb --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules_more/src/foo/bar.nr @@ -0,0 +1,3 @@ +fn from_bar(x : Field) -> Field { + x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modules_more/src/main.nr b/crates/nargo_cli/tests/test_data/modules_more/src/main.nr new file mode 100644 index 00000000000..8862e5a8650 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modules_more/src/main.nr @@ -0,0 +1,6 @@ +mod foo; + +// An example of the module system +fn main(x: Field, y: Field) { + assert(x != foo::bar::from_bar(y)); +} diff --git a/crates/nargo_cli/tests/test_data/modulus/Nargo.toml b/crates/nargo_cli/tests/test_data/modulus/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modulus/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/modulus/Prover.toml b/crates/nargo_cli/tests/test_data/modulus/Prover.toml new file mode 100644 index 00000000000..d435609bb1a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modulus/Prover.toml @@ -0,0 +1,290 @@ +bn254_modulus_be_bytes = [ + 48, + 100, + 78, + 114, + 225, + 49, + 160, + 41, + 184, + 80, + 69, + 182, + 129, + 129, + 88, + 93, + 40, + 51, + 232, + 72, + 121, + 185, + 112, + 145, + 67, + 225, + 245, + 147, + 240, + 0, + 0, + 1, +] +bn254_modulus_be_bits = [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, +] diff --git a/crates/nargo_cli/tests/test_data/modulus/src/main.nr b/crates/nargo_cli/tests/test_data/modulus/src/main.nr new file mode 100644 index 00000000000..4a13a6e06ba --- /dev/null +++ b/crates/nargo_cli/tests/test_data/modulus/src/main.nr @@ -0,0 +1,27 @@ +use dep::std; + +fn main(bn254_modulus_be_bytes : [u8; 32], bn254_modulus_be_bits : [u1; 254]) -> pub Field { + let modulus_size = std::field::modulus_num_bits(); + // NOTE: The constraints used in this circuit will only work when testing nargo with the plonk bn254 backend + assert(modulus_size == 254); + + let modulus_be_byte_array = std::field::modulus_be_bytes(); + for i in 0..32 { + assert(modulus_be_byte_array[i] == bn254_modulus_be_bytes[i]); + } + let modulus_le_byte_array = std::field::modulus_le_bytes(); + for i in 0..32 { + assert(modulus_le_byte_array[i] == bn254_modulus_be_bytes[31-i]); + } + + let modulus_be_bits = std::field::modulus_be_bits(); + for i in 0..254 { + assert(modulus_be_bits[i] == bn254_modulus_be_bits[i]); + } + let modulus_le_bits = std::field::modulus_le_bits(); + for i in 0..254 { + assert(modulus_le_bits[i] == bn254_modulus_be_bits[253-i]); + } + + modulus_size +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml b/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/numeric_generics/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml b/crates/nargo_cli/tests/test_data/numeric_generics/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr b/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr new file mode 100644 index 00000000000..f1efafc19fd --- /dev/null +++ b/crates/nargo_cli/tests/test_data/numeric_generics/src/main.nr @@ -0,0 +1,39 @@ +fn main() { + let a = id([1, 2]); + let b = id([1, 2, 3]); + + let itWorks1 = MyStruct { data: a }; + assert(itWorks1.data[1] == 2); + let itWorks2 = MyStruct { data: b }; + assert(itWorks2.data[1] == 2); + + let c = [1, 2]; + let itAlsoWorks = MyStruct { data: c }; + assert(itAlsoWorks.data[1] == 2); + + assert(foo(itWorks2).data[0] == itWorks2.data[0] + 1); +} + +fn id(x: [Field; I]) -> [Field; I] { + x +} + +struct MyStruct { + data: [Field; S], +} + +impl MyStruct { + fn insert(mut self: Self, index: comptime Field, elem: Field) -> Self { + // Regression test for numeric generics on impls + assert(index as u64 < S as u64); + + self.data[index] = elem; + self + } +} + +fn foo(mut s: MyStruct<2+1>) -> MyStruct<10/2-2> { + s.data[0] = s.data[0] + 1; + s +} + diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml b/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pedersen_check/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml b/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml new file mode 100644 index 00000000000..2fb3b1e1abf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pedersen_check/Prover.toml @@ -0,0 +1,6 @@ +x = "0" +y = "1" +salt = "42" + +out_x = "0x0c5e1ddecd49de44ed5e5798d3f6fb7c71fe3d37f5bee8664cf88a445b5ba0af" +out_y = "0x230294a041e26fe80b827c2ef5cb8784642bbaa83842da2714d62b1f3c4f9752" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr b/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr new file mode 100644 index 00000000000..37fc3f61188 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pedersen_check/src/main.nr @@ -0,0 +1,17 @@ +use dep::std; + +fn main(x: Field, y: Field, salt: Field, out_x: Field, out_y: Field ) { + let res = std::hash::pedersen([x, y]); + assert(res[0] == out_x); + assert(res[1] == out_y); + + let raw_data = [x,y]; + let mut state = 0; + for i in 0..2 { + state = state * 8 + raw_data[i]; + } + state += salt; + let hash = std::hash::pedersen([state]); + assert(std::hash::pedersen([43])[0] == hash[0]); +} + diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml new file mode 100644 index 00000000000..6a061f5a217 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "Poseidon 254-bit permutation test on 3 elements with alpha = 5" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml new file mode 100644 index 00000000000..8eecf9a3db2 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/Prover.toml @@ -0,0 +1,4 @@ +x1 = [1,2] +y1 = "0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a" +x2 = [1,2,3,4] +y2 = "0x299c867db6c1fdd79dcefa40e4510b9837e60ebb1ce0663dbaa525df65250465" diff --git a/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr new file mode 100644 index 00000000000..37621c732a8 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidon_bn254_hash/src/main.nr @@ -0,0 +1,10 @@ +use dep::std::hash::poseidon; + +fn main(x1: [Field; 2], y1: pub Field, x2: [Field; 4], y2: pub Field) +{ + let hash1 = poseidon::bn254::hash_2(x1); + assert(hash1 == y1); + + let hash2 = poseidon::bn254::hash_4(x2); + assert(hash2 == y2); +} diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml new file mode 100644 index 00000000000..902abd85754 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "Variable-length Poseidon-128 sponge test on 7 elements with alpha = 5" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml new file mode 100644 index 00000000000..f8a6be57b24 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/Prover.toml @@ -0,0 +1 @@ +x = [1,2,3,4,5,6,7] diff --git a/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr new file mode 100644 index 00000000000..3addc1cec97 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/poseidonsponge_x5_254/src/main.nr @@ -0,0 +1,9 @@ +use dep::std::hash::poseidon; + +fn main(x: [Field; 7]) +{ + // Test optimised sponge + let result = poseidon::bn254::sponge(x); + + assert(result == 0x080ae1669d62f0197190573d4a325bfb8d8fc201ce3127cbac0c47a7ac81ac48); +} diff --git a/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml b/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pred_eq/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml b/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml new file mode 100644 index 00000000000..465ef562de4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pred_eq/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "1" diff --git a/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr b/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr new file mode 100644 index 00000000000..c7986cb7af3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/pred_eq/src/main.nr @@ -0,0 +1,6 @@ +use dep::std; + +fn main(x: Field, y: Field) { + let p = x == y; + assert(p == true); +} diff --git a/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml b/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/range_fail/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/range_fail/Prover.toml b/crates/nargo_cli/tests/test_data/range_fail/Prover.toml new file mode 100644 index 00000000000..7524e8b58b1 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/range_fail/Prover.toml @@ -0,0 +1,2 @@ +x = "300" +y = "20" diff --git a/crates/nargo_cli/tests/test_data/range_fail/src/main.nr b/crates/nargo_cli/tests/test_data/range_fail/src/main.nr new file mode 100644 index 00000000000..4535c5d9e5f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/range_fail/src/main.nr @@ -0,0 +1,8 @@ +// Multiple integers constraints. +// +// There is currently no range optimizer currently in ACIR :( +// +fn main(x: u8, y: Field) { + let _z = x + (y as u8); +} + diff --git a/crates/nargo_cli/tests/test_data/regression/Nargo.toml b/crates/nargo_cli/tests/test_data/regression/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/regression/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/regression/Prover.toml b/crates/nargo_cli/tests/test_data/regression/Prover.toml new file mode 100644 index 00000000000..2875190982f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/regression/Prover.toml @@ -0,0 +1,2 @@ +x = [0x3f, 0x1c, 0xb8, 0x99, 0xab] +z = 3 diff --git a/crates/nargo_cli/tests/test_data/regression/src/main.nr b/crates/nargo_cli/tests/test_data/regression/src/main.nr new file mode 100644 index 00000000000..06e35827d1e --- /dev/null +++ b/crates/nargo_cli/tests/test_data/regression/src/main.nr @@ -0,0 +1,101 @@ +global NIBBLE_LENGTH: comptime Field = 16; + +fn compact_decode(input: [u8; N], length: Field) -> ([u4; NIBBLE_LENGTH], Field) +{ + assert(2*input.len() as u64 <= NIBBLE_LENGTH as u64); + assert(length as u64 <= input.len() as u64); + + let mut nibble = [0 as u4; NIBBLE_LENGTH]; + + let first_nibble = (input[0] >> 4) as u4; + let parity = first_nibble as u1; + + if parity == 1 + { + nibble[0] = (input[0] & 0x0f) as u4; + for i in 1..input.len() + { + if i as u64 < length as u64 + { + let x = input[i]; + nibble[2*i - 1] = (x >> 4) as u4; + nibble[2*i] = (x & 0x0f) as u4; + } + } + } + else + { + for i in 0..2 + { + if (i as u64) < length as u64 - 1 + { + let x = input[i + 1]; + nibble[2*i] = (x >> 4) as u4; + nibble[2*i + 1] = (x & 0x0f) as u4; + } + } + } + + let out = (nibble, 2*length + (parity as Field) - 2); + + out +} + +fn enc(value: [u8; N], value_length: Field) -> ([u8; 32], Field) +{ + assert(value.len() as u8 >= value_length as u8); + let mut out_value = [0; 32]; + if value_length == 0 + { + let out = (out_value, value_length); + out + } + else { if value_length as u8 < 31 + { + out_value[0] = 0x80 + value_length as u8; + + for i in 1..value.len() + { + out_value[i] = value[i-1]; + } + + let out = (out_value, value_length + 1); + + out + } + else + { + let out = (out_value, 32); + out + } + } +} + +fn main(x: [u8; 5], z: Field) +{ + //Issue 1144 + let (nib, len) = compact_decode(x,z); + assert(len == 5); + assert([nib[0], nib[1], nib[2], nib[3], nib[4]] == [15, 1, 12, 11, 8]); + + +} + +#[test] +// Issue 1144 +fn test_1144() +{ + main([0x3f, 0x1c, 0xb8, 0x99, 0xab], 3); +} + +// Issue 1169 +fn enc_test() +{ + let val1 = [0xb8,0x8f,0x61,0xe6,0xfb,0xda,0x83,0xfb,0xff,0xfa,0xbe,0x36,0x41,0x12,0x13,0x74,0x80,0x39,0x80,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]; + let val1_length = 20; + + let enc_val1 = enc(val1,val1_length); + + assert(enc_val1.0 == [0x94,0xb8,0x8f,0x61,0xe6,0xfb,0xda,0x83,0xfb,0xff,0xfa,0xbe,0x36,0x41,0x12,0x13,0x74,0x80,0x39,0x80,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]); + assert(enc_val1.1 == 21); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml b/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/scalar_mul/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml b/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml new file mode 100644 index 00000000000..69b91cb5f31 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/scalar_mul/Prover.toml @@ -0,0 +1,7 @@ +a = "1" +a_pub_x = "0x0000000000000000000000000000000000000000000000000000000000000001" +a_pub_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" + +b = "2" +b_pub_x = "0x06ce1b0827aafa85ddeb49cdaa36306d19a74caa311e13d46d8bc688cdbffffe" +b_pub_y = "0x1c122f81a3a14964909ede0ba2a6855fc93faf6fa1a788bf467be7e7a43f80ac" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr b/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr new file mode 100644 index 00000000000..d9d267f1dcd --- /dev/null +++ b/crates/nargo_cli/tests/test_data/scalar_mul/src/main.nr @@ -0,0 +1,22 @@ +use dep::std; + +fn main( + a: Field, + a_pub_x: pub Field, + a_pub_y: pub Field, + b: Field, + b_pub_x: pub Field, + b_pub_y: pub Field +) { + let mut priv_key = a; + let mut pub_x: Field = a_pub_x; + let mut pub_y: Field = a_pub_y; + if a != 1 { // Change `a` in Prover.toml to test input `b` + priv_key = b; + pub_x = b_pub_x; + pub_y = b_pub_y; + } + let res = std::scalar_mul::fixed_base(priv_key); + assert(res[0] == pub_x); + assert(res[1] == pub_y); +} diff --git a/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml b/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/schnorr/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/schnorr/Prover.toml b/crates/nargo_cli/tests/test_data/schnorr/Prover.toml new file mode 100644 index 00000000000..c5c3ab5101a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/schnorr/Prover.toml @@ -0,0 +1,9 @@ +message = [0,1,2,3,4,5,6,7,8,9] +pub_key_x = "0x17cbd3ed3151ccfd170efe1d54280a6a4822640bf5c369908ad74ea21518a9c5" +pub_key_y = "0x0e0456e3795c1a31f20035b741cd6158929eeccd320d299cfcac962865a6bc74" +signature = [ + 5, 202, 31, 146, 81, 242, 246, 69, 43, 107, 249, 153, 198, 44, 14, 111, 191, 121, 137, 166, + 160, 103, 18, 181, 243, 233, 226, 95, 67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, + 205, 69, 33, 236, 163, 83, 194, 84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, + 250, 39, 239, +] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/schnorr/src/main.nr b/crates/nargo_cli/tests/test_data/schnorr/src/main.nr new file mode 100644 index 00000000000..c0933b23029 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/schnorr/src/main.nr @@ -0,0 +1,10 @@ +use dep::std; + +// Note: If main has any unsized types, then the verifier will never be able +// to figure out the circuit instance +fn main(message: [u8; 10], pub_key_x: Field, pub_key_y: Field, signature: [u8; 64]) { + // Is there ever a situation where someone would want + // to ensure that a signature was invalid? + let valid_signature = std::schnorr::verify_signature(pub_key_x,pub_key_y,signature, message); + assert(valid_signature); +} diff --git a/crates/nargo_cli/tests/test_data/sha256/Nargo.toml b/crates/nargo_cli/tests/test_data/sha256/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha256/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha256/Prover.toml b/crates/nargo_cli/tests/test_data/sha256/Prover.toml new file mode 100644 index 00000000000..c4df1b749bb --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha256/Prover.toml @@ -0,0 +1,36 @@ + +x = 0xbd +result = [ + 0x68, + 0x32, + 0x57, + 0x20, + 0xaa, + 0xbd, + 0x7c, + 0x82, + 0xf3, + 0x0f, + 0x55, + 0x4b, + 0x31, + 0x3d, + 0x05, + 0x70, + 0xc9, + 0x5a, + 0xcc, + 0xbb, + 0x7d, + 0xc4, + 0xb5, + 0xaa, + 0xe1, + 0x12, + 0x04, + 0xc0, + 0x8f, + 0xfe, + 0x73, + 0x2b, +] diff --git a/crates/nargo_cli/tests/test_data/sha256/src/main.nr b/crates/nargo_cli/tests/test_data/sha256/src/main.nr new file mode 100644 index 00000000000..fd5340e2384 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha256/src/main.nr @@ -0,0 +1,19 @@ +// Sha256 example +// +// Calls Sha256 from the standard library. +// +// The Compiler sees this special function and creates an ACIR gate +// +// The ACIR SHA256 gate is passed to PLONK who should +// know how to create the necessary constraints. +// +// Not yet here: For R1CS, it is more about manipulating arithmetic gates to get performance +// This can be done in ACIR! +use dep::std; + +fn main(x: Field, result: [u8; 32]) { + // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field + // The padding is taken care of by the program + let digest = std::hash::sha256([x as u8]); + assert(digest == result); +} diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml b/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_blocks/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml b/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml new file mode 100644 index 00000000000..3fe435ea07f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_blocks/Prover.toml @@ -0,0 +1,4 @@ +# From https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA256.pdf and https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512.pdf +x = [0x61, 0x62, 0x63] # "abc" +result256 = [0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad] +result512 = [0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr b/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr new file mode 100644 index 00000000000..fcdcdb8684f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_blocks/src/main.nr @@ -0,0 +1,22 @@ +// Test Noir implementations of SHA256 and SHA512 on one- and two-block (padded) messages. +use dep::std; + +fn main(x: [u8; 3], result256: [u8; 32], result512: [u8; 64]) +{ + // One-block tests. + let mut digest256 = std::sha256::digest(x); + assert(digest256 == result256); + + let mut digest512 = std::sha512::digest(x); + assert(digest512 == result512); + + // Two-block SHA256 test. Taken from https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA256.pdf + let y: [u8; 56] = [97,98,99,100,98,99,100,101,99,100,101,102,100,101,102,103,101,102,103,104,102,103,104,105,103,104,105,106,104,105,106,107,105,106,107,108,106,107,108,109,107,108,109,110,108,109,110,111,109,110,111,112,110,111,112,113]; // "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + digest256 = std::sha256::digest(y); + assert(digest256 == [36,141,106,97,210,6,56,184,229,192,38,147,12,62,96,57,163,60,228,89,100,255,33,103,246,236,237,212,25,219,6,193]); + + // Two-block SHA256 test. Taken from https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512.pdf + let z: [u8; 112] = [97,98,99,100,101,102,103,104,98,99,100,101,102,103,104,105,99,100,101,102,103,104,105,106,100,101,102,103,104,105,106,107,101,102,103,104,105,106,107,108,102,103,104,105,106,107,108,109,103,104,105,106,107,108,109,110,104,105,106,107,108,109,110,111,105,106,107,108,109,110,111,112,106,107,108,109,110,111,112,113,107,108,109,110,111,112,113,114,108,109,110,111,112,113,114,115,109,110,111,112,113,114,115,116,110,111,112,113,114,115,116,117]; // "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" + digest512 = std::sha512::digest(z); + assert(digest512 == [142,149,155,117,218,227,19,218,140,244,247,40,20,252,20,63,143,119,121,198,235,159,127,161,114,153,174,173,182,136,144,24,80,29,40,158,73,0,247,228,51,27,153,222,196,181,67,58,199,211,41,238,182,221,38,84,94,150,229,91,135,75,233,9]); +} diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml b/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_byte/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml b/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml new file mode 100644 index 00000000000..2f82f14a58d --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_byte/Prover.toml @@ -0,0 +1,5 @@ +# Values obtainable from https://emn178.github.io/online-tools/sha256.html and https://emn178.github.io/online-tools/sha512.html +x = 0xbd +result256 = [0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b] +result512 = [0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d, 0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe, 0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba, 0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3, 0x7c, 0x3f, 0x7b, 0xaf] + diff --git a/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr b/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr new file mode 100644 index 00000000000..a7cc9daebb9 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/sha2_byte/src/main.nr @@ -0,0 +1,11 @@ +// Test Noir implementations of SHA256 and SHA512 on a one-byte message. +use dep::std; + +fn main(x: Field, result256: [u8; 32], result512: [u8; 64]) +{ + let digest256 = std::sha256::digest([x as u8]); + assert(digest256 == result256); + + let digest512 = std::sha512::digest([x as u8]); + assert(digest512 == result512); +} diff --git a/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml b/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data/simple_shield/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml b/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml new file mode 100644 index 00000000000..5a9b2f21b9b --- /dev/null +++ b/crates/nargo_cli/tests/test_data/simple_shield/Prover.toml @@ -0,0 +1,11 @@ +# Random test key +priv_key = "0x000000000000000000000000000000000000000000000000000000616c696365" +note_root = "0x21386402d57460963f45f32577dc3902c38a6f6fab9ec7b1b708a92e48745de7" +index = "0" +note_hash_path = [ + "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", + "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", + "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", +] +to_pubkey_x = "0x0000000000000000000000000000000000000000000000000000000000000001" +to_pubkey_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" diff --git a/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr b/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr new file mode 100644 index 00000000000..18fccd862b5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/simple_shield/src/main.nr @@ -0,0 +1,35 @@ +use dep::std; + +fn main( + // Public key of note + // all notes have the same denomination + priv_key: Field, + + // Merkle membership proof + note_root: pub Field, + index: Field, + note_hash_path: [Field; 3], + + // Receiver public key + to_pubkey_x: Field, + to_pubkey_y: Field, +) -> pub [Field; 2] { + // Compute public key from private key to show ownership + let pubkey = std::scalar_mul::fixed_base(priv_key); + let pubkey_x = pubkey[0]; + let pubkey_y = pubkey[1]; + + // Compute input note commitment + let note_commitment = std::hash::pedersen([pubkey_x, pubkey_y]); + + // Compute input note nullifier + let nullifier = std::hash::pedersen([note_commitment[0], index, priv_key]); + + // Compute output note nullifier + let receiver_note_commitment = std::hash::pedersen([to_pubkey_x, to_pubkey_y]); + + // Check that the input note nullifier is in the root + assert(note_root == std::merkle::compute_merkle_root(note_commitment[0], index, note_hash_path)); + + [nullifier[0], receiver_note_commitment[0]] +} diff --git a/crates/nargo_cli/tests/test_data/strings/Nargo.toml b/crates/nargo_cli/tests/test_data/strings/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/strings/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/strings/Prover.toml b/crates/nargo_cli/tests/test_data/strings/Prover.toml new file mode 100644 index 00000000000..0d1bd92b5de --- /dev/null +++ b/crates/nargo_cli/tests/test_data/strings/Prover.toml @@ -0,0 +1,4 @@ +message = "hello world" +y = 5 +hex_as_string = "0x41" +hex_as_field = "0x41" diff --git a/crates/nargo_cli/tests/test_data/strings/src/main.nr b/crates/nargo_cli/tests/test_data/strings/src/main.nr new file mode 100644 index 00000000000..bee2370201c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/strings/src/main.nr @@ -0,0 +1,56 @@ +use dep::std; + +fn main(message : pub str<11>, y : Field, hex_as_string : str<4>, hex_as_field : Field) { + let mut bad_message = "hello world"; + + assert(message == "hello world"); + bad_message = "helld world"; + let x = 10; + let z = x * 5; + std::println(10); + + std::println(z); // x * 5 in println not yet supported + std::println(x); + + let array = [1, 2, 3, 5, 8]; + assert(y == 5); // Change to y != 5 to see how the later print statements are not called + std::println(array); + + std::println(bad_message); + assert(message != bad_message); + + let hash = std::hash::pedersen([x]); + std::println(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); +} + +#[test] +fn test_prints_strings() { + let message = "hello world!"; + + std::println(message); + std::println("goodbye world"); +} + +#[test] +fn test_prints_array() { + let array = [1, 2, 3, 5, 8]; + + // TODO: Printing structs currently not supported + // let s = Test { a: 1, b: 2, c: [3, 4] }; + // std::println(s); + + std::println(array); + + let hash = std::hash::pedersen(array); + std::println(hash); +} + +struct Test { + a: Field, + b: Field, + c: [Field; 2], +} diff --git a/crates/nargo_cli/tests/test_data/struct/Nargo.toml b/crates/nargo_cli/tests/test_data/struct/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct/Prover.toml b/crates/nargo_cli/tests/test_data/struct/Prover.toml new file mode 100644 index 00000000000..7d59cc81807 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct/Prover.toml @@ -0,0 +1,2 @@ +x = "0" +y = "1" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct/src/main.nr b/crates/nargo_cli/tests/test_data/struct/src/main.nr new file mode 100644 index 00000000000..6d61393920d --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct/src/main.nr @@ -0,0 +1,77 @@ +use dep::std; + +struct Foo { + bar: Field, + array: [Field; 2], +} + +struct Pair { + first: Foo, + second: Field, +} + +impl Foo { + fn default(x: Field,y: Field) -> Self { + Self { bar: 0, array: [x,y] } + } +} + +impl Pair { + fn foo(p: Self) -> Foo { + p.first + } + + fn bar(self) -> Field { + self.foo().bar + } +} + +struct Nested { + a: Field, + b: Field +} +struct MyStruct { + my_bool: bool, + my_int: u32, + my_nest: Nested, +} +fn test_struct_in_tuple(a_bool : bool,x:Field, y:Field) -> (MyStruct, bool) { + let my_struct = MyStruct { + my_bool: a_bool, + my_int: 5, + my_nest: Nested{a:x,b:y}, + }; + (my_struct, a_bool) +} + +struct Animal { + legs: Field, + eyes: u8, +} + +fn get_dog() -> Animal { + let dog = Animal { legs: 4, eyes: 2 }; + dog +} + +fn main(x: Field, y: Field) { + let first = Foo::default(x,y); + let p = Pair { first, second: 1 }; + + assert(p.bar() == x); + assert(p.second == y); + assert(p.first.array[0] != p.first.array[1]); + + // Nested structs + let (struct_from_tuple, a_bool) = test_struct_in_tuple(true,x,y); + assert(struct_from_tuple.my_bool == true); + assert(a_bool == true); + assert(struct_from_tuple.my_int == 5); + assert(struct_from_tuple.my_nest.a == 0); + + // Regression test for issue #670 + let Animal { legs, eyes } = get_dog(); + let six = legs + eyes as Field; + + assert(six == 6); +} diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml new file mode 100644 index 00000000000..70640bba4cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_fields_ordering/Prover.toml @@ -0,0 +1,3 @@ +[y] +foo = "5" +bar = "7" diff --git a/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr b/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr new file mode 100644 index 00000000000..0d6e411addf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_fields_ordering/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +// Note that fields are not in alphabetical order. +// We want to check that this ordering is maintained +struct myStruct { + foo: u32, + bar: Field, +} + +fn main(y : pub myStruct) { + assert(y.foo == 5); + assert(y.bar == 7); +} + diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml b/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_inputs/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml b/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml new file mode 100644 index 00000000000..339da5b1a00 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_inputs/Prover.toml @@ -0,0 +1,19 @@ +x = "5" + +[y] +foo = "5" +bar = "10" +message = "hello" + +[z] +val = "1" +array = [0, 1] +message = "helld" + +[a] +baz = 0 + +[a.bar_struct] +val = "1" +array = [0, 1] +message = "hello" diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr new file mode 100644 index 00000000000..281769cfb07 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo.nr @@ -0,0 +1,6 @@ +mod bar; + +struct fooStruct { + bar_struct: bar::barStruct, + baz: Field, +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr new file mode 100644 index 00000000000..d1963f4a0a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_inputs/src/foo/bar.nr @@ -0,0 +1,7 @@ +global N = 2; + +struct barStruct { + val: Field, + array: [Field; 2], + message: str<5>, +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr b/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr new file mode 100644 index 00000000000..fe77ed6eee6 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/struct_inputs/src/main.nr @@ -0,0 +1,36 @@ +use dep::std; + +mod foo; + +struct myStruct { + foo: u32, + bar: Field, + message: str<5>, +} + +fn main(x : Field, y : pub myStruct, z: pub foo::bar::barStruct, a: pub foo::fooStruct) -> pub Field { + let struct_from_bar = foo::bar::barStruct { val: 1, array: [0, 1], message: "hello" }; + + check_inner_struct(a, z); + + for i in 0 .. struct_from_bar.array.len() { + assert(struct_from_bar.array[i] == z.array[i]); + } + assert(z.val == struct_from_bar.val); + + assert((struct_from_bar.val * x) == x); + + assert(x != y.bar); + + assert(y.message == "hello"); + assert(a.bar_struct.message == struct_from_bar.message); + + a.bar_struct.array[1] +} + +fn check_inner_struct(a: foo::fooStruct, z: foo::bar::barStruct) { + assert(a.bar_struct.val == z.val); + for i in 0.. a.bar_struct.array.len() { + assert(a.bar_struct.array[i] == z.array[i]); + } +} diff --git a/crates/nargo_cli/tests/test_data/submodules/Nargo.toml b/crates/nargo_cli/tests/test_data/submodules/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/submodules/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/submodules/Prover.toml b/crates/nargo_cli/tests/test_data/submodules/Prover.toml new file mode 100644 index 00000000000..b6626a67e19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/submodules/Prover.toml @@ -0,0 +1,2 @@ +x = 1 +y = 0 diff --git a/crates/nargo_cli/tests/test_data/submodules/src/main.nr b/crates/nargo_cli/tests/test_data/submodules/src/main.nr new file mode 100644 index 00000000000..9bfe382663f --- /dev/null +++ b/crates/nargo_cli/tests/test_data/submodules/src/main.nr @@ -0,0 +1,17 @@ +use mysubmodule::my_helper; + +fn main(x: u1, y: u1) { + my_helper(); + mysubmodule::my_bool_or(x, y); +} + +mod mysubmodule { + use dep::std; + + fn my_bool_or(x: u1, y: u1) { + assert(x | y == 1); + } + + fn my_helper() {} +} + diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_be_bytes/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml b/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml new file mode 100644 index 00000000000..07fe857ac7c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_be_bytes/Prover.toml @@ -0,0 +1 @@ +x = "2040124" diff --git a/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr b/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr new file mode 100644 index 00000000000..f5831e8c524 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_be_bytes/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +fn main(x : Field) -> pub [u8; 31] { + // The result of this byte array will be big-endian + let byte_array = x.to_be_bytes(31); + let mut bytes = [0; 31]; + for i in 0..31 { + bytes[i] = byte_array[i]; + } + assert(bytes[30] == 60); + assert(bytes[29] == 33); + assert(bytes[28] == 31); + bytes +} diff --git a/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml b/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml new file mode 100644 index 00000000000..5a02ffe4729 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_bits/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.7.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_bits/src/main.nr b/crates/nargo_cli/tests/test_data/to_bits/src/main.nr new file mode 100644 index 00000000000..feeb5089d13 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_bits/src/main.nr @@ -0,0 +1,24 @@ +use dep::std; + +fn main() { + let field = 1000; + let be_bits = field.to_be_bits(16); + let le_bits = field.to_le_bits(16); + + for i in 0..16 { + let x = be_bits[i]; + let y = le_bits[15-i]; + assert(x == y); + } + + let x = 3; + let be_bits_x = x.to_be_bits(4); + let le_bits_x = x.to_le_bits(4); + + for i in 0..4 { + let be_bit = be_bits_x[i]; + let le_bit = le_bits_x[3-i]; + assert(be_bit == le_bit); + } + +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml b/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_bytes_integration/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml b/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml new file mode 100644 index 00000000000..23f7acea449 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_bytes_integration/Prover.toml @@ -0,0 +1,2 @@ +x = "2040124" +_y = "0x2000000000000000000000000000000000000000000000000000000000000000" diff --git a/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr b/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr new file mode 100644 index 00000000000..36e6d430e2e --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_bytes_integration/src/main.nr @@ -0,0 +1,27 @@ +use dep::std; + +fn main(x : Field, _y: Field) { + // The result of this byte array will be big-endian + let y: Field = 2040124; + let be_byte_array = y.to_be_bytes(31); + // The result of this byte array will be little-endian + let le_byte_array = x.to_le_bytes(31); + + assert(le_byte_array[0] == 60); + assert(le_byte_array[0] == be_byte_array[30]); + assert(le_byte_array[1] == be_byte_array[29]); + assert(le_byte_array[2] == be_byte_array[28]); + + let z = 0 - 1; + let p_bytes = std::field::modulus_le_bytes(); + let z_bytes = z.to_le_bytes(32); + assert(p_bytes[10] == z_bytes[10]); + assert(p_bytes[0] == z_bytes[0] as u8 + 1 as u8); + + let p_bits = std::field::modulus_le_bits(); + let z_bits = z.to_le_bits(std::field::modulus_num_bits() as u32); + assert(z_bits[0] == 0); + assert(p_bits[100] == z_bits[100]); + + _y.to_le_bits(std::field::modulus_num_bits() as u32); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_le_bytes/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml b/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml new file mode 100644 index 00000000000..07fe857ac7c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_le_bytes/Prover.toml @@ -0,0 +1 @@ +x = "2040124" diff --git a/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr b/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr new file mode 100644 index 00000000000..a5476ec13bf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/to_le_bytes/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +fn main(x : Field) -> pub [u8; 4] { + // The result of this byte array will be little-endian + let byte_array = x.to_le_bytes(31); + let mut first_four_bytes = [0; 4]; + for i in 0..4 { + first_four_bytes[i] = byte_array[i]; + } + // Issue #617 fix + // We were incorrectly mapping our output array from bit decomposition functions during acir generation + first_four_bytes[3] = byte_array[31]; + first_four_bytes +} diff --git a/crates/nargo_cli/tests/test_data/tuples/Nargo.toml b/crates/nargo_cli/tests/test_data/tuples/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data/tuples/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data/tuples/Prover.toml b/crates/nargo_cli/tests/test_data/tuples/Prover.toml new file mode 100644 index 00000000000..a0397e89477 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/tuples/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "0" diff --git a/crates/nargo_cli/tests/test_data/tuples/src/main.nr b/crates/nargo_cli/tests/test_data/tuples/src/main.nr new file mode 100644 index 00000000000..b1d310b1412 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/tuples/src/main.nr @@ -0,0 +1,29 @@ +use dep::std; + +fn main(x: Field, y: Field) { + let pair = (x, y); + assert(pair.0 == 1); + assert(pair.1 == 0); + + let (a, b) = if true { (0, 1) } else { (2, 3) }; + assert(a == 0); + assert(b == 1); + + let (u,v) = if x as u32 < 1 { + (x, x + 1) + } else { + (x + 1, x) + }; + assert(u == x+1); + assert(v == x); + + // Test mutating tuples + let mut mutable = ((0, 0), 1, 2, 3); + mutable.0 = pair; + mutable.2 = 7; + assert(mutable.0.0 == 1); + assert(mutable.0.1 == 0); + assert(mutable.1 == 1); + assert(mutable.2 == 7); + assert(mutable.3 == 3); +} diff --git a/crates/nargo_cli/tests/test_data/xor/Nargo.toml b/crates/nargo_cli/tests/test_data/xor/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data/xor/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/xor/Prover.toml b/crates/nargo_cli/tests/test_data/xor/Prover.toml new file mode 100644 index 00000000000..f28f2f8cc48 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/xor/Prover.toml @@ -0,0 +1,2 @@ +x = "5" +y = "10" diff --git a/crates/nargo_cli/tests/test_data/xor/src/main.nr b/crates/nargo_cli/tests/test_data/xor/src/main.nr new file mode 100644 index 00000000000..e893c938fc3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data/xor/src/main.nr @@ -0,0 +1,5 @@ +fn main(x : u32, y : pub u32) { + let m = x ^ y; + + assert(m != 10); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml new file mode 100644 index 00000000000..e5fc42da053 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/Prover.toml @@ -0,0 +1 @@ +input = 1 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr new file mode 100644 index 00000000000..d868ff1ef83 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1327_concrete_in_generic/src/main.nr @@ -0,0 +1,78 @@ +// --- + + fn new_concrete_c_over_d() -> C { + let d_method_interface = get_d_method_interface(); + C::new(d_method_interface) + } + +// --- + + // Map + struct B { + new_concrete_t_c_constructor: fn()->T_C, + } + + impl B { + fn new(new_concrete_t_c_constructor: fn () -> T_C) -> B { + B { new_concrete_t_c_constructor } + } + + fn get_t_c(self) -> T_C { + let new_concrete_t_c_constructor = self.new_concrete_t_c_constructor; + new_concrete_t_c_constructor() + } + } + +// --- + + // Set + struct C { + t_d_interface: MethodInterface, + } + + impl C { + fn new (t_d_interface: MethodInterface) -> Self { + C { t_d_interface } + } + + fn call_method_of_t_d(self, t_d: T_D) -> Field { + let some_method_on_t_d = self.t_d_interface.some_method_on_t_d; + some_method_on_t_d(t_d) + } + } + +// --- + + struct MethodInterface { + some_method_on_t_d: fn(T_D)->Field, + } + +// --- + + // Note + struct D { + d: Field, + } + + fn d_method(input: D) -> Field { + input.d * input.d + } + + fn get_d_method_interface() -> MethodInterface { + MethodInterface { + some_method_on_t_d: d_method, + } + } + +// --- + + fn main(input: Field) -> pub Field { + let b: B> = B::new(new_concrete_c_over_d); + let c: C = b.get_t_c(); // Singleton + let d: D = D { d: input }; // Note + let output = c.call_method_of_t_d(d); + + output + } + +// --- diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml new file mode 100644 index 00000000000..9bff601c75a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/Prover.toml @@ -0,0 +1,3 @@ +x = "3" +y = "4" +z = "429981696" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr new file mode 100644 index 00000000000..4587b4b5947 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/1_mul/src/main.nr @@ -0,0 +1,9 @@ +// Test unsafe integer multiplication with overflow: 12^8 = 429 981 696 +// The circuit should handle properly the growth of the bit size +fn main(mut x: u32, y: u32, z: u32) { + x *= y; + x *= x; //144 + x *= x; //20736 + x *= x; //429 981 696 + assert(x == z); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml new file mode 100644 index 00000000000..ee6f0ef229a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/Prover.toml @@ -0,0 +1,3 @@ +x = "7" +y = "3" +z = "2" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr new file mode 100644 index 00000000000..ff0dee755cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/2_div/src/main.nr @@ -0,0 +1,7 @@ +// Testing integer division: 7/3 = 2 +fn main(mut x: u32, y: u32, z: u32) { + let a = x % y; + assert(x / y == z); + assert(a == x - z*y); + assert((50 as u64) % (9 as u64) == 5); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml new file mode 100644 index 00000000000..5d777c023db --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/Prover.toml @@ -0,0 +1,3 @@ +x = "3" +y = "4" +z = "7" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr new file mode 100644 index 00000000000..2884415b81a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/3_add/src/main.nr @@ -0,0 +1,8 @@ +// Test integer addition: 3 + 4 = 7 +fn main(mut x: u32, y: u32, z: u32) { + x += y; + assert(x == z); + + x *= 8; + assert(x>9); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml new file mode 100644 index 00000000000..1240475dee3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/Prover.toml @@ -0,0 +1,3 @@ +x = "12" +y = "2418266113" +z = "1876701195" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr new file mode 100644 index 00000000000..80fc0177e41 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/4_sub/src/main.nr @@ -0,0 +1,5 @@ +// Test unsafe integer subtraction with underflow: 12 - 2418266113 = 1876701195 modulo 2^32 +fn main(mut x: u32, y: u32, z: u32) { + x -= y; + assert(x == z); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml new file mode 100644 index 00000000000..9a1986329ca --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/Prover.toml @@ -0,0 +1,2 @@ +x = "43046721" +y = "3793632897" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr new file mode 100644 index 00000000000..4fdff16c5c0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/5_over/src/main.nr @@ -0,0 +1,9 @@ +// Test unsafe integer arithmetic +// Test odd bits integer +fn main(mut x: u32, y: u32) { + x = x * x; + assert(y == x); + + let c:u3 = 2; + assert(c > x as u3); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml new file mode 100644 index 00000000000..1c52aef063c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6/Prover.toml @@ -0,0 +1,39 @@ + +# hello as bytes +# used : https://emn178.github.io/online-tools/sha256.html +x = [104, 101, 108, 108, 111] + +result = [ + 0x2c, + 0xf2, + 0x4d, + 0xba, + 0x5f, + 0xb0, + 0xa3, + 0x0e, + 0x26, + 0xe8, + 0x3b, + 0x2a, + 0xc5, + 0xb9, + 0xe2, + 0x9e, + 0x1b, + 0x16, + 0x1e, + 0x5c, + 0x1f, + 0xa7, + 0x42, + 0x5e, + 0x73, + 0x04, + 0x33, + 0x62, + 0x93, + 0x8b, + 0x98, + 0x24, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr new file mode 100644 index 00000000000..8b350de16c1 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/6/src/main.nr @@ -0,0 +1,20 @@ +// Sha256 circuit where the input is 5 bytes +// not five field elements since sha256 operates over +// bytes. +// +// If you do not cast, it will take all the bytes from the field element! + +// Mimc input is an array of field elements +// The function is called mimc_bn254 to emphasize its parameters are chosen for bn254 curve, it should be used only with a proving system using the same curve (e.g Plonk from Aztec) +use dep::std; + +fn main(x: [u8; 5], result: pub [u8; 32]) { + let mut digest = std::hash::sha256(x); + digest[0] = 5 as u8; + digest = std::hash::sha256(x); + assert(digest == result); + + let y = [12,45,78,41]; + let h = std::hash::mimc_bn254(y); + assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml new file mode 100644 index 00000000000..bc3784726d2 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/7/Prover.toml @@ -0,0 +1,38 @@ + +# hello as bytes +# https://toolkitbay.com/tkb/tool/BLAKE2s_256 +x = [104, 101, 108, 108, 111] +result = [ + 0x19, + 0x21, + 0x3b, + 0xac, + 0xc5, + 0x8d, + 0xee, + 0x6d, + 0xbd, + 0xe3, + 0xce, + 0xb9, + 0xa4, + 0x7c, + 0xbb, + 0x33, + 0x0b, + 0x3d, + 0x86, + 0xf8, + 0xcc, + 0xa8, + 0x99, + 0x7e, + 0xb0, + 0x0b, + 0xe4, + 0x56, + 0xf1, + 0x40, + 0xca, + 0x25, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr new file mode 100644 index 00000000000..a6bba978644 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/7/src/main.nr @@ -0,0 +1,10 @@ +// This is the same as Blake2s example. +// +// Pre-alpha dependencies must now be prefixed with the word "dep". +// The line below indicates that we would like to pull in the standard library dependency. +use dep::std; + +fn main(x: [u8; 5], result: [u8; 32]) { + let digest = std::hash::blake2s(x); + assert(digest == result); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml new file mode 100644 index 00000000000..9140e7f7530 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/7_function/Prover.toml @@ -0,0 +1,6 @@ +x = "59" +y = "5" +a = "1" + +arr1=[3320379920, 1938147428, 1942509796, 1795943184, 24853, 0, 0, 0, 0] +arr2=[2912727897, 3590519536, 1687587470, 3896107618, 1092831095, 0, 0, 0, 0] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml new file mode 100644 index 00000000000..e4b4fa41073 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/Prover.toml @@ -0,0 +1,5 @@ +a=[867393132, 2339025230, 220695592, 603045882, 2511105607, 2829384008, 3709060370, 165831136, 1055242736, 1021386699, 504214651, 3662346416, 1830680088, 3882307476, 2426040416, 1802701977, 2663953820, 442532338, 1174156258, 2943965281, 2059435796, 2505576606, 666729718, 3602851575, 2784009587, 3495199106, 1721163808, 3787454896, 315490254, 2761503044, 1222736857, 3669200722, 1595984236, 1113969718, 486680564, 3162990949, 3264361924, 2006416798, 2386200406, 315797713, 2613961431, 2248446788, 1487182619, 1426297375, 1728644913, 1251844809, 1725705662, 1593325285, 2204175104, 2086772782, 3535562424, 171941432, 1454717338, 346500936, 3226869878, 1868934392, 4256057877, 1568150812, 3256749490, 2594788417, 1807197388, 3087252400, 1649310565, 2748668146, 3716823811, 3800017989, 932498547, 2480193018, 333760602, 97095822, 4100736518, 2777593334, 2339587180, 3771453942, 3867894936, 3650805881, 1824779553, 1642205658, 4264337791, 4071013475, 1985859040, 4202403275, 2148375036, 2428793574, 314105769, 4225849095, 3500808841, 2684237013, 848348764, 723628347, 1455798875, 3707853370, 1746878741, 1139375098, 3478206320, 3069213335, 112605790, 2440244355, 1471127557, 4092108893] +b=[3828535814, 348916743, 1199414553, 737248839, 756047272, 1292160882, 4257951637, 291617875, 2966142224, 3814394488, 3878026466, 700807834, 2969962294, 1306796485, 3854250602, 898180304, 3427925197, 604266260, 1075521373, 3406840156, 3396422198, 890966269, 1079444598, 988299705, 3071209797, 3808577073, 2135889094, 1194271359, 4006125262, 566871018, 1292670770, 3445252242, 1897364157, 1587048323, 1240078226, 1678980405, 262815752, 304362997, 1104680912, 2632486420, 2463291218, 2187725560, 1870618568, 2652926282, 3004775258, 1952884887, 561428664, 2467226612, 2683547316, 3452779168, 976229927, 1449738410, 3252038428, 2805606398, 1462658417, 1592183545, 2019693157, 3278803512, 3026040550, 566335611, 703403330, 936890230, 2567824938, 890552997, 4217401169, 258050408, 29872215, 812502992, 3871770414, 4261908330, 3703871063, 2429703152, 1496772760, 3466865862, 2739387475, 547994854, 240736540, 3737530356, 545555875, 1243531855, 826369375, 392660683, 262937837, 3055809624, 1979941188, 3982865811, 2062520214, 1365494964, 3851477194, 4086198942, 4210993448, 3262645997, 766395054, 1585427862, 1824837360, 105660195, 3008983983, 845249279, 2566786179, 205438487] +c=[867393132, 2339025230, 220695592, 603045882, ] +d=[3828535814, 348916743, 1199414553, 737248839, ] +m=[77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr new file mode 100644 index 00000000000..56b02650c27 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/8_integration/src/main.nr @@ -0,0 +1,283 @@ +fn matrix_mul_2(a: [u32; 4], b: [u32; 4]) ->[u32; 4] { + let mut c = [0 as u32; 4]; + for i in 0..2 { + for j in 0..2 { + c[i+2*j] = 0; + for k in 0..2 { + c[i+2*j] += a[i+2*k] * b[k+2*j]; + } + } + } + c +} + +fn matrix_mul_10(a: [u32; 100], b: [u32; 100]) -> [u32; 100] { + let mut c = [0 as u32; 100]; + for i in 0..10 { + for j in 0..10 { + c[i+10*j] = 0 as u32; + + for k in 0..10 { + c[i+10*j] += a[i+10*k] * b[k+10*j]; + } + } + } + c +} + + +fn siggy(x: u32) -> u32 { + x * (10 as u32) +} + + +fn test4 (mut a: [u32; 4]) -> [u32; 4] { + for i in 3..4 { + a[i] = siggy(a[i-2]); + } + a +} + +fn iterate1(mut a0: u32) -> u32{ + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = 1 as u32; + let mut f = 2 as u32; + let mut g = 3 as u32; + let mut h = 4 as u32; + + for _i in 0..2 { + t1 = h; + h = g; + g = f; + a = t1 + t2; + } + a0 += a; + a0 +} + +fn array_noteq(a: [u32; 4], b: [u32; 4]) { + assert(a != b); +} + +fn test3(mut b: [Field; 4]) -> [Field; 4] { + for i in 0..4 { + b[i] = i; + } + b +} + +fn iterate2(mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + + let mut a = hash[0]; + let mut e = hash[4]; + let mut f = hash[5]; + let mut g = hash[6]; + let mut h = hash[7]; + + for _i in 0..2 { + t1 = ch2(e, f); + h = g; + g = f; + a = t1; + } + + hash[0] = hash[0] + a; + hash +} + +fn iterate3( mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = hash[0]; + let mut b = hash[1]; + let mut c = hash[2]; + let mut d = hash[3]; + let mut e = hash[4]; + let mut f = hash[5]; + let mut g = hash[6]; + let mut h = hash[7]; + + for _i in 0..3 { + t1 = ep2(e)+ch2(e, f); + h = g; + g = f; + a = t1+t2; + } + assert(a == 2470696267); + hash[0] = hash[0] + a; + hash[1] = hash[1] + b; + hash[2] = hash[2] + c; + hash[3] = hash[3] + d; + hash[4] = hash[4] + e; + hash[5] = hash[5] + f; + hash[6] = hash[6] + g; + hash[7] = hash[7] + h; + hash +} + + +fn test5() { + let mut sha_hash = [ + 0 as u32, 1, 2, 3, + 4, 5, 6, 7 + ]; + + sha_hash = iterate2(sha_hash); + + assert(sha_hash[0] == 9); +} + + +fn ch2(x: u32, y: u32) -> u32 { + x + y +} + +fn ep2(x: u32) -> u32 { + (2 as u32) * too(x) +} + +fn too(x: u32) -> u32 { + (x + 17 as u32) * (x + 3 as u32) +} + +fn test6(x: [u8; 32]) -> [u32; 8] { + let mut sha_m = [0 as u32; 64]; + + let mut sha_hash = [ + 1 as u32, 2, 3, 4, 5, 6, 7, 8 + ]; + + let mut buffer = [0 as u8; 64]; + for i in 0..32 { + buffer[i] = x[i]; + } + + sha_m = iterate6_1(sha_m, buffer); + sha_hash = iterate6_2(sha_m, sha_hash); + sha_hash +} + +fn iterate6_1(mut sha_m: [u32; 64], next_chunk: [u8; 64]) -> [u32; 64] { + let mut j = 0; + for i in 0..16 { + j = (i ) * 4; + sha_m[i] = ((next_chunk[j] as u32) << 24 as u32) + | ((next_chunk[j + 1] as u32) << 16 as u32) + | ((next_chunk[j + 2] as u32) << 8 as u32) + | (next_chunk[j + 3] as u32); + } + for i in 16..64 { + sha_m[i] = sig1(sha_m[i - 2])+(sha_m[i - 7])+(sig0(sha_m[i - 15]))+(sha_m[i - 16]); + } + sha_m +} + +fn iterate6_2(sha_m: [u32; 64], mut hash: [u32; 8]) -> [u32; 8] { + let mut t1 = 0 as u32; + let mut t2 = 0 as u32; + let mut a = 1 as u32; + let mut b = 2 as u32; + let mut c = 3 as u32; + let mut d = 4 as u32; + let mut e = 5 as u32; + let mut f = 6 as u32; + let mut g = 7 as u32; + let mut h = 8 as u32; + + for i in 0..11 { + t1 = h + ep1(e) + ch(e, f, g) + sha_m[i]; + t2 = epo(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d+t1; + d = c; + c = b; + b = a; + a = t1+t2; + } + + hash[0] = hash[0]+a; + hash[1] = hash[1]+b; + hash[2] = hash[2]+c; + hash[3] = hash[3]+d; + hash[4] = hash[4]+e; + hash[5] = hash[5]+f; + hash[6] = hash[6]+g; + hash[7] = hash[7]+h; + hash +} + +fn rot_right(a: u32, b: u32) -> u32 { + ((a >> b) | (a << (32 as u32 - b))) +} + + +fn ch(x: u32, y: u32, z: u32) -> u32 { + ((x & y) ^ (!x & z)) +} + + +fn maj(x: u32, y: u32, z: u32) -> u32 { + ((x & y) ^ (x & z) ^ (y & z)) +} + + +fn epo(x: u32) -> u32 { + (rot_right(x, 2) ^ rot_right(x, 13) ^ rot_right(x, 22)) +} + +fn ep1(x: u32) -> u32 { + (rot_right(x, 6) ^ rot_right(x, 11) ^ rot_right(x, 25)) +} + +fn sig0(x: u32) -> u32 { + (rot_right(x, 7) ^ rot_right(x, 18) ^ (x >> 3)) +} + +fn sig1(x: u32) -> u32 { + (rot_right(x, 17) ^ rot_right(x, 19) ^ (x >> 10)) +} + + +fn main(a: [u32; 100], b: [u32; 100], c: [u32; 4], mut d: [u32; 4], m: [u8; 32]) { + let e = matrix_mul_10(a,b); + assert(e[6] == 1866842232); + let f = matrix_mul_2(c,d); + assert(f[3] == 2082554100); + + let mut a = [1 as u32, 2, 3, 4]; + a = test4(a); + assert(a[3] == 20); + a = test4(c); + assert(a[3] == c[1] * 10); + + d[0] += c[0]; + d[0] += c[1]; + assert(d[0] == 2739986880); + + let h = iterate1(1); + assert(h == 4); + + let x = d; + array_noteq(x, [d[0], d[1], d[2], 0]); + + let mut h5 = [d[0] as Field, d[1] as Field, d[2] as Field, d[3] as Field]; + let t5 = test3(h5); + assert(t5[3] == 3); + h5 = test3(h5); + assert(h5[3] == 3); + + test5(); + + let mut sha_hash = [ + 0x6a09e667 as u32, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + sha_hash = iterate3(sha_hash); + + let h6 = test6(m); + assert(h6[0]== 523008072); //31.. 3800709683 +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml new file mode 100644 index 00000000000..63382a9f640 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/Prover.toml @@ -0,0 +1,3 @@ +x = "3" +y = "4" +z = "5" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr new file mode 100644 index 00000000000..391aa27049d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/arithmetic_binary_operations/src/main.nr @@ -0,0 +1,12 @@ +// Tests a very simple program. +// +// The features being tested are: +// Binary addition, multiplication, division +// x = 3, y = 4, z = 5 +fn main(x : Field, y : Field, z : Field) -> pub Field { + let a = x + x; // 3 + 3 = 6 + let b = a - y; // 6 - 4 = 2 + let c = b * z; // 2 * 5 = 10 + let d = c / a; // 10 / 6 (This uses field inversion, so we test it by multiplying by `a`) + d * a +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml new file mode 100644 index 00000000000..3c3295e6848 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/Prover.toml @@ -0,0 +1,2 @@ +len3 = [1, 2, 3] +len4 = [1, 2, 3, 4] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr new file mode 100644 index 00000000000..9099cfa2144 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_len/src/main.nr @@ -0,0 +1,23 @@ +use dep::std; + +fn len_plus_1(array: [T]) -> Field { + array.len() + 1 +} + +fn add_lens(a: [T], b: [Field]) -> Field { + a.len() + b.len() +} + +fn nested_call(b: [Field]) -> Field { + len_plus_1(b) +} + +fn main(len3: [u8; 3], len4: [Field; 4]) { + assert(len_plus_1(len3) == 4); + assert(len_plus_1(len4) == 5); + assert(add_lens(len3, len4) == 7); + assert(nested_call(len4) == 5); + + // std::array::len returns a comptime value + assert(len4[len3.len()] == 4); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml new file mode 100644 index 00000000000..3aad77f6d4d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/Prover.toml @@ -0,0 +1,2 @@ +a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr new file mode 100644 index 00000000000..be734dea368 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_neq/src/main.nr @@ -0,0 +1,4 @@ +// Simple example of checking where two arrays are different +fn main(a: [Field; 32], b: [Field; 32]) { + assert(a != b); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml new file mode 100644 index 00000000000..e0d79da4da6 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/Prover.toml @@ -0,0 +1 @@ +xs = [2, 1, 3] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr new file mode 100644 index 00000000000..17df7b23551 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/array_sort/src/main.nr @@ -0,0 +1,6 @@ +fn main(xs : [u8; 3]) { + let sorted = xs.sort(); + assert(sorted[0] == 1); + assert(sorted[1] == 2); + assert(sorted[2] == 3); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr new file mode 100644 index 00000000000..00e94414c0b --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert/src/main.nr @@ -0,0 +1,3 @@ +fn main(x: Field) { + assert(x == 1); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml new file mode 100644 index 00000000000..5d1dc99124f --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/Prover.toml @@ -0,0 +1,2 @@ +x = "3" +y = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr new file mode 100644 index 00000000000..7dab317d924 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assert_statement/src/main.nr @@ -0,0 +1,6 @@ +// Tests a very simple program. +// +// The features being tested is assertion +fn main(x : Field, y : Field) { + assert(x == y); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml new file mode 100644 index 00000000000..8c12ebba6cf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "2" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr new file mode 100644 index 00000000000..b0626d63c8e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/assign_ex/src/main.nr @@ -0,0 +1,6 @@ +fn main(x: Field, y: Field) { + let mut z = x + y; + assert(z == 3); + z = x * y; + assert(z == 2); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml new file mode 100644 index 00000000000..40ce2b0bc27 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/Prover.toml @@ -0,0 +1,2 @@ +x = "0x00" +y = "0x10" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr new file mode 100644 index 00000000000..f4805960a33 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_and/src/main.nr @@ -0,0 +1,18 @@ +// You can only do bit operations with integers. +// (Kobi/Daira/Circom/#37) https://github.com/iden3/circom/issues/37 +fn main(x : Field, y : Field) { + let x_as_u8 = x as u8; + let y_as_u8 = y as u8; + + assert((x_as_u8 & y_as_u8) == x_as_u8); + + //bitwise and with 1 bit: + let flag = (x == 0) & (y == 16); + assert(flag); + + //bitwise and with odd bits: + let x_as_u11 = x as u11; + let y_as_u11 = y as u11; + assert((x_as_u11 & y_as_u11) == x_as_u11); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml new file mode 100644 index 00000000000..cfd62c406cb --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/Prover.toml @@ -0,0 +1 @@ +x = 64 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr new file mode 100644 index 00000000000..c1c6890febb --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bit_shifts_comptime/src/main.nr @@ -0,0 +1,13 @@ +fn main(x: u64) { + let two: u64 = 2; + let three: u64 = 3; + + // comptime shifts on comptime values + assert(two << 2 == 8); + assert((two << 3) / 8 == two); + assert((three >> 1) == 1); + + // comptime shifts on runtime values + assert(x << 1 == 128); + assert(x >> 2 == 16); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml new file mode 100644 index 00000000000..325164ff043 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/Prover.toml @@ -0,0 +1,2 @@ + +x = 0xbd diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr new file mode 100644 index 00000000000..24b98a540b0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/blackbox_func_simple_call/src/main.nr @@ -0,0 +1,9 @@ +// The feature being tested is a call +// to a black box function. +// One with array input, one with a numeric input. +use dep::std; + +fn main(x: Field) { + let _p1 = std::scalar_mul::fixed_base(x); + let _p2 = std::hash::pedersen([x]); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr new file mode 100644 index 00000000000..d6b4d7a9fad --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_not/src/main.nr @@ -0,0 +1,5 @@ +use dep::std; +fn main(x: u1) { + assert(!x == 0); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml new file mode 100644 index 00000000000..a0397e89477 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr new file mode 100644 index 00000000000..4a74027e4aa --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/bool_or/src/main.nr @@ -0,0 +1,7 @@ +use dep::std; +fn main(x: u1, y: u1) { + assert(x | y == 1); + + assert(x | y | x == 1); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml new file mode 100644 index 00000000000..6371ea2b28b --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/Prover.toml @@ -0,0 +1 @@ +x = ["1", "2", "3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr new file mode 100644 index 00000000000..a2b64100918 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_arrays/src/main.nr @@ -0,0 +1,29 @@ +// Tests a very simple program. +// +// The features being tested are array reads and writes + +fn main(x: [Field; 3]) { + read_array(x); + read_write_array(x); +} + +unconstrained fn read_array(x: [Field; 3]) { + assert(x[0] == 1); + let y = [1, 5, 27]; + + assert(y[x[0]] == 5); +} + +unconstrained fn read_write_array(x: [Field; 3]) { + let mut y = x; + + y[0] = 5; + + assert(y[0] == 5); + assert(y[1] == 2); + assert(y[2] == 3); + + assert(x[0] == 1); + assert(x[1] == 2); + assert(x[2] == 3); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr new file mode 100644 index 00000000000..320369c7b67 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert/src/main.nr @@ -0,0 +1,11 @@ +// Tests a very simple program. +// +// The features being tested is using assert on brillig +fn main(x: Field) { + assert(1 == conditional(x as bool)); +} + +unconstrained fn conditional(x : bool) -> Field { + assert(x); + 1 +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml new file mode 100644 index 00000000000..11497a473bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/Prover.toml @@ -0,0 +1 @@ +x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr new file mode 100644 index 00000000000..320369c7b67 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_assert_fail/src/main.nr @@ -0,0 +1,11 @@ +// Tests a very simple program. +// +// The features being tested is using assert on brillig +fn main(x: Field) { + assert(1 == conditional(x as bool)); +} + +unconstrained fn conditional(x : bool) -> Field { + assert(x); + 1 +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml new file mode 100644 index 00000000000..11497a473bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/Prover.toml @@ -0,0 +1 @@ +x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr new file mode 100644 index 00000000000..795fc02c35f --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls/src/main.nr @@ -0,0 +1,45 @@ +// Tests a very simple program. +// +// The features being tested is brillig calls +fn main(x: u32) { + assert(entry_point(x) == 2); + swap_entry_point(x, x + 1); + assert(deep_entry_point(x) == 4); +} + +unconstrained fn inner(x : u32) -> u32 { + x + 1 +} + +unconstrained fn entry_point(x : u32) -> u32 { + inner(x + 1) +} + +unconstrained fn swap(x: u32, y:u32) -> (u32, u32) { + (y, x) +} + +unconstrained fn swap_entry_point(x: u32, y: u32) { + let swapped = swap(x, y); + assert(swapped.0 == y); + assert(swapped.1 == x); + let swapped_twice = swap(swapped.0, swapped.1); + assert(swapped_twice.0 == x); + assert(swapped_twice.1 == y); +} + +unconstrained fn level_3(x : u32) -> u32 { + x + 1 +} + +unconstrained fn level_2(x : u32) -> u32 { + level_3(x + 1) +} + +unconstrained fn level_1(x : u32) -> u32 { + level_2(x + 1) +} + +unconstrained fn deep_entry_point(x : u32) -> u32 { + level_1(x + 1) +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml new file mode 100644 index 00000000000..99580ca45bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/Prover.toml @@ -0,0 +1 @@ +x = ["1","2","3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr new file mode 100644 index 00000000000..ebe37a9b006 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_array/src/main.nr @@ -0,0 +1,16 @@ +// Tests a very simple program. +// +// The features being tested is brillig calls passing arrays around +fn main(x: [u32; 3]) { + assert(entry_point(x) == 9); +} + +unconstrained fn inner(x : [u32; 3]) -> [u32; 3] { + [x[0] + 1, x[1] + 1, x[2] + 1] +} + +unconstrained fn entry_point(x : [u32; 3]) -> u32 { + let y = inner(x); + y[0] + y[1] + y[2] +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml new file mode 100644 index 00000000000..99580ca45bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/Prover.toml @@ -0,0 +1 @@ +x = ["1","2","3"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr new file mode 100644 index 00000000000..4d4eba01f05 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_calls_conditionals/src/main.nr @@ -0,0 +1,36 @@ +// Tests a very simple program. +// +// The features being tested is brillig calls with conditionals +fn main(x: [u32; 3]) { + assert(entry_point(x[0]) == 7); + assert(entry_point(x[1]) == 8); + assert(entry_point(x[2]) == 9); + assert(entry_point(42) == 0); +} + +unconstrained fn inner_1() -> u32 { + 7 +} + +unconstrained fn inner_2() -> u32 { + 8 +} + +unconstrained fn inner_3() -> u32 { + 9 +} + +unconstrained fn entry_point(x: u32) -> u32 { + let mut result: u32 = 0; + + if x == 1 { + result = inner_1(); + } else if x == 2 { + result = inner_2(); + } else if x == 3 { + result = inner_3(); + } + + result +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr new file mode 100644 index 00000000000..e258a8f2640 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_cast/src/main.nr @@ -0,0 +1,50 @@ +// Tests a very simple Brillig function. +// +// The features being tested are cast operations on brillig +fn main() { + bool_casts(); + field_casts(); + uint_casts(); + int_casts(); + mixed_casts(); +} + +unconstrained fn bool_casts() { + assert(false == 0 as bool); + assert(true == 1 as bool); + assert(true == 3 as bool); +} + +unconstrained fn field_casts() { + assert(5 as u8 as Field == 5); + assert(16 as u4 as Field == 0); +} + +unconstrained fn uint_casts() { + let x: u32 = 100; + assert(x as u2 == 0); + assert(x as u4 == 4); + assert(x as u6 == 36); + assert(x as u8 == 100); + assert(x as u64 == 100); + assert(x as u126 == 100); +} + +unconstrained fn int_casts() { + let x: i32 = 100; + assert(x as i2 == 0); + assert(x as i4 == 4); + assert(x as i6 == -28 as i6); + assert(x as i8 == 100); + assert(x as i8 == 100); + assert(x as i8 == 100); +} + + +unconstrained fn mixed_casts() { + assert(100 as u32 as i32 as u32 == 100); + assert(13 as u4 as i2 as u32 == 1); + assert(15 as u4 as i2 as u32 == 3); + assert(1 as u8 as bool == true); + assert(true as i8 == 1); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr new file mode 100644 index 00000000000..4ddd351ad04 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_conditional/src/main.nr @@ -0,0 +1,14 @@ +// Tests a very simple program. +// +// The features being tested is basic conditonal on brillig +fn main(x: Field) { + assert(4 == conditional(x as bool)); +} + +unconstrained fn conditional(x : bool) -> Field { + if x { + 4 + }else { + 5 + } +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr new file mode 100644 index 00000000000..e7b0afccc3e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_field_binary_operations/src/main.nr @@ -0,0 +1,25 @@ +// Tests arithmetic operations on fields +fn main() { + let x = 4; + let y = 2; + assert((x + y) == add(x, y)); + assert((x - y) == sub(x, y)); + assert((x * y) == mul(x, y)); + assert((x / y) == div(x, y)); +} + +unconstrained fn add(x : Field, y : Field) -> Field { + x + y +} + +unconstrained fn sub(x : Field, y : Field) -> Field { + x - y +} + +unconstrained fn mul(x : Field, y : Field) -> Field { + x * y +} + +unconstrained fn div(x : Field, y : Field) -> Field { + x / y +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml new file mode 100644 index 00000000000..55cccb955a9 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/Prover.toml @@ -0,0 +1,2 @@ +x = "3" + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr new file mode 100644 index 00000000000..5ad4e913e92 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/src/main.nr @@ -0,0 +1,35 @@ +use dep::std; + +struct myStruct { + foo: Field, + foo_arr: [Field; 2], +} + +// Tests a very simple program. +// +// The features being tested is the identity function in Brillig +fn main(x : Field) { + assert(x == identity(x)); + // TODO: add support for array comparison + let arr = identity_array([x, x]); + assert(x == arr[0]); + assert(x == arr[1]); + + let s = myStruct { foo: x, foo_arr: [x, x] }; + let identity_struct = identity_struct(s); + assert(x == identity_struct.foo); + assert(x == identity_struct.foo_arr[0]); + assert(x == identity_struct.foo_arr[1]); +} + +unconstrained fn identity(x : Field) -> Field { + x +} + +unconstrained fn identity_array(arr : [Field; 2]) -> [Field; 2] { + arr +} + +unconstrained fn identity_struct(s : myStruct) -> myStruct { + s +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json new file mode 100644 index 00000000000..09089ad1fa0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_identity_function/target/c.json @@ -0,0 +1 @@ +{"backend":"acvm-backend-barretenberg","abi":{"parameters":[{"name":"x","type":{"kind":"field"},"visibility":"private"}],"param_witnesses":{"x":[1]},"return_type":null,"return_witnesses":[]},"bytecode":[213,148,77,78,195,48,16,133,67,211,150,180,92,198,142,237,198,222,241,183,97,193,170,39,32,197,45,150,210,164,10,86,246,190,129,99,195,142,29,80,4,167,224,26,220,6,132,40,82,215,30,36,227,149,87,79,51,223,188,247,238,142,30,204,203,105,171,170,74,173,238,123,179,157,171,122,85,73,111,123,247,113,140,194,30,62,8,150,64,223,19,173,55,149,28,88,103,30,47,155,206,37,201,211,92,55,155,119,243,118,210,42,125,179,150,90,45,188,245,16,227,126,105,16,52,163,84,22,185,196,4,95,161,92,148,156,33,202,202,25,199,28,51,206,174,115,78,136,228,148,23,162,20,5,18,152,18,137,151,76,144,229,143,200,0,64,35,13,199,102,94,207,85,43,23,90,117,210,108,47,234,78,182,218,165,195,61,100,189,15,39,150,14,33,108,50,10,71,6,191,217,200,2,92,97,207,162,177,160,250,77,187,139,46,237,209,13,228,118,245,51,222,125,14,173,55,207,103,77,125,171,93,210,3,108,252,15,58,109,12,160,145,253,77,167,101,19,240,228,103,19,8,239,77,35,236,180,108,26,101,167,1,160,178,246,19],"proving_key":[0,0,0,2,0,0,0,16,0,0,0,0,0,0,0,69,0,0,0,3,113,95,49,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,31,128,225,166,19,57,49,226,241,25,0,192,25,68,134,248,118,168,148,147,77,202,252,253,191,232,34,128,93,159,247,134,11,76,135,16,63,22,220,90,11,47,238,136,127,221,224,11,208,111,8,212,89,138,92,85,171,215,86,38,230,32,230,222,31,153,33,17,244,110,182,83,120,134,226,119,20,11,135,137,123,161,100,228,245,184,170,239,230,246,84,3,136,168,13,61,27,248,206,237,196,3,251,75,41,174,251,100,247,192,65,80,218,6,170,55,30,58,230,35,74,112,242,201,88,196,129,110,17,96,38,159,136,213,223,121,213,54,117,35,89,161,79,59,216,138,170,79,239,53,218,90,140,178,58,7,148,89,158,24,43,67,130,113,165,31,169,220,202,57,163,114,96,117,84,13,60,219,59,7,119,225,98,253,63,194,166,143,84,101,143,134,15,107,124,191,58,95,120,167,216,11,221,18,255,243,153,72,60,90,224,46,241,29,149,154,104,198,48,50,19,159,157,25,14,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,144,128,125,98,191,216,133,187,137,8,118,247,57,246,102,212,73,23,253,117,193,54,186,171,54,248,235,240,215,4,156,49,180,120,239,192,233,35,165,244,208,17,119,128,34,31,244,47,144,247,43,166,117,163,170,84,40,169,217,25,223,25,33,0,89,124,202,117,192,42,8,98,248,245,196,205,7,205,126,137,38,160,141,73,40,173,248,29,61,208,243,235,197,146,104,8,7,49,18,75,104,15,210,146,192,147,225,142,246,213,123,253,155,253,70,96,15,212,139,253,101,109,4,198,200,47,45,30,176,59,133,237,34,42,238,215,108,147,18,184,220,44,36,115,103,1,65,212,85,89,93,223,108,224,100,186,29,94,10,18,189,125,142,90,224,86,35,53,198,92,141,159,138,171,242,195,36,196,248,136,30,157,2,192,61,89,112,171,154,112,121,16,135,33,28,47,208,104,180,1,115,251,41,227,30,186,191,200,109,36,67,78,195,194,77,156,109,244,196,96,207,2,140,21,0,0,0,7,113,95,49,95,102,102,116,0,0,0,68,33,185,35,19,211,157,207,139,200,46,221,191,180,55,39,213,48,163,198,132,183,226,65,68,111,162,151,156,210,60,242,13,148,91,186,43,24,55,242,122,66,221,229,167,113,20,234,13,143,145,118,167,100,213,71,238,124,57,101,183,220,182,200,67,120,63,57,25,70,66,110,174,121,229,156,239,77,134,12,201,125,213,220,253,186,105,169,13,98,30,193,173,124,67,58,33,53,115,110,187,211,17,50,156,69,228,249,17,68,21,237,84,139,99,114,224,156,55,94,27,79,187,184,165,141,60,53,42,86,126,164,210,4,9,76,201,0,65,178,27,107,212,0,26,53,227,74,231,54,96,211,189,197,121,183,105,97,124,105,11,176,0,98,20,159,190,180,71,33,186,83,132,202,105,144,22,49,166,5,77,178,185,111,48,200,157,111,93,250,235,165,19,126,89,119,45,5,136,54,245,228,23,192,144,107,190,48,75,79,33,98,25,34,253,246,31,37,177,64,11,227,95,220,15,240,192,118,220,113,6,8,240,84,115,105,170,23,175,16,225,100,62,50,233,71,41,46,128,5,211,142,82,1,222,250,63,81,249,197,143,108,138,117,169,78,95,135,155,0,65,66,53,191,243,148,232,57,153,192,159,213,189,87,93,89,121,82,19,198,28,172,188,160,31,140,137,31,130,117,233,8,20,115,214,158,22,53,68,18,112,202,179,120,62,74,188,133,123,215,85,180,248,189,188,200,46,239,162,59,142,45,158,128,83,231,100,120,28,204,98,79,188,151,231,20,37,147,136,97,188,61,17,91,4,18,179,71,17,99,84,228,123,163,9,155,135,21,246,38,98,86,225,240,22,243,42,134,6,140,81,67,118,31,63,224,200,32,138,139,111,243,208,47,46,106,197,218,2,198,165,189,38,80,57,97,164,255,22,144,169,45,210,70,201,253,22,50,19,98,42,9,255,76,28,187,215,10,61,43,221,32,133,236,130,161,57,8,111,57,100,71,2,205,105,51,31,30,8,71,137,7,213,86,39,99,44,161,208,185,167,85,60,165,17,24,230,255,39,200,70,58,56,129,143,120,178,153,43,115,77,235,141,164,123,121,7,142,182,146,137,229,85,213,15,209,175,216,149,25,101,163,85,145,194,106,31,125,40,192,15,171,58,100,27,58,246,109,72,77,237,152,140,229,245,159,171,33,10,106,10,130,121,165,31,239,39,252,211,103,1,94,151,149,14,59,242,5,129,116,218,122,232,164,34,128,49,59,94,24,66,241,147,202,70,29,97,187,111,172,57,91,53,210,63,94,53,104,164,32,46,180,78,172,149,112,88,88,21,254,219,63,192,242,196,129,56,232,178,230,212,64,57,25,67,50,45,21,33,227,254,214,108,119,60,103,253,163,178,37,239,6,134,93,231,22,143,0,229,16,240,215,176,156,39,27,163,53,224,193,11,93,226,151,235,173,250,204,41,5,113,57,201,77,171,24,22,141,79,202,226,164,172,13,157,9,38,180,204,221,222,80,60,233,93,210,15,64,87,53,123,55,114,75,95,56,255,215,108,242,34,148,253,209,250,124,26,217,254,249,218,64,59,158,6,118,119,162,21,51,12,98,172,179,124,12,158,122,2,49,9,181,173,243,235,60,124,199,150,185,179,105,23,93,190,134,21,142,226,57,155,132,1,94,158,219,148,121,241,17,180,147,148,236,212,178,145,255,135,9,179,245,216,182,129,115,194,162,37,165,205,139,74,177,207,250,245,7,38,91,182,128,117,253,18,33,158,72,145,185,238,190,228,6,61,211,37,196,220,223,76,206,81,47,33,165,105,42,199,234,38,13,27,149,128,249,110,63,144,224,254,45,177,66,166,74,73,3,96,100,54,9,56,107,46,139,119,226,188,195,17,28,81,168,98,3,14,65,226,102,250,102,200,39,88,230,52,109,77,225,86,1,238,194,85,131,22,25,37,210,226,95,81,148,198,28,219,139,57,201,123,126,224,36,200,192,223,113,141,224,163,195,81,122,132,72,16,53,54,240,143,35,54,79,193,152,95,166,68,144,76,122,241,212,20,254,60,244,10,58,209,140,115,196,206,69,91,227,79,184,118,219,0,14,223,0,136,32,171,196,244,135,60,232,86,62,132,27,152,13,80,229,50,201,16,73,126,220,3,6,88,130,172,66,32,8,51,143,222,45,124,229,133,186,66,99,131,239,163,113,147,193,32,205,202,122,206,221,241,63,253,184,56,57,77,150,4,201,85,138,29,9,236,36,8,132,165,159,128,149,96,208,107,32,11,128,249,74,188,105,142,87,253,224,15,135,104,199,210,120,101,47,225,151,0,242,186,118,152,66,188,111,95,249,158,131,30,79,193,139,226,87,187,49,245,27,5,184,197,86,213,60,125,117,52,186,140,4,43,232,51,230,189,208,198,47,114,191,210,112,149,82,28,111,254,120,6,88,25,140,206,30,5,137,127,29,139,32,104,57,93,203,249,2,225,74,108,239,64,250,96,146,7,227,18,216,6,182,100,149,78,39,55,191,34,47,230,72,165,139,184,63,24,28,157,182,221,243,43,231,144,31,56,188,46,229,127,226,61,217,133,37,19,50,1,158,16,245,128,229,178,26,76,29,74,1,80,128,161,251,19,169,18,245,36,175,222,149,95,93,77,53,47,35,10,2,153,130,136,52,112,208,173,1,209,12,123,197,128,60,186,43,127,119,55,211,201,147,46,125,7,241,201,99,155,141,9,118,98,128,26,4,10,130,215,8,106,6,92,192,39,250,238,53,234,188,33,189,192,18,81,244,51,0,209,57,23,231,40,6,173,61,33,129,246,35,158,167,58,21,168,137,75,168,90,217,205,154,229,185,169,144,124,178,105,138,154,225,71,70,59,247,8,216,140,23,216,14,168,2,131,224,217,21,249,78,174,10,112,117,5,81,128,150,11,160,228,136,230,223,81,185,17,198,54,80,131,102,94,76,73,234,95,141,47,100,100,117,20,0,204,18,144,68,144,76,247,150,225,78,60,138,3,16,58,104,255,254,223,186,47,237,231,247,174,184,58,125,21,100,65,18,228,2,48,137,6,170,197,255,28,169,15,62,234,240,62,89,122,99,83,19,44,209,227,243,254,183,0,104,189,27,65,55,77,26,194,182,36,238,116,250,93,152,159,69,138,55,74,186,84,150,26,128,214,171,122,146,185,106,139,47,85,75,103,51,142,140,175,117,114,160,36,189,79,69,161,119,5,15,50,192,139,4,135,23,176,212,36,228,248,115,193,227,49,198,108,180,67,234,247,30,19,58,107,254,171,222,152,254,204,236,40,1,1,125,119,245,5,171,30,215,214,191,237,38,216,63,208,46,123,187,63,189,204,226,65,112,91,235,21,21,62,220,3,129,79,176,224,193,38,110,52,28,206,148,106,66,159,82,210,224,166,4,250,219,16,138,115,127,142,251,234,157,0,230,60,162,170,25,153,71,247,35,225,167,153,99,216,15,13,195,39,76,194,10,80,125,90,170,87,94,25,179,84,64,64,191,30,91,210,207,206,18,101,155,3,31,180,58,221,212,163,232,79,247,30,116,107,171,127,10,133,81,70,232,112,69,222,91,89,168,57,58,71,177,118,200,156,239,197,55,147,209,41,119,24,42,179,239,43,86,191,248,143,190,195,117,118,204,132,123,49,15,146,74,93,77,184,32,204,12,34,37,128,137,191,199,180,15,236,217,65,151,206,73,3,101,63,134,247,216,61,140,72,217,193,23,17,162,9,110,230,128,247,28,191,248,248,27,21,178,214,209,180,75,21,179,27,154,235,171,63,160,9,153,45,109,102,6,4,224,153,137,63,7,109,168,107,229,219,79,234,2,204,154,252,134,28,108,64,40,19,103,24,214,146,128,54,14,225,134,217,136,67,112,224,72,57,223,210,120,154,186,94,250,111,227,249,119,150,35,162,163,74,6,125,6,250,70,58,120,158,66,45,41,100,236,147,64,94,158,77,45,43,155,220,241,156,156,223,191,24,43,26,65,231,240,71,5,99,73,74,117,208,182,35,136,139,144,130,134,15,32,76,52,138,142,125,53,16,175,21,60,123,230,133,108,44,127,189,50,130,140,29,112,109,84,123,222,224,68,181,101,246,63,225,125,76,36,97,201,232,210,149,13,201,36,149,215,205,205,48,94,100,11,54,225,175,228,40,42,76,96,254,203,42,123,172,162,135,218,204,109,197,214,133,33,18,122,186,142,142,18,228,101,21,197,85,65,160,222,2,120,194,94,207,114,100,96,237,76,209,76,191,203,187,229,12,118,25,78,8,252,61,198,55,180,204,74,37,67,0,71,235,73,66,230,228,89,67,53,132,252,198,213,220,173,43,27,150,105,225,178,248,176,36,226,254,183,63,52,11,136,147,153,15,112,164,224,182,2,107,157,238,116,199,30,97,104,64,169,91,228,122,150,44,110,56,189,159,145,205,149,72,40,242,55,43,27,222,227,144,152,16,169,76,192,9,46,11,218,93,111,56,134,124,60,66,139,210,170,180,173,109,31,69,127,117,39,162,231,88,26,238,12,149,151,220,90,242,254,249,207,148,34,189,210,162,108,26,12,108,103,207,22,125,157,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,255,255,239,84,156,194,5,125,103,34,222,192,99,245,164,138,210,107,105,78,234,75,51,142,157,23,206,68,103,31,42,0,0,0,3,113,95,50,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,25,30,64,95,235,13,171,42,228,62,124,180,116,227,178,31,242,75,250,39,219,137,233,73,73,35,134,47,44,128,193,13,16,95,107,169,29,208,35,15,148,61,97,255,209,43,101,21,149,96,197,119,184,208,113,228,116,30,51,136,214,50,41,21,111,117,214,118,104,98,247,124,0,96,41,18,65,95,219,179,255,65,91,75,226,130,203,107,91,164,76,236,179,14,239,9,212,217,146,93,102,184,79,7,90,168,67,179,167,43,177,190,157,93,83,187,54,124,24,158,72,47,130,153,101,68,40,10,7,239,61,66,191,100,68,213,61,129,232,151,28,172,32,30,118,203,35,145,171,127,81,231,71,143,247,102,59,94,184,22,90,88,151,124,55,133,103,230,173,36,191,209,204,96,52,192,183,138,10,245,80,178,220,122,201,243,53,92,126,243,160,31,232,34,162,159,159,221,237,151,85,165,246,161,139,141,232,98,43,182,194,210,58,27,39,142,63,207,123,223,130,228,5,5,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,232,225,191,144,168,231,54,25,173,49,61,197,211,4,129,8,107,12,135,89,219,187,102,110,224,124,171,177,70,206,162,34,241,160,148,70,118,37,190,52,253,50,88,122,118,188,206,18,200,247,187,9,254,116,222,211,180,129,254,88,156,27,59,27,146,138,41,121,43,147,234,198,144,16,144,103,7,137,88,116,93,22,38,54,212,194,132,76,206,251,228,244,190,63,117,38,45,38,109,146,45,61,146,60,55,200,117,198,160,188,130,105,191,250,45,198,127,201,55,26,225,112,175,71,13,10,60,38,250,16,194,173,212,144,157,110,83,239,208,225,43,60,19,10,231,140,93,240,10,198,254,208,225,16,58,122,55,240,171,25,167,167,104,115,92,112,122,93,227,75,250,167,123,135,255,103,165,205,118,140,101,147,115,61,96,172,251,132,244,90,195,16,25,221,93,80,244,23,244,171,59,203,194,215,188,90,75,197,49,162,190,174,123,42,41,42,234,208,181,1,240,105,94,43,0,0,0,7,113,95,50,95,102,102,116,0,0,0,68,92,65,127,181,198,89,181,35,146,85,92,92,53,240,231,147,60,119,25,190,180,125,35,91,48,246,224,163,214,202,162,27,145,123,194,11,154,75,4,55,101,141,212,229,235,31,99,254,141,106,93,178,27,19,147,195,239,206,181,44,222,117,225,93,35,85,255,121,208,180,244,170,171,48,218,21,86,184,110,224,32,6,150,209,32,18,211,210,120,134,44,224,67,34,3,44,32,72,65,9,100,147,157,236,222,125,150,200,185,20,145,243,175,110,131,244,23,106,90,184,213,185,197,92,70,248,9,53,178,202,57,54,172,14,138,189,169,125,191,11,80,145,49,225,251,116,238,187,210,202,150,101,104,68,40,121,112,206,13,45,166,94,137,5,44,178,46,14,61,142,147,80,14,128,213,114,237,244,126,154,77,154,143,175,115,183,7,78,26,89,251,74,164,232,229,35,232,195,27,160,222,11,84,26,176,130,36,147,121,10,111,178,32,40,201,175,192,243,12,51,64,42,118,57,175,80,118,46,64,122,251,212,219,126,141,2,158,189,67,120,154,209,54,44,13,168,43,16,225,71,252,144,11,222,169,41,127,214,158,135,92,166,221,131,172,228,234,146,92,215,70,65,129,231,61,96,32,162,31,226,42,136,59,176,227,215,223,7,144,245,233,170,191,98,210,46,173,197,43,245,43,191,201,68,213,193,196,109,85,224,253,237,251,1,37,26,123,33,79,22,241,170,128,183,54,228,37,56,152,109,205,113,209,113,83,182,56,15,142,34,170,179,108,32,85,55,135,217,26,52,123,36,34,108,70,219,222,170,97,66,10,161,119,156,119,192,21,204,104,241,22,159,218,255,80,201,230,131,147,208,146,195,137,68,157,167,77,201,199,231,250,34,33,189,96,53,33,14,70,0,46,36,97,149,178,211,238,148,86,178,219,2,254,6,11,32,117,240,127,47,182,61,72,14,50,96,70,155,153,44,218,11,31,71,107,9,174,3,174,177,108,50,116,35,33,147,84,89,38,215,106,107,7,204,24,115,212,116,61,240,171,42,28,43,62,171,94,199,45,68,147,225,29,245,51,197,4,112,1,22,252,163,161,37,253,202,199,236,172,192,202,246,14,123,193,3,77,145,5,53,156,71,44,168,6,124,230,181,94,24,208,36,35,64,186,237,177,101,122,119,108,15,158,8,105,183,3,113,126,187,222,146,159,123,15,122,196,125,62,137,141,245,90,21,210,1,22,186,35,58,178,1,85,8,238,106,163,194,179,201,27,213,19,9,126,10,156,140,139,44,206,59,132,181,226,33,38,36,166,251,58,129,46,186,189,153,122,218,173,233,122,28,95,152,130,13,161,18,9,174,79,144,77,148,134,246,88,19,166,131,73,113,20,111,158,109,173,0,46,112,251,168,151,67,252,150,253,162,42,190,38,121,76,135,161,80,107,194,4,3,237,130,251,48,137,176,229,17,235,86,132,174,81,155,13,176,96,133,166,163,104,150,135,112,251,243,203,143,248,237,166,32,145,71,252,57,12,166,105,141,254,109,22,66,100,172,184,132,147,156,148,250,43,66,176,133,227,184,184,199,125,46,117,16,225,249,172,200,251,236,86,175,57,125,205,182,94,143,12,114,100,50,198,56,129,228,238,127,50,156,25,89,178,129,154,74,39,103,232,180,74,211,114,65,188,12,125,197,69,187,28,179,254,240,157,223,161,68,31,136,55,8,53,154,153,235,156,45,7,6,146,246,0,195,40,93,158,14,73,145,125,95,32,119,112,8,62,96,216,141,26,49,119,173,80,82,211,147,21,45,1,53,97,201,200,81,44,96,130,114,113,59,232,216,22,51,164,255,238,211,39,233,99,139,194,25,61,53,224,107,140,60,20,33,108,58,240,120,199,152,101,70,106,149,209,17,42,112,218,232,99,22,14,18,23,68,96,165,2,113,167,88,233,56,78,33,148,85,69,225,254,14,33,24,141,20,234,130,20,174,34,250,204,134,213,47,189,145,37,49,185,96,159,217,46,11,83,217,253,12,39,179,158,122,35,58,183,25,180,225,6,109,81,172,235,100,228,133,98,181,252,243,26,119,252,122,231,42,152,73,82,10,0,188,11,150,98,91,136,221,43,49,189,111,14,25,16,206,226,228,73,220,68,69,250,224,177,155,85,57,31,243,147,197,26,116,216,62,121,179,53,56,5,216,234,211,118,112,121,198,77,82,206,39,31,32,120,19,41,174,216,91,196,142,47,163,4,227,174,163,182,56,171,179,115,185,253,47,84,152,249,206,2,46,145,74,78,193,190,115,233,94,138,39,188,115,75,178,145,78,228,200,121,197,72,198,172,121,28,59,241,53,159,123,93,31,150,71,168,203,185,160,95,72,227,2,177,223,188,67,179,247,250,216,67,177,64,142,29,191,31,72,75,189,184,146,189,182,239,252,148,205,181,221,92,30,111,2,185,134,79,36,138,12,255,64,173,235,217,127,75,42,17,138,163,200,199,227,201,64,79,123,70,121,167,162,19,70,194,89,34,66,226,117,83,171,0,150,111,201,236,27,92,34,148,62,5,66,231,57,126,90,78,136,124,230,205,98,8,20,251,80,48,133,135,41,153,32,231,28,37,87,156,208,233,181,3,129,8,138,41,179,248,223,248,249,135,41,192,28,11,43,254,65,172,107,204,107,138,11,180,18,219,240,139,231,163,22,130,51,79,86,172,37,196,219,195,112,23,185,117,180,5,253,80,1,154,216,235,109,208,174,196,48,29,96,16,44,225,64,7,134,183,228,69,129,227,21,136,132,214,217,172,167,59,47,155,17,27,136,212,83,157,249,185,39,211,204,64,225,139,164,146,200,124,216,138,210,198,56,103,182,165,215,202,159,227,198,180,63,109,8,52,83,60,252,218,230,212,106,152,22,235,185,22,71,80,107,182,160,150,84,53,220,108,144,212,176,200,239,155,25,150,186,63,159,3,207,249,24,26,41,40,201,207,251,132,132,95,33,24,231,159,33,205,69,110,164,110,212,231,200,139,56,145,97,109,43,8,69,165,199,214,63,35,43,228,224,46,169,193,220,115,37,246,78,13,82,25,71,246,79,215,215,23,41,54,143,221,47,142,96,58,250,226,244,153,106,255,69,37,251,7,202,148,29,22,38,111,201,88,158,184,170,212,56,117,26,197,128,190,160,93,120,51,58,203,234,63,190,181,45,20,226,66,212,150,8,49,53,146,175,233,220,106,27,83,35,249,80,231,223,205,216,92,51,234,101,40,54,167,79,66,219,187,210,206,82,135,34,225,49,39,133,11,168,199,139,115,92,78,61,176,184,244,237,156,204,3,75,133,221,18,165,12,100,162,163,12,44,29,34,198,200,211,159,59,47,233,148,106,154,242,53,218,224,70,84,74,142,147,210,231,214,234,98,79,87,194,200,73,217,99,129,239,74,121,132,4,215,69,64,197,108,216,73,239,235,16,100,134,83,216,37,234,151,114,244,45,139,15,118,12,114,139,145,241,192,107,51,198,150,72,211,250,61,59,95,198,231,212,67,193,24,84,239,11,165,74,63,172,12,24,213,207,1,30,251,133,81,73,185,23,187,33,81,114,2,105,53,190,59,219,154,126,243,190,167,134,138,41,39,111,129,53,137,116,110,176,28,117,151,99,5,149,241,93,36,85,210,184,40,108,166,182,104,29,21,70,178,212,236,56,217,87,214,76,64,15,36,34,114,157,227,86,56,188,114,150,104,173,47,54,36,221,128,172,34,103,134,150,32,225,231,73,202,61,232,84,153,221,220,19,247,38,250,121,160,27,105,121,173,11,181,104,65,211,54,123,6,195,120,150,159,63,198,31,81,232,79,101,44,242,181,120,203,168,192,158,29,11,90,172,157,107,17,226,40,197,22,86,85,139,241,173,79,135,49,35,113,19,165,186,37,85,194,71,98,145,173,32,157,178,39,151,186,251,99,192,55,115,0,121,189,13,21,169,97,182,99,124,141,247,20,23,15,124,146,234,170,115,15,31,132,187,168,110,105,47,108,62,76,5,194,36,85,251,125,149,121,53,55,131,245,128,122,124,85,9,226,17,222,128,135,39,81,187,36,56,86,168,21,59,85,185,206,113,236,191,16,35,248,184,26,6,135,163,1,250,105,106,90,223,215,127,194,201,173,242,138,12,123,19,157,79,76,52,89,181,158,152,132,232,214,149,24,225,187,61,134,39,43,240,164,102,91,97,40,1,115,42,105,15,188,179,184,63,27,220,159,224,28,16,121,247,179,150,61,107,190,137,140,245,152,204,186,193,161,134,2,62,162,110,253,51,183,236,68,106,63,129,34,109,181,167,23,106,95,226,116,94,52,14,161,196,154,107,67,232,91,3,103,0,230,52,113,124,113,23,64,161,29,162,164,43,142,96,141,9,158,71,150,115,167,203,97,192,255,103,133,217,62,116,59,191,7,124,78,216,24,217,117,106,61,163,232,87,224,156,6,21,13,208,53,233,24,110,218,150,146,37,151,242,240,221,56,42,44,104,220,26,89,110,144,141,73,50,59,127,183,73,0,91,242,132,246,59,142,37,231,92,45,145,5,150,209,35,238,247,78,248,240,206,156,144,220,20,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,255,255,79,221,218,118,110,21,196,201,3,14,242,189,179,91,192,99,96,7,72,106,225,147,220,237,134,147,144,197,7,0,0,0,3,113,95,51,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,31,47,105,2,24,44,61,202,225,13,32,123,108,193,107,94,173,50,114,254,198,176,90,125,164,150,196,246,249,175,17,22,17,212,54,198,19,37,196,236,18,249,140,57,127,198,118,190,90,186,184,182,149,230,68,142,29,18,230,63,42,140,127,115,26,78,45,231,99,47,178,137,217,194,249,98,34,71,84,65,171,26,157,214,254,238,114,188,4,251,25,142,7,130,73,178,23,206,168,128,2,146,158,95,184,42,133,27,158,249,61,105,233,94,184,141,220,221,237,220,88,12,98,175,180,15,99,95,44,93,116,146,10,202,247,15,36,96,11,13,172,211,201,170,103,94,130,48,250,24,93,230,138,166,181,221,0,246,156,82,51,112,46,189,99,187,107,16,190,144,53,82,201,219,132,39,28,55,129,140,241,9,188,107,253,166,160,170,130,36,9,87,15,98,165,197,232,147,116,194,27,177,68,144,136,185,158,85,207,109,211,99,97,22,122,34,230,200,37,248,167,98,90,176,35,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,32,29,59,252,68,189,13,82,103,98,31,174,164,55,182,8,16,132,240,26,4,129,169,43,228,115,82,6,117,152,41,233,4,45,201,57,220,110,49,245,48,152,227,127,250,129,113,117,205,162,159,202,235,207,0,194,154,23,186,241,182,230,206,240,21,255,118,23,233,77,142,116,179,62,182,127,104,250,181,89,58,249,29,196,77,249,214,60,60,57,157,160,72,57,64,177,46,53,87,127,205,41,66,70,19,137,204,16,207,223,122,50,143,184,80,246,167,69,227,19,208,112,126,229,238,72,136,205,36,89,231,110,120,116,168,151,26,82,150,60,54,196,228,85,43,165,203,184,61,34,42,17,93,162,115,136,82,167,196,118,23,145,209,66,140,216,137,209,133,0,59,103,176,108,99,12,12,38,215,244,143,172,137,228,186,130,255,134,94,78,69,13,33,84,182,59,154,170,43,229,34,1,93,185,89,222,15,171,195,149,122,133,214,36,13,213,1,128,3,110,171,58,7,25,39,0,0,0,7,113,95,51,95,102,102,116,0,0,0,68,96,235,41,49,136,78,16,56,49,164,6,15,31,30,12,18,215,50,132,7,160,167,165,108,130,110,90,163,189,88,175,57,210,214,50,20,15,197,65,137,142,188,120,64,210,22,214,36,208,41,66,170,232,165,94,141,194,42,100,67,44,247,217,71,29,106,78,42,31,106,26,190,167,163,150,239,86,136,163,158,188,178,190,138,81,230,40,137,10,6,129,47,114,202,151,75,77,7,134,206,202,14,41,115,184,238,243,40,6,95,129,76,66,188,13,149,114,94,31,30,208,113,85,34,47,178,126,72,111,92,150,127,203,108,215,120,30,128,204,2,108,158,145,169,250,194,13,236,127,159,233,87,124,168,138,238,238,244,194,88,236,108,97,224,76,65,183,66,187,154,197,172,63,90,82,139,60,64,114,141,212,19,152,64,144,67,102,78,97,180,237,11,232,123,176,62,89,196,181,73,109,0,203,185,146,162,229,197,65,220,69,55,200,165,66,10,191,137,88,184,86,222,244,58,118,59,175,201,5,93,87,165,88,100,207,100,181,162,88,167,17,66,74,201,21,250,146,247,53,60,77,224,197,218,12,31,86,111,175,251,222,176,24,240,182,53,117,215,230,232,214,34,161,11,97,239,44,251,206,137,211,218,210,7,34,166,74,7,74,242,159,36,190,33,157,121,133,72,154,149,236,14,215,213,35,123,14,237,104,50,209,230,33,164,118,43,78,236,92,71,26,224,65,192,104,212,12,157,129,191,147,195,69,42,59,184,252,180,159,11,92,68,249,67,192,107,9,71,99,31,21,72,42,96,117,167,199,37,213,2,63,28,41,158,251,126,136,242,113,164,241,137,196,85,35,65,96,149,17,241,76,91,184,83,231,241,11,207,233,122,97,51,155,210,17,107,118,132,239,197,109,35,66,80,180,152,22,106,211,53,64,192,147,37,21,21,86,214,112,48,90,112,103,79,128,39,205,234,5,173,249,91,165,84,179,87,11,249,9,212,227,234,245,77,116,4,217,5,106,147,180,156,104,131,12,39,206,189,206,199,130,51,129,29,79,129,144,214,67,196,121,202,52,74,105,218,27,170,7,33,55,128,244,42,96,202,211,93,36,152,23,9,194,170,37,15,21,66,77,129,141,79,238,11,211,216,227,67,24,53,236,10,114,207,221,162,176,61,204,102,157,247,189,255,191,181,39,55,91,102,70,150,215,227,68,86,126,17,156,46,245,211,114,35,48,211,1,125,46,104,242,210,195,219,206,65,59,48,89,30,4,149,139,33,180,182,154,217,9,228,85,163,113,209,69,61,168,131,187,200,188,39,38,15,196,21,144,137,171,108,143,77,232,141,82,212,214,77,150,9,11,56,226,242,197,124,3,0,219,137,138,94,169,68,176,230,89,120,60,138,109,7,247,35,20,218,174,172,233,132,147,180,138,91,65,113,164,26,38,1,5,69,113,63,188,225,233,174,24,225,85,11,141,57,132,123,245,181,194,245,242,161,222,41,73,94,22,50,35,92,251,39,174,22,80,115,238,255,173,118,176,127,67,249,183,106,43,66,247,63,143,42,58,182,255,136,236,199,175,65,173,97,176,35,48,38,131,239,164,142,213,142,203,246,221,42,52,79,126,52,239,220,154,250,138,68,202,17,1,254,80,84,51,178,133,76,226,200,169,51,161,54,175,87,235,33,150,59,163,141,245,249,38,77,77,88,92,255,234,5,18,80,51,247,56,160,80,38,100,200,24,48,57,113,21,146,233,59,196,128,240,69,137,164,179,37,83,70,206,158,58,31,145,4,255,75,46,215,106,34,173,114,251,185,29,213,95,53,105,8,89,82,92,117,46,155,214,183,112,188,251,72,190,159,248,44,22,167,28,167,6,30,105,246,80,143,208,175,49,36,179,49,27,135,241,201,50,197,190,173,45,8,138,162,160,246,184,68,211,230,121,216,153,37,197,210,226,86,221,165,125,168,206,77,176,28,61,50,27,224,94,86,245,19,38,213,25,0,168,235,135,22,146,42,231,23,252,68,0,155,116,59,61,163,167,48,16,51,168,64,82,144,115,129,210,145,119,41,182,56,114,137,47,189,40,244,87,42,175,242,103,75,230,139,62,47,237,38,22,177,23,40,20,159,186,62,107,248,11,254,85,112,41,108,86,33,219,73,117,68,29,126,202,240,251,14,52,23,13,26,239,43,63,192,69,103,3,209,103,32,53,243,209,2,173,51,176,172,53,30,53,95,134,184,28,1,87,184,237,24,161,116,36,171,210,220,14,255,158,154,135,108,14,65,146,138,204,112,234,197,51,3,146,10,224,122,17,32,151,189,59,40,183,167,219,209,81,155,254,187,116,168,26,240,113,43,139,98,38,31,195,215,148,97,82,32,196,143,33,7,121,97,46,220,138,42,116,135,234,128,58,2,48,1,222,245,41,229,158,48,82,58,197,138,36,226,86,6,165,163,241,111,238,228,137,149,120,70,202,183,173,28,2,139,150,219,185,201,76,203,165,178,8,208,154,67,3,178,28,4,255,233,145,75,60,129,175,36,125,182,20,124,107,182,8,81,184,4,54,72,207,54,196,127,1,175,251,210,200,10,186,93,25,203,101,204,249,86,201,21,11,32,107,137,18,196,90,23,43,47,35,40,246,38,0,237,90,127,243,139,156,84,92,32,250,244,83,168,96,180,158,228,64,116,166,81,94,78,95,220,83,43,206,254,254,124,35,35,67,94,8,57,83,98,144,40,146,19,2,225,249,136,76,3,227,180,70,77,52,116,139,72,122,147,187,41,156,131,177,65,152,121,137,87,39,181,218,36,252,78,208,29,167,90,177,251,153,66,138,78,3,75,171,103,230,157,154,73,237,19,101,43,187,93,233,42,183,193,116,37,96,80,78,54,52,126,192,151,101,197,247,182,17,68,189,29,63,169,238,163,126,87,81,43,193,119,111,209,173,251,60,13,26,88,24,71,146,49,136,249,225,132,241,211,197,53,8,224,88,234,34,52,30,149,153,98,91,20,154,238,80,176,199,66,162,75,182,72,12,134,107,80,148,79,202,121,33,183,189,95,254,92,119,189,192,249,161,77,206,221,0,90,228,145,149,53,56,107,197,158,17,207,214,30,163,137,107,78,64,97,147,3,101,200,249,107,199,245,50,5,117,124,3,68,154,56,225,54,237,143,68,241,113,42,119,233,198,226,201,14,39,206,211,235,168,204,63,94,186,102,147,80,83,14,165,151,130,63,54,40,92,230,236,239,242,79,227,83,58,59,192,139,244,181,102,27,31,20,3,244,140,162,43,72,153,149,112,60,11,251,59,88,100,107,234,47,204,209,62,99,253,64,168,147,107,162,29,27,24,161,71,63,177,154,103,145,149,77,219,160,26,72,106,27,169,212,82,253,196,46,188,224,157,41,168,26,10,74,224,128,18,34,37,148,114,38,127,6,159,139,161,198,54,66,185,80,132,43,222,186,148,61,178,44,61,42,219,193,221,205,115,16,124,248,242,194,80,72,149,185,32,211,108,183,164,74,40,41,82,5,89,48,161,140,183,13,4,14,167,134,253,135,44,139,1,221,55,46,239,45,70,231,5,175,145,254,194,27,215,29,38,175,195,103,175,50,186,31,101,191,47,88,132,179,122,54,56,55,51,213,42,220,117,97,10,65,234,133,58,21,89,84,53,47,33,173,54,34,192,53,156,188,232,216,80,40,194,95,210,51,247,144,214,36,90,246,106,53,29,252,143,1,150,46,101,67,107,189,158,171,196,141,141,195,112,132,92,180,96,166,56,56,249,84,184,131,217,120,126,244,155,25,83,129,232,64,80,108,79,0,124,159,159,37,149,26,155,173,83,25,76,47,64,185,77,235,30,179,238,210,33,213,42,83,239,206,177,65,140,12,109,95,112,69,218,55,251,17,35,246,171,20,53,120,183,217,149,103,235,205,23,157,55,185,197,130,137,208,101,88,20,244,241,95,165,146,89,217,251,114,185,194,173,41,195,118,141,34,80,169,184,94,35,116,166,255,150,91,212,219,204,50,184,218,1,111,174,216,6,117,247,17,209,174,91,49,242,160,4,92,172,22,187,142,45,154,177,245,54,228,254,71,94,10,45,128,80,168,109,154,195,134,91,249,50,175,240,189,199,234,30,121,234,204,134,1,119,71,229,40,137,193,94,112,114,35,137,126,103,5,163,195,81,111,120,18,30,33,185,81,59,225,244,41,226,242,195,248,71,92,186,72,230,172,228,233,181,23,227,239,124,120,212,54,46,255,135,15,232,145,22,133,169,161,39,34,17,232,16,35,158,51,130,165,189,113,201,236,0,65,40,197,198,187,152,95,127,59,116,246,115,46,8,135,140,12,78,104,132,10,142,155,6,195,96,54,101,105,141,155,239,40,89,239,49,193,145,189,216,197,57,230,229,130,233,156,135,33,227,155,64,109,225,165,136,96,3,76,229,182,81,71,246,9,151,223,131,11,61,107,122,160,216,176,144,32,16,26,217,166,108,53,91,53,207,3,245,231,44,18,118,4,192,70,167,28,194,114,34,192,86,109,252,177,177,74,217,26,195,153,3,198,170,137,154,77,243,160,247,207,175,170,148,229,6,216,199,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,0,0,0,3,113,95,52,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,47,161,213,145,45,92,48,72,179,58,249,54,150,41,180,3,66,188,21,78,218,34,30,204,61,218,34,222,82,176,5,98,2,152,14,33,126,44,184,181,22,94,220,17,255,186,193,23,160,223,16,168,179,20,185,170,86,175,173,76,204,65,204,189,31,86,98,104,119,237,253,24,80,61,220,221,45,57,88,46,148,125,250,151,211,182,147,170,251,157,124,145,86,251,174,149,16,212,217,146,93,102,184,79,7,90,168,67,179,167,43,177,190,157,93,83,187,54,124,24,158,72,47,130,153,101,68,40,10,228,12,247,8,173,124,146,164,217,56,113,197,19,119,162,80,33,16,147,209,75,38,55,142,176,170,149,99,109,240,9,44,135,4,227,58,211,71,155,217,4,183,158,58,51,145,78,160,19,208,143,111,121,11,75,56,174,237,80,138,61,109,113,47,187,251,208,29,146,158,230,158,159,71,118,58,148,67,192,249,224,29,140,49,42,233,77,16,135,43,233,153,217,236,6,8,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,49,96,42,110,194,55,197,153,144,86,119,130,227,30,52,48,230,160,66,51,167,147,39,132,122,79,125,83,142,194,72,2,46,105,241,222,113,103,61,44,45,51,148,167,122,141,38,28,136,125,71,217,205,161,140,165,97,122,242,228,20,49,130,166,16,171,157,151,120,166,247,200,243,83,148,219,75,15,144,5,148,223,93,233,173,255,177,165,188,139,35,160,138,119,159,206,31,45,38,109,146,45,61,146,60,55,200,117,198,160,188,130,105,191,250,45,198,127,201,55,26,225,112,175,71,13,10,60,38,29,243,8,231,230,120,79,159,183,55,72,180,52,113,145,215,59,72,238,175,106,31,25,42,121,245,155,125,5,94,90,4,123,251,28,165,84,163,40,174,29,42,212,184,93,63,25,176,166,224,114,147,243,127,85,56,165,82,18,56,168,47,87,49,70,4,47,210,1,87,251,164,241,40,67,63,180,164,115,46,124,58,245,79,140,92,2,168,162,116,72,71,153,97,93,40,0,0,0,7,113,95,52,95,102,102,116,0,0,0,68,198,179,43,33,83,197,251,207,15,77,146,188,13,76,232,96,219,35,7,81,33,67,55,95,158,5,176,72,105,23,227,47,182,113,139,138,225,69,248,201,102,143,58,18,211,140,168,161,147,201,205,246,29,4,182,60,150,57,168,138,31,195,241,36,117,63,215,6,143,250,157,229,216,187,181,228,169,142,235,226,184,151,47,251,232,132,65,227,202,153,187,161,161,179,220,73,245,150,202,56,74,127,47,176,214,106,16,22,94,229,87,163,254,232,30,78,51,110,140,161,146,205,241,96,213,49,45,91,123,35,120,164,91,89,123,46,54,138,2,149,215,6,115,45,223,6,180,204,162,16,248,42,163,38,63,209,0,95,86,91,50,116,113,61,219,8,108,93,185,93,61,67,99,169,157,2,224,28,173,4,88,59,205,8,241,59,217,227,96,218,47,37,152,116,94,65,117,64,164,236,28,209,130,160,61,167,216,55,77,97,209,28,123,214,101,243,242,131,69,156,125,212,96,74,154,213,178,183,32,158,162,188,16,107,182,143,144,230,83,227,100,248,18,55,208,198,153,25,92,95,135,9,122,48,106,83,78,199,221,43,249,7,57,80,165,113,150,116,225,86,141,123,158,220,158,149,138,171,5,133,128,112,71,36,225,105,11,95,108,83,182,197,162,0,145,113,203,168,101,228,230,85,107,42,138,125,239,117,88,88,89,43,225,167,95,30,170,192,195,14,106,224,112,70,120,96,247,91,247,43,173,31,194,36,23,254,199,58,185,43,41,228,41,69,148,96,126,205,113,245,75,67,226,69,20,1,115,70,15,142,32,48,160,218,137,78,247,42,66,58,29,174,137,216,140,201,174,154,192,2,186,0,106,7,136,167,183,0,218,208,136,223,254,123,140,162,121,137,115,205,175,105,75,91,195,117,184,106,141,197,146,204,208,47,57,85,0,215,71,80,146,21,57,128,99,16,215,203,202,56,209,101,160,89,156,159,239,89,216,231,206,0,90,238,169,126,209,57,151,233,250,74,66,25,158,92,31,8,61,179,49,53,42,36,247,204,27,253,146,235,155,219,96,104,163,67,215,13,61,64,162,154,70,127,111,13,205,236,66,80,52,199,182,197,46,192,167,130,189,197,198,181,253,6,209,88,156,167,22,5,170,32,106,171,200,211,102,38,109,119,19,209,68,116,123,245,21,193,59,228,137,42,223,27,152,108,128,206,111,129,4,62,181,32,233,46,103,253,8,142,92,217,27,255,9,54,113,143,229,65,100,168,84,191,47,68,216,221,206,214,192,157,165,93,129,33,153,161,21,215,17,22,84,145,121,183,156,79,157,198,126,97,161,74,47,232,153,170,228,153,100,44,30,46,122,22,9,1,158,146,53,116,174,141,229,175,12,17,70,72,43,2,10,88,190,239,82,97,8,127,159,57,89,126,180,104,52,143,0,79,187,95,253,137,86,229,36,225,223,197,67,9,53,20,186,142,225,79,59,53,53,1,87,58,149,214,167,224,177,172,171,89,243,41,222,238,67,95,175,80,6,78,78,135,44,15,181,170,84,40,128,212,102,21,51,191,194,41,7,40,71,18,129,39,88,92,147,146,233,141,250,204,212,180,92,165,13,14,41,99,59,182,75,56,44,122,39,167,207,186,65,226,94,243,171,26,214,21,107,79,103,100,154,118,130,195,93,18,172,29,26,32,203,182,204,44,241,6,179,165,210,226,121,120,5,1,115,45,214,32,24,247,165,100,166,187,45,165,70,105,122,43,22,231,127,162,128,110,169,137,115,160,37,41,104,253,222,75,148,63,169,119,14,212,66,50,31,232,63,243,204,76,91,210,120,251,220,197,14,139,97,94,165,169,178,130,169,225,100,86,86,96,224,105,29,167,50,201,20,29,147,221,157,118,159,211,11,125,82,145,43,24,100,190,243,176,93,249,175,203,213,1,129,31,89,60,158,55,247,28,154,123,189,46,30,27,11,80,208,101,29,235,238,84,198,142,42,7,148,36,154,90,219,123,6,23,201,38,26,47,211,38,244,119,169,250,106,212,8,177,97,42,205,255,91,22,150,71,23,113,31,141,240,125,244,108,55,61,237,85,143,222,162,246,159,123,223,23,129,160,211,125,227,136,203,32,3,75,22,218,90,206,73,25,35,28,24,145,19,93,232,96,90,5,206,123,247,34,71,213,120,117,165,236,30,128,171,17,58,59,86,33,144,21,119,239,217,137,21,115,13,42,1,209,142,6,149,159,115,126,37,112,76,60,244,46,164,32,237,247,236,13,190,178,92,103,87,210,236,44,75,140,34,43,164,167,46,68,150,70,48,180,124,222,157,154,98,127,135,153,14,9,248,187,15,194,15,173,15,56,180,90,114,40,97,92,80,130,12,56,63,243,190,48,158,125,213,121,23,139,233,39,63,91,54,254,238,150,11,151,56,7,17,166,94,149,234,91,165,220,218,33,126,188,27,180,50,82,45,56,176,196,70,117,228,214,32,162,174,120,141,13,233,235,177,182,150,187,41,14,193,3,0,203,168,225,129,240,113,177,7,12,249,44,233,227,25,234,124,118,72,45,103,54,108,81,166,194,91,130,201,92,91,187,63,30,216,123,95,44,172,147,128,190,36,253,57,141,247,122,70,71,39,232,132,7,195,10,67,100,178,5,28,75,190,108,104,225,139,204,237,77,198,7,179,209,211,61,23,167,87,98,75,148,240,202,238,160,72,20,53,58,79,250,253,75,134,23,247,196,77,243,34,118,24,243,250,48,145,59,246,19,118,76,221,174,198,239,218,120,152,100,253,133,62,44,176,16,16,39,52,51,180,174,140,65,161,150,153,250,161,209,207,242,235,52,217,78,39,24,205,134,14,134,84,75,158,236,4,54,102,225,203,210,5,224,77,33,146,219,227,171,207,139,21,217,237,195,48,41,167,176,105,152,29,58,22,223,215,50,75,21,46,132,60,144,222,35,35,19,32,80,140,65,255,93,250,174,131,68,37,104,19,82,136,31,243,101,28,54,13,72,175,55,232,49,96,79,156,230,241,248,155,241,237,40,225,203,67,203,38,123,64,217,140,57,160,172,143,208,243,79,212,41,12,17,104,188,153,35,124,244,135,44,135,75,175,217,145,198,141,41,60,35,50,129,236,47,236,63,87,105,6,226,204,30,87,46,234,7,45,75,28,108,8,15,224,164,36,162,13,144,127,33,3,168,126,39,253,120,225,110,55,35,198,22,61,182,122,17,134,117,70,69,208,31,157,205,66,18,112,50,237,237,101,114,155,220,220,172,158,14,135,213,116,83,85,193,252,18,138,84,255,177,209,66,111,24,92,159,250,125,85,112,86,116,33,191,144,86,53,172,202,36,150,155,158,190,212,200,77,200,144,67,126,32,18,135,68,52,50,128,121,127,78,103,21,58,92,141,243,227,59,29,229,73,13,197,86,76,96,158,113,218,167,14,116,98,146,160,22,158,46,74,53,91,96,189,42,98,212,100,34,128,251,189,108,135,224,134,187,10,66,162,249,70,122,91,157,26,210,90,231,76,3,175,107,195,129,45,154,8,230,227,172,170,215,210,102,236,172,5,132,58,141,245,254,97,111,33,143,64,232,165,49,25,32,193,149,67,161,226,6,42,228,31,205,168,99,231,43,97,122,223,218,220,117,61,106,134,56,73,210,247,223,247,163,38,121,228,171,101,154,228,24,205,61,250,149,35,91,64,171,243,51,184,138,103,189,115,145,154,143,59,247,140,148,166,93,123,198,125,254,246,234,180,71,202,182,6,204,198,50,32,59,208,80,2,139,193,229,79,78,54,76,57,25,69,174,86,92,125,184,176,195,151,253,143,186,88,93,183,45,186,204,206,188,137,82,231,53,58,148,235,137,111,161,93,224,38,12,102,103,92,63,211,101,146,0,139,129,45,39,86,26,207,101,43,190,62,150,49,221,94,16,211,194,194,138,50,10,189,157,35,254,171,106,121,50,20,64,171,18,239,173,167,224,11,199,167,123,121,148,242,102,156,73,214,115,139,238,19,138,101,231,112,158,26,97,72,64,87,59,28,39,3,28,51,20,0,83,166,161,105,158,193,57,23,100,108,197,105,112,4,79,93,98,163,102,187,89,181,89,115,90,223,226,16,144,155,119,46,112,213,149,74,80,41,146,136,99,149,43,96,30,61,26,205,0,240,188,198,201,155,193,217,203,230,193,28,210,125,247,190,249,41,82,109,115,239,198,111,239,245,26,215,83,14,173,238,8,120,232,137,102,76,43,221,196,68,212,58,159,214,251,64,182,125,7,82,119,172,26,18,80,86,85,37,134,48,213,197,88,17,181,171,198,245,108,33,175,241,39,59,239,36,53,93,57,34,231,194,37,35,185,60,19,118,176,160,39,29,103,35,71,255,199,120,236,181,79,4,149,62,214,225,226,80,154,244,105,84,90,180,34,171,16,241,159,228,242,1,216,49,140,172,68,187,176,50,52,30,245,208,233,224,88,209,1,38,226,248,249,28,129,21,59,60,38,123,136,25,128,119,90,30,207,81,243,80,41,113,145,48,17,195,128,78,48,6,41,6,164,187,69,52,86,155,3,136,169,225,161,64,190,100,161,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,0,0,0,3,113,95,109,0,0,0,16,255,255,255,15,108,10,30,188,110,143,70,134,183,23,204,215,162,167,126,126,73,186,175,71,214,95,206,30,141,177,155,31,171,122,171,39,137,98,22,245,110,230,148,101,145,202,169,222,116,161,116,24,73,104,187,20,203,121,75,71,184,15,202,19,196,215,90,106,7,244,200,3,101,79,216,127,244,74,89,69,37,88,241,29,46,116,28,57,157,199,12,162,181,76,74,5,197,38,34,182,73,236,14,137,58,110,9,126,222,74,160,1,156,39,57,216,86,29,84,40,106,205,71,86,181,98,69,4,235,108,201,30,199,209,137,71,190,68,91,83,28,126,140,7,44,7,43,223,209,131,92,7,206,183,242,173,165,112,120,21,203,166,195,75,235,217,228,177,74,18,143,32,156,78,120,248,230,27,108,85,90,18,59,138,108,42,165,60,174,164,185,29,23,214,37,215,23,220,138,27,116,129,76,113,87,12,39,132,220,78,3,126,111,79,223,58,7,77,166,7,25,100,26,32,34,72,239,2,205,165,79,231,206,214,127,105,66,243,205,48,66,253,5,206,169,85,95,31,138,42,240,197,164,19,161,34,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,32,162,41,83,37,244,221,231,151,146,201,77,37,176,63,241,6,159,25,38,52,159,225,61,44,105,61,227,8,3,122,153,50,61,40,165,133,140,1,25,64,44,33,225,249,83,157,218,226,55,0,144,99,136,209,51,127,140,216,36,63,189,1,26,43,135,125,220,166,159,94,13,192,53,209,31,147,26,215,198,187,26,59,224,242,218,230,84,96,160,73,181,24,147,216,185,17,23,147,54,193,96,25,58,64,100,156,23,160,116,82,219,72,142,169,215,35,155,7,68,105,133,136,112,20,64,44,80,11,235,180,61,55,83,198,194,140,103,143,186,193,251,95,136,154,28,50,125,226,224,116,188,93,220,254,192,22,239,188,15,45,234,41,218,24,124,25,87,40,29,239,108,8,241,219,12,164,128,9,126,3,71,246,112,125,34,83,139,217,89,234,73,16,148,19,18,128,113,250,87,87,227,202,201,120,85,187,50,98,193,80,227,105,145,49,152,200,190,254,117,141,248,77,40,40,0,0,0,7,113,95,109,95,102,102,116,0,0,0,68,94,214,202,65,150,190,86,65,72,163,37,61,92,110,171,24,182,226,190,94,164,100,10,21,229,152,195,63,112,255,243,92,105,117,149,195,154,41,36,68,158,199,100,51,168,131,47,103,109,108,210,48,225,32,189,106,220,54,140,118,108,252,14,23,216,153,239,166,150,3,5,124,157,54,52,94,31,77,17,87,57,23,20,208,127,120,44,179,7,33,91,205,131,8,37,46,197,19,106,152,169,172,25,136,192,17,241,32,43,213,220,105,86,78,152,83,253,86,97,177,14,220,92,51,44,194,166,20,117,72,213,68,204,10,179,107,11,116,182,225,149,139,161,83,128,187,221,192,128,177,219,11,19,166,88,72,88,22,165,49,236,43,49,108,221,132,184,156,250,154,54,116,59,21,86,127,132,143,15,156,4,244,107,12,140,73,150,110,57,236,16,70,0,115,160,156,64,10,203,33,84,176,94,231,125,169,44,167,212,115,98,212,79,199,81,52,245,107,222,9,189,160,212,28,118,59,177,169,56,199,47,26,160,44,230,125,53,133,212,72,153,208,216,112,78,234,76,38,19,250,149,255,103,59,182,1,170,36,89,207,121,219,120,148,8,255,119,142,203,246,254,240,233,140,57,50,0,202,32,116,154,149,145,132,41,45,214,19,164,119,80,90,241,229,57,182,169,16,246,230,132,187,27,236,104,104,162,158,230,181,148,59,53,175,94,184,30,175,116,60,254,180,166,72,94,233,196,37,24,254,62,131,180,25,158,72,224,201,239,189,178,168,175,194,93,84,92,184,35,183,145,8,226,101,31,126,123,46,120,78,81,133,114,63,20,35,12,128,212,170,109,44,146,231,149,203,231,96,70,219,69,41,115,87,65,151,212,119,169,174,252,226,59,90,40,88,184,108,112,240,115,119,151,180,203,206,102,191,198,99,14,71,229,188,135,85,182,212,93,52,139,174,11,66,2,10,149,144,47,181,62,141,108,85,194,146,182,176,91,151,3,223,225,238,21,83,6,76,91,33,248,136,248,26,230,114,9,238,124,251,103,152,55,231,233,41,36,155,217,168,38,110,91,153,188,234,80,98,71,19,74,111,254,219,181,217,64,76,201,43,1,99,6,135,21,123,128,53,32,157,134,26,72,213,38,234,19,27,229,251,214,84,89,232,109,165,193,143,249,52,194,41,6,52,35,190,212,201,80,142,104,134,140,118,169,106,129,118,150,23,73,136,115,53,109,19,38,129,3,101,156,180,144,228,45,154,126,21,207,25,181,143,127,38,161,37,194,89,179,133,74,46,163,253,146,95,217,244,223,217,181,244,163,180,212,193,178,244,184,180,21,175,252,45,191,24,69,39,82,180,0,49,249,228,94,94,146,53,2,30,8,56,105,58,96,182,107,72,131,124,218,53,138,169,242,214,49,99,14,211,191,118,158,66,204,74,208,213,181,79,128,223,247,74,203,130,110,248,133,79,59,107,168,243,22,156,103,53,194,35,29,111,200,216,156,91,21,50,60,194,248,15,255,109,174,36,132,110,69,76,180,34,171,110,15,144,122,56,160,128,36,190,218,117,183,116,22,232,102,23,63,119,25,49,228,240,103,221,97,49,177,152,99,37,181,31,147,75,80,130,78,224,9,122,244,83,0,251,26,253,161,153,126,109,33,71,129,207,78,163,91,154,62,159,15,213,236,255,77,203,3,222,51,178,211,29,199,26,126,170,37,199,75,2,71,41,237,9,215,73,82,30,180,87,242,80,210,25,111,3,250,186,167,186,73,82,190,155,161,237,112,31,42,3,236,167,152,197,44,38,205,5,201,100,144,143,35,88,247,232,176,150,26,2,118,125,221,118,41,141,31,208,9,31,235,64,255,1,136,208,215,70,236,28,77,35,253,178,65,163,125,135,126,108,254,213,56,103,225,70,62,172,113,14,244,72,60,226,233,204,92,112,175,42,144,143,211,130,126,176,196,183,227,101,12,70,55,85,220,139,136,130,226,0,19,83,16,89,127,103,11,246,37,8,128,78,58,211,175,163,24,184,254,177,154,185,163,104,38,92,84,93,41,80,20,4,236,106,198,132,106,91,165,205,152,17,23,91,126,125,173,155,20,13,42,196,155,220,209,60,128,239,142,140,228,222,28,105,187,19,94,179,158,244,115,41,210,106,67,53,5,36,65,68,182,240,176,102,107,227,194,239,250,34,244,35,72,147,179,74,106,114,90,11,85,244,35,218,203,97,149,75,44,209,246,13,251,129,151,118,45,184,64,90,138,68,212,57,2,4,81,95,180,117,20,127,52,180,187,21,107,112,161,68,86,108,153,118,236,71,82,19,141,113,144,66,182,145,20,65,73,14,104,221,26,24,98,23,18,140,237,151,37,243,154,10,47,32,13,194,202,210,233,174,54,15,213,187,239,162,85,28,111,91,194,195,181,77,63,247,97,10,150,133,63,20,60,88,28,237,158,64,144,102,174,222,12,21,213,45,114,185,243,132,25,151,176,229,230,184,205,159,156,45,215,145,247,248,2,72,203,174,47,69,0,1,88,255,32,63,213,174,7,140,13,195,140,245,33,193,206,228,95,229,221,111,252,225,255,163,44,49,115,134,156,154,103,54,180,148,37,156,62,162,72,208,231,221,159,54,120,161,2,101,143,17,134,117,11,110,247,121,237,44,170,35,234,187,250,52,224,16,249,130,14,158,246,159,47,175,102,183,20,62,139,209,135,218,51,134,123,76,248,179,57,76,32,51,105,150,142,252,204,198,24,235,48,2,53,124,4,135,89,221,79,225,41,251,64,44,226,212,157,111,144,252,22,36,116,195,128,112,252,221,204,29,101,248,223,176,153,244,102,2,102,213,138,221,88,191,250,124,128,70,47,193,57,157,91,11,164,238,237,184,67,187,128,73,228,3,66,195,248,23,211,73,232,69,19,47,88,248,202,146,168,11,158,198,0,111,50,30,178,20,36,68,28,194,48,228,6,227,178,254,244,153,32,91,208,154,159,55,84,134,233,118,169,177,164,116,216,136,175,20,116,246,53,218,101,143,117,247,192,124,85,223,88,53,175,0,104,109,171,122,213,162,4,69,234,37,127,122,135,246,122,93,12,71,176,117,88,253,136,177,82,55,16,33,187,177,66,39,167,232,209,185,135,108,154,82,174,152,183,163,241,118,143,41,225,6,41,203,1,40,106,118,59,20,35,31,110,22,57,127,72,254,133,84,48,11,60,223,83,111,249,110,5,205,248,23,72,227,66,60,154,64,132,208,64,148,151,179,179,58,244,145,90,31,130,228,196,136,250,250,9,34,103,195,151,98,103,92,117,148,174,60,137,60,6,82,93,182,182,88,87,168,110,236,61,1,165,61,188,122,35,70,217,231,64,138,93,201,163,47,22,219,4,2,40,177,229,153,27,118,0,113,214,255,210,225,248,238,201,119,67,62,29,150,252,203,129,48,221,243,247,75,25,120,118,21,47,192,236,41,221,21,110,69,248,3,213,65,151,22,170,47,55,75,75,104,13,243,124,213,39,75,109,47,193,101,23,232,17,86,164,216,58,134,113,31,79,65,226,147,26,208,156,190,91,16,187,133,103,158,17,31,49,3,169,37,29,51,187,203,72,226,141,131,208,139,82,114,247,115,187,251,89,206,58,122,236,159,250,247,44,254,174,135,61,187,40,46,132,204,72,28,199,239,38,64,37,211,238,159,248,205,55,104,64,96,56,46,119,43,215,44,15,96,89,11,180,166,51,63,98,156,115,81,83,128,251,93,42,91,214,127,75,183,61,15,135,85,124,73,215,32,255,240,197,251,37,174,117,184,90,75,155,78,53,63,208,168,105,66,64,240,130,253,100,202,162,164,238,155,183,156,10,16,211,118,45,0,204,139,43,188,65,68,22,9,174,248,96,240,111,155,186,134,61,2,88,182,135,203,65,178,126,213,136,3,194,223,79,1,24,110,219,146,156,7,29,211,232,50,248,167,87,130,38,25,164,10,6,10,143,77,36,170,129,147,176,107,52,10,201,157,48,51,17,220,67,7,191,195,45,70,162,166,8,40,175,38,157,5,248,37,58,145,114,102,229,84,95,28,118,152,127,204,33,117,5,15,17,36,111,219,149,132,66,218,73,138,231,98,186,201,139,195,234,102,111,66,86,96,62,92,29,13,176,63,163,60,134,253,48,73,248,105,28,117,163,245,226,55,7,88,9,160,137,62,34,133,9,197,143,151,229,237,15,172,39,140,111,23,226,229,52,85,210,78,208,146,69,20,226,71,106,78,147,16,179,77,76,39,36,35,149,127,70,161,70,17,23,5,130,63,97,249,54,21,198,127,101,221,154,169,113,236,124,31,219,155,39,85,255,215,241,39,2,208,162,80,13,4,107,29,193,236,46,18,225,80,246,65,255,80,198,167,139,88,161,47,72,55,189,6,144,250,120,82,35,68,224,183,204,117,130,74,176,201,172,29,155,34,199,164,136,68,228,148,145,133,72,215,29,141,251,206,214,61,81,252,18,3,112,86,228,213,20,163,168,128,95,165,22,62,124,10,62,136,100,171,58,37,161,79,205,51,225,245,73,199,74,173,34,112,124,197,137,199,189,89,114,188,236,44,235,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,109,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,3,113,95,99,0,0,0,16,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,16,179,110,244,26,187,222,193,109,106,79,94,71,173,135,192,1,211,58,27,45,81,71,158,234,164,50,97,40,82,26,125,7,136,175,181,212,14,232,145,7,202,158,176,255,232,149,178,138,74,176,226,59,92,232,56,114,58,143,25,68,107,153,148,10,84,170,181,9,44,52,46,34,174,88,80,143,85,245,96,248,28,248,24,152,148,115,192,26,63,86,61,55,235,26,25,41,242,157,219,105,47,225,91,218,126,216,60,226,18,84,8,5,200,4,114,63,225,87,232,4,52,37,247,115,110,160,165,35,21,208,20,113,227,155,171,240,137,126,178,63,220,71,75,97,140,211,117,31,169,225,250,165,147,65,224,81,179,137,61,27,45,172,75,190,155,194,51,243,86,146,223,104,102,48,26,224,91,69,133,122,40,89,110,189,228,249,26,46,191,121,208,15,108,44,215,248,26,184,67,196,14,65,25,124,255,194,60,202,213,243,173,172,90,210,47,194,222,28,71,28,2,166,28,44,2,0,0,224,39,235,195,135,34,225,114,243,144,208,103,80,186,176,2,3,109,139,160,112,83,64,99,194,229,156,200,0,243,138,232,241,138,183,125,35,164,73,181,137,108,170,224,69,62,103,61,71,94,12,161,145,132,219,152,220,211,74,41,38,121,80,74,27,133,13,80,60,199,209,8,122,95,82,129,157,18,168,158,69,90,93,23,70,239,16,24,157,7,181,207,37,112,19,112,15,227,138,29,66,133,112,188,112,47,101,151,149,30,81,94,96,197,187,78,200,213,173,49,168,67,166,10,30,15,98,36,134,100,20,134,105,18,152,124,151,53,148,43,35,149,83,15,66,213,237,103,179,245,122,58,109,4,174,190,12,40,114,197,101,161,154,234,238,211,40,250,57,231,69,240,56,149,59,148,105,179,52,70,47,129,90,226,175,144,3,3,14,212,83,180,49,248,50,174,80,58,222,217,16,226,183,25,72,1,19,252,6,142,236,225,250,68,166,22,179,179,212,147,32,239,217,75,234,50,167,94,238,115,150,140,44,47,243,85,22,118,194,122,96,172,31,225,121,33,117,240,191,74,67,161,22,0,0,0,7,113,95,99,95,102,102,116,0,0,0,68,194,82,223,29,102,119,10,75,32,27,76,125,128,89,128,28,254,131,181,64,250,230,178,103,145,114,105,114,250,227,26,21,93,102,220,126,14,29,198,105,253,25,22,198,116,84,0,34,68,154,200,240,59,173,44,168,80,180,101,69,243,176,57,51,241,220,191,129,58,243,19,219,172,24,49,61,248,20,98,150,124,118,9,203,195,86,74,166,149,144,105,192,38,213,187,67,99,185,133,191,68,246,197,81,247,241,16,186,139,65,102,134,71,2,169,212,163,152,239,56,7,255,6,201,55,35,128,16,168,83,191,170,23,117,199,20,215,22,143,255,73,18,32,240,224,146,40,227,124,97,25,52,233,126,189,4,37,13,165,11,171,145,187,8,39,197,70,136,233,9,172,108,190,109,21,168,245,149,117,214,16,150,108,82,210,54,176,17,203,22,143,36,43,34,68,127,21,199,186,167,239,32,12,38,230,158,130,248,157,204,39,116,253,14,179,218,174,42,2,172,69,164,133,69,109,43,123,253,115,69,133,72,147,62,76,171,9,155,116,9,154,178,230,73,6,233,120,33,27,247,115,102,204,196,187,2,25,148,101,22,97,194,93,207,194,230,208,4,181,3,41,249,10,53,111,172,155,229,154,57,194,195,199,72,75,69,143,90,91,15,204,7,122,151,55,89,231,245,94,26,147,169,82,230,18,123,24,154,43,60,7,187,43,149,158,245,205,12,43,67,82,91,161,120,98,161,167,88,111,105,155,105,226,32,32,217,77,6,66,96,39,163,208,149,59,102,13,183,175,191,126,67,60,222,226,133,5,47,132,196,218,54,109,195,51,25,177,37,176,58,113,27,130,9,175,30,115,118,0,243,218,198,251,72,168,253,84,143,231,249,1,123,24,235,96,203,110,81,213,57,43,165,47,209,162,74,19,204,129,60,28,93,218,104,139,81,180,138,152,86,158,59,172,207,128,194,35,86,236,199,134,95,210,23,172,224,16,142,126,86,183,154,108,68,67,27,153,52,179,56,78,172,221,86,110,219,47,71,113,13,166,164,19,237,124,152,62,219,141,128,236,193,59,15,91,178,50,168,82,72,62,255,95,232,233,190,25,255,175,39,255,6,41,159,129,203,122,201,6,216,182,204,153,60,129,192,107,205,43,241,188,66,114,121,170,18,105,128,116,197,74,141,183,13,221,190,59,104,36,216,170,28,17,109,200,152,185,83,69,181,163,13,242,50,70,215,90,64,44,110,250,203,248,99,216,166,163,186,23,196,6,90,126,201,61,244,86,106,24,222,87,152,39,18,159,47,52,12,199,190,185,251,176,86,239,242,169,17,228,68,242,30,29,8,22,226,46,20,77,72,71,250,139,83,253,3,203,35,14,48,46,70,171,247,81,207,59,142,140,166,41,4,144,84,38,185,163,90,83,183,205,24,17,190,56,42,142,251,208,75,188,148,62,62,127,132,215,175,121,207,198,39,55,160,79,140,22,64,65,6,151,137,136,49,74,110,105,76,134,229,87,22,207,3,225,231,36,15,138,65,9,45,195,127,200,253,11,143,133,165,127,238,203,5,255,227,225,39,20,165,234,233,235,4,137,236,168,101,211,55,248,242,189,236,44,134,79,78,189,233,54,1,230,140,32,66,228,17,209,210,25,147,103,220,175,83,102,17,45,174,196,74,104,179,134,77,205,157,233,29,165,248,121,116,186,72,146,141,171,194,171,27,167,216,164,57,158,93,167,48,131,117,22,40,94,145,132,208,119,176,37,194,181,29,135,135,6,129,2,150,248,122,83,108,108,214,245,220,52,82,70,95,18,150,96,6,234,25,110,26,36,155,217,6,131,6,81,33,27,14,181,42,232,242,0,5,243,240,172,132,160,24,7,27,24,56,148,147,207,141,59,200,178,151,58,142,210,81,94,38,152,227,129,160,27,117,51,98,206,178,141,18,62,14,241,254,242,93,60,3,31,129,170,74,46,178,46,92,4,166,210,199,108,186,151,170,254,252,186,72,251,163,255,237,39,54,67,32,191,12,254,209,40,93,35,195,126,243,117,129,244,160,73,250,223,234,29,140,95,152,72,117,112,156,188,48,234,54,193,57,3,146,33,5,98,203,191,6,57,173,12,39,62,100,247,8,66,154,222,145,58,149,115,72,139,112,54,73,7,55,225,93,14,233,16,146,12,41,2,73,168,63,203,64,236,106,6,215,60,12,59,125,250,137,157,225,254,150,217,245,115,52,167,96,213,139,239,254,135,17,204,244,89,159,163,42,185,35,235,87,240,183,34,1,114,29,239,124,216,85,84,96,88,57,32,229,163,110,54,101,6,61,158,155,157,95,179,89,116,10,20,32,215,22,190,222,16,227,17,227,84,18,240,205,71,70,175,188,9,110,63,200,22,46,8,165,44,212,114,243,213,164,223,136,181,94,47,232,212,176,78,233,18,158,177,24,78,48,97,184,64,148,99,160,0,93,80,250,178,158,161,17,103,101,79,42,155,60,227,200,145,179,169,46,68,203,200,245,23,93,155,178,198,199,160,94,12,78,66,152,170,121,174,189,10,49,46,181,110,45,60,192,34,121,185,203,95,255,248,115,162,8,146,50,110,107,218,179,97,199,87,57,151,50,52,140,249,219,100,80,252,132,52,254,37,184,229,38,113,241,29,216,209,65,247,60,132,149,146,191,25,49,176,75,144,175,157,86,219,24,87,117,105,19,97,48,40,75,167,135,100,2,72,228,51,11,159,128,104,58,161,231,237,237,201,44,72,104,135,196,67,100,198,212,63,181,160,242,13,248,86,188,4,39,247,60,1,25,185,69,30,224,56,203,37,92,118,3,86,65,97,74,182,169,50,162,137,125,111,168,126,224,152,21,189,40,60,206,212,16,57,104,141,222,191,78,149,143,172,17,79,185,122,50,239,70,162,155,101,233,137,136,129,135,132,246,172,115,121,40,162,89,57,10,227,0,100,142,209,113,215,173,123,85,94,93,15,198,160,167,23,5,168,16,112,187,87,34,93,123,216,10,106,77,188,54,20,215,120,133,79,195,78,195,142,222,25,175,198,18,29,231,67,29,65,42,244,35,156,188,95,63,171,50,149,27,160,5,96,236,91,4,180,107,246,254,40,63,46,98,62,209,161,91,58,13,201,169,133,20,78,54,217,130,173,59,136,5,28,206,60,255,173,74,165,191,32,177,165,93,195,153,211,19,162,83,59,18,133,149,192,210,221,187,37,105,211,219,238,6,32,189,56,111,196,19,51,117,208,124,53,105,69,188,234,112,38,219,93,154,205,3,162,77,112,122,136,85,119,201,227,4,233,25,134,154,112,179,180,106,202,166,195,245,212,16,15,50,64,245,8,151,74,107,239,238,212,129,156,216,53,161,133,3,104,177,180,115,250,213,199,172,150,43,30,178,102,100,35,64,161,111,114,19,6,184,74,58,82,247,202,0,129,61,24,84,236,249,216,126,15,239,22,215,7,127,174,194,104,120,140,34,191,51,185,46,176,226,11,255,24,139,61,250,252,101,20,35,242,18,193,115,129,244,71,0,250,130,53,136,175,237,22,87,3,249,14,103,249,47,172,233,63,133,148,237,205,151,202,95,34,203,82,211,147,113,96,156,3,36,50,128,243,37,111,122,182,52,249,223,13,55,52,196,10,134,13,83,52,247,46,88,220,139,140,46,71,86,171,174,92,145,134,38,81,64,144,44,239,228,211,160,255,38,240,178,49,186,198,31,83,200,125,95,114,75,226,81,72,40,87,216,179,181,152,216,113,156,96,51,204,212,180,119,252,200,111,19,24,175,115,253,128,212,160,48,221,164,239,13,181,27,199,193,180,243,189,67,169,225,123,223,200,193,209,255,189,204,99,51,243,7,166,1,128,212,192,81,245,93,28,154,202,172,194,57,94,130,237,120,142,205,86,178,241,34,46,208,132,233,59,181,91,143,104,92,238,202,123,38,42,167,119,135,77,235,57,76,7,104,221,249,27,79,156,203,190,253,155,71,241,72,194,210,17,122,91,98,182,79,249,30,57,192,225,87,20,205,211,123,241,193,217,136,212,71,26,244,63,100,121,48,7,220,121,55,109,106,97,199,208,100,158,49,22,100,113,72,184,204,156,49,104,119,85,227,78,63,88,63,21,12,139,185,138,235,159,149,84,113,128,30,92,133,44,52,233,45,183,34,216,7,56,130,183,76,235,16,38,252,199,143,151,191,80,173,23,3,168,174,136,104,55,228,14,148,188,35,213,71,248,55,45,77,40,54,157,187,20,48,250,139,6,185,155,163,177,165,159,212,35,63,90,138,96,1,14,116,141,62,59,21,2,30,128,157,205,223,51,205,123,92,122,245,160,231,134,82,122,139,194,139,53,106,57,142,43,112,197,170,182,61,3,29,230,235,251,171,80,157,202,214,224,88,251,10,219,220,162,196,196,82,26,59,208,29,130,201,230,47,242,122,232,34,177,26,12,4,71,233,254,227,111,240,115,33,141,6,24,128,223,206,2,77,185,45,42,16,138,155,51,253,162,109,29,68,141,114,162,96,208,239,236,125,43,73,105,154,120,111,239,223,29,74,153,165,250,188,67,159,46,170,43,195,157,140,47,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,113,95,99,95,108,97,103,114,97,110,103,101,0,0,0,16,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,255,255,159,56,104,44,89,83,154,193,62,43,237,248,109,92,140,242,240,222,70,221,204,94,190,15,52,131,239,20,28,0,0,0,7,113,95,97,114,105,116,104,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,70,27,90,38,177,171,158,221,170,147,13,198,54,138,226,204,148,110,146,73,81,119,23,12,222,161,93,246,226,79,8,91,230,123,248,159,182,156,214,49,187,48,5,103,36,61,189,167,16,24,80,140,231,118,215,34,213,39,141,132,202,163,4,137,121,231,101,175,33,111,169,223,62,112,41,6,254,64,71,124,137,233,55,235,17,25,13,176,224,147,137,219,71,205,39,205,168,128,18,254,168,125,116,153,20,98,36,177,85,53,193,1,96,12,91,39,168,140,160,226,193,125,211,156,20,251,43,156,83,222,104,131,2,198,21,93,179,177,226,126,241,208,80,37,246,3,172,255,57,97,165,77,154,69,161,203,236,114,46,157,218,8,34,87,46,68,177,231,199,49,50,66,181,65,252,146,198,17,108,50,21,218,186,139,154,197,176,227,130,39,47,106,66,151,84,171,114,121,237,97,31,241,72,220,186,220,85,94,64,58,151,129,188,248,51,255,32,126,53,119,0,140,28,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,49,96,191,7,137,39,174,246,19,165,44,18,155,104,127,8,254,126,33,186,122,189,160,153,36,244,179,149,126,86,6,110,26,165,25,132,7,96,73,99,41,206,68,207,250,152,219,194,66,88,239,231,175,115,24,137,40,221,42,216,114,123,53,92,27,181,200,242,96,105,10,9,122,15,217,245,201,5,120,46,123,2,222,161,210,39,74,120,128,142,91,96,89,219,147,215,17,52,87,127,221,149,76,100,207,247,91,87,85,151,146,254,102,91,248,116,38,143,157,195,23,71,222,179,13,214,57,105,36,41,106,71,160,31,178,103,146,103,134,20,151,78,81,91,101,115,171,244,205,16,59,254,245,240,9,91,31,214,34,21,41,100,37,247,205,60,199,157,146,169,168,135,71,6,51,242,43,202,145,111,21,132,48,118,253,157,5,108,48,143,203,60,33,61,183,69,168,46,25,168,231,61,234,219,1,134,95,248,25,16,186,159,94,228,220,150,0,84,141,173,176,33,179,126,33,0,0,0,11,113,95,97,114,105,116,104,95,102,102,116,0,0,0,68,97,105,132,245,126,73,66,113,7,136,146,97,207,227,18,118,119,191,135,10,54,163,151,208,249,157,129,159,132,121,115,82,215,137,149,196,15,142,48,224,2,124,174,234,58,246,185,29,105,138,46,82,158,178,15,191,250,236,19,18,102,70,236,60,9,121,148,91,198,82,111,183,41,209,149,137,85,190,69,213,7,180,70,137,29,60,254,157,16,156,47,250,36,48,183,43,116,210,61,120,88,131,114,218,40,115,22,1,250,232,91,124,50,122,89,154,216,162,93,65,18,174,245,24,107,112,64,84,135,216,181,1,33,208,105,102,77,209,83,17,0,7,14,72,153,157,64,76,119,177,178,202,235,66,229,200,141,76,35,34,180,230,75,47,86,82,65,79,103,147,111,32,111,107,1,111,200,107,234,105,172,5,242,8,35,229,192,92,241,118,234,59,201,6,199,122,236,188,113,73,54,192,166,206,63,211,21,102,109,237,171,250,248,105,171,21,234,62,16,2,108,28,125,33,49,103,1,2,147,49,197,224,90,244,183,124,4,87,39,75,118,218,145,114,145,107,167,66,115,60,133,148,192,148,157,10,162,1,14,245,226,233,10,230,41,151,74,228,60,227,7,100,248,238,157,101,255,56,100,86,176,11,13,116,115,91,174,86,30,190,215,153,187,154,202,112,12,134,43,79,240,169,92,135,18,141,204,26,184,70,107,20,75,129,117,193,19,110,229,56,230,29,157,56,207,210,205,50,190,177,137,183,77,23,93,132,95,43,23,53,96,17,140,20,147,9,125,70,203,31,17,11,44,141,187,209,212,247,30,98,35,56,243,66,99,129,53,59,98,249,207,225,90,223,174,234,113,116,207,107,0,3,127,57,226,51,81,50,230,165,14,88,183,116,172,129,118,123,84,4,242,73,9,23,235,220,209,98,160,143,240,219,187,50,245,5,103,211,227,150,201,66,147,218,93,249,209,185,119,70,20,29,204,172,176,26,0,7,49,183,136,65,170,110,43,227,168,64,107,31,125,171,254,104,227,35,79,169,133,76,161,42,112,166,148,153,238,253,34,55,102,199,164,204,10,12,183,80,222,7,131,74,70,71,43,135,143,173,201,139,84,175,221,64,98,146,149,131,148,224,233,121,103,242,124,85,202,243,215,34,170,14,113,89,140,21,207,117,27,154,83,174,84,106,56,124,77,140,123,50,174,19,107,94,148,16,148,145,132,120,54,112,255,35,27,157,223,152,30,150,242,163,233,221,28,176,5,95,140,192,76,115,178,138,68,64,241,163,136,186,187,224,155,118,27,93,12,106,139,11,21,94,39,45,40,77,67,251,152,23,199,99,180,147,22,131,232,198,178,65,53,16,87,237,33,161,149,14,51,230,249,238,35,72,216,199,4,147,18,150,174,212,184,148,139,133,90,247,236,60,23,12,62,9,16,65,45,175,147,82,185,113,142,147,198,255,250,44,161,122,128,2,164,204,62,189,89,40,232,222,202,51,137,126,178,252,82,157,198,1,137,48,224,224,239,67,8,133,255,9,21,147,7,91,113,58,95,62,49,179,182,99,206,146,85,90,146,11,154,52,247,197,225,2,133,22,84,204,245,142,174,103,240,139,182,22,204,236,225,20,196,16,162,0,145,71,11,173,18,238,250,64,24,215,153,57,249,60,62,246,127,216,7,53,27,219,219,128,237,165,112,218,40,138,107,196,136,224,16,248,90,241,13,95,202,29,229,21,229,39,106,132,144,110,252,156,78,177,250,250,166,117,200,112,240,144,68,225,194,21,201,99,112,20,16,138,102,43,14,50,108,147,255,39,209,182,198,165,133,127,27,174,223,62,118,93,197,180,76,140,127,60,6,21,253,154,169,190,140,31,173,5,70,0,103,254,228,222,173,255,209,86,188,16,137,229,203,95,148,177,57,255,20,0,4,158,46,140,113,40,214,144,206,95,62,196,187,91,110,177,30,225,252,26,34,248,91,218,63,254,9,212,60,49,165,17,159,85,107,173,81,163,225,84,181,33,208,28,45,3,32,38,177,193,139,140,118,109,61,212,73,215,158,175,251,134,172,37,115,9,245,100,52,199,198,16,55,32,41,159,208,67,238,11,100,156,175,9,206,87,244,61,51,155,66,62,117,97,213,220,87,200,122,225,160,161,168,36,116,18,249,0,49,135,125,246,247,78,26,233,241,60,119,11,255,22,83,143,191,248,105,24,79,240,55,122,139,206,176,123,140,56,228,134,212,173,48,183,136,109,111,179,245,201,27,37,120,142,2,220,213,15,162,113,202,151,108,105,209,232,59,62,125,33,175,40,120,107,176,208,153,78,99,97,209,74,222,233,26,74,64,114,93,90,166,23,57,175,165,138,159,128,144,124,231,61,13,39,106,83,127,222,250,115,157,121,81,176,210,203,200,29,37,159,10,178,127,96,149,103,253,105,170,20,130,200,192,62,249,41,171,110,250,211,6,222,108,253,142,240,40,57,76,228,74,106,110,181,166,109,174,153,53,198,61,162,204,197,22,85,210,231,110,213,57,221,240,250,28,24,60,16,124,203,158,254,94,234,134,76,183,144,39,83,100,72,153,144,205,195,132,90,81,101,90,210,234,132,246,119,60,9,6,149,111,66,183,137,139,131,130,149,121,149,136,223,62,234,191,155,89,54,8,20,10,243,32,69,225,149,197,161,76,103,59,136,93,215,195,20,97,143,48,62,32,187,66,161,171,119,85,210,16,254,97,75,89,33,101,147,57,128,96,217,173,206,180,246,189,193,249,127,202,109,123,90,202,51,193,185,34,187,156,131,233,41,86,85,1,132,88,187,67,54,213,24,204,141,136,220,171,64,67,46,88,229,16,233,111,175,161,132,16,83,50,160,247,12,64,49,78,232,43,47,94,131,54,2,176,116,20,115,246,214,172,228,233,23,33,201,252,80,150,106,87,13,178,156,76,90,145,58,142,141,146,31,222,188,44,243,111,250,76,85,16,69,223,30,181,176,67,250,235,249,169,69,16,38,208,106,246,225,50,58,206,14,229,1,71,199,23,84,100,67,18,187,53,96,77,87,83,222,75,20,184,58,94,112,222,234,190,239,201,88,41,68,152,159,224,234,21,46,188,231,120,107,230,148,35,106,241,84,31,239,3,59,126,99,46,175,42,139,33,211,42,66,142,90,144,223,85,11,144,52,154,248,61,32,160,123,164,51,68,119,125,224,209,151,36,58,77,187,172,208,161,155,155,45,197,82,201,169,234,5,114,149,99,212,35,181,208,26,253,146,133,103,162,32,216,47,198,151,87,96,111,55,141,250,46,156,208,78,117,110,148,93,236,83,110,30,233,147,196,65,133,70,37,136,134,123,186,146,3,55,169,249,131,210,253,19,96,68,22,61,213,58,62,54,120,252,138,74,99,19,131,21,219,211,159,82,118,47,235,126,91,174,221,179,125,224,123,9,65,147,205,95,243,83,217,30,90,27,100,40,253,251,14,137,140,113,154,75,58,232,175,219,253,93,197,18,118,209,237,56,255,17,33,27,105,69,80,124,58,113,238,205,53,243,214,92,4,13,112,153,220,191,58,209,168,157,35,121,188,17,246,184,201,28,38,71,10,141,233,13,161,127,49,215,31,90,139,70,23,238,162,191,1,249,24,86,144,225,231,170,240,159,227,233,31,191,69,11,121,90,131,165,170,90,222,50,84,214,52,37,53,187,130,161,3,213,187,139,192,34,74,99,188,114,41,25,125,198,90,20,181,164,213,77,70,215,121,157,80,165,210,98,251,56,103,107,19,139,37,204,174,53,98,249,230,87,250,195,144,103,3,77,146,215,146,150,108,155,154,48,190,143,218,128,242,141,31,134,31,104,245,188,39,195,31,94,8,32,1,103,167,66,152,48,147,253,58,149,137,236,157,33,165,152,227,32,73,255,33,45,108,177,147,99,169,115,96,98,56,219,116,115,208,159,196,42,25,80,250,129,140,108,23,15,239,16,41,52,116,68,205,85,169,116,128,197,119,123,89,229,19,179,20,133,93,54,32,43,249,70,88,162,121,191,201,206,213,225,218,223,191,177,86,40,178,246,189,61,108,204,43,255,136,4,211,232,26,198,213,67,132,119,155,121,226,178,134,240,142,249,87,234,197,83,85,177,139,229,29,157,78,156,33,106,104,193,38,5,219,205,208,36,100,128,1,54,4,58,100,124,145,142,119,76,252,3,126,192,56,185,96,47,67,43,163,109,70,146,22,180,239,73,91,81,104,102,179,233,83,43,161,215,152,248,191,105,253,223,154,21,226,250,19,137,46,251,87,219,225,219,165,208,19,99,46,10,242,226,88,105,97,81,104,102,179,202,81,98,75,221,254,138,174,253,247,52,238,170,218,249,57,112,226,212,146,172,18,34,47,103,60,136,168,162,173,192,96,131,224,20,104,122,158,159,69,48,62,134,169,222,43,171,16,107,193,168,24,40,34,11,51,237,98,237,47,161,203,29,57,239,200,86,215,240,157,11,226,165,252,198,73,210,157,197,223,114,180,127,231,177,154,49,224,40,223,250,238,214,232,129,203,172,85,7,159,166,219,223,3,195,164,3,178,135,47,89,54,166,46,121,67,152,222,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,113,95,97,114,105,116,104,95,108,97,103,114,97,110,103,101,0,0,0,16,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,251,255,255,79,28,52,150,172,41,205,96,159,149,118,252,54,46,70,121,120,111,163,110,102,47,223,7,154,193,119,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,0,0,0,6,113,95,115,111,114,116,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,31,130,199,23,50,136,57,76,28,175,236,196,110,18,139,39,200,227,87,190,206,82,1,155,34,148,238,243,89,226,59,112,35,32,190,214,82,59,160,71,30,40,123,194,254,163,87,202,42,42,193,138,239,112,161,227,200,233,60,102,16,173,101,82,42,200,45,139,244,145,82,33,192,81,208,39,61,76,32,147,197,252,77,117,111,158,111,227,164,210,80,23,30,79,233,28,22,198,119,110,199,149,153,171,225,216,128,128,149,186,127,185,195,101,98,197,250,23,212,0,163,124,84,121,13,212,228,205,45,218,187,158,22,132,2,130,3,108,171,112,11,234,3,182,80,238,47,195,107,235,89,105,237,36,206,251,67,69,12,117,26,179,176,46,9,219,20,237,136,202,216,196,41,81,217,52,88,18,189,147,104,235,30,105,61,105,71,58,215,137,152,221,14,250,164,22,29,208,33,202,171,53,85,25,159,160,159,205,103,191,98,102,152,92,101,157,144,122,79,173,184,110,197,246,42,3,0,0,208,187,224,165,203,179,81,44,109,217,184,155,120,23,9,132,132,35,209,240,40,125,224,148,163,88,235,44,17,127,56,232,189,11,188,149,39,226,131,244,10,54,93,12,96,121,0,195,178,99,68,181,149,149,177,61,135,144,18,244,12,225,65,41,157,88,85,154,37,105,245,246,122,164,144,105,253,50,151,246,145,69,164,108,239,63,99,203,208,197,232,17,6,57,210,116,251,1,163,192,131,63,160,145,60,252,199,160,98,96,10,12,18,24,214,108,19,87,79,26,195,35,101,71,26,60,136,145,24,146,81,24,166,73,96,242,93,214,80,174,140,84,78,61,8,85,183,159,205,214,235,233,180,17,184,250,50,39,68,97,217,15,243,95,64,37,197,72,110,94,228,125,215,110,40,190,21,203,235,230,202,4,210,53,157,45,66,239,21,78,79,209,230,184,224,244,186,198,151,244,79,247,14,255,207,74,155,237,24,203,38,231,122,192,88,247,9,233,181,134,33,7,91,233,210,195,211,23,152,91,27,160,218,167,72,102,192,157,245,26,233,89,224,178,39,175,80,132,40,4,137,109,5,0,0,0,10,113,95,115,111,114,116,95,102,102,116,0,0,0,68,93,154,143,49,232,95,4,84,143,150,218,210,164,194,121,30,176,103,222,64,154,151,217,150,26,210,132,192,16,5,184,47,243,236,185,8,94,4,65,121,185,228,139,235,134,94,71,58,57,42,232,30,186,28,184,227,128,215,240,3,251,200,99,65,241,169,201,99,141,81,135,27,70,42,95,8,117,27,126,118,215,172,105,206,249,153,60,156,0,237,62,55,177,42,90,82,239,115,99,198,9,194,218,161,32,221,15,172,41,105,81,209,36,19,166,228,239,154,170,126,183,241,35,201,101,139,167,8,78,47,160,144,23,126,184,16,146,194,135,117,68,110,33,119,235,120,68,101,95,146,106,190,189,200,221,128,180,159,133,89,238,154,236,241,134,175,38,255,87,29,120,85,95,39,74,30,190,182,231,177,153,125,156,134,178,186,66,27,35,2,216,81,116,155,40,23,215,99,88,54,186,128,12,137,241,83,134,191,234,11,192,121,91,22,114,249,182,47,197,78,14,8,166,34,119,199,67,90,66,221,246,12,133,115,228,69,120,160,230,6,212,242,151,114,180,24,210,105,166,137,45,214,47,242,211,62,18,95,210,239,62,188,10,147,123,76,162,159,81,46,239,137,234,149,125,198,233,96,39,225,228,213,232,68,138,3,119,94,60,111,72,242,72,72,153,156,123,204,126,125,148,253,126,195,137,114,150,244,19,40,226,132,14,96,108,255,123,105,53,84,140,128,150,200,133,142,28,32,136,164,239,135,247,165,217,199,227,45,245,226,152,40,34,17,142,0,17,59,169,222,52,25,217,7,27,156,130,83,246,171,188,176,57,157,85,166,125,97,181,80,168,105,195,187,182,111,189,195,135,143,21,250,70,58,9,138,159,27,44,125,232,184,97,148,219,13,212,222,152,121,164,249,140,76,212,40,112,176,33,167,27,68,172,103,250,32,171,30,181,101,244,195,236,22,181,144,92,56,209,67,40,149,159,63,166,170,209,57,59,29,119,54,51,222,8,195,56,93,115,55,249,115,196,214,240,140,152,239,151,202,249,179,89,93,236,184,163,122,13,159,127,108,87,64,168,35,172,110,66,37,131,35,94,164,112,14,178,167,137,144,131,135,182,255,164,13,84,118,210,50,155,9,109,241,121,86,54,213,153,203,174,59,56,143,11,197,51,51,60,159,196,22,177,69,79,71,29,172,79,48,13,142,41,37,32,230,85,19,149,172,176,82,156,43,225,147,137,172,218,192,218,181,244,131,207,116,41,199,32,245,187,109,240,211,2,153,5,149,176,147,240,49,97,13,139,28,119,215,28,196,243,25,102,216,39,26,100,61,63,86,186,228,160,43,106,11,10,80,246,95,233,197,56,51,201,226,130,17,125,195,156,245,97,192,230,211,53,241,116,226,118,181,166,18,52,34,238,171,35,146,100,15,105,200,138,64,202,164,52,89,247,212,81,221,196,244,33,227,44,1,255,154,157,167,41,11,254,70,33,110,242,94,99,74,16,83,193,200,139,132,165,6,239,55,40,57,225,208,223,44,142,141,251,220,168,97,173,155,58,83,43,241,197,51,180,145,17,109,111,128,218,135,205,68,202,37,111,35,42,196,12,228,186,80,85,139,140,34,20,20,17,184,14,74,193,201,169,14,249,56,225,236,49,16,77,3,30,29,228,9,151,41,15,118,185,79,163,105,192,23,240,154,247,131,188,60,187,55,36,173,52,153,195,54,169,53,220,92,113,214,202,14,60,66,101,222,74,203,211,22,213,182,113,70,15,240,211,16,7,238,190,162,236,43,56,133,20,141,30,4,53,74,19,224,183,169,91,196,13,222,134,155,171,234,159,97,139,116,145,225,81,180,86,4,254,77,143,181,113,240,203,47,128,226,209,222,152,97,198,38,196,124,210,72,127,111,186,166,24,23,58,32,48,83,154,150,39,247,63,186,199,87,1,42,119,80,40,154,37,35,110,187,215,99,187,76,124,13,39,149,155,1,191,241,239,42,254,70,211,16,222,195,74,191,212,46,181,51,120,89,120,154,119,217,239,231,174,165,61,190,43,160,203,193,77,155,66,235,67,14,143,6,238,133,134,14,248,0,230,199,105,51,33,165,62,34,201,212,133,47,63,98,183,155,38,70,3,99,249,158,67,152,70,12,99,143,211,55,215,91,138,214,205,17,176,86,179,86,83,209,122,75,172,160,6,144,166,220,161,248,163,168,138,76,216,41,172,33,208,15,207,23,172,22,105,179,198,212,68,83,135,149,16,251,154,62,48,214,230,159,230,103,253,152,123,52,31,195,59,145,185,101,131,57,217,52,62,32,39,26,29,127,9,109,157,88,181,38,94,52,120,35,115,205,228,227,57,94,207,63,72,172,131,8,133,42,191,173,16,176,21,164,28,253,150,225,13,126,129,38,174,183,161,118,28,124,221,216,105,102,204,190,143,81,11,206,41,74,49,38,121,50,204,254,46,132,104,157,254,204,210,184,247,142,17,1,86,2,172,137,76,127,211,175,220,253,247,223,192,2,85,90,85,41,149,147,52,122,80,134,42,69,211,184,53,66,135,79,36,198,133,29,89,21,160,97,224,54,16,43,16,43,206,249,84,136,189,86,147,184,132,36,133,87,171,182,42,76,97,190,7,94,101,92,38,143,61,78,56,154,246,125,226,67,252,144,224,65,245,115,186,98,241,30,162,202,185,28,47,169,248,183,98,110,77,92,211,224,211,154,4,204,37,229,204,36,180,116,73,241,44,225,91,77,226,132,240,56,34,133,141,165,25,49,126,64,252,241,142,65,88,6,148,137,236,248,197,86,191,222,154,169,177,72,132,19,155,173,104,212,228,217,139,27,136,67,160,231,125,218,107,251,62,189,233,45,96,66,162,23,222,129,186,99,106,206,83,4,121,26,86,54,69,85,63,60,123,149,236,55,3,26,109,155,152,13,148,191,193,34,167,60,146,5,166,117,27,140,237,150,116,202,148,91,121,226,213,35,28,203,48,223,74,148,213,89,40,29,90,7,197,43,252,41,140,66,128,84,64,208,111,166,145,45,223,216,140,69,74,239,175,196,87,206,89,84,235,219,161,235,49,236,94,160,64,87,223,165,119,63,188,165,40,162,205,158,133,168,36,203,51,15,243,43,108,213,132,79,149,71,245,150,129,161,243,47,101,13,57,181,230,254,14,219,151,2,188,161,63,167,90,168,136,255,11,227,212,96,93,60,210,246,200,121,228,84,196,150,178,71,7,242,93,108,44,138,239,120,114,82,49,116,158,255,83,112,199,205,79,186,199,205,99,100,199,121,149,32,222,202,83,64,253,151,23,201,157,220,172,184,6,151,231,202,79,109,43,17,123,53,26,99,51,18,237,70,227,157,115,148,253,50,111,9,169,128,109,249,153,144,207,238,221,111,119,3,101,224,174,228,161,221,123,168,146,253,97,20,72,91,7,95,10,199,238,67,238,45,195,160,75,146,207,133,36,67,184,179,82,178,8,54,30,250,161,79,121,126,53,67,81,35,74,107,188,193,47,25,125,35,24,105,200,6,145,130,203,31,17,97,107,158,102,173,67,145,75,69,234,128,225,191,217,152,152,40,28,209,248,92,189,0,139,162,75,136,7,59,128,158,76,99,144,95,132,231,32,163,2,178,95,13,200,246,136,27,245,47,206,133,249,16,109,74,213,79,169,225,0,26,10,98,229,178,179,110,150,149,83,103,78,213,252,130,42,184,85,255,235,249,240,179,72,63,243,187,112,67,62,4,124,14,194,216,127,119,108,37,21,54,8,6,109,169,237,207,112,245,228,97,171,222,74,79,1,28,31,92,232,152,204,20,60,77,7,25,76,249,164,173,88,65,14,42,227,58,167,191,178,219,59,45,167,44,1,51,237,11,42,137,101,61,39,130,104,236,38,120,218,18,39,247,102,173,143,46,220,56,217,207,146,28,11,105,159,216,97,207,32,35,184,166,39,218,82,229,56,247,237,26,0,143,195,62,61,138,43,101,9,53,250,161,112,67,137,208,12,115,154,100,147,26,185,220,137,134,188,195,184,249,230,228,93,159,124,236,3,23,120,88,69,95,227,39,206,15,204,105,12,199,36,134,79,54,189,209,45,159,231,181,169,128,133,51,238,94,96,147,105,140,89,85,19,154,151,68,229,3,40,171,220,79,37,168,214,0,36,188,171,42,193,165,143,127,110,184,177,128,184,6,8,136,27,31,164,228,96,153,175,223,64,21,44,116,18,50,160,83,231,232,11,240,17,95,41,39,106,76,68,132,136,70,144,43,196,30,30,40,156,132,100,35,220,162,208,104,237,75,212,80,113,178,203,113,21,147,189,219,96,92,86,196,199,86,216,35,125,9,204,87,247,65,194,70,62,198,179,167,111,17,190,22,136,132,9,191,154,89,99,237,253,196,36,177,103,247,147,139,81,208,224,195,47,62,195,67,137,22,147,4,0,154,239,1,186,144,91,4,137,74,4,251,229,32,188,218,240,38,53,109,239,16,247,122,50,238,195,42,23,228,148,54,94,192,53,8,192,23,239,171,81,222,153,240,45,154,77,96,246,61,209,61,172,26,180,71,102,129,26,171,25,173,196,215,150,153,7,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,113,95,115,111,114,116,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,214,255,255,159,186,181,237,220,42,136,147,7,28,228,123,103,183,128,199,192,14,144,212,194,39,185,219,13,39,33,139,15,0,0,0,10,113,95,101,108,108,105,112,116,105,99,0,0,0,16,254,255,255,31,216,20,60,120,221,30,141,12,111,47,152,175,69,79,253,252,146,116,95,143,172,191,156,61,26,99,55,47,114,192,90,60,84,67,221,174,32,46,47,158,98,130,31,247,200,204,53,136,15,80,218,56,92,4,230,236,193,47,197,27,228,149,49,189,66,148,16,34,141,202,154,126,152,162,35,112,79,25,124,13,159,21,0,2,135,4,115,178,98,178,156,47,129,147,28,51,228,124,37,248,91,202,204,196,85,132,69,94,188,247,99,61,146,221,127,249,236,58,218,1,121,134,224,24,190,70,92,140,153,148,247,10,135,124,229,140,123,193,9,158,108,12,253,24,82,186,36,237,236,70,67,102,152,102,60,15,85,147,114,157,111,197,249,50,181,100,112,46,85,202,191,208,212,63,219,56,187,115,2,29,223,223,46,52,49,154,170,17,202,134,84,224,242,240,119,164,62,90,17,155,168,229,91,220,238,11,151,230,90,110,72,120,112,148,224,222,162,252,247,46,153,121,185,36,165,232,74,16,184,35,142,148,130,89,186,10,0,217,18,139,154,0,157,116,95,145,118,215,127,138,60,36,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,49,143,63,165,179,63,178,4,149,112,66,138,219,229,101,20,49,148,139,75,249,166,245,117,127,205,155,75,244,176,30,159,20,30,106,206,34,229,86,179,101,149,22,216,116,248,45,68,224,106,151,134,245,205,117,160,110,204,59,240,15,131,234,43,49,128,108,227,188,175,120,188,75,53,166,236,180,242,99,238,201,160,96,29,68,36,104,208,190,60,101,87,223,249,199,131,23,67,185,163,99,250,96,234,56,10,244,211,236,204,38,42,138,240,75,132,104,100,139,43,203,60,89,238,122,218,231,39,33,172,108,141,82,36,48,232,16,220,11,73,75,243,29,116,87,136,24,166,72,251,209,77,155,74,192,2,173,65,180,185,30,56,121,171,255,52,250,75,227,227,134,97,88,232,234,11,116,203,164,107,28,18,29,88,248,226,171,130,227,66,160,208,49,104,134,70,203,238,12,151,51,217,76,43,229,197,142,121,29,93,127,110,246,27,69,179,67,202,14,187,9,243,195,39,12,0,0,0,14,113,95,101,108,108,105,112,116,105,99,95,102,102,116,0,0,0,68,169,141,193,177,252,167,249,183,151,115,219,154,20,114,92,17,201,181,138,249,177,228,210,142,109,8,8,237,29,163,212,71,144,42,209,95,62,115,18,235,136,102,158,33,244,234,72,74,0,86,179,112,118,192,192,162,55,182,202,110,60,86,6,7,47,223,66,146,12,253,123,182,124,225,51,154,218,97,71,192,102,183,6,56,130,36,186,120,155,150,0,2,57,230,152,86,109,226,47,125,253,88,146,222,214,6,201,240,87,19,130,16,149,0,107,177,4,247,137,165,243,163,110,222,160,6,201,15,54,53,180,158,23,32,4,28,230,53,52,47,142,197,170,223,101,173,74,239,171,106,171,115,140,169,226,6,98,202,6,16,75,46,42,220,72,13,34,12,150,12,220,228,20,126,236,3,80,171,3,7,4,217,51,141,233,217,197,85,145,199,199,55,226,174,13,2,136,117,50,219,136,88,81,125,75,42,93,131,57,97,55,168,75,54,120,252,152,5,5,168,214,161,200,14,101,64,140,51,9,2,48,147,118,191,30,228,71,9,150,4,221,195,153,79,203,30,198,181,182,206,231,75,209,171,86,28,243,170,204,225,205,160,145,112,85,201,110,59,193,49,236,104,51,154,107,221,226,245,231,86,109,232,7,244,235,129,200,45,34,125,145,40,244,128,89,42,49,125,152,86,218,0,161,63,79,60,231,176,132,4,6,193,209,123,143,45,255,160,37,22,158,80,169,121,32,27,17,198,97,81,202,181,218,206,238,212,206,127,20,64,135,144,110,175,180,240,11,211,183,161,141,52,211,104,158,129,172,233,22,213,48,72,240,199,206,245,114,64,99,215,43,133,206,68,83,46,6,232,32,4,23,1,31,11,74,123,19,33,31,78,137,199,219,216,95,128,165,125,197,99,205,109,238,5,56,37,116,175,0,232,120,112,211,42,13,31,128,194,107,120,91,160,85,64,149,152,194,49,48,213,185,152,112,134,106,111,231,134,196,91,54,1,135,229,254,61,186,86,98,94,120,120,25,43,252,104,230,211,254,79,166,91,37,34,68,7,233,58,129,190,65,109,124,76,220,116,137,109,41,72,243,231,233,62,39,148,51,99,100,120,206,42,146,40,70,160,251,67,156,40,170,144,124,138,57,133,106,251,161,7,255,48,30,1,173,77,6,196,65,239,11,201,173,180,240,7,109,121,252,125,77,62,24,228,147,234,150,21,246,224,147,142,171,0,94,198,26,116,215,207,251,103,242,182,235,13,78,75,242,246,196,168,191,223,34,137,236,40,75,18,58,221,177,51,116,74,102,114,160,186,228,27,239,251,126,203,71,52,16,30,88,166,32,156,7,29,194,34,255,194,171,18,198,181,240,200,191,25,236,91,80,190,241,94,246,195,1,169,175,114,248,26,219,91,64,15,123,16,214,248,30,30,92,29,221,187,91,136,28,70,151,15,252,230,163,103,228,235,245,127,79,215,226,65,201,153,70,243,150,13,62,25,10,67,161,81,49,127,94,13,235,61,236,62,77,238,27,20,22,215,192,188,24,142,158,162,245,107,80,144,255,253,62,125,164,66,143,238,113,75,49,116,15,35,132,10,221,91,222,212,119,51,63,15,11,120,20,149,189,20,89,145,113,84,66,55,187,122,55,152,98,83,14,237,1,40,192,160,32,7,7,161,5,110,178,52,211,161,57,68,243,135,211,185,177,65,179,68,60,64,18,52,133,83,21,51,200,19,64,49,164,2,101,161,151,85,51,135,48,36,239,88,109,178,98,155,63,164,199,8,93,184,142,157,234,154,91,35,250,46,124,179,21,86,6,219,91,246,5,68,157,60,28,95,231,188,63,36,84,142,0,165,255,105,205,211,179,0,235,11,235,71,208,30,172,250,203,45,159,171,92,204,236,49,111,189,145,187,251,89,65,36,150,157,109,137,12,246,135,177,192,130,65,47,134,90,109,203,60,38,88,219,100,254,137,229,52,108,210,172,218,12,39,192,4,249,231,230,242,6,128,120,2,225,187,58,45,58,167,206,114,63,253,145,181,191,195,1,105,149,120,43,133,83,201,224,133,200,122,77,154,3,80,76,53,252,160,67,226,0,215,101,150,1,157,83,245,122,43,186,80,96,7,145,165,172,66,174,143,222,15,33,176,53,106,216,247,227,6,67,91,145,7,24,33,68,145,112,89,207,123,182,175,122,250,23,36,194,85,215,74,236,7,232,8,71,149,109,45,222,175,14,130,57,214,129,41,106,158,223,128,96,79,151,146,58,16,69,18,32,164,85,248,46,51,247,151,11,252,51,170,249,229,88,117,251,69,118,77,116,102,202,41,93,51,110,203,86,23,190,56,181,114,24,97,93,71,203,237,179,220,166,56,110,45,90,118,195,18,244,182,129,90,193,74,91,77,67,18,128,118,107,36,216,78,122,249,214,240,113,129,74,182,54,40,67,23,41,249,74,200,26,27,139,252,243,37,36,218,10,117,3,56,108,226,70,115,181,151,157,204,40,28,82,213,99,14,15,213,93,159,5,128,88,139,236,13,191,191,240,187,97,192,254,91,241,61,2,248,109,164,21,210,4,186,105,253,112,106,127,51,18,8,153,95,53,250,62,158,160,57,37,228,224,146,7,189,191,68,12,41,170,95,57,31,175,15,192,203,37,82,225,119,88,27,163,28,242,169,199,32,237,134,170,25,199,44,12,59,42,201,98,110,219,251,164,197,128,25,94,236,20,145,90,52,17,74,163,114,151,136,98,22,245,53,221,49,67,162,65,37,70,14,75,205,135,96,173,152,109,14,183,45,170,208,144,108,73,151,58,206,92,122,16,113,158,96,241,44,126,42,210,3,196,4,119,196,116,132,94,227,17,236,40,205,143,122,20,163,32,25,210,49,188,8,208,244,49,91,201,213,129,183,81,160,197,228,37,201,189,250,136,158,100,44,87,161,206,67,204,240,31,68,198,90,232,57,192,210,216,158,7,153,104,182,164,67,94,104,142,182,154,102,53,252,246,194,248,248,239,160,157,34,35,220,74,16,119,234,217,106,245,105,234,100,189,209,177,229,48,186,184,224,69,83,86,240,130,215,184,237,119,190,62,146,25,155,154,102,69,38,249,233,126,185,128,205,76,146,193,32,22,125,220,73,64,44,2,146,39,217,253,215,113,192,95,30,21,224,139,195,96,190,151,110,90,225,103,240,236,92,64,115,218,97,84,191,60,50,123,162,222,252,212,90,131,206,95,156,74,72,176,233,119,36,186,137,240,210,170,238,81,155,252,100,3,140,242,201,129,55,80,250,135,5,93,206,64,8,206,106,78,254,138,58,236,220,41,25,77,175,132,163,107,93,58,152,138,170,85,143,193,84,20,57,13,217,77,166,60,59,5,39,77,189,48,155,202,102,78,75,64,54,191,245,26,32,87,10,84,237,213,217,171,215,238,147,39,130,114,144,109,170,199,251,21,172,147,219,16,250,1,130,103,173,167,157,40,175,194,214,70,121,143,246,25,182,63,176,217,197,207,255,176,144,205,110,40,236,39,59,0,37,238,117,40,106,93,31,129,11,1,243,233,49,44,4,125,117,133,171,228,218,167,236,224,55,58,89,74,214,96,220,128,0,43,191,255,23,45,21,23,230,74,188,27,5,209,84,154,230,110,15,115,51,251,151,235,101,162,162,85,186,243,207,3,98,196,211,146,240,39,46,221,92,203,40,207,3,93,7,95,202,167,253,91,38,123,106,76,103,25,243,40,113,211,222,145,174,200,214,214,163,73,202,216,254,82,196,77,166,37,10,238,198,207,0,239,17,50,14,38,201,219,91,13,164,103,5,154,172,203,65,163,203,58,102,33,171,40,190,214,184,18,241,115,9,102,131,70,18,231,147,143,162,177,219,67,80,58,18,25,155,10,223,188,152,219,128,80,66,196,58,129,167,182,24,65,29,94,97,202,75,142,152,60,36,36,208,75,144,155,108,37,145,247,1,250,220,142,153,122,228,206,184,35,46,234,43,253,239,251,46,36,196,10,160,162,160,31,74,78,80,24,91,153,129,157,115,176,113,115,18,36,3,237,221,116,123,216,253,250,40,228,189,90,0,195,199,3,27,237,12,55,246,139,19,253,79,158,21,238,189,244,42,18,48,37,62,213,132,153,103,127,5,77,208,97,198,124,124,239,7,105,123,67,168,51,1,88,175,159,144,173,51,55,235,83,107,19,239,100,208,246,119,192,177,105,125,31,212,199,24,82,27,17,226,69,2,102,13,204,126,222,198,12,231,34,145,176,209,251,160,5,238,92,79,122,121,146,58,110,233,170,173,175,83,194,50,0,191,40,5,162,197,6,185,206,218,249,169,173,151,228,76,35,161,95,149,114,127,129,144,216,0,11,132,64,207,73,137,19,26,181,234,6,98,186,241,238,46,206,2,33,157,94,58,229,184,66,222,61,172,235,139,36,132,25,87,230,178,219,145,50,211,2,231,8,157,65,48,241,0,42,24,203,77,162,54,97,176,77,248,44,248,229,168,18,227,88,126,7,179,1,236,93,182,250,108,1,244,46,233,38,81,108,228,56,36,149,35,117,71,237,167,13,38,70,221,111,105,2,90,240,227,239,191,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,113,95,101,108,108,105,112,116,105,99,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,255,255,239,214,233,131,137,84,85,244,166,177,90,120,158,229,198,64,57,126,51,67,41,87,152,227,167,232,152,149,29,0,0,0,5,113,95,97,117,120,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,14,98,185,157,70,32,77,110,65,146,111,153,205,178,121,23,38,174,65,173,65,204,158,25,79,36,26,216,127,161,35,26,20,167,109,140,55,182,146,247,225,96,169,185,132,68,5,73,141,23,25,236,169,22,68,204,130,250,43,78,115,165,176,130,4,58,249,173,113,54,167,41,48,102,196,113,76,95,232,247,246,123,161,82,11,134,75,28,78,7,37,157,229,162,35,164,27,183,21,74,65,49,133,37,120,198,232,3,254,132,235,141,160,208,14,182,184,66,230,152,239,134,217,62,160,207,54,15,33,208,106,70,36,91,136,113,98,254,29,112,81,192,144,201,80,187,79,243,5,139,141,155,76,153,241,97,36,29,40,224,8,224,92,122,199,118,215,32,124,33,107,164,146,183,9,79,56,110,2,25,227,19,120,215,250,77,65,85,5,73,18,174,30,56,78,92,44,122,175,203,116,58,242,2,138,100,19,167,173,64,79,191,125,216,155,156,88,68,211,63,246,144,79,130,29,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,33,159,70,98,169,115,168,115,2,255,0,32,172,149,110,28,2,175,22,212,63,234,166,54,105,5,134,89,97,209,42,74,28,90,146,115,184,221,98,234,97,48,199,255,244,3,227,234,154,69,63,149,215,159,1,132,53,47,116,227,109,205,157,225,43,199,6,82,126,93,78,184,19,43,172,71,45,233,255,59,49,225,182,46,118,48,250,51,106,34,123,148,251,207,42,192,20,74,234,181,174,98,112,188,203,202,135,181,123,195,252,165,135,140,73,203,200,115,95,183,200,162,198,242,64,163,23,85,15,49,149,185,203,56,109,112,225,146,82,73,40,136,87,106,215,161,8,142,123,43,184,180,107,144,174,207,188,85,38,132,39,33,163,133,40,29,30,193,199,111,5,21,231,144,222,228,239,238,85,104,158,162,205,120,189,219,94,220,219,41,60,182,17,201,177,163,195,25,70,22,207,86,126,182,239,227,212,140,122,28,9,194,3,222,169,179,95,229,204,241,234,225,254,225,18,0,0,0,9,113,95,97,117,120,95,102,102,116,0,0,0,68,245,128,243,49,17,240,238,27,160,80,220,98,132,33,63,4,226,3,55,178,201,49,204,134,192,62,139,25,43,65,241,95,47,104,232,150,70,205,167,228,122,201,35,75,242,71,178,170,129,50,129,197,159,239,105,210,65,213,7,156,99,128,113,45,109,20,188,192,139,168,112,81,179,152,8,44,64,168,16,10,246,193,163,161,10,175,55,85,54,64,194,204,192,161,215,90,236,80,252,35,133,229,43,95,30,161,59,175,206,165,230,119,98,70,177,255,207,152,185,132,89,246,234,212,78,208,78,71,32,59,200,140,63,173,19,175,92,138,83,220,104,237,155,152,154,146,83,124,101,206,140,153,174,202,74,79,245,145,80,39,168,193,103,198,10,107,29,25,212,251,63,116,202,212,142,233,225,159,31,92,110,52,203,147,32,249,72,144,255,140,183,29,81,194,242,220,204,124,238,195,232,160,79,235,237,232,103,111,229,14,48,88,242,155,206,183,164,123,118,226,17,138,79,43,85,185,212,236,247,17,45,161,138,236,203,117,168,66,173,82,160,69,158,47,79,176,90,114,26,84,5,132,88,2,162,90,214,246,198,179,132,112,220,213,81,39,174,202,193,5,81,152,54,79,92,247,72,22,73,61,73,59,138,101,51,157,226,93,10,139,218,62,199,164,221,63,9,15,37,35,177,212,42,12,207,182,58,112,98,108,202,109,232,215,21,30,104,117,222,56,176,32,188,42,187,167,5,108,59,254,164,227,189,247,3,226,185,209,51,157,117,248,186,77,219,224,6,107,198,100,230,79,207,201,33,71,254,106,251,133,199,192,25,230,216,21,208,111,203,14,178,163,70,89,144,93,162,76,29,59,254,164,191,60,139,108,135,38,18,31,42,214,85,29,228,242,118,28,242,77,246,225,79,191,155,33,120,174,223,40,214,156,250,237,31,29,84,102,34,155,46,135,220,37,228,47,111,177,70,126,23,116,228,116,173,178,70,142,253,225,203,43,169,11,130,106,215,31,80,133,247,140,218,137,37,1,163,71,172,91,10,27,189,190,62,253,172,121,62,152,179,181,119,184,222,228,243,29,172,58,99,172,117,217,221,25,181,30,63,96,25,206,109,81,231,50,163,17,102,30,185,23,140,35,249,179,158,33,170,67,79,38,5,115,78,198,108,74,41,131,228,235,99,157,218,176,240,110,6,36,15,112,189,232,87,167,1,184,136,246,233,24,31,6,218,248,171,75,64,233,58,214,94,121,78,45,42,231,143,208,112,139,13,106,140,51,131,4,188,240,81,167,143,11,249,71,86,13,36,161,105,19,90,99,103,237,228,164,41,206,41,144,253,100,38,176,48,59,88,222,151,255,132,25,139,253,96,82,91,244,3,135,129,253,5,180,205,96,234,2,122,128,15,165,76,252,7,117,136,95,217,44,79,114,47,55,237,107,4,51,53,74,166,16,91,239,226,108,156,29,45,32,151,11,1,216,212,238,9,170,28,72,16,203,222,15,62,115,75,249,103,20,233,69,114,163,86,87,76,129,243,235,53,63,148,227,61,60,102,205,211,10,184,198,148,243,12,112,116,22,136,96,81,1,61,239,74,164,254,239,0,63,50,93,7,235,83,31,51,237,67,18,83,221,12,95,124,46,76,87,178,216,119,123,82,28,101,36,93,212,50,249,161,49,95,107,47,71,140,41,146,237,198,248,42,203,206,34,69,252,108,175,219,19,218,27,225,91,15,140,125,246,141,0,202,204,27,67,141,49,9,251,104,30,182,70,171,55,136,35,251,205,48,15,157,176,162,185,213,89,195,28,24,204,84,12,92,40,254,169,179,221,140,211,46,24,244,211,22,59,175,149,168,207,156,89,216,75,100,39,10,96,32,91,134,22,255,249,119,48,245,27,7,27,95,11,105,208,222,156,72,40,252,231,64,124,241,244,207,168,185,173,129,52,148,100,178,12,192,51,96,183,96,40,159,4,165,226,73,156,188,191,13,13,99,129,129,206,232,92,240,75,71,180,62,22,163,64,214,99,69,249,190,194,88,182,101,106,3,156,93,102,132,52,66,35,92,26,17,28,82,192,78,80,254,76,129,37,223,57,68,136,159,83,221,200,178,145,138,190,170,70,139,174,129,107,3,123,220,99,44,98,67,255,162,2,143,222,154,90,45,76,65,14,38,39,81,206,240,61,54,155,251,60,34,200,254,255,138,55,168,117,213,59,99,4,176,154,253,250,244,53,86,92,67,112,100,20,52,228,87,74,27,64,249,101,136,99,131,239,94,64,134,57,74,73,189,19,89,20,181,240,127,23,15,194,77,236,75,227,235,141,39,108,86,144,80,182,104,247,62,150,111,96,112,75,180,199,184,231,13,223,7,55,13,41,45,217,20,56,88,95,152,133,254,212,140,8,163,217,62,31,167,57,129,120,21,213,119,125,54,214,220,27,69,184,4,8,191,111,23,35,66,44,6,220,192,201,66,85,134,125,16,249,248,219,141,101,22,38,172,97,17,180,106,7,63,161,32,88,234,176,170,119,21,59,201,71,192,203,6,248,245,44,182,200,81,13,77,151,121,83,155,172,253,17,76,140,55,34,187,41,64,56,106,2,15,60,229,0,204,68,208,118,233,135,231,226,109,169,71,243,236,138,119,94,142,241,251,238,199,167,68,12,60,181,88,130,134,6,75,255,62,23,4,183,48,204,174,251,83,190,124,75,23,121,88,145,178,97,55,32,226,108,100,94,223,209,155,77,80,238,238,88,248,196,185,211,217,21,137,190,165,12,155,77,14,35,82,225,154,199,149,233,65,218,174,11,111,150,1,16,67,216,93,41,38,53,241,39,112,202,123,108,129,170,232,1,139,226,90,40,153,148,176,241,148,230,163,41,84,34,169,20,167,209,149,95,61,120,85,205,41,78,1,79,78,182,165,67,242,247,207,45,192,160,174,221,197,117,58,3,246,134,15,91,88,244,183,26,201,68,157,117,243,102,177,152,180,81,60,86,130,214,34,148,93,212,151,216,124,15,73,28,46,83,160,121,188,206,41,204,100,136,93,149,167,238,232,194,126,93,108,192,185,227,149,154,96,198,12,198,3,122,172,60,87,143,85,75,144,76,171,91,165,98,21,241,255,183,13,29,7,141,39,171,211,180,142,7,189,100,46,66,141,143,215,28,135,98,160,194,109,84,69,178,6,46,161,50,95,216,93,181,183,197,169,24,7,186,114,198,48,48,209,177,216,40,134,77,136,110,117,147,136,244,65,36,162,146,242,181,79,17,66,110,243,190,194,199,240,140,64,243,25,160,213,127,191,130,29,44,254,125,93,31,136,129,163,157,198,1,166,146,34,31,209,219,124,29,131,158,191,208,52,27,165,93,167,3,6,137,122,96,211,224,200,123,91,247,138,25,177,239,230,37,108,158,205,19,243,126,58,178,137,107,102,171,15,202,124,62,48,101,209,72,105,249,243,144,20,124,82,5,165,155,201,35,195,234,112,47,119,204,201,98,60,187,218,183,16,220,131,21,242,138,73,7,90,44,94,167,237,223,120,138,119,42,116,39,99,123,75,254,194,110,59,51,74,68,37,81,178,22,15,184,224,84,85,7,236,192,45,143,249,236,208,248,251,105,177,93,98,125,88,215,209,245,34,254,73,255,101,198,96,250,165,3,165,211,30,9,7,157,202,183,26,167,166,11,215,237,118,7,6,40,187,8,180,82,192,232,151,204,208,255,246,246,232,158,221,126,157,18,241,234,76,192,70,120,245,38,168,155,135,45,34,81,219,181,254,245,169,53,13,91,49,89,146,66,212,47,45,5,127,95,39,115,34,187,100,151,131,113,109,123,13,86,32,211,187,27,169,74,252,169,254,128,179,64,149,96,29,48,94,147,1,27,117,235,190,4,123,157,115,73,121,206,109,20,21,169,218,44,98,230,211,199,170,166,223,191,98,19,96,191,115,42,27,68,103,144,177,128,59,20,233,184,58,146,121,236,188,118,0,149,211,22,205,67,47,16,157,76,213,164,1,241,51,140,156,81,231,83,44,172,70,119,46,103,252,1,199,168,137,237,183,210,126,88,182,150,110,160,173,165,52,28,131,64,17,84,202,55,45,70,249,122,144,155,189,211,211,212,244,209,110,230,170,205,245,44,185,97,6,202,26,79,17,14,185,204,4,141,87,37,44,171,86,133,157,153,145,219,248,181,36,39,30,32,214,65,133,206,75,156,2,58,75,95,103,122,5,48,36,240,35,56,32,227,14,120,167,62,10,190,23,75,10,74,244,105,77,88,47,164,4,81,122,113,1,226,115,147,31,154,18,36,190,64,13,159,62,210,117,122,180,193,84,151,253,150,103,114,193,34,197,181,94,141,7,193,94,106,195,79,84,217,46,130,84,16,171,229,203,94,149,37,158,172,206,102,39,23,138,221,172,22,195,92,90,54,114,83,4,77,85,124,233,230,242,206,207,50,233,116,114,61,245,87,182,27,104,225,71,78,209,100,156,220,89,129,117,90,154,12,157,209,49,237,210,52,175,87,117,34,174,221,234,54,190,106,252,228,150,31,238,4,227,188,221,252,156,112,158,214,82,150,64,165,12,152,82,203,22,227,64,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,113,95,97,117,120,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,255,255,63,243,29,26,54,126,34,85,70,71,209,116,213,19,13,186,177,237,214,177,143,134,119,235,65,170,16,160,43,0,0,0,7,115,105,103,109,97,95,49,0,0,0,16,42,138,78,31,22,241,9,27,63,151,72,223,65,50,93,49,40,171,194,239,223,218,171,125,10,0,226,179,6,7,102,41,155,136,1,7,211,5,170,102,131,52,185,14,21,191,60,88,67,42,202,21,70,244,63,41,251,79,73,87,126,191,118,21,236,229,182,148,147,138,148,82,191,204,22,211,79,0,147,87,36,32,196,108,110,188,170,29,179,102,253,179,4,43,33,39,172,50,51,21,171,80,254,181,221,56,210,138,244,34,204,78,237,74,178,11,244,124,6,155,5,170,29,157,248,91,196,45,197,241,88,154,202,242,27,87,55,112,0,102,163,130,55,18,148,101,92,45,19,212,11,152,122,58,162,48,235,218,50,23,81,188,7,159,79,217,146,220,67,20,65,167,200,155,105,76,139,42,171,81,187,158,37,48,142,138,180,182,172,114,194,48,230,59,101,23,145,248,38,152,4,193,60,24,250,23,252,194,129,236,241,6,158,230,163,112,165,95,111,202,159,221,248,32,136,74,185,79,226,220,236,5,98,63,189,28,126,57,169,14,110,179,184,195,178,65,229,60,34,120,92,100,65,81,19,47,208,240,60,96,179,1,161,78,183,87,64,174,243,82,1,123,244,108,5,5,108,136,72,242,46,71,34,57,27,113,193,26,203,145,154,213,66,247,62,176,158,202,3,171,193,100,182,14,23,153,61,40,141,196,132,157,221,239,51,135,163,216,114,40,8,159,189,11,60,62,221,125,19,90,86,16,98,37,104,40,50,145,91,131,112,249,187,124,36,15,129,137,197,216,169,45,184,150,60,151,54,113,48,36,115,51,88,58,74,169,39,152,240,56,49,171,76,190,84,42,227,174,29,156,224,235,144,25,61,87,100,18,143,165,66,14,172,221,206,16,242,70,220,48,26,109,204,46,14,98,38,228,172,46,55,212,185,157,208,16,151,150,124,203,141,192,145,45,116,192,156,138,29,158,49,243,95,162,163,35,159,47,69,85,93,71,155,82,94,35,72,43,5,123,221,107,26,53,181,248,79,150,48,104,15,225,21,254,229,177,75,0,181,182,52,101,26,84,8,122,52,215,145,31,220,126,182,92,255,228,65,212,238,44,109,168,192,146,74,216,111,208,42,243,141,249,117,136,198,224,222,212,151,246,65,24,0,0,0,11,115,105,103,109,97,95,49,95,102,102,116,0,0,0,64,148,184,185,173,190,25,116,111,9,178,51,127,41,110,248,113,70,9,193,74,66,107,240,154,176,180,84,222,89,219,5,46,84,182,34,241,16,102,96,243,71,95,26,137,105,29,43,236,74,47,176,53,245,106,184,164,123,237,153,22,111,24,212,57,255,174,2,248,67,137,166,237,90,208,120,116,243,245,223,136,164,23,21,36,53,118,164,202,238,121,148,125,137,228,77,36,215,192,223,13,62,154,119,179,157,115,211,230,101,65,211,98,80,67,84,160,107,43,216,82,61,176,245,224,46,170,82,36,61,230,134,123,159,177,183,214,102,212,72,190,215,48,37,118,31,142,121,63,225,1,64,56,210,115,246,218,137,181,24,80,137,110,230,180,248,36,36,148,132,117,209,75,8,225,83,206,154,149,194,23,109,238,121,140,3,117,210,103,213,148,164,41,115,175,53,183,33,180,171,176,169,135,44,102,160,164,246,100,222,63,228,166,157,30,230,68,97,108,54,44,133,42,29,2,119,78,143,212,184,142,169,83,208,132,174,93,14,14,229,86,86,169,104,219,42,99,166,66,240,224,78,5,149,72,135,53,161,77,10,45,57,235,205,56,90,225,193,152,250,43,141,244,176,109,115,188,52,227,112,20,120,112,210,100,190,186,203,62,11,183,20,207,125,199,197,165,19,58,6,20,98,121,248,156,137,208,208,61,46,24,143,188,140,131,133,139,168,18,198,13,42,204,200,244,199,208,65,39,249,229,28,8,241,131,234,232,239,106,73,118,114,52,47,238,64,91,162,132,194,17,33,11,159,238,208,98,227,49,119,40,106,60,3,4,121,216,165,119,42,36,174,19,173,10,78,195,187,104,217,236,120,191,133,52,171,118,247,61,42,74,203,43,200,231,26,33,44,109,176,78,247,41,14,252,43,173,248,139,97,89,234,157,169,191,98,74,166,147,215,16,99,112,125,93,226,98,219,227,147,206,13,182,176,155,204,32,62,79,19,131,100,147,159,44,21,102,181,13,121,194,159,40,213,93,36,192,179,213,237,79,108,6,201,15,49,189,40,84,53,228,135,170,182,114,181,156,113,96,186,63,96,65,117,1,155,59,102,224,214,16,247,98,83,25,164,169,31,56,33,229,204,154,199,45,145,197,29,249,245,29,218,35,223,242,16,223,37,168,147,241,237,229,233,124,4,197,249,157,61,164,169,125,224,187,144,7,4,132,62,175,64,246,144,14,117,70,155,109,1,53,171,40,136,221,150,38,144,25,113,73,37,222,202,168,234,118,96,45,124,24,136,76,151,22,213,4,25,31,132,77,107,172,34,134,215,1,42,87,184,122,186,117,91,121,190,24,0,10,116,252,28,20,166,246,220,21,38,51,0,14,190,180,18,5,91,113,101,199,215,141,28,97,92,2,17,239,151,81,243,95,44,4,37,119,153,184,31,197,157,22,203,47,79,249,73,240,180,232,196,167,29,113,108,79,18,24,190,177,223,4,194,220,100,171,131,148,222,27,21,164,95,22,95,60,103,174,61,128,131,85,125,78,49,216,187,114,42,5,173,214,99,22,71,45,58,170,57,253,245,122,108,241,28,36,172,33,7,216,209,230,164,161,134,226,161,163,227,247,177,44,158,105,96,184,77,56,243,48,10,77,252,79,111,188,97,50,233,127,36,165,230,149,39,242,97,49,162,179,112,34,211,41,203,24,125,76,113,236,170,22,200,251,63,158,111,31,1,56,57,30,118,11,48,74,45,80,113,63,140,234,82,111,129,180,94,139,106,222,151,80,54,50,31,212,224,135,248,182,1,64,195,111,115,166,68,49,102,72,159,84,238,79,219,143,125,246,163,139,196,252,201,6,182,15,192,25,6,116,48,61,69,42,123,100,65,60,11,24,45,6,170,17,95,215,60,208,91,146,23,61,123,163,23,248,142,211,42,127,203,185,231,32,241,30,186,78,139,206,223,50,72,74,245,254,241,126,142,51,152,108,156,195,96,210,151,35,173,131,84,181,3,29,91,44,31,2,191,81,177,116,180,83,77,136,160,87,73,170,147,210,130,239,60,80,29,161,228,217,56,162,181,35,51,86,154,13,97,55,189,139,112,130,179,241,222,130,124,42,101,161,168,111,162,198,14,43,79,91,114,85,49,71,89,198,195,35,142,231,3,75,211,39,204,113,82,178,117,71,201,70,215,192,255,242,230,251,135,225,41,156,220,78,145,100,216,121,146,1,246,84,232,86,208,250,58,193,241,122,92,239,213,99,94,235,109,82,8,60,221,254,184,124,228,206,129,103,201,223,110,104,145,58,184,93,242,212,62,224,19,16,213,58,70,97,105,15,249,109,39,194,52,200,69,63,0,234,245,206,30,169,218,99,3,180,49,76,164,9,53,238,93,28,178,191,101,1,35,109,238,33,138,177,223,73,201,121,120,32,87,14,128,82,16,12,136,89,224,26,135,24,251,34,50,133,246,203,41,224,200,69,70,38,188,205,100,56,150,195,219,81,12,51,232,35,251,180,185,239,241,5,203,52,114,26,28,91,12,74,126,249,179,181,98,93,212,119,222,249,43,229,160,242,255,52,102,196,235,231,239,183,205,0,115,13,150,239,181,135,250,233,0,243,112,27,127,10,144,137,33,131,151,70,85,206,37,135,222,61,175,15,230,255,185,81,139,142,66,55,121,24,130,168,195,170,244,75,255,56,5,176,239,73,76,187,120,55,113,11,33,70,216,6,198,240,42,68,189,132,47,36,142,150,23,119,11,253,212,39,206,116,66,65,116,47,197,233,4,181,185,234,160,39,55,221,31,34,103,76,117,132,83,184,66,106,208,28,229,86,49,137,196,213,243,222,57,228,61,144,207,149,238,3,67,140,122,236,201,18,123,64,121,14,219,131,32,28,124,31,48,28,128,94,46,72,175,132,52,228,48,198,16,78,19,40,232,250,210,77,141,149,141,80,179,232,78,164,239,153,32,140,111,135,220,88,54,72,91,169,81,125,182,190,186,222,87,4,113,253,244,95,127,78,28,44,182,145,32,150,52,110,8,47,172,155,238,198,54,115,57,110,109,224,195,192,236,1,48,48,170,199,161,244,225,164,65,60,169,120,156,243,6,31,219,165,139,113,175,24,115,181,11,109,136,73,216,221,186,90,56,61,176,48,180,84,65,197,186,39,63,251,100,241,217,78,81,1,214,220,138,10,100,213,255,18,215,120,228,11,179,245,186,208,25,248,153,193,125,60,227,55,68,205,183,6,146,146,98,170,239,249,85,216,195,95,37,134,135,177,173,124,78,248,14,251,153,23,174,20,183,67,80,62,255,185,42,13,79,165,192,247,206,73,121,109,91,117,84,223,189,210,228,234,244,105,124,171,253,178,164,164,99,136,217,70,120,177,222,116,184,42,10,201,206,138,13,66,161,190,145,222,159,139,224,99,48,173,142,208,121,28,231,4,96,1,145,2,155,132,30,143,241,247,207,49,214,19,5,160,124,127,97,173,100,44,17,172,5,69,79,37,8,11,203,111,167,9,30,36,49,47,166,92,111,195,59,52,12,210,35,154,33,84,136,37,247,225,240,119,172,46,24,61,96,139,98,18,65,235,14,26,31,106,42,7,144,134,36,176,109,164,28,3,228,240,30,159,95,158,105,16,159,17,22,223,19,235,194,201,223,12,255,83,204,135,211,174,235,36,34,107,33,70,70,229,101,251,183,244,67,130,105,28,211,8,108,190,53,171,93,42,163,247,144,31,119,38,231,122,166,29,242,211,218,195,115,87,85,151,33,78,146,3,152,52,20,135,148,144,33,136,221,224,179,198,108,0,193,250,186,106,26,174,172,69,21,179,203,16,200,182,200,191,110,69,216,144,222,95,111,10,197,187,93,201,215,200,177,88,16,58,209,63,20,37,130,247,232,218,89,88,165,163,153,165,161,118,208,12,71,231,30,66,189,84,239,231,56,175,109,94,241,101,74,10,26,246,191,51,168,44,199,165,119,91,48,79,228,166,191,63,119,156,95,55,219,41,55,238,217,187,25,11,71,43,140,130,109,217,100,222,178,130,199,123,35,7,123,234,80,102,245,255,24,221,109,252,119,247,198,128,202,28,248,7,139,96,92,89,158,239,143,131,224,52,118,26,79,148,216,78,247,169,77,140,35,227,242,59,35,60,205,116,188,5,175,65,29,15,157,240,78,132,98,8,169,180,148,205,140,72,170,31,78,36,45,20,50,2,174,17,60,228,84,93,1,71,119,62,78,119,119,26,23,147,255,112,11,98,17,109,76,128,84,20,105,197,206,152,69,49,59,217,189,104,171,229,80,218,196,89,109,234,119,22,170,211,22,177,11,57,160,102,47,178,106,23,238,195,206,129,124,211,35,79,161,217,227,70,2,48,169,0,29,220,208,24,231,158,247,199,165,80,99,123,86,128,192,135,146,50,74,54,134,215,93,15,199,160,144,146,50,36,18,92,55,76,160,242,220,190,35,171,3,239,171,74,185,9,122,222,102,62,149,209,65,32,224,129,158,136,67,187,144,158,241,68,116,67,180,181,230,116,213,29,29,177,129,11,238,90,94,107,106,253,84,238,33,212,102,56,128,93,86,105,147,53,172,69,0,0,0,16,115,105,103,109,97,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,179,119,61,61,116,15,34,195,70,230,39,157,139,31,56,121,127,7,5,86,32,110,130,34,32,252,197,166,23,202,133,4,144,91,22,233,35,165,66,128,163,160,79,122,152,64,38,139,249,155,234,222,60,223,198,73,165,161,46,60,158,210,57,44,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,243,73,45,74,12,78,178,19,218,57,121,196,248,86,103,167,33,109,75,175,2,133,234,104,203,254,40,144,106,60,137,37,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,255,112,208,107,171,109,13,147,85,120,162,143,180,162,76,232,79,89,7,231,125,206,186,227,84,3,173,239,147,115,76,74,195,131,82,42,69,160,22,143,99,91,167,111,145,9,7,35,195,134,110,165,65,142,41,151,169,102,200,130,254,31,136,60,114,164,233,246,3,70,129,7,127,64,35,121,248,143,65,197,192,20,24,36,48,172,217,38,174,158,52,134,71,202,142,52,119,16,35,65,144,173,78,8,2,80,43,66,100,185,40,241,75,68,249,142,243,40,239,226,131,55,162,136,176,33,145,53,79,136,194,162,179,219,161,196,219,250,74,86,5,177,47,215,58,169,253,172,76,29,30,78,51,68,157,27,206,210,66,92,156,158,162,205,113,193,233,117,141,47,233,159,238,29,254,159,149,54,219,49,150,77,206,245,128,177,238,19,210,107,13,67,15,182,210,149,27,157,17,116,72,167,249,46,152,121,0,169,152,67,183,83,106,6,182,7,136,65,58,50,123,96,63,59,0,0,0,7,115,105,103,109,97,95,50,0,0,0,16,207,2,225,189,181,162,122,242,123,60,135,240,166,137,191,117,8,13,68,60,209,194,163,236,87,250,123,23,111,188,178,9,166,247,191,207,92,35,224,175,104,246,158,90,178,186,194,187,109,65,53,235,37,93,38,71,16,195,109,212,74,84,104,29,66,30,140,133,63,5,230,232,137,167,7,97,104,125,161,184,158,209,238,51,61,27,193,69,127,97,71,9,36,103,163,29,166,247,62,85,237,198,139,8,242,100,202,249,215,155,87,29,199,236,160,128,28,12,213,175,213,74,16,189,45,60,40,4,38,202,144,124,145,117,90,155,118,62,168,78,94,89,202,252,79,59,95,14,225,100,131,99,180,132,89,142,102,119,101,49,55,235,238,33,6,153,16,250,99,39,68,153,145,234,17,135,200,162,205,210,115,212,35,81,152,138,109,232,43,91,107,13,170,251,64,216,26,124,7,32,150,64,119,107,134,95,49,210,209,45,225,164,128,82,240,74,50,54,215,63,225,24,207,3,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,27,142,208,243,140,53,102,109,211,142,95,51,50,121,7,218,150,33,7,22,97,234,8,61,134,75,251,32,147,200,214,69,17,132,23,49,207,163,35,100,143,169,84,81,5,165,35,102,82,246,2,191,167,116,188,245,223,38,246,103,17,39,64,95,10,84,14,159,255,81,121,184,222,10,5,211,77,201,37,34,48,124,157,37,155,194,142,74,235,190,134,150,220,206,9,76,18,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,27,98,158,81,252,117,57,87,151,13,71,208,204,239,165,224,40,115,18,172,84,220,196,188,235,57,112,41,144,177,132,81,43,130,5,32,15,55,78,18,22,21,205,201,60,225,230,227,220,69,22,151,238,68,44,168,166,118,151,29,175,94,45,112,15,223,155,220,158,176,35,72,47,139,179,96,142,251,13,150,179,154,98,170,145,224,36,36,163,164,119,241,149,167,32,35,22,253,108,130,92,87,241,144,91,132,140,131,134,229,93,147,100,2,40,39,244,62,137,140,98,217,116,82,135,97,164,81,4,0,0,0,11,115,105,103,109,97,95,50,95,102,102,116,0,0,0,64,26,141,19,130,22,57,178,253,45,174,105,33,254,211,78,41,199,199,138,218,176,228,120,119,90,38,236,120,206,157,91,69,135,96,238,116,54,64,43,225,114,53,19,14,138,172,200,56,194,178,154,135,71,119,157,224,169,105,157,144,117,206,119,82,10,198,97,226,62,145,120,157,211,176,173,105,118,45,82,96,143,93,180,169,198,242,47,212,29,226,193,90,39,174,88,11,118,160,218,132,254,165,160,82,238,218,59,14,4,67,138,162,74,154,171,16,185,31,224,208,79,192,211,127,213,234,72,28,201,254,138,98,232,167,23,204,186,56,54,183,33,110,192,134,29,74,1,124,237,37,140,226,113,188,39,213,235,21,103,92,208,31,249,127,10,210,69,180,120,14,113,111,40,52,241,248,252,233,220,187,223,173,107,77,102,22,205,241,161,247,86,63,28,181,24,247,90,221,89,144,189,224,189,249,217,186,21,53,233,1,14,130,60,191,99,123,200,202,244,117,16,141,225,73,163,212,122,54,79,229,166,122,188,238,145,180,135,2,236,159,160,84,28,61,174,204,96,183,73,6,134,6,245,152,159,80,32,92,175,14,164,145,79,144,34,32,157,248,125,251,125,1,190,42,66,169,50,59,206,158,17,93,49,149,240,225,52,8,36,140,201,96,251,53,135,178,210,228,11,98,229,108,35,32,249,206,150,153,170,213,135,105,72,30,0,138,9,126,127,56,200,190,182,113,10,114,137,120,162,75,49,137,134,59,97,7,186,37,143,68,39,203,50,118,176,8,255,147,244,156,138,83,113,51,70,216,139,153,219,142,102,137,159,157,142,142,156,48,239,99,225,54,214,109,18,26,234,56,83,23,75,96,84,89,144,159,155,15,250,81,70,232,126,211,52,220,137,190,152,212,177,31,112,182,51,132,1,77,72,91,21,184,155,207,7,39,116,152,205,74,92,31,232,21,168,133,246,162,77,208,49,105,79,116,160,133,57,208,62,241,125,125,202,185,231,1,31,41,242,213,145,153,63,44,75,189,13,207,12,216,141,29,197,225,92,195,180,156,247,182,229,139,6,3,165,204,2,7,15,58,116,255,60,51,107,64,17,169,197,119,144,216,123,247,24,172,104,172,156,116,190,98,158,21,14,119,117,203,47,97,63,73,186,251,50,12,110,18,130,7,67,81,116,58,108,255,159,188,205,246,45,236,33,19,135,203,219,47,184,119,55,65,93,54,7,157,140,52,48,248,20,251,246,132,25,94,135,213,40,97,220,213,83,229,152,201,192,157,10,86,209,215,242,205,28,26,208,210,5,144,11,99,117,94,201,106,82,32,246,217,164,147,94,251,21,237,243,233,0,77,154,157,242,87,201,159,138,65,141,103,142,202,142,214,205,50,56,3,125,103,84,19,171,222,38,239,131,194,187,179,109,36,107,243,22,43,202,77,140,7,102,141,174,189,7,235,203,185,248,74,98,65,189,200,151,244,143,25,238,164,233,97,229,7,252,235,220,125,161,242,75,6,215,221,32,212,124,243,247,45,68,107,164,138,187,63,225,46,179,133,22,18,60,33,63,171,61,29,30,156,57,151,111,66,184,134,232,210,247,205,75,114,113,176,66,142,192,123,57,139,65,113,116,82,44,72,195,158,158,103,238,33,247,118,115,68,204,78,163,8,16,183,203,209,19,254,197,38,175,45,222,151,15,189,234,190,129,145,97,241,28,62,222,0,118,206,242,92,34,238,115,253,42,147,186,124,105,1,159,162,141,250,24,122,144,147,187,80,216,243,148,25,87,186,223,94,21,122,68,44,225,203,5,154,158,154,138,28,208,98,209,224,249,202,237,38,175,219,99,52,210,83,150,10,109,220,182,100,31,153,47,83,45,184,173,40,249,101,177,239,16,114,253,232,201,194,89,107,130,47,252,178,19,82,155,94,192,248,12,223,192,1,130,26,254,91,132,174,227,64,104,245,102,3,82,217,147,13,4,7,243,229,121,239,89,94,91,246,43,119,92,172,237,83,112,30,49,246,174,205,242,91,69,65,66,110,122,116,192,198,57,26,67,63,155,53,80,126,139,214,124,217,226,1,132,141,108,61,36,142,6,70,220,155,97,77,219,61,66,71,40,53,2,117,58,159,67,245,197,143,212,192,39,243,96,153,87,171,103,51,213,139,253,46,126,242,30,110,236,53,21,227,45,155,116,213,166,183,165,169,11,243,52,185,205,55,146,86,120,134,111,9,111,239,75,70,110,22,244,163,117,107,220,43,174,164,134,174,61,140,140,187,252,212,211,76,95,64,68,81,46,32,181,51,56,248,54,137,161,191,133,167,110,36,204,255,153,173,177,188,213,113,242,48,159,150,205,240,64,13,163,139,255,148,143,95,39,44,55,148,233,103,56,74,155,200,183,153,238,55,121,166,51,200,145,72,25,162,108,119,16,105,120,70,19,14,133,53,152,238,219,110,100,241,203,57,41,191,151,209,74,166,87,63,116,5,94,67,166,168,227,7,196,112,38,34,189,196,254,59,50,41,239,191,171,75,138,144,163,175,56,162,227,10,1,114,247,139,116,237,156,172,173,54,249,127,30,102,184,115,68,69,225,11,39,166,82,235,217,174,94,221,21,245,166,254,254,237,173,41,248,238,145,100,242,111,242,28,143,13,250,205,18,14,210,46,193,7,6,196,230,197,51,147,93,114,80,58,102,45,244,143,219,202,165,159,191,151,152,60,121,24,143,202,144,25,162,145,181,177,1,144,153,22,232,146,54,101,101,92,247,163,61,64,150,2,46,2,117,244,80,70,82,180,198,253,211,8,35,92,195,24,217,143,54,84,72,202,146,202,4,237,153,34,123,200,129,75,52,177,142,230,175,174,233,152,183,146,116,60,68,250,197,67,138,67,73,7,53,10,162,123,184,156,210,1,98,10,86,173,220,30,94,95,92,85,117,163,61,171,246,81,176,205,222,72,241,220,55,44,219,123,189,231,75,79,176,85,216,227,211,177,79,66,72,43,81,205,231,110,10,160,176,9,86,248,24,145,108,74,77,94,93,225,204,163,160,109,77,58,18,5,35,184,236,119,23,120,117,90,166,234,194,145,44,24,217,174,7,223,20,194,57,113,53,109,236,153,121,107,59,100,44,254,154,15,21,195,181,167,238,216,220,137,137,205,81,14,208,153,255,47,138,240,63,134,53,213,37,52,61,186,80,51,12,150,119,196,157,72,144,134,11,31,90,1,10,194,78,34,162,148,188,193,50,174,183,89,32,193,112,169,214,8,86,188,37,254,222,210,43,216,190,96,3,148,90,168,31,145,98,94,60,109,233,141,211,37,2,155,24,237,249,24,40,150,153,184,151,91,61,117,132,251,85,234,118,212,52,170,67,78,89,74,218,48,176,14,15,191,35,18,164,189,167,232,102,12,232,108,192,170,6,68,96,242,137,4,164,23,244,109,209,146,186,7,2,187,207,198,2,147,71,39,102,102,234,112,219,116,184,227,163,14,38,143,133,40,41,22,106,33,67,189,142,158,26,0,161,228,105,214,162,7,71,68,234,2,234,201,248,149,228,232,90,130,164,238,180,158,213,40,107,76,48,224,238,139,146,86,144,26,36,9,22,4,169,177,119,254,143,6,91,98,223,132,33,28,99,153,113,33,52,204,81,12,251,176,88,143,22,7,23,24,135,202,35,144,141,142,206,251,33,233,23,75,98,111,167,166,19,27,105,27,135,205,112,222,13,60,65,13,126,36,142,197,199,248,61,95,24,112,235,11,136,251,87,0,230,95,122,206,216,105,192,243,1,108,231,1,0,72,25,94,92,53,141,208,157,86,30,15,8,222,125,24,150,64,2,26,57,141,90,236,128,237,250,180,22,167,113,207,141,48,137,218,133,63,94,113,66,11,119,96,246,249,57,134,65,133,4,139,137,22,148,235,3,187,15,159,10,189,136,71,246,180,186,95,126,33,110,238,21,41,47,118,122,197,204,14,171,182,230,39,86,71,19,244,177,90,229,144,33,66,46,179,253,140,150,38,23,14,56,39,2,222,23,13,73,174,180,245,204,114,126,41,95,245,75,26,167,139,82,154,43,54,239,110,41,246,68,216,117,44,99,203,192,29,74,238,150,90,60,190,183,213,184,17,5,214,249,216,153,130,53,126,104,211,242,7,253,203,40,72,167,60,69,112,5,95,115,69,135,46,249,154,172,60,78,147,32,133,194,251,95,32,44,66,15,4,231,99,165,147,17,66,245,21,82,244,23,31,127,72,72,188,119,107,82,100,242,141,208,111,95,32,128,54,116,184,17,47,75,157,11,49,240,163,30,45,1,248,100,69,185,30,2,107,222,222,217,248,76,86,229,89,3,130,65,242,36,167,152,101,197,171,242,218,108,46,177,36,82,117,123,99,187,62,251,97,23,31,55,147,150,95,37,198,3,30,182,97,227,192,125,115,153,30,174,255,5,6,247,64,145,157,179,235,29,145,105,24,192,125,77,206,9,49,5,25,254,253,255,65,224,25,10,188,248,90,234,253,149,133,112,12,89,35,22,182,154,184,168,58,182,184,54,253,62,78,224,102,193,30,184,119,8,196,216,84,168,121,106,130,31,96,69,34,0,0,0,16,115,105,103,109,97,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,139,239,220,158,151,61,117,127,32,145,71,177,44,23,63,95,110,108,9,116,121,98,177,141,207,8,193,57,53,123,55,43,61,157,45,9,170,165,85,169,236,51,14,199,161,1,119,114,196,208,177,48,72,242,150,184,12,20,142,244,0,91,87,17,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,7,0,0,144,11,183,45,219,248,19,18,84,251,89,107,25,140,106,137,138,253,231,49,10,36,97,91,40,36,37,190,82,33,0,0,240,17,168,32,192,185,130,231,176,87,241,176,46,2,100,172,177,134,252,88,194,96,165,101,7,207,28,238,60,244,52,18,139,77,109,21,4,179,69,26,122,139,211,19,112,3,84,155,248,119,32,116,104,132,175,5,134,191,28,192,32,202,146,156,35,118,85,7,120,27,150,165,205,108,166,31,230,253,231,161,179,183,106,62,90,127,224,241,39,186,23,179,60,53,54,144,34,48,146,28,210,164,15,17,253,111,70,68,17,242,173,241,44,96,0,175,40,150,248,14,57,39,107,212,20,78,82,175,149,237,151,31,214,51,93,57,234,138,21,200,236,169,155,87,67,49,112,26,213,194,244,50,69,52,32,224,25,130,169,204,189,78,168,55,116,47,241,241,103,142,74,27,202,223,50,104,211,20,31,196,11,137,179,83,159,252,91,199,25,6,25,45,100,193,5,69,182,91,74,53,69,246,35,191,46,189,254,63,240,167,225,37,123,138,182,127,28,105,68,233,44,70,142,29,61,166,69,238,240,147,17,65,138,142,214,254,131,41,152,13,27,131,195,252,140,215,38,43,149,41,90,71,54,0,0,0,7,115,105,103,109,97,95,51,0,0,0,16,66,229,26,140,193,165,55,119,15,12,248,174,63,135,26,175,80,19,58,243,40,169,191,223,164,134,73,168,176,59,157,2,41,171,35,235,69,101,127,197,69,244,81,73,63,185,245,150,95,138,250,14,115,109,193,123,161,161,227,167,40,98,248,26,25,223,69,20,172,77,143,172,36,24,106,8,195,118,199,159,2,31,80,156,155,199,128,196,124,218,219,128,13,43,164,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,52,102,152,102,110,80,39,205,200,21,113,241,44,110,114,162,202,98,215,184,74,145,200,227,222,107,157,167,234,124,100,25,60,233,187,48,141,189,81,177,166,163,210,90,38,51,8,107,89,76,51,209,155,219,235,64,50,133,147,255,14,19,23,3,186,250,43,233,140,91,221,35,87,237,145,194,251,236,164,166,248,4,77,115,38,194,33,130,12,81,36,69,167,36,53,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,230,217,194,233,70,125,59,175,108,61,203,137,75,243,39,202,7,209,220,145,103,152,150,30,115,160,178,188,216,1,153,28,129,199,23,66,244,67,106,216,29,124,11,245,201,162,243,159,134,255,60,77,156,187,74,106,106,78,194,120,111,237,11,3,193,97,220,85,115,122,193,180,129,127,69,178,66,223,93,55,95,173,155,225,64,130,201,173,190,62,139,220,78,52,238,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,136,22,65,247,231,78,29,193,184,81,69,154,109,191,91,238,108,194,245,64,231,220,177,39,113,183,84,219,104,134,176,14,248,163,8,194,146,251,193,172,170,248,46,60,48,151,41,7,97,109,103,159,23,185,94,94,55,69,47,247,22,50,146,49,139,136,250,168,176,250,191,145,184,27,113,43,178,205,192,240,44,46,103,20,94,21,180,42,205,43,27,25,120,38,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,11,115,105,103,109,97,95,51,95,102,102,116,0,0,0,64,191,253,180,148,17,83,17,218,184,24,171,24,59,180,212,99,81,211,86,128,62,212,212,32,94,228,8,19,60,97,136,33,96,43,188,198,181,253,213,136,98,98,195,1,56,235,243,226,77,62,219,48,103,219,108,76,187,182,65,124,62,28,29,88,112,241,239,105,239,73,221,94,253,41,211,235,143,44,174,93,121,95,132,35,156,17,187,244,141,72,0,112,37,46,181,94,54,136,168,51,99,243,72,0,217,218,230,181,251,143,64,44,217,115,29,22,196,120,71,153,174,96,247,16,246,130,221,45,57,171,32,4,199,135,199,161,103,106,205,159,96,6,58,177,79,110,250,213,58,227,246,182,68,96,27,89,49,117,104,86,234,188,195,80,96,68,94,181,59,174,247,254,101,3,25,47,88,18,135,241,4,226,11,205,30,148,221,125,169,89,178,65,140,72,242,253,59,202,230,184,228,91,61,239,17,207,104,171,91,166,199,245,0,238,12,56,78,36,129,220,92,63,208,40,47,241,44,8,60,180,112,101,94,80,169,211,139,127,70,55,125,254,105,117,146,76,73,13,132,30,133,230,202,219,228,90,77,145,33,151,131,228,44,139,68,183,187,68,133,227,31,223,239,47,46,94,114,96,231,21,59,68,177,152,164,241,78,24,130,84,224,48,2,58,108,134,23,207,74,62,222,254,213,175,255,108,120,128,112,30,137,101,184,88,148,4,28,118,75,43,173,243,208,61,170,11,6,134,146,69,205,59,58,247,117,172,223,177,43,207,166,119,89,35,173,174,235,3,56,125,83,80,87,184,74,177,156,240,241,55,143,116,95,251,197,235,183,144,246,61,169,65,159,179,90,160,148,92,67,130,107,95,132,7,102,229,15,235,163,112,221,156,166,125,235,58,160,221,240,7,91,166,25,187,4,74,252,91,206,165,72,159,46,95,174,38,87,198,46,81,210,101,217,93,84,225,70,200,190,169,137,114,206,39,81,215,133,45,15,153,52,56,126,82,161,220,65,69,25,239,32,195,130,164,18,244,31,140,20,165,113,53,42,178,241,154,37,54,93,240,200,214,105,192,65,29,174,109,180,38,26,14,174,255,101,97,109,234,5,76,120,51,46,156,45,79,81,50,143,121,91,89,109,22,123,62,244,63,62,115,253,61,147,199,150,169,148,125,108,172,254,251,196,238,200,241,12,253,81,201,46,78,4,59,154,233,185,128,6,246,219,238,98,43,251,160,252,238,20,120,157,146,157,232,1,47,173,218,148,220,123,121,135,84,114,69,43,98,144,31,146,113,51,104,160,78,210,192,84,148,137,240,204,252,238,77,240,200,231,226,164,243,92,109,82,42,47,66,12,49,84,174,127,121,137,123,237,81,198,252,220,147,247,165,67,132,146,180,239,78,249,145,219,244,200,13,220,85,43,126,81,216,88,79,156,211,22,129,243,38,59,133,118,210,150,28,215,248,5,118,190,66,176,18,6,108,198,3,13,248,223,66,178,19,240,128,198,78,21,221,31,3,87,10,49,21,58,58,222,249,250,108,210,215,48,131,221,60,237,160,161,193,128,155,144,175,2,61,211,83,242,157,66,67,40,13,175,100,25,51,176,249,224,183,209,154,120,123,253,185,180,20,43,46,17,141,180,81,223,120,32,180,95,173,221,32,230,141,13,154,103,222,218,12,55,69,156,176,67,81,60,65,250,194,53,78,11,254,192,248,23,46,205,122,120,39,116,41,17,155,208,247,250,171,184,244,47,10,87,54,16,182,111,134,110,198,200,225,27,82,64,255,72,123,122,251,209,101,196,63,225,77,215,136,21,221,94,186,158,116,67,225,84,37,112,21,83,105,160,249,7,140,85,12,80,248,108,252,151,49,199,5,40,237,21,179,215,127,159,119,227,167,149,205,160,33,43,176,193,230,124,248,175,129,203,11,149,129,204,18,37,208,119,21,28,248,254,209,35,53,147,68,172,35,244,26,116,235,7,225,117,248,118,131,148,155,25,171,96,68,17,108,228,173,26,11,171,99,69,229,167,215,195,69,248,93,71,243,197,161,226,157,219,3,151,240,241,52,36,135,158,145,121,24,234,185,121,84,180,59,126,198,27,179,30,198,233,255,182,17,47,218,197,37,30,148,58,35,154,94,185,226,28,189,242,173,104,120,89,35,231,94,95,64,32,26,220,213,167,177,209,64,11,72,76,59,1,254,99,37,12,116,70,193,26,100,24,187,231,11,54,31,82,231,134,188,4,238,25,192,49,110,208,36,191,178,89,192,117,231,57,181,176,133,5,143,99,155,143,228,208,144,187,52,221,155,187,46,84,223,141,242,230,226,207,44,210,165,0,100,20,91,81,53,94,150,224,241,99,20,238,175,92,218,62,66,92,52,200,14,252,200,110,75,26,48,33,14,195,187,166,39,193,255,107,236,38,185,5,255,198,120,23,56,0,127,59,3,78,136,22,114,237,213,87,100,122,88,207,117,69,156,6,110,225,61,128,85,53,129,249,236,203,69,179,85,167,229,163,39,22,214,25,144,43,42,179,239,210,27,130,61,202,26,222,242,165,193,59,30,195,164,143,62,88,171,143,143,161,87,209,40,125,38,90,187,31,183,7,126,166,243,186,138,29,56,36,57,194,144,10,148,228,75,24,104,24,25,229,110,171,96,228,81,12,239,254,114,22,121,172,106,156,152,42,119,7,35,11,184,234,200,8,171,126,176,36,188,159,88,48,120,234,228,6,25,182,203,128,36,253,98,8,142,153,5,30,141,240,135,45,236,128,82,173,134,124,22,167,197,220,212,169,104,53,12,162,25,175,155,173,73,16,165,2,19,133,38,22,172,37,33,240,72,232,92,141,195,162,12,173,238,90,133,241,71,79,119,17,51,81,32,213,118,166,19,71,140,252,131,45,84,157,125,138,58,0,29,168,95,63,25,223,22,243,102,55,18,92,131,207,80,118,162,120,133,185,145,158,220,142,102,235,140,121,73,94,224,229,239,148,221,246,59,105,56,114,144,229,113,141,143,93,58,105,200,199,92,25,38,14,112,22,137,157,20,27,83,202,158,147,151,118,27,143,172,248,195,155,122,228,170,231,231,186,77,131,132,180,2,129,237,30,146,155,10,254,55,246,106,9,161,102,20,189,175,249,40,15,146,202,3,139,76,102,181,218,72,212,214,147,99,202,233,210,214,252,184,255,127,159,98,77,250,246,186,239,117,112,151,0,190,22,225,241,134,60,85,195,18,177,62,28,140,203,30,115,53,229,166,213,248,35,29,99,71,151,147,123,23,144,238,120,58,30,204,241,13,177,135,65,45,209,35,48,183,47,8,203,246,253,185,40,82,106,22,141,138,73,176,217,151,37,5,96,96,5,101,9,107,55,108,147,12,38,249,131,200,46,192,122,31,15,69,238,234,171,37,81,89,18,220,253,240,234,77,206,63,189,56,129,185,196,208,9,46,39,36,33,143,153,19,213,75,237,184,162,171,107,149,48,205,64,252,244,233,229,104,111,239,195,42,199,121,175,105,143,6,83,255,194,118,199,5,38,201,250,72,148,81,46,169,129,224,237,91,207,39,136,33,15,184,75,208,74,160,221,140,14,96,164,235,222,137,49,157,217,89,62,218,3,186,55,102,166,91,1,149,13,130,82,214,185,99,180,170,204,217,76,220,112,4,218,185,140,172,195,139,66,134,88,20,11,123,102,230,32,47,83,82,110,174,208,126,94,253,209,176,121,160,102,190,63,83,29,229,94,140,239,12,136,96,197,61,254,24,189,76,145,67,163,176,250,220,140,84,144,206,206,69,212,211,6,187,185,0,107,96,109,205,247,98,59,15,145,169,52,38,133,145,40,97,181,198,166,153,166,112,51,124,177,186,26,47,31,90,66,26,160,88,50,50,255,38,3,20,13,114,126,39,202,11,122,213,250,178,225,88,142,25,113,118,82,161,69,227,47,211,50,47,66,232,80,6,122,54,102,96,192,97,127,144,158,234,243,142,94,35,195,230,123,254,84,43,173,131,147,68,168,175,118,47,97,51,16,129,242,179,111,170,64,252,81,188,1,240,31,206,224,134,192,63,28,42,140,23,227,219,144,221,70,170,93,62,119,26,125,108,24,113,250,42,45,90,246,170,66,139,19,62,86,102,243,171,185,122,219,92,112,35,78,31,143,26,196,20,62,236,53,137,98,186,13,248,172,75,13,23,39,56,202,59,229,22,4,163,202,151,79,161,65,131,228,18,29,23,17,85,100,155,3,60,76,141,1,106,27,140,68,75,133,203,93,185,43,149,183,146,184,22,83,178,72,238,213,15,152,148,166,96,213,242,116,12,1,20,182,123,54,80,184,247,137,191,27,234,65,99,219,26,38,129,153,62,92,45,71,245,198,15,68,24,98,157,146,144,125,196,157,182,252,27,48,92,135,248,160,100,108,232,151,164,234,119,248,168,189,162,232,183,183,172,193,87,163,172,138,156,117,98,220,148,216,248,69,7,179,255,55,51,135,25,71,166,218,100,45,71,45,122,217,199,94,155,0,5,82,125,142,132,184,71,187,142,96,190,11,48,122,118,101,172,171,13,199,125,218,193,83,62,111,101,131,108,198,49,114,27,0,0,0,16,115,105,103,109,97,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,63,124,173,181,226,74,173,248,190,133,203,131,255,198,96,45,247,41,148,93,43,253,118,217,169,217,154,63,231,124,64,36,204,201,111,205,99,99,197,113,236,96,168,124,216,161,239,22,107,170,143,84,86,69,161,143,147,167,34,168,75,227,143,27,234,128,156,191,131,194,134,234,16,193,212,125,120,82,212,220,163,49,98,15,99,120,142,178,138,170,28,94,162,235,58,19,199,140,10,184,173,237,232,228,123,84,156,254,133,48,130,169,213,228,57,35,11,15,248,141,178,124,29,77,195,135,42,12,102,97,93,18,182,41,218,17,149,177,137,83,162,178,105,176,36,122,39,209,214,61,210,122,210,142,116,174,19,49,187,29,188,113,226,162,129,165,213,150,142,207,49,105,2,250,104,204,144,24,245,231,233,199,163,227,123,25,56,45,188,66,129,42,160,5,61,87,114,86,118,54,32,98,177,254,98,215,207,202,25,66,137,67,130,70,216,68,191,214,38,139,171,30,203,20,38,0,0,160,245,115,138,19,144,181,134,17,194,122,180,247,211,29,51,57,23,89,234,91,49,198,93,109,13,165,227,46,242,165,226,6,101,229,64,83,119,77,3,144,247,141,44,48,246,84,33,94,63,169,222,147,175,18,129,148,224,65,168,58,139,22,239,109,147,10,90,127,92,16,218,73,109,223,190,184,6,190,13,86,140,109,199,128,213,6,87,232,210,154,114,24,166,218,121,41,160,226,187,149,146,223,122,252,31,238,81,174,85,106,136,207,217,102,56,151,26,247,17,222,251,230,254,24,196,98,210,230,233,79,140,154,164,60,171,178,166,230,188,181,152,135,207,80,110,83,185,255,28,140,163,236,113,243,12,31,208,49,143,112,110,142,247,244,121,123,131,68,75,19,23,121,189,131,228,254,170,246,145,161,146,87,191,217,87,224,165,69,161,183,207,65,159,209,76,232,87,9,101,107,156,89,137,166,245,220,153,160,135,233,163,184,225,199,60,79,200,97,146,63,84,68,240,226,45,237,29,33,75,72,129,63,222,103,203,4,101,131,67,237,54,132,98,220,53,200,51,230,49,108,34,65,0,0,0,7,115,105,103,109,97,95,52,0,0,0,16,181,39,240,95,21,56,61,69,99,238,239,38,185,165,36,151,218,130,113,126,54,89,43,10,163,14,75,168,227,174,236,15,220,158,20,65,138,19,204,144,233,5,219,91,135,172,158,139,78,115,79,51,2,74,28,119,109,192,129,46,223,103,6,31,41,51,223,168,170,78,177,139,158,203,147,150,123,201,43,151,186,24,134,149,46,130,120,190,104,101,55,249,211,145,130,9,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,110,123,180,112,213,182,160,84,27,197,140,158,234,190,77,80,38,237,6,220,214,203,189,205,93,213,160,93,112,106,29,20,250,147,54,153,97,201,142,254,37,65,46,173,166,70,0,79,95,188,150,71,129,216,251,191,161,165,65,172,192,134,45,22,48,157,67,219,162,231,236,184,46,215,253,120,74,162,210,82,8,216,111,103,212,250,34,133,218,54,97,25,41,194,49,1,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,188,38,183,111,117,33,158,248,149,111,65,250,34,171,52,249,47,42,194,55,184,200,143,193,122,103,170,96,106,143,238,10,231,241,133,164,163,202,79,0,220,150,230,178,155,72,91,119,86,84,120,253,118,133,176,54,180,140,63,78,227,12,104,35,157,184,204,54,232,199,94,219,184,9,85,48,225,199,198,145,5,232,202,111,28,133,230,105,228,228,142,37,72,26,102,17,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,160,94,32,100,39,186,161,144,97,134,151,56,169,113,128,22,178,19,197,55,69,155,175,207,15,95,81,194,157,232,220,35,212,79,213,175,229,203,16,2,146,236,158,184,144,74,182,159,77,236,89,179,108,50,101,173,198,115,61,240,5,147,162,48,250,194,58,239,17,13,158,74,54,129,177,17,163,247,222,39,71,45,202,193,255,12,218,137,76,245,153,207,165,35,252,44,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,2,0,0,0,11,115,105,103,109,97,95,52,95,102,102,116,0,0,0,64,58,95,86,149,157,135,226,187,87,128,241,147,65,190,235,8,184,188,236,164,60,225,87,16,85,170,44,53,36,254,214,23,64,161,158,54,39,121,97,208,165,206,80,176,197,30,80,51,123,145,29,222,4,182,104,191,125,86,119,134,92,244,88,17,117,169,219,98,53,166,13,195,16,165,125,200,81,220,212,148,89,93,183,231,131,143,173,205,195,244,139,222,61,23,220,79,103,236,4,11,25,128,151,75,219,27,5,97,126,237,70,206,209,11,74,30,236,135,174,130,88,167,200,16,29,75,191,31,186,26,103,217,81,87,191,159,183,108,74,6,17,154,196,158,41,202,90,59,127,195,95,218,117,128,144,128,41,14,116,4,213,255,92,100,123,66,106,22,226,212,200,235,34,82,97,132,134,244,38,109,70,235,78,35,150,147,182,56,66,238,46,25,127,21,201,216,153,116,156,146,18,107,78,101,130,194,236,35,18,25,163,195,50,93,62,159,168,178,204,11,212,13,164,87,112,186,96,211,32,74,217,228,71,52,62,122,146,143,203,143,77,254,167,10,45,110,24,254,39,131,14,90,255,115,151,85,195,127,220,48,126,61,31,157,87,213,30,82,153,203,183,147,48,213,100,51,178,11,139,254,111,192,92,90,116,103,6,85,47,241,153,179,115,58,197,226,49,24,199,145,109,118,145,136,184,171,235,180,33,136,21,245,238,106,168,53,60,101,179,42,117,35,244,205,17,180,184,54,201,186,218,172,221,137,200,216,49,131,165,90,74,71,158,165,120,58,18,75,106,61,100,87,50,40,186,160,120,216,215,174,63,22,84,176,204,188,241,198,225,73,168,153,183,187,247,45,70,69,166,230,77,96,97,50,141,231,127,216,166,34,151,206,171,34,112,121,150,139,116,143,156,214,60,127,59,255,237,129,15,97,138,227,192,66,169,75,88,189,165,44,97,221,242,107,115,83,243,245,53,158,191,250,248,113,64,213,56,226,153,15,64,151,108,45,242,94,244,87,193,200,19,71,248,232,0,205,125,72,9,7,192,135,192,253,219,217,75,175,61,18,109,85,228,45,27,28,85,94,231,45,27,213,107,172,183,135,105,252,65,164,171,168,157,222,200,216,107,109,47,90,211,30,101,13,119,85,172,72,68,4,135,44,228,70,236,1,255,183,116,37,9,47,10,226,191,28,251,184,245,88,40,29,79,220,68,195,158,9,240,31,83,142,193,46,143,34,196,53,134,21,133,92,191,167,129,48,229,170,133,102,113,19,7,253,146,137,126,195,104,222,232,166,69,47,62,7,229,232,217,250,237,143,83,38,20,130,70,121,77,215,142,78,31,152,197,41,224,244,61,158,46,116,1,226,169,208,48,3,174,115,103,166,27,39,37,172,115,60,91,184,221,179,157,227,98,42,67,123,27,83,251,146,30,96,61,96,101,36,45,80,134,63,19,109,253,176,105,186,100,227,178,205,28,26,249,54,122,195,227,108,130,250,185,228,143,205,55,4,229,82,209,19,146,216,96,204,190,26,84,112,32,115,206,225,24,53,239,91,37,119,92,234,86,175,55,196,179,163,185,135,182,137,223,81,174,231,157,167,236,4,196,183,225,149,52,199,221,206,114,143,48,204,146,8,18,114,179,98,176,37,192,79,134,89,118,68,219,203,187,28,135,39,109,23,81,78,165,216,152,7,92,130,78,83,137,19,51,136,152,17,187,58,251,90,221,49,44,40,98,57,182,158,222,187,5,4,13,183,108,202,217,95,142,156,20,32,235,134,143,252,144,66,224,83,249,29,127,156,140,26,19,88,229,97,153,101,143,142,50,174,186,142,146,7,107,75,207,199,175,176,137,100,173,71,201,46,45,125,162,49,112,19,149,248,94,225,26,198,72,194,243,223,24,191,71,113,146,35,218,109,110,67,176,119,108,165,9,157,57,161,128,3,194,85,109,22,153,230,70,169,43,17,62,44,130,226,16,220,123,50,246,184,11,185,180,162,211,14,97,206,124,82,18,197,22,42,68,204,27,142,197,196,245,147,155,156,233,191,189,31,243,49,198,150,249,4,14,135,28,80,74,246,120,45,168,249,247,47,90,97,121,29,4,159,255,121,240,152,242,194,220,23,74,16,169,60,49,147,253,156,127,134,198,117,9,43,98,240,187,86,41,155,138,84,238,50,204,79,111,15,192,28,249,75,126,118,52,30,193,221,88,226,85,185,131,149,103,185,3,42,197,24,209,194,179,246,246,94,184,143,52,28,103,117,88,112,171,129,43,52,1,84,205,28,99,36,155,66,75,104,12,21,116,64,114,210,219,129,186,65,208,26,184,230,250,225,0,43,77,22,35,254,140,133,123,228,84,200,65,73,38,151,244,161,186,20,194,252,247,45,108,86,23,168,24,237,50,97,112,106,56,42,48,235,139,43,163,37,131,160,239,222,237,154,70,235,19,9,169,70,48,235,109,173,147,235,52,162,53,36,180,74,210,65,200,127,60,148,79,217,105,137,107,65,146,23,234,88,45,67,249,42,147,199,175,190,74,71,216,39,125,71,93,201,42,165,167,27,36,82,207,34,26,231,189,84,106,230,171,41,255,82,70,249,64,115,177,171,21,101,109,207,15,241,92,111,143,208,114,184,194,63,106,8,238,228,113,38,143,131,243,153,173,44,145,90,206,94,176,237,35,4,89,110,31,248,171,221,165,95,186,68,77,126,156,14,246,9,174,149,162,104,254,183,139,86,21,137,178,54,212,211,249,122,201,106,238,112,250,131,23,159,103,142,103,228,202,74,76,18,0,130,54,179,93,31,133,37,236,128,231,215,179,120,32,101,12,64,170,148,182,2,27,146,164,185,183,22,140,216,248,98,3,26,74,129,136,203,67,35,91,118,98,92,230,96,234,161,41,181,240,239,224,215,244,102,108,99,176,94,129,47,120,143,241,198,7,214,92,190,157,17,203,21,24,171,57,174,9,67,5,67,202,34,116,17,8,172,139,224,53,161,226,74,84,25,38,50,223,121,176,145,124,10,1,224,218,187,183,56,238,147,0,80,5,3,118,229,206,214,51,77,57,128,109,199,163,232,84,122,21,67,82,6,175,9,130,193,220,158,125,223,173,197,169,173,197,248,245,205,132,105,86,164,61,57,154,80,116,121,16,90,34,171,57,158,218,81,121,59,160,41,228,111,93,186,185,235,190,102,109,98,15,19,83,177,214,221,239,119,202,130,28,29,205,87,250,29,246,37,8,231,24,234,90,219,168,255,27,127,175,164,155,220,174,145,10,55,58,222,20,206,124,46,16,163,247,148,136,15,20,81,237,122,122,214,85,31,239,209,98,18,98,136,17,155,104,192,220,38,170,85,45,79,36,157,15,224,3,250,231,15,191,0,177,198,229,102,132,238,76,16,195,199,2,125,128,65,234,7,168,218,170,201,174,101,227,113,150,139,235,108,218,197,159,12,2,145,187,3,190,63,13,49,96,112,91,214,116,154,30,112,144,237,44,54,43,91,141,167,168,212,85,8,30,241,16,4,193,40,202,240,19,242,83,12,155,206,130,115,211,72,180,114,110,230,81,241,239,159,29,9,44,147,136,34,65,226,102,10,15,50,221,171,220,68,71,152,188,42,43,153,12,163,228,61,102,234,188,179,23,187,245,194,207,53,149,196,147,191,177,92,126,115,33,171,127,215,133,72,62,164,187,239,156,33,138,27,55,139,44,112,238,189,182,151,222,135,31,143,143,199,99,84,192,171,94,133,248,118,183,249,226,130,81,217,244,16,173,27,78,238,58,95,96,178,124,103,66,206,108,138,181,78,144,1,98,235,135,237,32,99,134,16,77,95,4,215,188,160,152,78,58,24,239,68,215,236,221,158,53,11,245,49,142,40,86,36,90,66,48,225,171,112,233,175,246,222,233,170,35,229,2,61,139,5,15,141,73,137,188,175,238,30,218,17,79,90,53,43,131,143,125,130,254,219,26,49,117,62,34,251,53,196,42,216,97,185,152,134,25,124,242,161,56,3,66,248,216,33,235,33,220,248,94,36,78,136,85,108,75,170,178,179,168,123,215,219,70,48,1,176,195,148,189,14,116,208,63,151,156,35,164,1,157,219,46,116,118,138,115,72,233,216,28,172,230,103,33,138,157,70,109,37,248,124,59,49,83,203,137,186,100,226,10,80,13,239,182,54,139,31,195,61,53,15,187,206,186,252,81,8,255,12,157,34,216,81,122,125,1,75,138,150,214,139,64,12,199,23,237,242,189,145,138,240,200,177,151,47,1,195,39,197,23,222,56,199,211,68,54,0,58,134,155,137,178,161,162,19,216,90,126,98,221,28,165,56,219,73,95,28,144,107,171,17,100,98,6,0,240,244,108,113,102,118,15,246,89,27,209,86,74,51,203,237,102,99,127,155,76,182,251,144,202,97,33,152,195,225,120,112,123,175,12,205,89,101,22,54,55,75,68,56,191,221,247,157,36,16,124,230,245,137,80,242,248,86,1,82,254,14,100,62,205,255,34,109,95,210,63,192,219,78,60,89,145,111,61,173,88,56,177,85,89,221,29,154,62,154,57,219,203,174,194,22,1,60,64,67,88,149,26,114,41,99,172,45,0,0,0,16,115,105,103,109,97,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,18,233,76,93,171,141,87,229,230,139,134,77,45,136,34,96,209,90,91,63,102,89,87,177,120,202,102,31,228,53,56,12,180,101,190,71,79,64,83,121,98,117,241,57,146,231,161,116,240,107,134,7,159,143,175,88,212,210,67,87,20,226,205,11,91,37,134,198,243,18,38,174,254,144,62,125,40,250,225,121,7,238,248,177,220,222,23,33,15,169,31,3,119,103,101,23,179,173,80,90,166,93,194,109,93,19,128,143,189,210,107,59,179,188,41,62,133,213,53,227,102,171,254,155,62,46,132,22,229,69,174,172,45,108,238,85,239,75,23,76,209,220,136,80,124,52,35,90,226,2,145,241,224,228,105,143,165,134,168,31,198,169,141,192,170,77,111,109,206,24,222,97,78,65,20,50,140,245,14,178,5,154,126,122,26,103,105,64,190,29,141,14,174,187,15,253,249,253,165,102,215,152,241,179,178,104,156,75,85,45,191,21,54,7,62,148,29,120,47,220,179,48,166,31,27,0,0,80,154,230,212,40,82,223,142,214,164,127,121,61,211,81,164,168,63,90,119,112,102,228,59,192,29,70,148,26,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,239,22,179,146,232,103,138,94,170,228,50,44,27,96,17,200,139,253,37,66,80,236,248,6,177,213,202,193,142,24,44,36,77,154,65,168,68,181,142,202,46,251,199,63,182,0,146,179,108,236,250,121,23,182,160,95,85,205,237,137,94,108,150,36,23,127,99,48,16,51,91,89,128,175,228,251,207,149,95,75,185,38,31,114,83,205,193,5,159,245,20,131,208,98,41,29,58,115,245,55,230,7,249,94,21,28,29,123,194,183,177,126,135,115,71,94,171,54,88,42,119,35,20,148,175,198,57,36,28,186,81,67,102,137,243,237,161,36,162,45,119,11,171,215,224,35,94,39,212,66,191,198,72,187,199,81,205,199,187,16,59,86,114,47,233,167,114,214,194,87,219,23,250,166,31,246,208,98,114,207,176,171,209,61,15,57,200,160,180,48,215,33,97,250,194,152,33,159,107,13,113,14,8,123,229,16,100,93,67,22,248,61,52,255,119,115,106,201,10,86,199,47,153,27,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,49,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,46,66,171,35,91,184,96,144,102,117,242,109,44,83,104,7,132,120,43,156,180,69,60,152,123,180,69,188,165,96,11,196,4,47,29,66,12,197,122,137,233,42,72,106,132,45,155,251,23,98,201,206,229,114,44,5,245,52,187,103,183,16,74,23,15,172,196,208,238,218,251,49,160,122,184,187,91,114,176,92,40,251,244,47,167,109,39,85,247,59,249,34,173,246,93,43,33,168,179,37,187,204,112,159,14,180,80,135,102,79,87,98,125,59,187,166,118,109,248,48,60,145,94,4,51,203,136,80,20,199,25,238,33,198,3,67,5,34,1,41,17,223,5,17,121,229,199,164,33,225,6,30,100,55,181,249,229,103,146,175,39,13,9,198,133,18,154,84,111,120,253,131,251,29,58,105,24,202,71,158,93,60,209,69,184,50,59,112,51,8,140,126,46,118,247,161,59,36,61,205,61,63,143,236,116,40,135,128,243,193,59,24,99,84,210,155,32,14,87,210,51,179,217,13,16,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,49,191,84,220,148,219,148,81,221,27,126,75,77,245,127,44,164,228,44,229,204,112,9,184,60,117,90,117,59,18,67,160,43,210,226,189,227,206,122,88,90,102,40,79,245,26,77,56,16,251,142,178,155,67,25,75,195,244,228,201,41,98,4,77,33,85,59,47,1,185,249,175,163,22,184,253,29,214,55,215,255,97,99,81,218,72,30,251,192,237,166,14,52,124,240,56,15,89,76,218,52,199,132,66,53,221,31,50,19,249,144,209,170,33,157,218,10,73,77,31,124,152,65,45,174,167,197,19,28,58,230,17,206,205,241,158,62,111,111,144,104,105,226,34,175,119,144,220,95,213,62,50,84,242,234,55,251,10,188,180,8,245,246,57,90,21,81,111,24,170,227,238,247,114,150,254,55,240,104,100,165,48,186,90,184,32,5,243,142,221,16,74,50,139,8,94,180,111,184,20,6,82,225,204,4,32,97,179,52,155,28,105,30,98,115,180,151,27,73,95,173,191,116,86,32,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,49,95,102,102,116,0,0,0,64,140,103,87,66,166,138,247,159,31,154,36,121,27,152,208,193,182,71,14,162,66,134,110,190,60,11,96,145,210,46,198,95,108,227,22,21,195,139,240,147,205,30,117,36,166,25,81,67,39,147,155,237,59,8,108,121,44,115,80,21,63,134,227,73,231,126,174,61,98,20,150,255,253,37,63,92,122,100,59,77,90,38,219,113,174,56,146,157,24,83,226,159,234,123,140,2,232,45,149,145,108,19,155,216,138,244,173,56,43,250,71,246,66,33,59,153,249,80,120,210,209,90,128,255,196,198,145,85,244,70,240,104,143,199,50,213,73,51,146,54,30,61,126,10,4,93,101,150,216,149,79,229,242,12,27,224,27,33,228,85,100,232,226,122,182,17,216,186,114,187,122,134,198,82,59,5,192,57,90,9,176,118,154,17,226,119,178,199,193,180,95,74,45,233,188,178,46,160,162,13,134,80,217,211,161,149,21,247,130,185,30,181,210,219,218,189,104,39,246,148,162,189,148,3,49,171,101,159,133,91,159,173,109,132,64,178,71,20,12,78,178,231,161,233,124,188,66,10,59,222,121,111,155,117,167,21,154,142,187,119,202,36,174,24,40,2,186,245,49,221,178,166,130,8,59,40,168,203,106,153,173,160,43,134,220,54,78,93,216,166,108,139,69,1,34,227,150,81,203,200,205,171,214,84,20,251,222,235,176,176,178,86,194,79,191,60,84,129,135,29,210,192,225,172,200,213,42,48,204,118,231,75,243,120,198,171,213,196,111,84,229,60,179,25,213,128,153,216,253,77,207,37,196,139,40,2,230,140,30,28,65,96,64,181,19,157,238,85,132,116,58,92,19,177,25,147,93,53,129,5,116,1,212,14,13,79,111,49,248,192,107,243,73,166,236,215,25,90,75,34,72,202,18,50,99,26,128,172,157,170,144,245,72,116,69,25,255,173,143,176,144,53,144,188,53,176,244,29,77,137,110,163,227,90,183,189,40,110,96,23,116,97,130,251,224,174,62,67,44,211,245,181,92,71,120,49,28,47,7,115,210,153,236,247,51,233,52,247,184,75,151,70,110,144,227,196,200,126,177,31,67,53,141,14,75,37,184,149,244,47,175,20,37,163,41,88,242,172,249,9,215,37,171,85,120,17,7,110,186,187,239,16,211,86,145,183,57,87,248,170,149,49,208,110,174,2,248,89,26,112,146,211,7,242,223,32,215,252,173,33,150,45,6,17,209,93,206,10,126,38,215,110,166,141,90,242,153,54,151,91,107,248,39,253,168,66,96,3,116,13,80,90,216,108,158,18,51,67,43,158,183,33,138,102,132,223,242,24,131,117,49,235,159,237,223,81,234,154,25,236,242,248,109,61,103,123,118,50,57,37,107,24,161,58,37,148,101,208,95,35,125,75,120,55,101,214,33,62,237,44,78,74,53,28,212,45,16,51,212,12,116,191,250,51,133,223,133,58,157,170,20,31,217,87,12,205,8,239,115,103,253,118,13,4,215,108,236,254,125,188,142,82,229,83,188,237,243,200,124,93,123,43,227,148,16,54,54,45,76,248,126,39,23,229,21,198,91,179,220,110,27,214,157,30,175,184,38,53,63,38,19,86,24,249,255,208,210,51,30,158,25,20,22,239,161,174,254,149,117,213,81,227,74,152,243,4,171,43,214,174,58,211,82,169,115,22,2,171,15,83,0,24,57,21,24,216,43,200,21,147,123,37,194,15,152,179,129,42,170,65,48,14,36,222,136,239,56,105,26,223,99,134,196,125,69,148,254,217,229,135,70,208,247,17,109,56,216,250,95,30,79,239,28,216,201,131,152,4,204,148,109,44,221,235,85,126,162,130,153,145,159,235,89,42,232,36,190,31,113,193,127,47,192,211,58,78,101,146,41,58,38,187,59,237,62,167,23,250,164,34,87,48,200,124,231,97,187,242,95,151,171,3,2,63,178,120,60,111,238,57,52,247,122,93,60,54,22,160,160,203,58,214,221,169,140,29,85,14,40,73,52,181,182,247,12,46,144,77,52,126,126,98,36,104,48,20,99,181,128,145,91,4,224,78,181,41,191,3,142,113,235,217,125,57,3,61,166,25,216,171,30,221,29,2,124,111,156,78,143,77,22,43,95,193,220,144,3,147,191,40,21,44,64,242,226,117,74,133,94,89,207,193,180,26,8,2,13,2,253,57,56,113,2,241,9,216,249,202,242,244,245,252,207,114,196,62,130,50,184,151,182,35,1,162,29,29,150,73,5,185,185,111,223,254,159,117,20,25,125,151,88,154,197,31,105,22,133,4,168,120,35,202,224,37,70,79,93,168,4,162,156,224,214,219,200,65,52,46,167,226,98,97,237,116,178,248,126,233,203,47,5,243,254,179,249,87,158,4,25,144,86,251,185,217,25,26,56,0,158,69,107,255,195,5,106,249,112,162,118,189,29,206,190,137,215,141,12,87,75,185,181,51,144,110,25,172,246,20,20,234,168,113,193,18,38,6,195,197,19,55,107,211,251,119,149,78,160,197,183,76,128,7,0,182,41,216,63,89,193,129,156,36,97,137,106,119,121,35,247,233,35,207,45,252,132,98,233,194,209,103,202,88,180,118,127,92,136,12,251,208,53,70,142,137,184,41,12,202,52,69,138,139,225,68,105,158,50,213,34,6,127,110,111,53,122,217,208,226,239,173,23,20,106,46,243,175,22,171,198,253,244,19,148,37,116,10,61,209,61,232,6,178,184,87,51,55,13,47,238,121,47,220,39,48,194,86,175,219,106,95,32,80,73,241,59,223,67,37,6,170,90,105,44,237,239,166,196,81,31,78,104,118,212,103,55,63,177,188,121,123,251,186,107,189,122,17,49,28,152,234,73,85,243,107,119,181,201,138,165,59,204,194,151,165,11,192,155,66,36,183,199,87,159,23,43,178,219,135,97,82,78,97,211,48,59,116,44,190,175,101,150,42,90,8,121,64,149,92,130,158,29,191,165,143,109,235,140,13,77,216,71,205,185,24,112,206,146,139,213,169,52,243,149,14,208,99,192,158,56,205,227,241,55,227,219,81,194,151,135,150,77,246,128,178,25,115,64,89,31,161,231,159,168,83,24,34,208,120,51,71,248,232,15,89,14,151,94,179,35,141,27,83,120,70,100,2,217,95,216,127,174,210,12,196,153,61,174,92,213,15,90,134,204,205,242,97,81,186,2,190,99,8,51,107,99,168,126,208,176,55,19,150,152,230,189,14,237,186,89,83,9,235,140,186,228,94,148,207,209,210,179,247,0,35,48,108,31,176,53,213,25,76,29,130,108,198,21,223,160,58,231,23,252,99,163,165,182,69,244,182,210,26,56,237,27,24,219,45,103,252,103,85,40,190,139,198,233,60,70,207,181,243,88,38,253,64,36,254,28,94,70,68,132,111,86,72,115,92,236,66,68,32,249,187,128,217,106,66,215,56,242,29,86,3,180,77,229,196,36,113,113,91,183,200,182,100,148,13,124,11,13,81,45,247,114,247,181,61,208,228,249,52,239,160,154,162,199,37,57,53,164,197,58,164,36,26,70,22,74,225,235,40,152,159,252,252,45,36,23,147,9,83,222,212,232,9,139,117,122,18,27,129,208,123,167,81,154,182,119,53,22,88,52,155,44,199,130,72,67,74,52,241,3,150,56,217,86,215,123,33,68,1,163,239,191,255,179,87,16,133,198,90,123,79,233,177,71,204,206,238,52,255,159,161,23,184,235,46,73,6,176,230,186,70,236,25,41,109,147,11,201,115,218,12,99,118,254,195,5,189,221,220,98,61,9,21,1,148,194,66,104,221,182,207,207,17,47,138,92,221,252,25,203,149,211,221,206,178,155,248,30,246,67,107,21,25,86,66,180,165,238,147,147,51,187,243,21,42,191,77,24,220,58,195,156,98,58,180,71,156,186,114,26,132,215,69,74,213,197,55,220,170,144,29,239,196,18,55,177,52,21,122,59,55,144,77,183,54,246,152,57,208,109,198,143,119,30,112,15,209,173,56,121,157,247,216,196,141,90,101,65,88,20,203,206,225,60,53,194,144,128,174,118,56,78,6,56,102,40,0,166,76,67,211,60,131,115,46,200,216,138,211,224,8,157,186,196,86,57,129,209,38,34,118,251,68,125,57,236,14,146,4,95,41,117,79,80,154,250,112,149,73,228,113,216,73,52,154,1,224,121,141,147,55,131,179,151,205,131,57,164,251,238,125,243,83,164,218,230,222,141,223,222,235,53,174,167,28,88,221,17,16,169,40,9,17,52,217,22,150,23,165,214,92,61,209,105,248,161,24,78,232,225,227,60,234,196,173,67,0,170,139,177,34,106,87,141,235,217,66,94,227,79,118,222,73,106,186,114,68,206,133,75,70,114,121,38,236,96,65,79,58,204,70,142,30,104,6,21,228,124,39,183,137,27,243,93,81,122,56,209,165,71,221,164,229,205,161,220,6,0,103,231,2,23,89,137,134,205,111,134,248,88,49,26,72,105,186,207,35,103,153,114,184,75,229,37,192,34,86,223,81,141,160,80,12,159,163,230,145,230,215,4,165,179,246,186,22,169,244,133,52,165,207,12,234,98,124,87,200,124,99,117,98,239,23,167,89,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,255,255,239,151,144,100,75,64,76,93,11,42,214,57,27,19,65,43,33,22,216,62,164,187,149,201,148,186,177,80,23,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,50,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,14,51,164,102,85,24,96,3,61,120,164,145,213,235,71,51,219,186,248,148,239,184,208,39,74,166,251,223,25,179,77,125,45,243,244,156,118,204,110,82,237,143,151,66,4,34,230,84,93,135,33,192,3,161,160,33,46,210,130,116,89,198,150,97,20,101,42,98,45,45,38,54,216,132,178,96,227,123,20,15,193,186,158,30,117,97,149,241,75,86,227,229,144,32,251,238,35,161,130,19,112,100,97,205,123,243,188,165,215,88,129,230,127,159,189,95,22,94,36,165,62,43,241,255,108,2,89,35,38,66,241,193,168,177,198,186,52,107,186,40,52,74,204,26,249,203,215,188,238,176,32,183,147,241,198,44,214,83,32,229,30,35,223,235,108,150,128,253,70,91,14,23,243,44,94,92,116,73,62,32,90,245,218,212,58,16,232,228,89,174,161,52,30,21,204,68,67,249,3,78,162,193,93,97,106,10,65,109,150,2,178,196,85,146,109,155,4,243,152,155,82,196,158,83,9,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,33,207,91,153,138,15,139,192,74,170,60,225,29,165,136,52,117,255,183,109,19,180,186,120,38,173,68,131,168,50,79,75,51,14,11,99,121,199,134,143,86,1,217,118,117,38,2,223,202,213,54,193,125,21,165,46,138,87,29,189,135,172,183,2,28,156,213,157,194,102,207,171,107,12,190,88,150,204,211,36,103,162,185,98,12,85,176,94,108,211,188,75,80,82,83,117,12,96,125,236,127,47,148,20,200,157,179,19,162,239,102,77,168,189,154,33,107,88,33,171,121,254,174,49,116,112,245,64,10,191,14,62,71,226,46,39,15,38,182,144,69,254,27,25,47,145,128,196,146,5,37,153,36,56,217,4,11,31,46,127,17,222,32,20,131,253,116,228,252,53,98,162,134,27,138,215,179,19,26,97,39,193,106,123,125,25,184,76,135,196,172,47,18,236,51,187,172,154,241,147,161,207,18,88,15,62,167,198,145,90,166,188,43,36,216,180,179,54,7,150,142,174,175,16,39,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,50,95,102,102,116,0,0,0,64,214,90,137,226,146,231,40,124,5,150,178,77,250,118,75,100,21,229,183,87,237,71,199,69,60,1,128,251,249,47,26,23,9,33,46,108,163,250,193,5,157,160,135,90,19,166,82,83,238,190,102,63,248,171,116,56,227,81,42,128,128,19,134,15,37,180,39,108,225,191,138,154,52,221,19,238,223,170,4,151,233,48,120,219,54,195,15,122,179,252,163,106,114,55,203,6,102,156,97,72,96,170,82,21,65,30,103,125,89,164,120,53,179,14,0,102,14,173,87,249,13,13,203,20,0,66,179,92,220,76,4,119,143,105,126,224,157,166,62,240,103,148,7,115,126,145,107,32,37,110,144,154,193,237,31,102,201,75,101,12,193,123,32,101,120,111,211,199,176,170,222,21,124,169,221,234,81,46,118,94,26,210,49,24,25,151,53,2,48,122,79,48,156,252,161,141,115,167,94,246,229,152,215,65,68,84,32,227,46,103,23,101,121,65,49,121,116,157,103,207,221,165,27,32,33,36,174,88,116,107,156,187,129,177,237,67,168,77,35,156,117,105,166,201,0,78,215,198,158,99,151,167,34,204,242,83,123,218,181,105,89,9,53,246,1,127,134,145,161,224,175,133,203,12,41,63,161,96,43,15,54,179,74,53,62,181,159,44,192,180,181,161,24,37,166,248,110,227,87,149,164,127,96,33,148,117,50,171,142,24,119,3,217,171,69,45,189,85,64,64,227,144,244,109,207,108,61,146,20,179,8,0,142,185,167,144,99,190,13,48,29,95,175,255,209,208,98,143,153,194,195,16,191,236,171,215,163,24,33,137,70,104,176,89,213,212,23,93,143,83,63,249,212,127,6,10,208,249,75,91,232,86,16,16,79,64,227,38,127,135,238,69,85,91,42,196,51,225,171,52,206,150,245,108,125,92,212,99,166,139,31,3,227,133,188,71,211,81,70,211,99,28,23,162,132,71,161,157,99,50,204,126,87,73,250,0,136,117,153,157,9,140,164,33,100,219,91,12,26,250,116,202,29,166,161,201,216,162,180,126,54,89,132,148,46,223,248,53,118,37,9,143,105,252,229,52,51,47,52,18,180,249,24,153,149,160,27,149,96,136,179,49,73,180,254,18,247,210,68,129,156,242,10,167,97,224,108,117,53,70,164,54,187,200,50,32,52,211,193,130,255,196,63,209,224,147,175,119,129,110,213,134,99,60,244,149,107,63,114,24,95,6,222,70,77,144,95,226,230,63,22,221,18,80,189,17,118,210,52,53,23,219,117,135,18,237,246,222,228,235,103,36,182,68,35,16,34,222,174,148,168,35,19,138,219,144,214,15,84,61,207,172,31,94,125,99,162,109,34,79,181,69,251,191,142,97,179,58,169,189,30,209,196,206,22,200,194,248,83,45,71,153,224,168,206,27,48,36,86,217,88,17,82,17,88,138,20,101,32,42,18,250,164,93,60,103,132,187,67,72,242,103,141,33,68,11,151,234,230,3,220,165,19,140,20,43,249,242,106,168,11,41,227,90,225,146,194,1,149,75,63,203,185,191,78,95,178,37,191,141,212,181,70,116,86,47,3,213,16,27,229,16,68,45,106,157,148,93,135,44,96,233,45,40,111,55,163,142,251,198,190,69,250,122,217,97,96,186,221,212,4,43,154,195,12,90,79,175,18,140,210,53,13,41,143,220,164,214,25,80,107,85,207,251,15,224,144,96,206,150,172,0,231,238,233,77,54,66,120,156,9,18,185,71,217,34,144,180,189,114,53,64,140,193,59,231,232,235,239,92,148,45,112,227,237,108,172,66,215,24,149,88,31,94,132,191,182,242,50,138,202,83,5,120,105,177,249,217,218,188,151,150,178,215,141,10,177,137,119,142,58,23,15,16,21,122,4,105,32,123,45,154,156,92,230,12,187,230,42,13,221,178,119,129,106,156,118,81,118,173,49,224,221,19,192,130,129,176,113,71,60,211,118,135,81,85,134,22,24,187,28,137,196,246,234,165,238,245,29,159,164,136,251,202,143,9,7,84,99,3,229,17,200,220,100,123,190,151,99,128,116,103,60,136,175,237,75,155,116,248,204,54,174,30,63,220,234,43,211,228,139,31,255,104,248,92,55,132,123,94,223,64,123,142,254,158,193,92,159,34,145,252,127,123,184,221,251,226,41,16,160,124,238,32,121,239,234,27,3,56,57,220,5,203,253,95,119,176,166,211,156,64,77,14,245,91,107,126,21,102,151,26,215,196,138,235,248,222,94,69,179,58,30,155,151,113,244,135,168,23,22,136,192,181,32,217,253,76,104,27,20,94,67,69,224,21,101,30,3,17,34,164,212,234,235,99,185,141,248,27,105,66,234,188,193,230,235,229,150,99,54,43,206,124,217,38,85,26,27,212,247,216,247,157,205,147,119,197,46,159,51,179,70,103,156,247,140,160,253,200,210,89,229,110,244,2,250,53,17,222,4,60,183,15,35,148,145,186,124,52,186,235,153,159,60,155,221,117,146,191,74,12,241,217,42,242,208,87,3,71,202,178,42,229,31,49,25,158,48,236,45,65,78,207,144,38,48,214,202,145,66,199,166,235,158,106,6,253,43,188,237,63,238,21,138,9,197,244,5,185,234,70,237,18,160,122,158,61,24,147,171,215,219,33,98,190,4,71,182,145,218,209,4,74,153,235,12,147,164,1,126,158,255,185,106,172,137,154,210,126,197,190,159,146,34,83,47,113,131,171,238,250,35,205,154,35,162,93,23,48,247,103,0,148,132,62,55,108,162,51,132,200,224,178,9,165,241,154,191,29,231,121,148,44,97,240,6,20,247,169,155,41,157,47,36,202,118,0,62,37,65,179,227,101,247,68,85,169,158,110,193,107,160,215,90,23,228,92,166,68,7,19,15,254,169,193,60,112,6,102,71,163,17,20,140,59,69,24,62,216,69,208,4,250,206,189,57,205,49,15,224,13,12,201,45,179,179,144,103,224,71,252,169,156,170,173,250,71,153,155,205,136,213,185,150,107,45,103,116,146,16,101,188,7,33,108,80,177,118,204,192,132,161,16,27,176,79,236,86,0,181,66,139,171,201,186,149,184,126,14,213,12,123,64,206,20,139,109,34,93,206,70,239,241,104,8,237,221,72,155,212,49,165,158,192,235,201,204,132,167,104,153,49,179,243,30,3,52,123,230,54,248,231,148,231,117,229,15,250,137,29,184,233,29,92,193,231,42,207,48,147,197,162,161,2,92,132,53,223,37,75,169,24,182,112,132,16,139,195,155,42,79,70,8,117,39,65,45,49,30,64,20,4,94,212,73,128,224,61,140,98,86,252,86,198,216,97,157,126,7,234,151,58,20,225,252,19,127,57,196,91,50,147,122,135,212,181,76,71,150,128,119,172,57,18,241,81,191,125,17,164,217,109,47,142,217,118,187,123,218,236,112,216,64,124,16,237,13,59,240,172,13,105,82,37,80,163,42,61,225,31,203,105,170,63,201,121,130,216,27,219,97,136,140,199,193,242,254,74,123,110,225,164,230,110,174,6,53,169,57,199,76,43,129,235,3,118,196,17,123,212,115,88,4,72,240,103,221,88,221,35,48,9,132,110,163,25,45,63,48,52,225,33,90,92,244,81,123,15,196,222,11,138,134,100,251,102,118,149,50,187,82,75,18,227,184,249,146,19,62,237,69,239,152,186,195,216,68,1,186,27,176,10,0,74,38,166,221,33,140,108,7,183,128,154,163,146,10,150,119,179,253,0,0,106,49,151,187,3,208,35,60,188,125,173,215,144,241,180,212,123,252,255,129,226,20,145,141,239,18,203,36,53,92,42,3,179,149,121,238,72,219,238,167,6,143,47,97,89,139,80,99,145,251,161,208,1,163,52,88,155,173,78,181,233,35,160,49,228,254,196,199,26,86,49,239,26,167,52,96,141,87,186,47,146,117,5,92,83,128,90,160,167,162,182,71,98,61,252,44,235,110,128,162,166,116,188,177,194,43,96,200,253,133,163,192,102,68,47,150,54,7,151,13,223,210,244,250,122,131,47,43,172,6,160,228,149,4,95,139,156,173,228,54,29,239,69,236,136,216,223,105,63,213,124,134,209,39,181,246,243,136,2,58,213,116,170,196,13,116,91,80,201,198,126,126,4,227,140,47,96,240,49,141,44,18,235,63,111,162,3,8,84,228,24,92,185,17,87,253,251,124,118,169,217,162,138,26,127,46,191,0,1,174,72,177,171,240,4,215,74,50,253,170,177,219,77,63,118,90,19,188,209,136,76,194,100,1,144,47,58,19,131,175,126,24,31,207,162,247,20,92,108,204,174,212,131,15,207,64,247,1,235,98,134,213,166,154,194,111,248,82,215,27,31,33,49,184,186,221,159,127,201,31,11,30,197,163,77,43,182,6,93,119,111,118,155,113,193,161,28,192,219,127,8,114,208,130,132,82,77,158,13,69,29,14,159,4,111,7,64,90,37,3,46,203,20,171,185,123,238,102,81,89,3,69,53,101,105,199,109,37,113,103,164,81,106,55,155,138,101,96,252,68,62,1,149,134,100,231,136,40,84,219,214,200,81,239,214,75,216,107,64,162,0,176,34,65,26,141,204,184,10,123,60,110,95,4,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,255,255,63,180,196,250,247,105,25,190,170,191,76,54,82,65,135,164,153,133,123,173,10,235,116,209,46,124,41,91,37,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,51,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,30,35,157,169,95,228,105,148,207,233,229,251,4,60,63,43,10,160,109,12,169,117,31,103,96,110,17,210,172,146,65,210,37,183,204,247,224,211,98,27,241,244,230,26,132,22,49,174,162,172,121,177,33,207,20,62,103,111,74,129,251,123,227,171,25,30,144,243,107,127,80,58,16,143,172,5,107,133,120,193,89,122,72,13,67,85,3,142,160,112,205,168,116,74,152,178,38,153,81,1,53,104,92,25,165,161,184,10,207,25,195,54,90,166,103,151,52,152,10,201,136,155,227,201,197,198,218,145,7,189,200,149,47,157,137,50,100,180,115,40,87,181,146,36,121,178,231,212,187,128,58,80,195,171,216,95,198,63,174,26,22,57,181,17,84,26,103,166,30,62,31,170,234,59,130,79,208,200,52,162,86,174,228,99,189,237,148,89,128,84,183,234,13,180,160,231,74,206,202,206,6,68,44,214,95,236,250,89,57,67,40,113,72,208,8,155,232,215,218,100,113,213,99,153,2,5,0,0,176,227,203,105,83,214,50,159,96,106,137,3,201,209,185,134,135,144,92,145,153,208,32,248,101,62,136,245,17,222,98,86,144,175,139,77,116,167,138,189,116,12,169,8,30,189,234,116,216,64,38,233,87,187,142,95,52,224,12,146,10,74,51,8,15,192,146,198,82,156,137,158,245,49,183,133,133,176,222,207,95,231,48,18,81,186,85,176,229,246,106,184,22,227,111,12,132,20,165,167,51,2,196,179,14,195,111,114,206,226,15,116,62,97,66,194,23,185,210,136,108,40,182,177,9,104,174,254,186,43,153,200,158,239,183,174,170,46,37,253,205,182,240,233,76,30,59,135,47,142,188,103,27,172,115,210,40,68,55,106,192,246,107,175,223,220,252,144,34,147,85,15,175,170,112,172,197,53,11,0,245,125,199,209,26,51,160,73,26,200,74,238,155,121,142,59,37,83,81,15,143,12,102,228,87,148,35,223,42,8,97,236,250,59,11,216,96,30,151,121,34,77,95,24,165,197,42,19,61,77,68,227,25,92,237,217,238,25,48,16,57,230,60,181,207,81,197,204,111,157,234,202,45,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,51,95,102,102,116,0,0,0,64,35,78,187,82,59,37,0,36,159,227,108,143,178,14,98,127,139,139,229,145,187,218,16,246,184,215,52,9,122,28,155,95,168,94,69,163,171,84,87,255,142,3,13,132,17,3,188,179,111,155,52,148,33,219,29,104,237,112,103,173,167,61,241,53,99,233,160,154,96,107,127,53,107,148,232,127,69,241,205,224,120,59,21,69,191,77,141,86,78,166,101,53,250,242,9,11,227,10,46,15,192,75,40,14,102,215,102,72,63,102,117,76,198,163,67,177,108,195,230,103,32,31,228,72,200,110,112,51,199,82,24,85,75,236,111,183,165,107,23,23,139,164,44,84,16,207,245,46,149,23,194,120,13,175,185,143,207,97,19,84,31,15,94,63,206,194,176,24,128,10,252,30,122,232,179,248,64,123,19,53,59,115,25,215,121,86,234,29,17,142,163,70,10,16,135,120,36,185,56,155,180,112,28,54,158,42,247,166,125,188,142,147,105,97,55,124,86,115,167,40,166,63,62,12,14,157,246,65,167,154,243,253,225,140,110,104,47,206,158,113,33,226,38,37,97,14,123,90,133,8,32,60,81,55,17,1,94,38,176,59,16,217,127,91,254,220,197,32,162,180,20,181,206,193,25,89,7,129,140,245,17,6,205,166,133,208,185,92,166,194,254,215,195,93,102,134,36,148,113,110,234,130,130,157,89,63,131,103,255,244,154,63,156,199,104,91,64,141,48,2,245,96,7,31,106,249,49,56,238,95,227,45,113,226,188,157,78,16,45,141,11,199,251,157,248,192,93,39,168,133,28,44,187,77,47,157,245,153,5,58,221,224,217,119,223,244,116,140,247,138,197,23,77,148,67,57,108,94,72,146,207,250,176,65,143,49,87,60,222,98,173,16,62,47,245,188,188,151,164,246,153,178,213,164,42,19,136,170,91,44,75,78,151,250,106,21,169,245,252,213,94,238,97,15,246,191,192,16,11,172,145,170,133,232,63,71,84,8,115,148,242,246,41,10,205,164,65,54,9,33,244,206,114,250,172,165,38,135,27,4,227,0,80,89,134,45,62,246,233,68,203,143,142,8,26,134,16,46,27,53,36,190,164,51,76,38,157,80,59,112,254,212,36,221,159,165,158,160,14,119,171,121,26,64,33,15,161,155,61,130,244,43,162,58,212,152,154,89,169,22,216,231,245,185,202,60,51,109,139,20,151,184,8,65,184,82,214,225,4,46,181,144,81,76,201,194,240,185,79,89,85,75,127,18,32,49,82,110,210,14,195,189,195,17,124,151,141,186,85,202,127,238,147,28,168,13,17,121,50,139,153,37,156,173,50,66,186,6,37,5,109,110,159,206,26,117,90,64,43,178,119,146,136,66,182,71,240,66,25,86,210,137,232,98,8,252,31,33,72,55,17,231,72,26,56,97,62,10,191,133,99,216,110,6,220,230,24,151,108,71,177,52,79,119,135,228,100,128,123,86,137,42,138,211,175,113,130,62,219,33,113,26,106,204,123,137,55,200,202,226,236,47,225,97,6,56,145,58,173,57,3,107,144,234,140,136,46,30,50,35,42,68,118,3,151,152,170,246,68,199,174,75,234,59,34,130,2,182,19,82,7,177,143,5,178,48,154,48,61,119,76,110,90,130,237,67,209,181,200,243,34,207,144,3,249,29,242,50,79,121,214,162,229,100,25,50,142,136,219,100,162,106,8,138,134,102,63,179,54,226,179,59,218,236,200,153,134,41,70,247,226,21,78,177,41,86,231,255,96,6,7,250,83,5,50,58,211,253,249,49,226,138,232,180,110,161,128,138,78,19,220,193,33,212,210,240,182,36,43,240,224,244,117,236,176,12,174,137,157,105,70,135,91,61,93,144,213,212,240,169,89,47,95,76,239,149,55,53,249,255,197,233,182,69,214,90,146,251,13,80,228,182,221,203,61,143,91,80,190,164,42,11,30,25,207,140,198,225,136,74,38,243,3,34,32,238,62,117,195,210,91,148,44,197,255,115,216,149,61,149,70,61,179,236,118,21,125,90,146,152,183,203,137,13,8,114,96,0,254,134,89,162,59,105,40,48,34,237,10,199,132,243,172,34,8,45,203,13,208,29,249,65,8,187,56,210,244,154,218,98,57,39,255,171,218,93,130,41,236,167,173,61,19,69,241,7,147,221,189,39,114,55,40,23,126,210,170,121,154,166,243,192,81,141,37,16,82,238,219,51,250,201,26,98,79,25,134,171,229,130,220,65,171,231,247,217,51,137,244,73,138,36,234,67,254,156,108,166,25,231,208,114,78,192,55,43,35,85,197,251,30,85,221,3,123,220,108,132,149,117,137,171,99,106,200,255,134,213,125,125,204,123,104,134,135,26,169,154,139,55,153,68,16,148,29,38,12,48,29,24,153,182,53,98,129,13,183,138,191,248,251,102,201,200,206,245,168,158,132,212,135,229,11,84,17,120,231,20,215,2,84,68,222,176,44,124,44,96,229,126,203,101,114,44,83,48,248,37,17,72,42,69,230,59,192,149,1,234,78,65,21,94,85,4,170,127,212,38,49,199,120,215,131,253,234,253,67,225,31,187,23,5,112,147,226,18,85,24,249,94,117,87,39,181,148,198,109,231,46,93,14,215,146,34,63,227,252,136,158,136,75,162,31,185,10,38,173,24,24,60,195,230,53,46,185,253,72,51,237,74,198,108,38,182,155,34,69,114,18,40,243,193,44,129,135,225,113,201,242,14,8,37,2,145,102,64,56,140,64,214,82,233,186,59,216,150,120,118,34,240,27,105,213,204,88,236,85,86,201,73,157,42,46,77,69,136,173,6,206,5,207,236,209,1,47,17,171,211,72,85,62,195,39,230,22,32,248,180,238,172,232,201,35,163,12,152,139,224,66,29,68,99,134,54,112,174,161,37,11,246,57,226,20,225,84,21,105,89,29,97,170,202,214,51,182,71,170,158,153,85,242,81,190,137,226,37,210,196,76,34,114,57,174,169,231,111,104,130,229,94,83,68,241,90,189,8,200,66,19,123,236,214,226,0,115,116,224,179,72,193,127,91,156,174,19,136,37,41,90,146,121,231,22,38,48,72,59,208,7,28,244,90,192,123,232,55,71,98,17,99,56,154,176,206,84,234,52,130,182,145,193,56,47,79,158,86,113,127,129,135,76,0,136,131,192,78,188,59,35,189,19,74,43,71,160,17,156,70,100,73,104,56,8,33,15,139,83,136,90,181,179,101,0,157,170,107,1,77,45,89,139,103,164,209,212,190,200,190,146,131,46,179,250,28,82,146,168,249,41,100,249,80,74,201,232,140,135,31,245,64,21,52,251,73,233,27,121,255,38,20,112,164,131,193,93,249,24,168,174,51,206,141,71,241,50,42,88,188,22,124,216,172,155,28,38,161,127,144,74,207,31,43,198,126,12,241,49,50,215,73,56,105,54,68,193,1,31,33,117,7,54,28,9,83,50,34,96,144,85,97,58,69,58,72,55,189,165,125,236,67,117,74,134,201,154,10,121,122,117,89,185,237,40,75,208,107,225,19,25,62,234,211,27,94,178,237,165,114,217,20,189,190,24,105,147,227,161,150,154,39,62,13,52,51,244,60,168,228,3,78,75,65,115,88,233,171,69,184,132,113,52,204,78,161,52,223,144,243,228,23,213,40,242,29,58,88,57,140,197,189,205,41,61,66,181,103,37,29,182,118,147,230,12,164,59,107,108,63,47,218,166,18,59,235,189,255,140,38,70,171,156,177,15,26,233,72,5,250,7,138,96,72,47,95,177,178,107,7,152,20,119,116,30,72,114,90,113,63,70,131,95,77,38,55,233,36,55,161,150,255,148,156,18,186,57,64,144,15,23,30,130,208,222,139,46,136,173,3,181,10,72,199,9,55,24,84,42,57,10,176,113,163,142,222,167,191,140,10,219,157,168,36,142,3,170,253,65,100,151,14,41,78,232,199,175,171,36,146,171,85,194,99,197,253,80,145,163,112,32,47,64,58,214,45,235,49,12,113,208,220,117,27,5,54,240,108,86,73,14,240,129,46,66,66,113,7,199,232,55,254,149,203,223,65,91,7,236,33,47,0,23,132,206,75,28,25,220,224,62,82,119,161,91,10,12,47,144,66,78,113,3,54,223,166,72,62,67,164,249,39,209,131,131,111,45,143,53,45,186,51,64,229,80,8,245,61,61,137,172,42,234,118,119,215,158,33,196,237,49,59,166,221,181,133,28,141,252,192,210,22,222,228,233,136,186,186,143,49,147,215,20,120,102,243,173,47,4,185,79,79,20,153,251,217,98,7,83,36,237,144,139,23,205,20,239,221,207,34,246,80,69,120,36,147,54,73,162,141,60,13,76,60,167,169,147,32,85,14,132,248,39,191,151,177,205,98,149,60,173,99,129,3,238,167,80,206,206,220,109,95,188,88,0,118,245,240,66,180,142,108,201,150,211,172,149,54,112,103,1,8,128,77,99,3,70,61,160,191,57,125,56,25,219,241,165,187,73,248,54,147,209,9,241,151,179,3,255,102,61,95,29,80,222,55,144,38,141,105,226,28,83,100,103,153,28,124,91,187,149,115,146,243,149,37,247,120,79,145,125,194,111,78,3,86,111,97,224,15,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,255,255,159,60,3,175,96,2,118,101,208,12,219,254,96,18,117,156,144,62,217,203,184,240,179,167,231,202,82,1,3,0,0,0,13,116,97,98,108,101,95,118,97,108,117,101,95,52,0,0,0,16,252,255,255,63,176,41,120,240,186,61,26,25,222,94,48,95,139,158,250,249,37,233,190,30,89,127,57,123,52,198,110,46,19,150,236,105,176,115,37,98,91,39,102,52,140,54,35,57,133,226,131,98,50,110,166,118,54,39,196,63,114,53,39,30,123,164,82,75,219,86,228,244,89,54,243,3,11,124,7,232,209,209,162,63,253,136,90,160,12,18,142,157,49,48,246,30,215,245,132,170,209,122,62,72,153,166,170,242,142,220,115,242,57,242,251,16,73,113,42,245,138,183,107,88,116,53,118,41,146,32,239,233,255,76,71,18,225,36,41,64,35,237,186,92,10,106,80,212,136,54,61,139,53,118,197,255,253,170,100,25,56,160,105,182,136,76,170,147,253,44,40,122,32,89,46,249,152,247,236,136,80,84,233,242,101,234,146,182,43,60,80,13,80,139,55,43,50,67,49,58,178,160,246,91,147,142,118,84,165,131,165,212,29,52,67,248,244,225,255,135,109,27,5,46,84,117,138,66,55,135,49,175,87,107,4,207,22,157,122,4,225,246,158,188,196,233,234,132,230,188,95,113,89,119,67,44,6,0,0,160,119,193,75,151,103,163,88,218,178,113,55,241,46,18,8,9,71,162,225,81,250,192,41,71,177,214,89,50,238,105,19,134,227,129,188,225,53,73,83,69,188,177,16,239,215,117,253,30,132,215,169,65,243,120,109,161,0,25,61,18,134,91,173,164,184,158,253,78,55,58,198,117,61,108,44,64,139,134,222,65,185,188,245,23,29,142,163,67,65,30,110,17,42,10,123,69,194,122,163,251,247,201,14,135,185,11,192,53,35,102,133,112,109,212,37,195,158,232,197,136,254,24,238,6,111,223,16,6,148,168,154,49,176,75,144,57,37,251,120,203,82,238,48,173,45,15,19,45,244,41,108,225,116,163,255,22,201,95,150,57,11,169,55,176,147,67,145,255,39,143,5,47,196,96,148,248,101,241,102,197,195,181,158,42,71,18,20,35,178,116,200,180,245,167,146,77,112,64,124,151,253,65,241,251,20,45,93,46,79,87,93,120,94,94,99,58,120,129,195,50,173,138,117,173,92,110,176,148,57,5,181,170,49,75,185,35,124,97,226,196,241,91,101,51,67,227,209,111,25,215,32,4,0,0,0,17,116,97,98,108,101,95,118,97,108,117,101,95,52,95,102,102,116,0,0,0,64,109,65,237,242,39,130,49,0,133,223,250,99,145,237,220,33,234,40,143,71,102,156,105,125,184,205,84,115,161,29,239,22,71,156,92,218,179,174,236,248,128,102,146,173,15,96,37,20,241,119,2,233,74,10,199,151,247,143,164,218,206,103,92,92,162,30,26,185,115,12,86,20,51,188,118,139,243,31,203,82,101,158,51,48,254,29,91,235,18,240,88,225,244,252,172,63,97,121,250,197,179,226,223,74,28,1,32,141,109,16,166,139,54,145,8,126,129,31,198,142,92,209,46,94,3,234,145,58,175,88,44,99,75,142,187,194,249,222,195,208,212,251,181,188,138,3,252,184,225,239,2,46,220,143,190,21,125,140,148,10,125,162,155,25,36,22,142,105,79,106,25,40,120,39,138,6,48,200,176,11,92,20,1,150,218,21,159,57,242,161,247,92,121,35,108,83,105,192,244,131,20,185,26,164,64,233,1,147,41,106,135,67,16,199,141,55,98,233,24,99,225,39,197,40,253,21,63,11,2,181,14,200,100,73,98,128,71,31,130,151,135,11,170,131,46,90,191,94,191,237,11,147,101,63,248,14,63,114,170,45,159,189,6,57,216,89,146,188,17,184,17,148,23,198,7,112,0,22,77,107,154,24,236,85,231,78,11,44,143,208,71,222,42,119,204,223,141,150,183,180,9,63,64,146,54,18,88,168,147,162,175,164,220,195,32,45,28,176,77,85,6,49,26,224,112,144,68,154,54,156,4,226,11,35,158,130,220,9,203,104,67,233,247,131,245,16,39,222,67,250,16,23,182,174,178,114,179,37,8,167,226,232,73,28,161,44,158,147,2,106,202,180,14,99,48,176,222,34,19,232,67,80,237,66,209,34,203,49,101,41,48,99,73,228,50,169,214,30,5,9,32,127,184,223,68,85,220,97,100,13,218,91,49,12,226,67,127,153,179,216,89,192,172,124,103,56,224,131,178,37,87,214,179,135,133,141,32,155,76,139,219,97,175,242,53,110,39,96,247,71,115,227,51,89,214,61,227,250,200,15,71,192,231,245,128,35,2,53,167,30,61,216,137,116,28,246,122,222,157,39,149,130,48,190,150,161,0,80,167,200,2,242,72,238,116,96,163,198,89,238,112,70,122,145,10,222,6,163,184,12,169,81,137,172,117,17,1,224,144,170,176,10,172,162,180,229,182,98,149,186,88,234,173,69,124,15,65,132,151,67,11,27,197,81,69,245,129,145,184,114,148,185,235,212,130,80,46,10,112,232,110,160,17,156,229,65,36,150,198,168,151,184,113,244,44,11,0,20,182,129,138,39,37,209,137,243,157,253,245,204,10,48,31,63,184,134,18,19,52,21,58,223,21,197,221,45,45,75,136,238,133,82,120,1,24,236,235,216,130,199,146,76,125,99,68,78,203,110,113,236,29,231,97,91,46,98,170,122,84,52,80,111,249,144,210,97,69,69,179,100,32,237,134,133,27,216,109,146,207,63,6,143,192,12,227,231,117,157,42,29,206,54,222,104,43,237,203,125,227,227,53,154,173,155,130,201,118,238,71,96,254,80,239,76,135,73,40,120,71,146,5,56,44,26,220,102,112,238,199,98,114,0,20,196,103,29,34,163,230,119,148,71,189,140,110,177,226,33,7,83,164,53,109,224,173,66,150,182,139,86,110,5,160,228,52,248,48,180,229,97,13,168,158,112,126,110,164,75,239,229,228,22,255,203,26,52,59,65,20,82,188,25,227,26,122,137,62,75,4,154,216,179,27,73,40,141,189,15,4,7,48,232,96,134,239,213,84,210,197,13,34,43,36,90,141,44,213,18,146,229,61,28,158,120,196,63,5,225,222,148,62,50,180,234,2,118,200,62,247,118,20,23,176,136,201,161,254,246,179,200,239,169,138,168,14,145,157,56,78,235,108,60,250,91,97,58,106,239,55,125,150,132,194,78,222,150,11,19,160,77,16,19,145,188,238,134,247,211,110,234,154,159,148,147,20,66,194,53,93,139,232,241,106,14,94,33,244,96,193,29,30,123,45,130,60,217,187,226,224,117,114,5,152,162,34,244,174,132,241,77,102,80,221,7,68,204,15,32,204,86,102,116,125,23,151,3,33,65,128,237,74,37,79,161,89,196,193,116,130,231,121,198,124,110,248,80,183,137,237,14,67,242,97,29,239,191,136,147,160,164,244,43,85,103,25,152,207,211,143,18,161,13,152,253,127,54,111,247,66,81,189,56,130,10,101,152,42,20,48,26,21,96,226,89,62,129,128,61,162,191,15,226,255,155,63,166,197,61,183,127,130,55,164,83,23,163,116,218,187,207,210,246,131,90,94,21,157,5,55,7,141,13,104,209,3,148,182,7,170,171,45,63,197,249,197,85,197,69,31,60,98,127,55,174,87,104,105,67,225,34,44,107,6,219,3,247,49,40,172,80,144,177,149,251,19,138,157,84,156,39,163,92,113,92,84,32,54,149,148,79,148,247,22,145,12,109,145,84,217,138,185,197,177,253,35,88,191,45,54,11,95,9,128,51,160,216,173,107,160,49,10,244,112,67,17,173,250,147,243,98,54,253,232,130,252,26,114,82,83,179,152,62,97,84,159,115,170,207,57,69,195,215,241,171,38,52,143,252,129,214,108,238,25,150,3,70,127,138,171,199,30,74,203,66,217,15,133,211,53,148,14,59,77,178,204,152,0,74,82,209,32,197,185,111,236,111,180,33,98,114,33,79,224,84,50,93,207,186,105,108,66,96,87,39,189,95,115,250,234,148,231,49,39,63,41,181,112,87,35,46,125,123,249,78,156,110,184,41,167,97,2,144,46,191,253,223,1,136,198,120,204,163,211,182,240,171,157,195,171,118,176,152,250,174,33,219,24,1,168,86,127,179,253,142,14,176,66,83,237,164,185,45,135,221,181,158,210,233,249,230,161,57,8,253,73,145,183,173,27,255,59,53,113,74,151,136,132,238,19,168,45,231,107,48,109,26,10,229,142,122,90,129,195,65,52,94,140,190,227,68,59,151,109,42,196,124,112,198,134,192,92,238,5,220,82,230,178,125,41,252,224,51,33,31,224,143,144,47,103,137,225,199,146,104,158,42,2,87,0,121,14,248,143,103,175,91,195,172,219,159,122,23,92,167,250,63,98,236,45,175,6,199,172,114,26,48,17,19,201,147,240,187,70,14,149,37,48,156,91,21,34,232,190,211,7,164,188,226,120,174,51,149,10,88,239,184,152,199,178,43,203,37,48,237,56,249,128,242,97,107,50,23,175,49,47,253,15,198,34,170,178,141,144,52,253,207,142,94,172,245,199,17,251,60,12,79,36,87,177,100,135,33,134,232,34,222,81,249,128,251,193,106,178,173,46,56,36,204,23,67,163,48,239,47,59,81,173,81,171,130,125,192,175,62,68,130,53,145,102,225,224,185,21,201,188,56,161,236,216,190,240,11,28,162,163,36,31,246,109,193,124,170,206,109,81,146,68,108,145,60,119,131,62,183,112,86,108,129,64,168,87,58,16,114,23,198,132,83,135,66,13,123,228,79,181,79,179,63,46,187,20,57,113,125,36,38,217,76,111,230,183,121,11,162,22,20,81,255,255,10,98,161,196,86,118,99,57,245,249,30,138,140,19,188,4,195,186,112,52,253,238,254,152,41,145,247,120,133,119,61,174,13,138,235,175,27,222,255,136,239,121,172,85,206,228,199,254,120,223,207,95,156,8,16,145,163,93,162,196,253,18,23,186,3,104,96,115,56,12,68,157,84,162,64,181,141,70,29,123,84,114,236,60,14,2,160,81,241,156,243,243,117,23,18,168,70,186,172,179,32,77,104,84,136,219,128,55,68,140,200,127,21,207,195,57,190,162,30,229,4,203,64,147,215,211,53,80,16,46,97,30,159,218,123,90,8,220,140,14,232,50,33,250,134,7,213,123,105,110,17,87,139,213,172,69,77,1,74,146,29,152,88,10,105,103,184,168,235,236,193,102,50,102,237,254,122,84,69,240,161,254,233,34,166,215,102,134,182,46,14,112,1,218,125,66,10,32,184,212,248,177,202,77,64,42,240,249,167,143,216,80,161,202,77,92,28,58,218,43,112,224,86,125,59,68,233,117,176,34,100,141,95,134,247,203,119,202,77,154,72,159,111,86,211,228,81,208,210,46,101,174,163,192,122,53,80,194,0,2,72,108,102,90,73,245,16,183,58,45,48,193,226,199,181,113,234,3,215,240,14,155,55,8,72,54,232,53,84,174,84,22,84,211,114,75,21,129,143,156,123,93,78,12,180,140,69,132,118,202,158,97,98,218,28,204,36,54,153,84,0,148,238,93,179,122,178,127,196,71,27,89,159,191,31,60,72,214,188,206,148,102,68,182,251,185,71,151,182,127,234,176,48,128,216,49,22,150,61,252,96,237,97,222,229,42,88,233,13,246,222,198,16,80,90,94,23,107,106,197,233,50,143,5,52,93,175,43,228,37,137,160,135,211,25,143,184,21,163,208,54,216,149,239,70,12,112,67,222,181,147,163,94,77,220,125,27,134,76,96,66,177,149,92,155,243,159,30,1,157,131,128,163,72,1,111,195,50,39,49,176,60,132,45,18,21,163,197,75,0,0,0,22,116,97,98,108,101,95,118,97,108,117,101,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,255,255,239,88,55,69,13,44,67,198,111,162,81,251,151,64,187,21,9,174,124,58,31,32,147,175,129,140,202,11,17,0,0,0,10,116,97,98,108,101,95,116,121,112,101,0,0,0,16,253,255,255,47,68,31,90,52,76,174,211,146,38,71,100,135,232,246,123,123,220,46,15,215,130,31,107,92,167,20,211,30,82,178,224,80,236,86,255,211,3,177,3,253,2,113,15,85,147,182,36,251,136,237,88,101,236,47,202,18,129,23,111,12,107,69,231,161,189,134,192,229,197,248,145,4,57,80,162,210,60,113,221,199,68,184,232,187,151,243,90,21,91,253,204,9,243,94,63,176,136,209,45,104,112,190,22,212,104,76,170,143,59,75,65,217,121,185,184,162,33,15,96,201,204,192,103,30,175,228,55,6,53,128,113,161,116,228,104,245,69,45,222,122,215,184,237,214,124,204,188,57,247,203,8,249,147,184,125,2,76,66,26,155,218,64,203,213,216,71,41,238,115,63,7,249,254,183,140,84,17,237,132,52,125,163,198,245,123,4,122,48,246,50,160,174,250,189,201,83,4,124,55,138,198,45,66,148,237,248,154,223,204,129,102,125,43,238,201,43,239,39,100,14,215,34,255,51,79,118,76,217,188,192,119,127,70,205,147,80,129,197,107,112,22,55,156,60,41,21,9,21,162,20,200,22,4,0,0,192,79,214,135,15,69,194,229,230,33,161,207,160,116,97,5,6,218,22,65,225,166,128,198,132,203,57,145,17,175,77,31,159,167,158,226,111,141,191,181,124,69,119,36,211,201,161,92,134,45,88,247,82,61,112,103,206,241,54,245,35,150,186,24,78,214,110,33,94,203,119,39,117,15,152,145,85,32,231,163,185,113,141,103,252,145,172,214,203,23,81,151,38,14,161,192,63,11,36,180,219,32,178,162,165,223,155,137,152,33,13,64,168,60,140,151,21,8,145,209,23,166,141,252,17,82,27,200,233,94,117,112,162,28,140,80,132,2,187,85,173,133,159,147,170,57,121,147,126,50,212,40,232,222,149,230,45,182,189,229,68,77,170,248,177,73,153,73,5,29,145,96,87,187,248,117,174,91,158,27,60,214,156,156,204,105,152,78,48,11,205,95,65,153,55,24,240,140,244,129,239,129,186,241,147,111,95,230,161,233,195,233,58,254,177,103,181,131,38,0,34,42,221,0,188,68,127,149,106,212,175,65,250,1,27,160,215,219,146,21,17,160,14,180,123,0,139,40,204,208,57,156,25,0,0,0,14,116,97,98,108,101,95,116,121,112,101,95,102,102,116,0,0,0,68,63,116,37,210,253,76,32,248,133,76,106,55,99,0,186,166,64,161,224,103,116,243,36,14,192,52,171,131,82,66,69,23,205,165,255,221,186,49,91,154,219,187,239,250,167,188,231,226,165,182,205,152,18,217,194,73,34,84,19,232,23,92,120,35,171,73,53,239,10,84,101,236,233,79,221,189,165,238,217,83,133,204,64,11,147,57,181,49,209,233,131,151,72,93,22,95,105,191,200,234,228,134,1,88,67,90,59,122,180,103,227,142,117,219,244,74,46,175,72,243,107,8,4,9,23,253,11,30,9,65,220,138,211,68,65,254,65,110,185,15,251,44,89,41,114,31,219,135,104,236,29,7,167,75,129,182,21,11,54,14,5,85,165,176,204,200,24,38,18,235,163,3,128,43,49,207,115,148,59,177,216,143,98,154,87,24,204,202,109,82,167,3,192,213,215,183,17,132,170,172,72,233,77,89,144,167,114,91,145,188,40,8,153,1,37,115,176,241,231,28,77,114,214,71,67,50,29,198,190,54,102,39,124,56,6,20,120,171,92,80,169,22,160,12,102,182,78,190,42,153,191,249,249,187,36,56,184,66,193,149,167,74,69,247,188,20,52,224,121,241,129,159,220,171,203,143,248,240,89,107,251,237,218,245,7,106,152,93,242,152,35,85,154,200,97,85,225,160,177,239,135,168,180,216,78,49,142,47,64,212,142,26,255,51,156,14,209,73,151,91,192,240,206,251,45,73,54,138,242,201,12,30,16,80,177,158,234,114,80,247,246,212,102,123,174,144,158,64,239,138,118,10,202,42,165,28,188,246,253,242,204,200,137,138,154,77,249,118,214,237,182,64,8,40,125,212,20,17,232,144,114,250,251,61,204,93,251,43,5,240,202,228,207,97,104,101,72,187,30,56,31,86,177,120,255,29,124,173,190,105,51,201,33,177,50,27,42,10,217,157,41,89,39,147,85,168,142,36,238,247,220,159,18,20,243,248,18,33,215,216,180,150,46,244,234,51,189,73,62,172,118,161,155,232,78,153,95,187,89,103,110,218,84,91,57,243,112,184,251,113,37,254,114,36,225,84,94,206,46,45,212,112,1,100,40,149,24,30,171,184,29,235,145,98,188,237,167,55,177,149,126,228,235,116,226,130,4,41,37,206,3,76,237,228,239,46,103,198,242,90,78,127,211,255,12,66,168,140,109,34,82,35,25,51,108,28,150,250,76,237,178,241,246,59,86,43,61,35,169,2,122,68,203,59,177,76,6,131,45,170,28,110,91,244,245,221,25,224,44,207,105,113,109,227,125,69,68,168,167,167,198,31,1,67,45,46,15,34,178,173,147,41,32,125,66,64,50,200,16,137,48,172,224,186,63,149,57,42,203,140,183,63,165,145,247,231,42,137,222,12,68,206,119,22,182,65,22,91,241,11,228,243,107,103,179,147,241,157,80,80,213,132,80,26,58,98,165,117,101,156,125,92,220,165,160,102,29,155,127,73,104,2,183,195,111,14,174,41,30,130,173,75,232,76,151,56,185,133,70,179,72,252,197,227,26,245,237,92,54,187,170,26,158,155,37,21,222,49,218,163,196,233,91,64,246,211,184,236,30,11,138,74,37,171,3,94,147,169,168,197,46,147,52,102,215,134,61,226,96,22,2,94,225,9,163,16,8,168,153,193,54,102,122,109,233,192,24,249,77,62,201,2,0,135,161,81,125,117,173,71,116,234,206,17,185,103,49,67,220,230,86,10,143,116,56,188,225,29,119,75,146,204,252,57,79,65,20,200,219,178,248,114,127,64,236,3,4,179,232,35,8,134,26,98,123,82,152,210,211,46,87,139,108,119,14,35,238,210,214,228,240,250,176,196,24,159,153,212,247,165,96,23,112,151,96,50,50,198,80,181,141,107,33,4,79,89,64,229,193,223,79,44,98,50,20,111,214,243,23,160,178,216,193,57,164,110,247,45,107,44,44,27,127,51,39,23,166,41,41,220,88,35,247,92,46,149,187,38,50,243,195,225,113,36,138,82,26,71,5,233,171,168,98,55,141,29,193,76,230,138,118,201,224,109,60,231,232,177,247,162,51,29,127,53,58,236,197,55,219,114,177,186,20,176,59,250,222,55,48,73,188,68,219,163,0,210,66,198,114,163,248,234,172,40,170,75,179,138,202,65,255,6,123,4,43,10,17,44,136,172,240,127,71,255,73,120,217,61,192,151,5,255,162,143,189,193,202,199,205,23,58,93,44,127,176,62,199,169,141,112,81,21,90,220,240,97,104,210,174,111,28,46,129,207,1,12,54,92,25,183,165,132,226,54,171,136,85,66,114,61,53,217,71,92,236,165,102,230,33,129,255,39,111,171,236,196,193,52,215,91,162,217,188,156,181,88,229,238,22,108,141,50,184,141,67,191,133,71,124,27,59,251,134,243,52,248,231,24,79,65,21,2,53,226,212,123,86,23,133,148,102,43,105,205,15,196,91,111,171,159,151,247,232,133,15,113,168,21,149,174,139,154,6,22,0,171,111,51,108,82,53,92,213,150,159,137,132,208,192,166,81,142,43,91,16,160,101,24,162,192,78,145,100,84,65,186,154,167,4,197,66,65,123,215,116,159,223,25,210,44,18,182,232,121,25,193,173,126,174,79,234,192,157,173,192,54,138,3,193,91,150,89,62,81,91,199,148,50,59,90,177,137,212,162,123,179,163,187,186,124,36,105,136,184,197,193,74,49,248,36,31,105,77,226,203,74,118,0,197,227,63,101,139,68,221,141,180,87,162,186,84,135,247,126,107,22,41,36,172,197,122,24,97,235,152,192,185,46,71,242,52,195,11,160,74,180,235,120,181,209,181,194,243,20,254,221,12,143,145,102,210,62,70,0,148,83,175,184,164,50,144,114,32,93,217,200,24,209,176,151,142,146,228,50,150,0,21,159,3,75,160,172,81,175,125,138,237,205,186,109,232,22,168,71,196,205,118,40,157,92,243,129,161,130,48,41,31,211,0,21,194,17,158,119,73,49,248,175,54,193,88,129,111,21,128,91,48,124,142,195,232,162,95,38,86,109,125,43,236,84,67,2,248,58,32,113,59,178,233,211,43,20,73,181,198,95,20,132,68,65,142,149,78,124,34,181,22,15,182,150,46,76,238,149,134,151,49,173,219,159,202,107,182,243,204,13,245,84,46,57,125,36,29,17,28,10,44,244,81,120,97,112,72,144,13,55,148,244,219,248,66,174,100,139,71,224,226,241,111,80,200,44,1,175,236,46,250,87,113,122,246,25,4,38,31,217,90,139,187,13,170,201,134,94,46,227,220,190,118,55,208,9,252,112,128,114,11,238,105,102,187,157,53,198,86,51,162,220,148,52,116,120,189,1,144,184,29,45,69,8,235,111,5,19,232,144,246,60,188,170,232,174,154,175,30,183,111,253,92,171,155,207,25,55,133,162,232,118,115,129,55,46,67,180,66,75,39,95,12,1,195,235,4,231,45,0,175,152,31,251,62,64,210,97,30,45,121,124,85,78,133,136,57,91,198,150,136,22,202,48,129,46,222,188,63,116,167,216,59,193,75,198,11,99,14,98,117,236,139,142,63,46,221,197,148,81,111,12,26,37,4,33,127,125,26,154,166,121,2,136,192,151,111,128,92,227,88,203,243,100,26,27,93,138,225,57,23,222,201,161,99,29,85,70,197,91,103,127,91,200,78,36,121,171,247,108,129,106,193,160,250,243,27,55,244,91,241,18,153,210,198,50,172,44,111,2,187,14,183,60,80,239,137,12,210,142,180,126,138,205,156,21,71,122,230,90,193,82,191,18,55,119,171,145,217,80,172,126,63,188,68,78,137,199,49,157,39,126,38,78,33,177,83,51,10,227,96,39,132,171,107,26,10,147,255,17,240,82,154,156,107,240,90,48,8,214,89,193,90,216,231,141,122,216,28,22,143,78,56,239,93,181,121,152,39,66,195,48,102,60,62,133,246,219,229,48,208,119,152,149,89,94,149,30,72,6,121,67,110,138,110,36,11,117,230,62,99,63,199,248,238,84,126,143,253,190,11,81,233,29,135,144,123,45,16,238,145,48,130,216,110,50,180,92,157,240,104,117,62,125,7,187,135,56,100,0,223,248,208,152,101,185,233,180,190,145,173,167,23,198,102,192,10,68,7,71,101,60,92,159,245,169,1,177,51,7,176,34,172,178,139,147,146,9,190,52,94,250,208,44,189,30,58,166,31,120,83,10,25,159,250,44,242,13,45,207,101,42,60,96,16,68,168,179,137,231,37,146,16,240,133,7,146,90,182,58,183,36,14,197,39,229,170,59,46,194,235,232,128,32,92,21,120,242,185,227,145,248,95,165,10,250,127,232,105,74,70,100,169,41,70,70,125,180,175,52,86,83,1,9,132,61,59,22,173,198,52,155,104,38,221,142,146,147,46,116,235,31,112,30,85,173,129,117,44,189,252,62,74,6,192,115,169,2,1,231,253,81,117,89,0,206,241,121,234,196,229,247,105,168,189,101,245,138,169,190,49,1,212,193,138,36,145,74,199,71,166,192,104,108,136,166,15,163,220,210,247,208,161,228,151,132,242,243,148,159,127,230,163,218,175,45,75,166,73,214,193,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,116,97,98,108,101,95,116,121,112,101,95,108,97,103,114,97,110,103,101,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,0,0,0,4,105,100,95,49,0,0,0,16,9,7,189,101,40,63,65,146,149,170,131,124,180,174,156,183,142,32,255,187,69,201,142,223,19,137,178,68,252,230,236,4,34,221,0,60,165,210,133,75,74,43,118,44,190,216,0,150,242,207,10,5,236,224,49,185,178,137,155,194,57,198,121,38,167,161,2,121,178,29,243,136,91,113,202,119,138,187,66,190,152,204,14,16,4,142,248,245,101,19,156,48,60,0,25,42,201,147,11,92,21,176,251,189,120,88,176,143,82,252,183,58,35,230,115,38,241,214,185,149,54,105,124,79,183,194,215,46,201,242,155,176,250,97,96,194,32,131,106,192,75,224,143,140,247,77,166,113,47,124,235,204,69,101,149,83,255,233,138,3,4,112,174,36,231,51,60,125,172,204,148,169,15,13,114,34,110,6,117,195,9,231,26,239,36,67,56,174,132,114,162,50,75,32,170,204,216,194,157,134,144,175,230,21,247,90,116,77,107,47,141,129,139,228,194,111,5,22,211,42,118,180,201,7,111,37,122,73,95,188,35,100,173,76,168,21,24,33,174,119,122,152,72,158,129,181,210,170,51,183,173,235,219,73,174,7,241,248,66,250,95,255,114,214,2,178,35,169,152,223,43,87,66,205,248,58,115,148,143,206,241,181,35,116,82,66,185,24,211,34,255,115,255,159,196,201,119,254,145,152,36,44,196,175,12,100,102,106,60,32,91,91,130,148,66,144,214,218,54,5,84,94,253,214,105,22,163,35,206,91,150,39,11,187,185,120,149,121,106,104,107,21,118,112,201,203,107,105,133,119,241,35,50,108,244,243,6,132,154,238,176,116,176,15,67,122,68,252,10,96,5,82,126,204,180,208,248,117,139,74,10,181,50,31,49,13,100,175,141,220,83,166,119,217,60,101,1,174,56,130,217,159,81,133,137,225,50,225,191,217,64,101,79,63,27,26,247,143,81,43,53,0,90,47,125,0,204,245,133,105,138,20,192,63,4,181,101,188,83,119,10,156,207,235,60,5,104,27,175,223,85,147,175,123,22,226,7,173,192,15,86,51,84,193,101,190,106,117,45,121,91,62,0,41,3,142,216,116,220,21,139,218,133,22,41,130,144,4,235,15,255,15,53,109,26,151,86,85,175,88,55,168,75,3,210,135,40,205,114,223,247,21,0,0,0,8,105,100,95,49,95,102,102,116,0,0,0,64,20,136,95,195,77,154,152,231,244,131,240,98,164,73,17,96,59,209,58,249,111,110,102,154,71,185,225,105,133,48,85,7,36,241,127,156,76,178,93,20,48,28,238,65,29,97,23,238,104,145,228,179,253,177,146,221,145,58,157,114,150,7,181,76,35,78,75,173,93,121,87,113,133,128,162,50,52,0,111,213,153,49,230,183,168,225,21,101,44,75,243,162,225,25,242,39,166,47,227,55,222,237,129,17,4,177,109,247,170,172,63,199,159,76,128,214,151,10,242,218,196,87,99,50,132,18,128,74,118,0,75,181,244,117,243,74,143,162,129,199,65,249,117,100,122,96,56,198,95,234,204,226,21,214,144,76,78,188,7,73,86,109,200,191,18,116,126,165,195,131,16,225,165,132,39,201,20,42,227,186,143,57,153,24,117,17,11,224,5,175,75,77,100,89,108,119,82,87,6,171,131,208,113,210,197,135,84,160,190,13,232,176,240,239,235,176,88,170,215,25,153,177,39,70,166,215,54,166,200,138,82,86,42,37,82,204,174,120,121,89,214,93,244,253,225,213,47,133,230,195,58,219,80,222,11,17,226,38,25,235,150,98,20,3,194,160,142,67,30,155,223,234,75,233,28,222,51,244,31,249,159,227,116,111,177,36,5,48,117,227,125,188,245,40,234,48,46,171,83,97,76,216,151,12,230,67,255,36,80,99,245,65,180,183,201,179,218,145,63,31,92,219,45,62,33,247,248,4,103,188,109,163,62,128,6,144,114,180,101,45,88,27,19,205,45,41,227,128,88,144,203,73,97,228,166,109,41,222,9,23,34,236,148,21,229,165,172,114,19,127,137,148,225,54,113,155,178,135,19,103,25,232,233,44,41,149,136,198,110,64,47,81,78,17,31,96,24,237,229,77,205,173,227,73,72,95,202,139,22,156,211,11,228,62,1,7,166,174,237,232,117,238,234,14,241,143,248,2,156,224,7,138,229,189,57,217,179,35,204,121,248,115,3,155,247,215,94,2,128,129,78,120,59,0,3,57,224,135,76,109,84,53,137,221,46,182,145,236,111,114,200,198,253,194,18,163,203,142,249,53,30,235,15,132,226,233,51,83,168,250,73,74,13,142,118,39,121,106,162,211,148,74,139,65,59,230,101,90,177,180,197,20,57,245,27,47,43,180,114,226,23,105,12,150,200,212,9,196,167,135,213,40,242,133,111,171,138,221,73,143,97,8,243,15,27,218,236,114,20,246,210,170,7,130,234,129,97,160,145,134,113,202,43,88,124,155,214,4,48,168,172,37,182,185,252,67,18,241,101,34,238,56,34,203,96,188,121,83,178,241,69,210,169,15,31,116,249,79,60,115,147,128,43,224,127,67,91,56,11,215,6,13,173,23,9,170,25,253,90,14,223,38,140,251,18,110,217,99,145,114,6,71,15,229,202,14,26,128,55,83,172,6,96,138,0,182,139,73,81,43,61,251,86,15,32,94,169,94,20,157,16,101,251,66,165,233,218,231,54,247,211,94,158,122,25,234,41,158,192,254,161,0,205,212,88,230,210,115,228,197,75,250,227,120,232,224,251,226,152,195,185,86,179,36,63,166,13,130,28,142,218,111,95,99,181,237,40,219,118,148,253,175,160,206,78,9,150,226,106,65,113,168,47,47,33,95,243,29,221,65,103,159,209,170,32,73,61,68,140,150,125,73,181,5,156,151,251,17,15,103,27,66,57,145,15,232,1,23,43,21,48,88,94,255,108,30,231,12,154,11,99,53,82,105,143,102,85,67,177,194,163,254,61,34,63,105,137,216,208,75,211,240,142,243,200,51,79,192,32,179,156,115,0,87,202,94,40,176,160,11,29,80,97,13,46,71,68,236,251,200,20,16,83,98,14,103,32,92,228,213,210,210,136,81,102,71,253,229,122,48,255,217,134,52,182,223,115,106,253,212,70,69,154,30,239,183,97,224,42,64,41,173,183,105,101,8,33,243,35,95,97,11,79,236,29,219,131,59,13,166,214,251,165,242,233,88,88,162,210,239,243,2,56,99,191,65,135,76,227,192,74,71,126,188,24,205,255,146,214,222,194,151,245,212,116,253,1,17,255,241,27,151,12,165,156,38,104,198,115,234,115,60,34,50,23,232,4,240,139,207,85,69,31,67,150,118,162,83,232,11,75,123,116,125,4,124,237,67,59,125,139,197,230,165,24,55,5,199,131,230,188,247,177,145,142,174,120,138,135,158,202,14,3,130,164,143,55,146,31,71,234,94,211,130,145,219,0,251,160,245,192,23,121,156,70,64,221,236,161,48,228,200,166,92,56,113,165,161,43,80,182,174,242,160,226,244,12,221,103,120,171,211,187,91,176,238,230,176,66,51,96,255,243,55,119,85,28,69,44,119,239,241,2,61,70,2,59,112,252,123,221,191,245,246,115,46,15,219,181,162,190,31,162,104,247,53,202,67,105,178,77,244,235,69,15,210,102,133,157,172,107,87,68,251,181,124,227,214,44,40,46,92,0,237,183,172,239,42,246,74,148,88,43,187,166,137,194,17,62,240,92,191,66,8,214,224,85,101,221,0,3,61,176,117,107,245,91,163,125,102,188,94,96,41,196,189,84,0,230,219,158,199,46,73,110,186,6,234,78,231,34,209,27,157,74,149,100,157,28,138,86,179,95,83,254,208,104,123,164,227,215,90,150,33,62,219,241,252,208,166,44,233,148,210,216,41,156,69,17,11,143,66,13,91,24,10,222,19,255,86,176,108,202,104,57,99,34,11,117,36,59,238,239,219,163,230,32,169,9,150,235,87,161,158,148,72,119,86,54,29,147,77,69,183,28,146,70,208,22,223,136,68,205,35,196,239,166,165,214,57,60,51,79,197,83,57,252,138,197,23,170,115,37,144,70,33,162,244,138,237,247,3,149,93,108,166,225,37,221,89,82,108,8,124,196,27,180,224,178,138,46,62,167,67,64,21,43,250,198,176,251,192,203,236,67,160,198,148,153,92,59,96,28,108,5,172,103,151,199,73,114,104,33,24,176,6,172,201,253,251,255,252,115,96,171,175,54,212,89,90,224,184,227,212,195,31,40,102,91,130,168,152,23,107,99,49,97,92,174,238,1,107,152,171,3,143,251,193,133,205,26,122,82,209,84,201,13,174,142,96,98,56,202,220,57,249,227,89,243,16,2,131,66,254,131,12,40,151,196,242,99,95,215,230,13,27,190,164,181,250,199,232,73,118,173,28,170,171,27,49,190,52,31,145,38,165,80,239,73,120,155,213,165,22,76,90,242,106,156,19,27,159,197,198,252,129,27,46,236,156,64,59,190,0,127,200,10,71,207,124,142,212,34,123,71,55,120,225,56,186,37,87,41,209,198,65,78,239,43,63,156,10,164,23,100,167,17,113,170,78,201,195,214,100,240,196,73,110,51,172,179,136,99,186,252,190,49,7,59,249,101,52,202,99,41,15,187,44,102,175,15,60,157,3,19,235,104,243,251,142,72,190,90,40,10,79,209,85,54,174,64,56,45,9,4,170,145,25,35,185,40,65,153,219,44,252,243,135,29,42,161,131,33,41,254,114,145,218,63,138,189,202,206,156,139,175,228,128,150,30,44,149,86,3,41,251,146,75,131,8,148,207,50,132,192,82,77,124,162,237,186,15,231,77,234,117,33,22,224,140,139,28,37,163,140,101,209,16,125,159,170,132,11,111,255,128,209,109,30,244,203,142,4,205,93,17,70,30,61,41,253,54,170,36,220,6,56,55,93,29,26,88,214,39,231,248,82,77,194,176,239,211,53,251,210,140,214,230,45,144,171,243,253,177,1,57,154,122,84,12,241,97,118,110,74,193,47,112,52,51,83,170,128,244,94,115,196,60,77,89,145,217,37,40,183,104,91,21,65,196,149,167,236,176,28,230,2,206,73,41,248,152,134,91,39,201,144,222,191,149,35,234,65,72,249,184,89,24,242,8,237,224,141,148,117,191,144,8,160,110,65,205,189,116,130,17,65,192,70,133,9,68,59,3,218,232,246,46,88,201,228,30,59,151,93,69,36,233,187,18,246,20,129,187,45,81,108,237,183,53,198,128,91,105,33,156,66,237,60,6,32,135,118,57,195,190,149,157,7,125,235,67,231,129,6,27,136,165,213,178,122,43,70,25,184,70,207,181,71,147,115,55,127,128,72,60,199,200,163,214,63,63,104,21,43,109,152,243,62,203,183,243,83,34,62,158,199,242,145,30,147,96,251,239,195,211,113,77,161,108,148,252,199,154,119,146,17,212,53,155,120,74,220,142,34,51,155,148,91,20,76,47,16,156,118,236,111,128,183,30,156,142,120,145,100,121,138,51,165,225,167,207,91,72,204,224,163,142,187,35,240,195,189,211,45,235,57,237,40,44,235,93,125,199,99,46,31,155,249,225,154,240,164,125,157,137,254,166,194,12,205,58,115,20,85,125,41,56,173,185,43,207,182,65,101,7,158,152,142,3,74,183,250,75,187,38,81,8,147,206,20,250,252,253,88,176,21,28,211,1,43,179,159,179,238,68,163,0,232,109,244,27,55,249,220,106,127,101,148,193,220,105,78,239,246,200,97,136,96,194,162,192,35,144,91,214,55,86,0,0,0,13,105,100,95,49,95,108,97,103,114,97,110,103,101,0,0,0,16,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,63,124,173,181,226,74,173,248,190,133,203,131,255,198,96,45,247,41,148,93,43,253,118,217,169,217,154,63,231,124,64,36,144,91,22,233,35,165,66,128,163,160,79,122,152,64,38,139,249,155,234,222,60,223,198,73,165,161,46,60,158,210,57,44,139,239,220,158,151,61,117,127,32,145,71,177,44,23,63,95,110,108,9,116,121,98,177,141,207,8,193,57,53,123,55,43,179,119,61,61,116,15,34,195,70,230,39,157,139,31,56,121,127,7,5,86,32,110,130,34,32,252,197,166,23,202,133,4,102,97,93,18,182,41,218,17,149,177,137,83,162,178,105,176,36,122,39,209,214,61,210,122,210,142,116,174,19,49,187,29,243,73,45,74,12,78,178,19,218,57,121,196,248,86,103,167,33,109,75,175,2,133,234,104,203,254,40,144,106,60,137,37,7,0,0,144,11,183,45,219,248,19,18,84,251,89,107,25,140,106,137,138,253,231,49,10,36,97,91,40,36,37,190,82,255,112,208,107,171,109,13,147,85,120,162,143,180,162,76,232,79,89,7,231,125,206,186,227,84,3,173,239,147,115,76,74,195,131,82,42,69,160,22,143,99,91,167,111,145,9,7,35,195,134,110,165,65,142,41,151,169,102,200,130,254,31,136,60,114,164,233,246,3,70,129,7,127,64,35,121,248,143,65,197,192,20,24,36,48,172,217,38,174,158,52,134,71,202,142,52,119,16,35,65,144,173,78,8,2,80,43,66,100,185,40,241,75,68,249,142,243,40,239,226,131,55,162,136,176,33,145,53,79,136,194,162,179,219,161,196,219,250,74,86,5,177,47,215,58,169,253,172,76,29,30,78,51,68,157,27,206,210,66,92,156,158,162,205,113,193,233,117,141,47,233,159,238,29,254,159,149,54,219,49,150,77,206,245,128,177,238,19,210,107,13,67,15,182,210,149,27,157,17,116,72,167,249,46,152,121,0,169,152,67,183,83,106,6,182,7,136,65,58,50,123,96,63,59,0,0,0,4,105,100,95,50,0,0,0,16,150,136,10,163,222,108,153,106,77,191,132,249,117,179,6,195,158,0,91,65,159,222,23,187,73,81,115,145,154,85,160,18,195,5,58,235,8,47,24,191,209,33,158,142,56,19,55,229,139,78,194,243,136,238,182,241,2,183,244,10,51,129,145,11,252,136,136,214,164,229,149,223,72,173,12,186,59,145,1,161,242,217,74,74,233,46,6,54,181,98,167,185,215,115,249,21,167,247,62,69,129,188,109,76,131,213,131,115,32,132,139,69,36,69,34,2,211,81,37,104,255,234,65,158,160,138,140,36,164,244,231,105,31,132,201,121,207,100,183,115,152,6,238,47,213,57,20,198,83,71,115,48,169,59,121,181,234,62,240,17,248,81,145,85,96,152,70,19,152,157,72,81,64,73,140,39,204,145,83,241,22,135,138,225,170,64,70,168,35,118,15,16,62,112,37,155,145,193,147,80,29,23,101,146,35,87,246,85,137,199,7,193,156,28,22,24,82,194,245,43,203,175,170,5,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,11,214,172,238,45,113,176,212,196,207,116,178,192,223,113,190,108,32,103,14,158,241,218,48,107,79,31,100,134,161,235,22,21,105,9,183,147,31,3,240,7,99,10,197,196,175,155,89,121,146,166,52,162,126,182,5,166,135,66,68,157,36,176,254,28,139,65,126,40,136,132,130,126,57,103,81,93,192,125,150,36,147,65,186,66,65,141,157,71,147,10,252,190,22,79,55,13,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,11,242,213,30,165,184,73,140,222,53,72,132,197,162,164,180,240,37,15,133,93,136,138,228,25,17,148,18,245,190,28,33,39,195,158,125,187,4,58,160,132,3,56,56,120,195,88,209,140,252,215,19,211,14,5,226,134,183,33,168,177,76,175,148,13,60,197,211,85,213,201,53,149,241,68,246,207,40,130,165,12,78,117,116,51,239,108,150,34,143,112,152,60,185,219,136,7,254,108,130,76,235,230,114,159,21,253,60,0,46,70,199,140,95,128,168,117,245,206,220,26,3,21,132,104,212,242,181,36,0,0,0,8,105,100,95,50,95,102,102,116,0,0,0,64,239,128,183,10,174,227,207,142,102,224,145,118,238,35,197,15,75,98,54,44,43,124,121,174,53,54,131,218,19,32,255,18,255,44,136,245,67,32,219,34,245,214,233,183,5,230,162,141,208,158,1,37,188,188,35,77,16,92,157,142,32,163,194,29,161,104,30,132,47,252,123,62,97,22,53,97,138,106,134,7,164,114,17,57,61,104,80,251,177,240,188,235,196,88,175,94,229,140,21,110,54,94,177,176,26,170,50,213,254,1,96,180,252,87,133,87,253,210,105,64,62,33,195,171,232,232,71,41,64,106,130,113,173,107,77,51,16,140,128,195,5,227,118,236,5,33,55,192,92,215,145,61,171,207,40,197,38,16,60,92,55,245,130,115,242,120,72,253,72,190,2,34,121,30,100,0,231,72,187,234,61,7,14,214,1,148,249,115,254,102,26,70,168,83,18,151,26,188,84,66,158,93,197,179,252,166,28,202,2,215,125,133,217,51,39,240,52,202,224,241,132,20,208,50,103,17,107,211,5,32,41,66,164,45,12,40,77,223,116,143,176,220,167,214,111,191,149,99,150,124,34,20,70,115,106,72,221,93,201,140,209,80,20,21,216,123,24,151,197,35,138,169,153,90,58,170,95,196,200,19,101,17,100,81,153,211,133,12,150,183,28,85,92,188,146,50,124,185,103,46,170,112,2,162,182,48,161,149,107,3,184,224,21,176,127,201,220,232,224,3,247,199,184,83,111,157,165,125,180,106,167,4,105,101,86,22,22,188,178,4,210,41,93,48,194,46,238,237,213,199,131,91,115,151,33,212,202,223,90,2,230,109,135,39,243,76,227,184,136,145,225,194,204,233,172,77,148,125,24,129,217,128,166,54,29,224,244,174,232,76,87,236,220,240,80,158,215,72,198,241,81,247,194,34,159,7,3,208,240,126,54,164,129,12,204,36,28,217,99,12,3,197,219,85,174,144,92,40,69,233,38,79,240,79,22,214,186,68,21,39,199,60,152,212,141,26,36,88,149,126,21,97,70,102,132,246,245,60,83,179,94,55,15,3,250,166,135,239,41,158,217,203,77,171,184,187,32,150,69,81,117,4,105,202,226,134,137,8,215,68,15,153,97,5,34,66,67,39,135,216,98,50,123,241,219,224,96,47,235,193,170,89,100,252,59,198,226,183,153,169,229,19,219,100,27,131,63,149,159,154,77,12,58,155,247,246,56,180,237,214,33,107,97,40,96,130,55,42,171,177,23,147,178,192,117,46,136,56,121,49,3,123,104,24,235,112,164,215,4,44,78,136,251,189,166,46,233,4,161,216,137,155,34,207,165,158,227,249,30,146,140,89,114,157,150,190,79,42,139,240,47,13,19,207,31,188,84,76,132,139,30,69,43,57,181,219,69,175,60,233,160,95,160,185,238,177,255,27,217,183,68,46,9,26,113,99,75,169,251,24,68,171,43,155,31,156,61,217,92,68,153,111,113,45,152,214,79,46,107,4,102,44,102,110,109,115,71,117,210,142,91,10,27,45,181,251,65,173,171,32,212,203,220,243,91,210,52,28,239,112,90,236,136,110,103,170,67,9,141,163,127,88,17,94,233,229,168,76,23,236,55,252,111,103,179,69,51,222,80,253,16,65,249,115,154,204,140,166,214,150,206,145,192,184,240,44,229,140,84,5,129,89,155,136,136,205,125,167,248,121,158,205,126,163,55,166,170,16,218,143,62,49,86,12,127,97,14,34,156,65,80,100,164,96,198,43,70,224,28,38,167,129,227,29,33,242,44,203,82,193,185,220,40,48,13,127,56,120,203,43,165,181,184,112,43,203,249,183,78,56,100,98,241,251,82,72,219,209,100,1,64,126,251,157,105,74,235,157,79,246,213,34,209,78,123,151,12,254,218,188,26,241,214,241,167,119,235,46,245,64,46,170,214,169,181,150,63,235,98,180,6,88,12,53,184,175,226,56,189,184,52,93,233,18,170,92,199,222,70,59,38,172,73,90,200,14,117,243,138,199,246,196,134,144,17,22,247,249,116,38,243,176,107,16,124,233,133,159,243,189,46,247,247,85,143,251,249,238,173,94,109,217,219,80,75,167,124,47,89,211,175,215,107,45,248,247,1,40,209,85,89,100,186,100,200,127,110,159,233,165,55,87,191,1,66,20,250,25,249,42,237,84,252,181,20,231,18,124,5,10,145,7,128,65,97,95,180,3,77,102,134,125,117,151,109,217,168,103,45,143,122,42,163,56,24,46,175,62,239,167,99,230,193,211,21,251,230,104,19,143,41,237,206,125,23,16,59,183,60,117,121,50,8,83,125,169,205,49,101,251,101,83,146,254,32,244,196,69,26,42,66,172,85,107,85,57,150,6,205,39,17,209,120,40,106,78,99,193,215,25,130,34,136,54,169,117,49,179,141,249,174,181,60,243,225,89,95,177,134,108,213,138,234,61,0,55,14,3,175,86,50,63,83,123,69,54,80,7,78,2,158,89,159,186,204,45,6,172,4,174,92,20,47,149,225,137,15,124,119,5,47,236,129,216,70,230,142,17,64,163,189,189,30,71,168,201,186,131,203,39,18,176,91,54,248,43,78,244,17,109,184,5,110,35,208,24,173,187,54,18,171,179,58,192,92,171,26,174,60,30,71,219,148,180,17,214,35,146,45,126,174,90,131,29,129,125,48,54,224,146,148,163,127,134,99,7,102,206,144,227,107,206,20,63,249,69,191,135,162,39,63,204,126,1,54,6,196,235,80,13,128,5,93,216,159,40,229,109,152,105,126,16,224,160,176,170,249,250,255,144,29,95,138,189,96,38,114,55,161,144,95,239,53,83,61,119,194,221,150,127,181,89,112,164,17,91,225,142,233,89,199,115,29,78,165,182,133,80,108,31,127,24,51,252,232,247,110,162,166,175,20,204,234,40,227,135,85,133,195,191,196,181,25,166,68,215,126,196,139,98,149,16,138,176,127,186,68,13,242,185,108,253,236,245,7,37,239,18,132,238,29,14,18,97,167,179,228,242,13,30,151,191,146,47,145,46,162,124,185,117,144,31,175,184,162,52,126,47,215,23,48,180,144,159,49,246,63,18,110,140,176,182,66,209,168,25,31,173,125,14,26,49,87,135,3,233,237,57,128,78,185,199,203,58,122,31,94,161,49,148,183,102,178,243,173,214,59,59,49,213,130,219,53,234,150,131,100,155,250,149,6,215,143,230,234,16,63,143,148,30,89,150,219,115,180,77,189,197,181,81,62,179,93,95,96,61,3,109,45,52,190,222,132,16,169,117,100,2,96,109,42,127,29,133,49,20,218,148,15,157,53,74,143,188,161,174,178,60,20,199,122,123,143,241,172,21,246,172,153,208,56,51,221,208,146,60,8,51,170,119,8,181,252,66,191,112,146,199,9,208,53,109,191,52,169,133,170,141,54,37,28,88,9,190,168,50,184,114,55,117,150,184,197,90,65,10,52,22,128,108,12,141,46,226,28,152,185,50,16,166,202,93,174,18,112,66,153,133,72,220,106,73,78,132,155,208,105,63,76,246,195,124,249,44,62,64,187,62,194,125,195,102,77,227,106,127,109,226,252,79,48,53,156,148,214,95,138,224,249,83,23,191,4,219,208,31,138,193,10,22,73,230,130,112,81,47,236,238,147,104,209,77,86,130,95,150,53,30,81,51,202,50,150,68,195,28,8,216,87,124,236,159,18,182,56,236,114,184,79,247,51,229,65,77,229,60,171,142,242,111,77,10,236,60,236,142,143,36,91,219,194,145,107,224,169,161,231,189,253,149,143,107,196,89,72,29,168,43,39,1,214,66,163,119,10,93,225,116,116,58,193,26,125,21,90,218,60,251,5,100,152,242,199,93,207,200,233,112,221,20,8,177,29,45,225,29,81,67,47,7,70,239,19,207,197,29,187,109,99,140,134,129,240,157,110,72,66,94,138,15,162,201,149,13,22,69,0,145,214,35,187,216,156,121,139,216,92,50,26,32,132,122,192,4,185,211,22,216,175,248,213,132,242,131,12,77,150,176,227,108,67,27,124,56,151,142,179,156,82,153,177,247,62,116,42,196,150,43,160,46,26,215,64,192,46,202,51,14,59,40,111,241,125,36,123,190,243,117,168,40,136,231,108,178,48,141,87,11,45,139,223,150,6,156,109,3,153,163,138,204,137,152,231,21,86,52,5,143,195,249,126,74,187,92,208,22,1,141,187,19,226,97,45,161,14,155,137,88,222,245,146,227,159,90,236,116,53,55,248,5,241,183,236,237,13,176,51,226,229,183,123,34,181,143,139,23,146,27,142,214,109,165,52,203,87,175,225,1,178,91,207,228,136,170,181,116,241,52,208,241,233,240,69,205,244,67,173,137,239,138,59,230,201,136,242,48,239,224,57,91,51,80,181,209,181,192,44,131,205,5,254,148,225,184,245,172,155,197,247,176,250,167,109,247,176,39,31,44,222,129,94,140,217,36,41,117,18,242,115,187,152,173,21,32,246,176,213,52,152,131,103,50,134,166,53,134,73,114,154,93,164,109,189,125,62,48,123,144,236,18,142,29,27,13,236,24,38,245,168,210,65,225,200,166,214,195,180,24,123,40,249,146,174,161,73,149,69,73,0,0,0,13,105,100,95,50,95,108,97,103,114,97,110,103,101,0,0,0,16,230,255,255,159,249,14,13,27,63,145,42,163,163,104,186,234,137,6,221,216,118,235,216,71,195,187,245,32,85,8,208,21,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,204,201,111,205,99,99,197,113,236,96,168,124,216,161,239,22,107,170,143,84,86,69,161,143,147,167,34,168,75,227,143,27,179,173,80,90,166,93,194,109,93,19,128,143,189,210,107,59,179,188,41,62,133,213,53,227,102,171,254,155,62,46,132,22,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,188,113,226,162,129,165,213,150,142,207,49,105,2,250,104,204,144,24,245,231,233,199,163,227,123,25,56,45,188,66,129,42,27,0,0,80,154,230,212,40,82,223,142,214,164,127,121,61,211,81,164,168,63,90,119,112,102,228,59,192,29,70,148,26,244,52,18,139,77,109,21,4,179,69,26,122,139,211,19,112,3,84,155,248,119,32,116,104,132,175,5,134,191,28,192,32,202,146,156,35,118,85,7,120,27,150,165,205,108,166,31,230,253,231,161,179,183,106,62,90,127,224,241,39,186,23,179,60,53,54,144,34,48,146,28,210,164,15,17,253,111,70,68,17,242,173,241,44,96,0,175,40,150,248,14,57,39,107,212,20,78,82,175,149,237,151,31,214,51,93,57,234,138,21,200,236,169,155,87,67,49,112,26,213,194,244,50,69,52,32,224,25,130,169,204,189,78,168,55,116,47,241,241,103,142,74,27,202,223,50,104,211,20,31,196,11,137,179,83,159,252,91,199,25,6,25,45,100,193,5,69,182,91,74,53,69,246,35,191,46,189,254,63,240,167,225,37,123,138,182,127,28,105,68,233,44,70,142,29,61,166,69,238,240,147,17,65,138,142,214,254,131,41,152,13,27,131,195,252,140,215,38,43,149,41,90,71,54,0,0,0,4,105,100,95,51,0,0,0,16,81,10,115,192,155,197,30,205,74,100,175,47,183,134,184,114,46,45,88,160,43,248,147,185,76,181,204,69,115,113,21,46,191,5,58,43,185,88,144,175,140,95,184,167,22,114,103,68,23,237,188,237,174,215,117,16,92,54,46,134,103,71,0,10,46,113,61,110,87,177,140,87,29,214,145,174,42,30,237,125,151,72,89,37,2,182,77,42,47,3,181,132,110,56,3,7,167,247,62,69,129,188,109,76,131,213,131,115,32,132,139,69,36,69,34,2,211,81,37,104,255,234,65,158,160,138,140,36,9,129,249,55,202,23,34,242,238,60,184,222,182,68,76,34,123,35,40,244,77,144,120,5,22,172,59,219,82,59,209,5,233,239,108,207,251,131,192,169,133,5,204,185,10,181,96,4,55,62,68,175,65,153,34,46,181,197,11,59,31,200,80,35,126,83,147,128,131,74,165,72,93,226,41,173,71,146,111,170,99,172,214,129,107,113,7,205,12,246,109,40,136,37,40,26,196,131,140,84,133,162,161,211,126,236,85,29,209,181,1,65,245,83,72,217,45,165,193,87,131,174,197,25,192,87,172,11,103,207,132,109,157,162,107,171,66,15,177,155,151,192,115,122,71,157,42,10,151,197,93,245,86,210,7,65,17,11,161,15,105,9,183,147,31,3,240,7,99,10,197,196,175,155,89,121,146,166,52,162,126,182,5,166,135,66,68,157,36,176,254,28,13,181,202,51,236,109,111,189,244,254,162,87,216,206,67,138,55,112,146,156,246,1,173,202,14,83,241,132,55,79,46,6,153,23,178,249,53,165,65,200,10,34,92,98,113,80,19,61,65,151,239,177,118,197,220,149,205,145,215,161,176,199,217,11,65,165,14,122,36,107,23,29,166,48,90,73,139,68,239,64,201,194,87,100,92,61,54,188,153,12,83,96,14,229,64,29,209,0,162,81,213,88,68,170,132,95,251,149,176,4,201,135,52,211,161,147,45,173,249,129,131,252,176,61,222,14,239,9,72,134,100,205,204,139,64,230,33,185,90,198,253,104,147,117,42,243,190,61,82,28,78,246,222,83,29,175,68,161,10,9,254,108,130,76,235,230,114,159,21,253,60,0,46,70,199,140,95,128,168,117,245,206,220,26,3,21,132,104,212,242,181,36,0,0,0,8,105,100,95,51,95,102,102,116,0,0,0,64,34,213,255,253,215,182,91,175,210,248,73,143,209,241,197,211,193,112,239,120,44,52,149,137,121,214,24,2,2,160,234,51,149,25,37,47,203,115,187,150,255,227,46,204,155,171,7,95,140,49,188,252,1,16,101,151,50,197,242,86,0,117,203,17,77,171,238,173,77,163,124,18,108,187,248,66,50,68,85,131,74,139,41,190,206,26,202,178,179,246,194,41,28,158,43,16,183,150,102,246,45,138,206,11,128,2,216,233,218,31,66,53,23,29,228,218,41,137,242,24,228,6,187,78,192,146,182,95,149,162,152,71,251,72,205,26,214,151,119,146,234,140,160,84,132,53,159,20,124,155,53,110,112,140,18,205,189,232,20,76,62,215,140,142,19,230,147,1,36,154,129,187,120,192,208,135,71,127,153,97,208,41,224,249,190,250,181,6,59,103,130,27,90,6,55,238,124,42,164,174,222,66,157,91,107,76,141,133,45,22,48,200,180,138,26,249,165,162,58,178,241,149,128,5,232,214,194,154,17,67,185,244,144,231,109,128,121,56,11,97,178,215,101,73,179,123,35,185,167,157,134,123,29,152,176,3,65,208,233,150,18,22,196,228,193,157,60,31,216,248,152,118,89,98,85,247,59,42,239,89,59,15,61,153,140,116,57,45,49,215,229,40,194,63,59,28,17,29,189,148,253,25,15,219,193,162,51,93,29,124,207,184,160,39,16,123,172,89,27,94,159,98,160,202,62,133,39,79,252,114,0,246,14,105,110,67,63,60,105,58,87,55,21,231,123,7,81,220,56,53,186,37,71,164,197,113,74,1,110,246,186,217,61,93,210,18,70,138,17,160,212,151,171,11,119,206,24,14,198,35,17,19,153,0,42,213,48,28,16,102,107,167,41,38,87,165,21,198,9,57,231,64,74,63,98,0,69,133,66,57,156,28,209,22,87,35,19,124,99,147,93,237,103,141,191,247,126,216,88,29,227,200,193,135,229,225,246,215,218,176,191,76,96,77,98,26,66,64,178,107,27,45,203,79,244,9,207,210,168,2,209,9,63,227,57,216,244,69,156,245,157,229,90,177,134,49,147,72,147,94,25,121,42,49,11,144,147,149,166,124,42,2,51,240,222,200,76,71,213,62,244,249,187,138,71,208,6,65,153,155,21,45,239,144,3,187,135,161,37,114,45,91,83,213,35,227,241,44,188,63,49,206,55,119,65,143,138,209,150,219,21,3,25,9,165,134,71,13,78,240,160,23,160,135,180,208,221,129,190,206,234,212,80,181,102,93,102,227,50,205,21,159,186,157,231,18,239,183,52,92,179,159,227,76,153,31,232,55,107,144,37,51,25,124,44,163,53,251,47,187,211,71,83,66,6,57,230,44,82,205,98,2,214,199,227,207,87,46,254,41,7,117,71,82,214,192,2,165,183,203,124,237,197,209,8,87,137,211,248,69,167,191,144,185,127,197,196,180,93,45,101,126,96,190,244,210,121,48,229,115,146,245,218,67,164,221,244,158,39,63,196,51,46,68,241,115,60,39,92,190,174,142,147,205,181,14,228,6,1,213,88,201,83,134,58,120,121,252,105,115,207,6,42,68,193,37,1,66,184,127,125,20,127,17,106,72,124,55,67,249,79,122,204,102,64,163,42,172,141,186,228,44,29,116,155,0,45,80,146,140,34,55,133,173,21,12,227,211,17,152,176,103,251,129,159,92,105,127,94,25,186,155,61,194,26,188,217,29,18,89,171,43,9,6,26,73,155,3,17,8,225,29,237,98,96,115,78,185,173,236,137,99,213,208,151,189,248,241,59,76,70,67,80,89,96,65,180,247,180,84,173,5,109,76,138,84,142,68,49,96,81,196,231,138,244,90,5,21,116,16,245,82,140,221,182,243,36,4,100,148,178,138,140,231,173,153,161,62,30,116,163,125,177,44,225,239,43,27,219,99,178,63,132,51,34,32,225,94,42,188,59,220,104,129,30,190,192,50,184,130,206,179,176,15,168,153,77,115,7,182,15,63,219,183,174,60,142,242,75,147,241,8,248,214,144,167,52,151,6,144,253,100,243,183,247,233,192,7,131,234,5,16,213,43,63,0,110,80,53,128,135,253,68,73,13,199,242,70,155,166,33,138,39,159,18,183,104,46,57,93,248,222,176,178,50,68,76,2,2,46,150,19,76,139,223,163,217,157,227,120,193,151,252,160,243,122,84,113,74,10,77,90,8,158,220,235,82,1,184,125,53,54,222,213,222,214,119,237,71,97,164,248,178,92,236,75,231,253,138,238,60,54,101,95,119,82,123,62,242,190,74,18,239,81,178,206,181,154,48,234,11,65,52,248,124,111,59,64,140,64,158,86,39,171,47,165,242,53,200,58,156,219,239,187,220,30,75,142,29,114,70,251,226,176,87,16,123,231,212,24,238,152,96,26,208,117,160,227,211,236,135,135,100,86,123,245,53,83,165,247,21,120,116,3,67,173,142,234,99,183,184,33,138,77,112,8,86,204,147,198,44,247,16,55,32,65,194,233,156,23,21,209,36,192,8,170,223,45,120,224,21,29,49,79,219,221,73,213,44,102,1,225,227,103,11,77,110,167,72,38,184,30,211,154,193,28,2,146,52,48,44,190,59,103,18,181,28,154,3,38,71,202,169,109,215,175,11,248,79,173,98,252,79,41,4,17,18,225,124,39,235,182,125,60,203,22,23,65,79,211,150,174,176,11,225,30,179,148,125,127,99,4,123,68,95,82,162,168,141,181,218,161,122,91,244,45,60,3,113,156,163,96,58,200,41,2,245,211,72,164,195,60,85,29,103,220,135,15,70,197,47,118,186,67,98,244,85,2,37,22,112,118,80,139,208,24,196,153,27,220,71,79,66,189,12,12,212,116,177,40,179,25,252,214,135,157,251,65,187,157,140,95,190,12,131,30,239,158,123,42,93,66,200,72,88,105,98,75,42,54,155,2,103,130,57,206,163,193,13,43,13,213,238,157,255,120,199,134,47,37,126,61,1,23,97,69,95,128,113,219,194,77,93,78,225,7,41,58,65,137,69,167,25,77,21,151,121,161,48,196,188,144,92,185,150,11,188,170,50,90,233,59,202,89,146,26,37,113,189,98,42,94,1,237,235,103,112,25,142,102,177,156,100,1,94,18,166,214,83,254,69,142,182,190,44,103,27,6,166,10,206,254,15,153,251,114,15,126,139,1,38,178,167,125,14,112,169,179,124,105,227,62,89,169,197,26,15,216,238,36,255,0,138,99,101,161,16,42,242,41,31,73,65,236,148,53,9,218,51,171,66,154,174,169,198,22,76,77,14,207,11,91,212,222,114,26,105,107,227,92,90,236,60,139,167,233,106,251,250,78,219,95,35,25,82,46,100,83,78,12,30,172,26,33,11,109,157,131,32,13,133,45,130,107,136,22,253,206,73,202,149,23,45,181,112,101,66,180,94,215,161,166,135,168,195,75,127,41,39,229,112,185,21,197,54,107,10,154,85,132,136,200,129,66,236,47,70,143,134,170,121,165,120,147,140,30,69,23,195,96,79,240,126,99,50,25,107,231,254,22,78,84,141,80,155,95,191,24,87,124,247,188,244,208,208,221,110,75,232,5,215,35,105,221,33,80,222,253,58,47,161,236,177,64,141,223,111,121,4,107,100,147,223,146,227,188,131,159,188,224,245,65,180,207,129,14,0,51,204,104,207,137,23,187,252,57,155,213,109,158,234,208,158,30,178,59,227,175,162,130,15,208,201,83,41,179,224,42,97,228,131,38,64,174,41,42,87,57,164,247,178,234,212,185,176,242,113,78,112,112,206,25,247,33,229,4,100,118,59,36,59,63,20,167,183,8,155,149,156,10,134,122,192,218,90,226,77,2,155,151,175,72,79,118,217,4,96,66,165,89,158,247,167,201,38,22,198,56,100,170,182,173,182,87,142,195,159,194,158,227,72,26,232,248,108,148,91,19,162,86,185,54,245,178,144,189,174,67,155,212,176,126,243,170,237,225,179,179,253,0,31,16,19,248,244,150,55,80,221,167,239,40,248,46,238,122,204,121,104,63,238,141,155,228,205,143,73,127,186,69,15,225,75,169,46,159,96,104,86,125,177,84,21,91,182,36,175,44,121,216,63,80,214,51,40,99,202,7,225,55,29,161,229,200,80,23,251,187,159,36,78,29,5,236,60,16,82,111,138,88,166,172,163,69,115,65,23,144,89,194,107,79,216,4,27,107,193,65,5,222,34,158,81,193,132,70,112,21,10,125,122,147,51,113,255,71,165,242,159,179,19,187,148,247,195,29,133,181,96,143,169,34,19,56,181,37,81,197,4,62,58,82,186,194,90,157,93,227,208,66,2,65,176,220,99,213,71,239,147,61,68,61,122,155,137,85,28,90,224,114,73,80,29,180,247,174,221,5,80,61,57,82,72,173,37,220,170,76,206,15,163,50,173,188,235,56,95,237,204,90,86,182,176,87,122,226,68,198,229,163,189,53,90,239,148,108,197,154,25,209,38,158,106,233,89,135,17,187,131,67,61,64,56,87,127,62,144,14,193,156,185,151,51,89,115,72,249,199,34,233,57,136,153,154,21,116,188,124,37,225,254,128,17,5,211,251,201,9,0,0,0,13,105,100,95,51,95,108,97,103,114,97,110,103,101,0,0,0,16,225,255,255,239,21,67,163,199,104,94,139,66,57,223,182,33,184,76,86,81,230,142,71,174,242,154,253,186,22,128,218,35,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,91,37,134,198,243,18,38,174,254,144,62,125,40,250,225,121,7,238,248,177,220,222,23,33,15,169,31,3,119,103,101,23,61,157,45,9,170,165,85,169,236,51,14,199,161,1,119,114,196,208,177,48,72,242,150,184,12,20,142,244,0,91,87,17,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,198,255,255,159,123,92,206,158,22,127,252,107,148,95,61,228,228,250,177,168,166,52,208,61,140,182,193,250,248,57,70,9,174,187,15,253,249,253,165,102,215,152,241,179,178,104,156,75,85,45,191,21,54,7,62,148,29,120,47,220,179,48,166,31,33,0,0,240,17,168,32,192,185,130,231,176,87,241,176,46,2,100,172,177,134,252,88,194,96,165,101,7,207,28,238,60,242,165,226,6,101,229,64,83,119,77,3,144,247,141,44,48,246,84,33,94,63,169,222,147,175,18,129,148,224,65,168,58,139,22,239,109,147,10,90,127,92,16,218,73,109,223,190,184,6,190,13,86,140,109,199,128,213,6,87,232,210,154,114,24,166,218,121,41,160,226,187,149,146,223,122,252,31,238,81,174,85,106,136,207,217,102,56,151,26,247,17,222,251,230,254,24,196,98,210,230,233,79,140,154,164,60,171,178,166,230,188,181,152,135,207,80,110,83,185,255,28,140,163,236,113,243,12,31,208,49,143,112,110,142,247,244,121,123,131,68,75,19,23,121,189,131,228,254,170,246,145,161,146,87,191,217,87,224,165,69,161,183,207,65,159,209,76,232,87,9,101,107,156,89,137,166,245,220,153,160,135,233,163,184,225,199,60,79,200,97,146,63,84,68,240,226,45,237,29,33,75,72,129,63,222,103,203,4,101,131,67,237,54,132,98,220,53,200,51,230,49,108,34,65,0,0,0,4,105,100,95,52,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,240,147,245,225,67,145,112,185,121,72,232,51,40,93,88,129,129,182,69,80,184,41,160,49,225,114,78,100,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,105,100,95,52,95,102,102,116,0,0,0,64,71,255,255,143,23,136,181,241,5,167,253,8,160,35,125,242,173,36,135,105,28,159,253,205,217,65,35,67,251,78,131,7,2,93,154,102,198,161,219,84,71,245,123,124,140,164,209,251,233,17,138,244,207,75,189,6,217,97,118,148,162,74,48,43,141,113,239,24,99,32,129,112,131,150,79,14,200,174,198,187,196,103,13,121,246,177,88,13,123,130,49,210,95,221,159,22,65,194,17,224,192,221,54,103,202,117,28,67,104,217,130,77,198,0,131,231,216,96,84,114,252,109,39,46,189,48,16,24,89,141,128,226,196,206,211,54,241,74,231,9,154,192,120,184,185,109,71,187,72,121,100,190,49,84,208,187,1,191,180,12,15,29,228,31,47,5,61,54,17,52,5,235,70,40,0,197,5,56,245,185,48,112,241,224,59,203,123,49,241,17,218,45,37,101,14,144,234,222,182,221,121,184,129,142,112,31,2,192,235,29,177,219,53,14,88,103,172,9,37,179,157,144,166,35,58,35,217,121,208,64,76,188,173,26,248,82,5,7,103,103,61,17,179,75,139,14,219,79,252,192,4,61,108,103,125,27,131,252,183,118,248,75,190,26,91,218,253,167,146,157,245,30,85,195,30,164,100,136,29,3,252,125,33,211,242,27,161,10,202,37,178,130,118,95,102,21,186,154,80,161,66,153,31,171,150,183,178,114,78,104,137,251,67,138,57,68,166,218,158,30,147,30,121,165,98,28,188,47,105,122,40,127,217,202,241,30,215,151,88,134,49,103,198,161,90,91,153,75,182,95,112,48,245,180,225,172,188,66,106,99,236,244,25,97,52,57,21,16,199,176,76,152,194,42,65,253,110,229,128,241,150,32,67,40,145,132,14,206,254,214,191,80,195,84,110,251,17,180,241,39,214,159,105,203,56,20,120,196,139,180,93,245,184,75,194,47,10,164,206,59,226,15,214,108,95,80,95,137,106,211,69,123,124,56,172,118,232,3,49,42,89,109,175,227,233,209,126,26,15,66,46,155,22,182,147,91,95,32,31,100,139,118,60,147,148,5,62,156,79,91,169,152,199,7,11,168,80,21,116,48,230,45,42,254,45,82,54,17,5,7,80,240,181,83,134,123,53,248,108,235,40,92,139,195,231,109,247,56,215,250,28,26,226,191,52,168,208,174,170,52,218,53,84,127,85,10,87,39,207,31,160,46,129,5,136,13,83,207,97,160,93,88,112,12,136,181,75,36,109,73,47,48,96,250,21,135,63,14,183,225,30,68,83,218,156,90,52,78,140,57,134,226,96,93,44,33,12,226,60,249,92,175,217,182,55,0,101,154,61,176,164,28,24,132,228,217,172,205,219,129,60,68,190,109,217,41,212,41,103,26,254,19,254,210,234,147,127,14,142,241,36,38,102,168,83,253,151,9,21,37,203,142,219,205,51,7,22,20,213,45,118,93,103,143,40,60,2,226,248,41,72,15,61,151,16,26,86,253,43,62,72,61,228,142,231,151,124,41,227,181,29,13,41,10,2,65,118,221,96,76,208,167,121,41,14,39,207,85,104,53,202,194,227,181,228,147,199,177,251,37,155,69,94,44,164,196,172,54,9,42,154,214,88,241,231,20,50,246,24,49,8,120,33,152,255,119,2,234,105,10,132,48,5,49,16,20,111,119,245,139,247,118,105,194,164,74,238,167,92,222,97,1,109,4,3,170,167,162,171,12,150,149,19,77,44,28,174,27,221,80,196,210,193,142,74,223,118,11,157,111,63,94,49,210,95,115,201,248,101,188,40,172,90,99,221,96,68,70,93,24,140,178,63,0,88,181,131,138,84,160,245,239,249,166,34,131,6,146,124,139,219,66,23,239,68,189,63,193,198,10,46,13,60,215,19,142,170,164,78,255,101,21,136,134,127,82,66,162,182,20,25,174,39,231,11,12,240,251,157,16,237,194,207,39,4,148,57,145,6,26,158,254,240,74,87,75,101,221,113,138,193,88,224,7,227,128,119,171,62,61,140,133,127,37,142,47,30,28,49,212,19,197,139,136,126,9,4,6,94,100,167,165,198,153,171,78,30,213,152,231,104,241,94,245,115,252,46,7,139,234,70,127,44,162,136,40,72,123,177,184,119,175,249,219,76,108,9,161,151,31,238,138,119,181,203,147,71,182,219,14,135,154,166,203,230,251,214,199,24,37,157,209,108,0,254,175,29,173,82,132,112,200,72,87,46,94,62,200,102,83,194,11,253,133,240,112,234,61,148,117,220,121,94,187,59,230,250,130,40,93,245,47,234,150,165,181,71,86,143,247,11,79,144,18,187,0,0,80,16,99,14,150,28,58,117,234,240,172,234,93,12,140,123,153,80,236,162,162,121,254,63,127,234,77,69,89,0,163,101,121,97,73,232,50,219,235,246,118,4,44,150,84,208,158,120,14,157,63,227,105,122,222,236,45,67,82,152,53,117,142,16,199,196,202,66,23,159,74,35,229,200,33,161,148,245,72,245,137,118,217,71,99,216,189,49,240,133,191,40,74,193,61,238,255,102,13,141,32,88,107,86,176,40,247,228,2,244,175,127,27,148,42,76,254,86,210,59,148,40,108,184,72,169,114,127,253,98,28,240,80,49,150,139,233,246,15,239,151,0,67,187,71,36,18,60,178,33,236,146,6,228,221,19,84,243,226,27,192,248,229,134,81,17,173,109,8,74,168,103,139,180,120,13,73,60,27,175,143,23,117,231,144,244,138,238,50,221,154,241,79,61,12,13,170,168,40,241,100,32,177,101,144,206,146,81,39,55,125,72,9,167,54,62,15,72,12,34,61,200,220,38,102,87,170,119,203,116,198,122,160,139,201,0,233,124,159,79,183,225,124,197,32,87,127,94,133,121,53,75,69,127,3,72,105,47,159,5,109,199,6,117,75,254,50,114,49,101,237,227,94,8,3,131,109,87,194,65,239,242,128,39,86,56,218,77,93,177,139,93,114,104,70,34,82,78,55,72,165,35,249,79,144,30,35,23,117,15,182,41,126,63,194,41,66,111,225,134,58,197,206,7,88,185,102,74,116,183,5,118,49,227,24,170,124,59,36,218,206,248,228,201,118,47,61,88,48,13,75,30,51,107,168,89,36,54,236,88,146,92,151,82,64,243,255,181,106,170,96,95,115,228,90,226,208,78,124,133,56,113,123,241,17,41,20,4,55,95,140,4,248,126,28,118,40,228,16,153,55,52,119,40,172,199,139,5,205,44,81,6,49,248,91,49,164,69,219,237,26,195,144,19,106,38,253,33,213,61,120,86,140,132,135,111,70,250,210,179,222,251,202,73,70,243,189,209,68,17,53,48,44,195,192,83,143,5,90,43,189,37,171,196,102,29,48,247,215,139,56,88,26,149,135,84,48,28,210,213,225,249,152,141,118,29,218,34,3,219,124,225,212,132,184,149,23,68,47,21,173,107,210,107,137,14,162,171,70,32,64,203,55,87,60,25,83,72,171,30,116,59,198,16,41,235,144,98,212,235,133,24,99,0,113,1,34,136,68,88,84,122,74,180,187,186,161,148,87,194,230,92,108,81,194,176,110,155,108,175,40,208,48,108,34,199,6,221,223,132,63,156,63,246,29,195,230,202,59,234,208,234,224,13,89,83,32,195,51,162,44,30,41,192,189,196,238,22,252,164,84,12,115,244,54,155,229,1,204,41,24,217,243,162,210,228,1,108,170,1,168,102,179,106,249,87,102,213,225,119,114,47,187,207,136,243,50,140,162,152,80,255,174,193,165,41,183,42,228,83,57,87,54,100,179,214,196,36,78,188,225,107,168,230,152,2,231,170,83,217,245,253,158,177,13,99,59,82,57,249,201,130,169,152,250,81,123,56,64,137,213,187,220,139,142,103,156,74,87,106,52,94,59,83,169,30,193,41,177,201,239,138,222,94,218,78,31,178,56,225,106,109,19,158,134,233,53,223,145,224,107,184,76,147,136,10,84,48,116,90,197,125,150,132,75,52,242,5,79,77,172,255,88,197,232,244,99,189,170,79,117,185,128,26,69,37,175,59,13,102,92,121,168,171,213,213,131,81,114,54,126,90,61,57,10,7,207,119,196,248,220,133,97,161,86,107,72,118,77,192,223,207,53,64,253,205,64,125,3,151,41,69,205,179,30,134,119,145,72,137,129,14,131,35,1,31,146,154,83,198,40,236,81,125,70,117,136,188,203,234,108,17,126,37,174,3,156,233,84,69,164,148,100,99,68,197,177,248,217,248,56,254,107,198,78,33,209,37,137,49,150,27,168,43,243,245,197,248,87,34,251,137,10,41,197,20,3,215,60,102,119,58,49,228,227,206,11,20,38,56,255,163,215,110,237,50,108,192,170,243,22,87,180,78,182,7,137,234,78,4,205,113,160,153,89,119,21,185,96,251,72,59,95,218,101,193,58,25,33,110,116,109,68,249,97,213,107,178,229,219,138,151,46,158,230,236,81,123,101,89,20,65,239,236,191,9,188,213,33,36,208,105,160,156,3,176,126,252,194,87,25,37,226,36,250,126,73,6,85,5,122,15,111,61,173,47,18,70,103,20,56,85,234,108,205,145,83,13,211,130,244,250,186,11,234,211,202,217,77,56,78,0,0,0,13,105,100,95,52,95,108,97,103,114,97,110,103,101,0,0,0,16,219,255,255,79,158,129,87,48,1,187,50,104,134,109,127,48,137,58,78,72,159,236,101,92,248,217,211,115,101,169,128,1,18,233,76,93,171,141,87,229,230,139,134,77,45,136,34,96,209,90,91,63,102,89,87,177,120,202,102,31,228,53,56,12,180,101,190,71,79,64,83,121,98,117,241,57,146,231,161,116,240,107,134,7,159,143,175,88,212,210,67,87,20,226,205,11,234,128,156,191,131,194,134,234,16,193,212,125,120,82,212,220,163,49,98,15,99,120,142,178,138,170,28,94,162,235,58,19,199,140,10,184,173,237,232,228,123,84,156,254,133,48,130,169,213,228,57,35,11,15,248,141,178,124,29,77,195,135,42,12,229,69,174,172,45,108,238,85,239,75,23,76,209,220,136,80,124,52,35,90,226,2,145,241,224,228,105,143,165,134,168,31,198,169,141,192,170,77,111,109,206,24,222,97,78,65,20,50,140,245,14,178,5,154,126,122,26,103,105,64,190,29,141,14,160,5,61,87,114,86,118,54,32,98,177,254,98,215,207,202,25,66,137,67,130,70,216,68,191,214,38,139,171,30,203,20,38,0,0,160,245,115,138,19,144,181,134,17,194,122,180,247,211,29,51,57,23,89,234,91,49,198,93,109,13,165,227,46,239,22,179,146,232,103,138,94,170,228,50,44,27,96,17,200,139,253,37,66,80,236,248,6,177,213,202,193,142,24,44,36,77,154,65,168,68,181,142,202,46,251,199,63,182,0,146,179,108,236,250,121,23,182,160,95,85,205,237,137,94,108,150,36,23,127,99,48,16,51,91,89,128,175,228,251,207,149,95,75,185,38,31,114,83,205,193,5,159,245,20,131,208,98,41,29,58,115,245,55,230,7,249,94,21,28,29,123,194,183,177,126,135,115,71,94,171,54,88,42,119,35,20,148,175,198,57,36,28,186,81,67,102,137,243,237,161,36,162,45,119,11,171,215,224,35,94,39,212,66,191,198,72,187,199,81,205,199,187,16,59,86,114,47,233,167,114,214,194,87,219,23,250,166,31,246,208,98,114,207,176,171,209,61,15,57,200,160,180,48,215,33,97,250,194,152,33,159,107,13,113,14,8,123,229,16,100,93,67,22,248,61,52,255,119,115,106,201,10,86,199,47,153,27,0,0,0,0,0,0,0,0,0,0,0,0,0],"verification_key":[0,0,0,2,0,0,0,16,0,0,0,0,0,0,0,23,0,0,0,4,73,68,95,49,20,49,49,179,12,40,156,67,239,232,192,60,207,165,125,56,234,109,137,210,58,227,28,229,113,75,197,218,168,106,118,142,13,192,44,120,142,211,61,165,182,104,114,235,249,88,92,141,122,188,18,1,205,106,171,211,81,16,126,56,63,147,205,25,0,0,0,4,73,68,95,50,16,10,73,113,157,83,107,100,184,223,158,5,39,248,52,205,186,193,200,45,174,64,92,152,107,137,91,238,31,26,95,127,23,203,156,211,170,18,143,125,129,57,31,10,14,41,78,37,236,111,70,47,21,23,211,58,187,241,102,166,83,8,0,217,0,0,0,4,73,68,95,51,43,202,144,96,224,0,83,238,84,20,36,120,164,118,157,225,218,57,5,32,64,106,223,171,38,240,66,41,186,158,47,146,26,64,232,125,119,70,91,3,93,140,174,66,227,136,72,159,215,222,73,255,126,254,118,41,247,125,250,215,95,10,80,132,0,0,0,4,73,68,95,52,46,234,100,140,135,50,89,107,19,20,254,42,77,47,5,54,63,12,153,78,145,206,202,210,88,53,51,142,222,226,41,79,10,180,152,134,194,185,75,208,189,63,110,209,219,190,44,178,103,29,42,229,29,49,193,33,4,51,195,151,43,182,69,120,0,0,0,3,81,95,49,17,6,177,58,190,50,155,216,217,204,157,44,38,98,209,188,147,72,214,64,225,47,196,203,134,200,239,193,35,83,200,124,0,151,151,74,98,154,19,122,227,132,196,28,91,51,187,224,199,208,219,86,44,248,10,45,0,91,175,105,0,76,80,224,0,0,0,3,81,95,50,11,179,73,194,52,84,255,76,100,220,198,200,195,79,126,184,253,168,129,202,234,240,9,67,198,81,215,253,244,134,246,229,9,112,67,97,123,110,149,178,1,76,151,252,222,99,33,165,184,102,181,73,19,200,56,79,46,254,157,40,209,127,48,75,0,0,0,3,81,95,51,10,205,230,201,195,86,211,30,31,11,118,99,63,185,237,42,175,255,250,203,54,114,46,10,202,57,105,201,0,17,21,133,29,33,237,17,42,61,17,54,236,88,93,39,202,111,155,250,58,42,154,151,126,214,164,84,166,202,180,8,55,94,142,190,0,0,0,3,81,95,52,2,214,253,158,132,219,231,75,117,49,225,128,20,5,161,194,146,17,123,26,23,254,254,157,224,191,217,237,241,168,75,249,41,60,106,179,192,106,6,105,175,19,57,58,130,198,10,69,154,59,42,11,118,141,164,90,199,175,127,42,236,64,252,66,0,0,0,12,81,95,65,82,73,84,72,77,69,84,73,67,21,117,73,158,206,175,178,185,32,253,18,117,203,174,240,27,101,142,44,200,94,145,166,118,174,247,207,210,94,132,179,216,19,205,139,201,233,65,52,30,115,10,15,92,236,197,65,191,84,239,217,8,59,22,154,67,4,24,116,58,219,123,89,226,0,0,0,5,81,95,65,85,88,21,90,15,81,254,199,140,51,255,206,183,54,77,105,215,172,39,229,112,174,80,188,24,5,9,118,78,179,254,249,72,21,28,28,71,32,190,212,74,89,29,151,203,199,43,110,68,182,68,153,151,19,168,211,198,110,144,84,170,87,38,50,76,118,0,0,0,3,81,95,67,29,39,169,134,181,204,152,42,167,195,70,120,27,109,4,246,159,247,84,178,54,108,25,0,203,224,231,232,76,172,239,237,23,87,44,72,240,224,111,147,47,192,204,255,209,89,200,28,140,119,29,102,48,85,159,71,78,77,188,19,247,10,90,81,0,0,0,10,81,95,69,76,76,73,80,84,73,67,10,211,75,94,141,183,42,90,207,68,39,84,108,114,148,190,110,212,244,210,82,167,144,89,229,5,249,171,193,189,243,237,30,91,38,121,10,38,235,52,2,23,221,154,210,141,191,144,160,73,244,42,56,82,172,212,94,111,82,31,36,180,144,14,0,0,0,3,81,95,77,35,138,46,11,151,121,7,27,160,31,103,97,76,21,77,4,141,192,51,165,254,115,2,194,153,213,83,210,5,184,25,132,1,182,212,122,27,243,20,18,53,23,24,27,222,45,237,213,196,85,215,172,85,209,217,65,23,225,47,80,98,152,61,34,0,0,0,6,81,95,83,79,82,84,44,188,231,190,238,48,118,183,141,172,224,73,67,214,157,13,158,40,170,109,0,224,70,133,39,129,165,242,8,22,100,92,43,194,126,194,225,97,46,162,132,176,139,204,85,182,242,253,145,93,17,191,237,189,192,229,157,224,158,91,40,149,32,128,0,0,0,7,83,73,71,77,65,95,49,43,90,227,204,129,65,188,154,155,46,76,69,134,126,153,33,167,33,20,80,94,233,153,240,161,200,127,247,94,247,80,123,42,218,250,131,76,239,152,182,154,45,139,63,250,79,108,104,31,249,163,28,78,161,171,92,176,121,207,152,170,154,168,193,0,0,0,7,83,73,71,77,65,95,50,42,156,121,156,239,126,82,19,132,22,151,51,129,134,245,1,150,87,113,70,135,150,150,28,132,199,148,142,42,169,207,43,6,218,61,216,5,223,113,238,102,96,230,96,163,157,71,50,141,237,222,74,220,107,26,198,111,70,252,227,151,107,139,116,0,0,0,7,83,73,71,77,65,95,51,5,103,47,224,134,19,76,147,223,227,161,72,230,3,212,9,139,54,245,151,71,224,53,22,140,111,179,202,118,63,102,49,23,138,85,224,7,117,190,57,162,221,182,96,198,73,57,186,144,8,75,30,85,169,79,107,76,117,185,76,22,201,22,51,0,0,0,7,83,73,71,77,65,95,52,3,169,243,237,73,240,108,142,27,166,4,165,102,73,134,0,154,28,153,207,102,169,190,248,69,103,201,82,130,52,61,50,7,88,133,69,78,170,52,250,245,26,34,213,206,147,70,216,252,151,4,20,215,103,108,219,229,77,110,133,243,202,80,33,0,0,0,7,84,65,66,76,69,95,49,2,195,151,7,60,138,188,230,212,20,12,155,150,18,9,221,120,59,255,26,28,252,153,155,178,152,89,207,177,108,70,252,43,123,186,45,30,255,252,224,208,51,245,150,180,208,48,117,5,153,190,103,13,181,147,175,134,225,146,63,232,161,187,24,0,0,0,7,84,65,66,76,69,95,50,44,113,197,139,102,73,143,144,59,59,187,218,61,5,206,143,251,87,26,75,60,248,53,51,243,247,27,153,160,79,110,107,3,157,206,55,249,77,27,189,151,204,234,50,162,36,254,42,250,239,188,189,8,12,132,220,234,144,181,79,78,10,133,143,0,0,0,7,84,65,66,76,69,95,51,39,220,68,151,126,254,107,55,70,162,144,112,111,79,114,117,120,60,115,207,229,104,71,216,72,253,147,182,59,243,32,131,10,83,102,38,109,215,183,26,16,179,86,3,2,38,162,222,12,191,46,220,143,8,91,22,215,54,82,177,94,206,216,245,0,0,0,7,84,65,66,76,69,95,52,19,96,151,215,158,27,10,227,115,37,94,135,96,196,153,0,167,88,142,196,214,128,156,144,187,69,16,5,163,222,48,119,19,221,117,21,204,172,64,149,48,45,32,79,6,240,191,242,89,93,119,189,247,46,74,205,176,176,180,57,105,134,13,152,0,0,0,10,84,65,66,76,69,95,84,89,80,69,22,255,53,1,54,145,33,212,16,180,69,146,146,57,186,5,127,226,17,218,209,183,6,228,154,59,85,146,15,172,32,236,30,25,9,135,235,217,207,72,15,96,139,130,19,74,0,235,128,7,103,60,30,209,11,131,74,105,90,223,0,104,82,42,0,0,0,0,0]} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr new file mode 100644 index 00000000000..72f614f1e63 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_integer_binary_operations/src/main.nr @@ -0,0 +1,80 @@ +// Tests arithmetic operations on integers +fn main() { + let x: u32 = 6; + let y: u32 = 2; + + assert((x + y) == add(x, y)); + + assert((x - y) == sub(x, y)); + + assert((x * y) == mul(x, y)); + + assert((x / y) == div(x, y)); + + // TODO SSA => ACIR has some issues with i32 ops + assert(check_signed_div(6, 2, 3)); + + assert(eq(1, 2) == false); + assert(eq(1, 1)); + + assert(lt(x, y) == false); + assert(lt(y, x)); + + assert((x & y) == and(x, y)); + assert((x | y) == or(x, y)); + + // TODO SSA => ACIR has some issues with xor ops + + assert(check_xor(x, y, 4)); + assert((x >> y) == shr(x, y)); + assert((x << y) == shl(x, y)); +} + +unconstrained fn add(x : u32, y : u32) -> u32 { + x + y +} + +unconstrained fn sub(x : u32, y : u32) -> u32 { + x - y +} + +unconstrained fn mul(x : u32, y : u32) -> u32 { + x * y +} + +unconstrained fn div(x : u32, y : u32) -> u32 { + x / y +} + +unconstrained fn check_signed_div(x: i32, y: i32, result: i32) -> bool { + (x / y) == result +} + +unconstrained fn eq(x : u32, y : u32) -> bool { + x == y +} + +unconstrained fn lt(x : u32, y : u32) -> bool { + x < y +} + +unconstrained fn and(x : u32, y : u32) -> u32 { + x & y +} + +unconstrained fn or(x : u32, y : u32) -> u32 { + x | y +} + +unconstrained fn check_xor(x : u32, y : u32, result: u32) -> bool { + (x ^ y) == result +} + +unconstrained fn shr(x : u32, y : u32) -> u32 { + x >> y +} + +unconstrained fn shl(x : u32, y : u32) -> u32 { + x << y +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml new file mode 100644 index 00000000000..22cd5b7c12f --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/Prover.toml @@ -0,0 +1 @@ +sum = "6" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr new file mode 100644 index 00000000000..7240264b2a8 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_loop/src/main.nr @@ -0,0 +1,14 @@ +// Tests a very simple program. +// +// The features being tested is basic looping on brillig +fn main(sum: u32){ + assert(loop(4) == sum); +} + +unconstrained fn loop(x: u32) -> u32 { + let mut sum = 0; + for i in 0..x { + sum = sum + i; + } + sum +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr new file mode 100644 index 00000000000..1cab78ecb95 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_modulo/src/main.nr @@ -0,0 +1,28 @@ +// Tests a very simple program. +// +// The features being tested is modulo operations on brillig +fn main() { + assert(modulo(47, 3) == 2); + assert(modulo(2, 3) == 2); + assert(signed_modulo(5, 3) == 2); + assert(signed_modulo(2, 3) == 2); + + let minus_two: i4 = 14; + let minus_three: i4 = 13; + let minus_five: i4 = 11; + + // (5 / -3) * -3 + 2 = -1 * -3 + 2 = 3 + 2 = 5 + assert(signed_modulo(5, minus_three) == 2); + // (-5 / 3) * 3 - 2 = -1 * 3 - 2 = -3 - 2 = -5 + assert(signed_modulo(minus_five, 3) == minus_two); + // (-5 / -3) * -3 - 2 = 1 * -3 - 2 = -3 - 2 = -5 + assert(signed_modulo(minus_five, minus_three) == minus_two); +} + +unconstrained fn modulo(x: u32, y: u32) -> u32 { + x % y +} + +unconstrained fn signed_modulo(x: i4, y: i4) -> i4 { + x % y +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml new file mode 100644 index 00000000000..a0397e89477 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr new file mode 100644 index 00000000000..bc94810efb9 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_not/src/main.nr @@ -0,0 +1,11 @@ +// Tests a very simple Brillig function. +// +// The features being tested is not instruction on brillig +fn main(x: Field, y : Field) { + assert(false == not_operator(x as bool)); + assert(true == not_operator(y as bool)); +} + +unconstrained fn not_operator(x : bool) -> bool { + !x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml new file mode 100644 index 00000000000..2b26a4ce471 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/Prover.toml @@ -0,0 +1,2 @@ +x = "10" + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr new file mode 100644 index 00000000000..3f4f718b81d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_oracle/src/main.nr @@ -0,0 +1,23 @@ +// Tests oracle usage in brillig/unconstrained functions +fn main(x: Field) { + // call through a brillig wrapper + oracle_print_array_wrapper([x, x]); + + // TODO(#1615) Nargo currently only supports resolving one foreign call + // oracle_print_wrapper(x); +} + +#[oracle(oracle_print_impl)] +unconstrained fn oracle_print(_x : Field) -> Field {} + +unconstrained fn oracle_print_wrapper(x: Field) { + oracle_print(x); +} + +#[oracle(oracle_print_array_impl)] +unconstrained fn oracle_print_array(_arr : [Field; 2]) -> Field {} + +unconstrained fn oracle_print_array_wrapper(arr: [Field; 2]) { + oracle_print_array(arr); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml new file mode 100644 index 00000000000..f489cbac003 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/Prover.toml @@ -0,0 +1,2 @@ +x = "10" +y = "10" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr new file mode 100644 index 00000000000..57af8120b33 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/cast_bool/src/main.nr @@ -0,0 +1,6 @@ +fn main(x: Field, y: Field) { + let z = x == y; + let t = z as u8; + assert(t == 1); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml new file mode 100644 index 00000000000..ec8d8e34856 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/Prover.toml @@ -0,0 +1 @@ +a = [1, 2, 3] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr new file mode 100644 index 00000000000..04f08bb70c5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_array_access/src/main.nr @@ -0,0 +1,17 @@ +fn main(a: [Field; 3]) { + let i = 1; + + // Using a comptime variable as a parameter should not make it non-comptime + let ii = foo(i); + let elem1 = a[i]; + + // Nor should using it in an expression with a non-comptime variable. + let two = i + ii; + assert(i == ii); + + let elem2 = a[i]; + assert(elem1 == elem2); + assert(two == 2); +} + +fn foo(x: Field) -> Field { x } diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml new file mode 100644 index 00000000000..745ce7c2361 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/Prover.toml @@ -0,0 +1,2 @@ +x = 5 +y = 6 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr new file mode 100644 index 00000000000..0461fd9c4cb --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/comptime_recursion_regression/src/main.nr @@ -0,0 +1,4 @@ +fn main(x: Field, y: Field) { + let flag = (x == 1) | (y == 2); + assert(flag | false == flag); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml new file mode 100644 index 00000000000..fe9e83b06aa --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/Prover.toml @@ -0,0 +1 @@ +_x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr new file mode 100644 index 00000000000..4cc6c739181 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/constant_return/src/main.nr @@ -0,0 +1,7 @@ +// This is a test for simple return with a constant. +// +// Note: There's a possibility in the future that +// a test before ACIR gen optimizes this test. +fn main(_x : Field) -> pub Field { + 5 +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml new file mode 100644 index 00000000000..97d5b1e0eed --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/Prover.toml @@ -0,0 +1,2 @@ +x = 3 +y = 2 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr new file mode 100644 index 00000000000..53e094eb4cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/contracts/src/main.nr @@ -0,0 +1,8 @@ +fn main(x : Field, y : pub Field) { + assert(x * 2 == y * 3); +} + +contract Foo { + fn double(x: Field) -> pub Field { x * 2 } + fn triple(x: Field) -> pub Field { x * 3 } +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml new file mode 100644 index 00000000000..07890234a19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/Prover.toml @@ -0,0 +1 @@ +x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr new file mode 100644 index 00000000000..d84be844d8e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/distinct_keyword/src/main.nr @@ -0,0 +1,4 @@ +// Example that uses the distinct keyword +fn main(x: pub Field) -> distinct pub [Field;2] { + [x+1, x] +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml new file mode 100644 index 00000000000..4a5c2a916f0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "Baby Jubjub sanity checks" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr new file mode 100644 index 00000000000..3372e969d4b --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/ec_baby_jubjub/src/main.nr @@ -0,0 +1,226 @@ +// Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc + +use dep::std::ec::tecurve::affine::Curve as AffineCurve; +use dep::std::ec::tecurve::affine::Point as Gaffine; +use dep::std::ec::tecurve::curvegroup::Curve; +use dep::std::ec::tecurve::curvegroup::Point as G; + +use dep::std::ec::swcurve::affine::Point as SWGaffine; +use dep::std::ec::swcurve::curvegroup::Point as SWG; + +use dep::std::ec::montcurve::affine::Point as MGaffine; +use dep::std::ec::montcurve::curvegroup::Point as MG; + +fn main() { + // This test only makes sense if Field is the right prime field. + if 21888242871839275222246405745257275088548364400416034343698204186575808495617 == 0 + { + // Define Baby Jubjub (ERC-2494) parameters in affine representation + let bjj_affine = AffineCurve::new(168700, 168696, Gaffine::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905)); + + // Test addition + let p1_affine = Gaffine::new(17777552123799933955779906779655732241715742912184938656739573121738514868268, 2626589144620713026669568689430873010625803728049924121243784502389097019475); + let p2_affine = Gaffine::new(16540640123574156134436876038791482806971768689494387082833631921987005038935, 20819045374670962167435360035096875258406992893633759881276124905556507972311); + + let p3_affine = bjj_affine.add(p1_affine, p2_affine); + assert( + p3_affine.eq(Gaffine::new( + 7916061937171219682591368294088513039687205273691143098332585753343424131937, + 14035240266687799601661095864649209771790948434046947201833777492504781204499 + )) + ); + + // Test scalar multiplication + let p4_affine = bjj_affine.mul(2, p1_affine); + assert( + p4_affine.eq(Gaffine::new( + 6890855772600357754907169075114257697580319025794532037257385534741338397365, + 4338620300185947561074059802482547481416142213883829469920100239455078257889 + )) + ); + assert(p4_affine.eq(bjj_affine.bit_mul([0,1], p1_affine))); + + // Test subtraction + let p5_affine = bjj_affine.subtract(p3_affine, p3_affine); + assert(p5_affine.eq(Gaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_affine.contains(bjj_affine.gen) & + bjj_affine.contains(p1_affine) & + bjj_affine.contains(p2_affine) & + bjj_affine.contains(p3_affine) & + bjj_affine.contains(p4_affine) & + bjj_affine.contains(p5_affine) + ); + + // Test CurveGroup equivalents + let bjj = bjj_affine.into_group(); // Baby Jubjub + + let p1 = p1_affine.into_group(); + let p2 = p2_affine.into_group(); + let p3 = p3_affine.into_group(); + let p4 = p4_affine.into_group(); + let p5 = p5_affine.into_group(); + + // Test addition + assert(p3.eq(bjj.add(p1, p2))); + + // Test scalar multiplication + assert(p4.eq(bjj.mul(2, p1))); + assert(p4.eq(bjj.bit_mul([0,1], p1))); + + // Test subtraction + assert(G::zero().eq(bjj.subtract(p3, p3))); + assert(p5.eq(G::zero())); + + // Check that these points are on the curve + assert( + bjj.contains(bjj.gen) & + bjj.contains(p1) & + bjj.contains(p2) & + bjj.contains(p3) & + bjj.contains(p4) & + bjj.contains(p5) + ); + + // Test SWCurve equivalents of the above + // First the affine representation + let bjj_swcurve_affine = bjj_affine.into_swcurve(); + + let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine); + let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine); + let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine); + let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine); + let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine); + + // Addition + assert( + p3_swcurve_affine.eq( + bjj_swcurve_affine.add( + p1_swcurve_affine, + p2_swcurve_affine + ) + ) + ); + + // Doubling + assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine))); + assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0,1], p1_swcurve_affine))); + + // Subtraction + assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(p3_swcurve_affine, p3_swcurve_affine))); + assert(p5_swcurve_affine.eq(SWGaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_swcurve_affine.contains(bjj_swcurve_affine.gen) & + bjj_swcurve_affine.contains(p1_swcurve_affine) & + bjj_swcurve_affine.contains(p2_swcurve_affine) & + bjj_swcurve_affine.contains(p3_swcurve_affine) & + bjj_swcurve_affine.contains(p4_swcurve_affine) & + bjj_swcurve_affine.contains(p5_swcurve_affine) + ); + + // Then the CurveGroup representation + let bjj_swcurve = bjj.into_swcurve(); + + let p1_swcurve = bjj.map_into_swcurve(p1); + let p2_swcurve = bjj.map_into_swcurve(p2); + let p3_swcurve = bjj.map_into_swcurve(p3); + let p4_swcurve = bjj.map_into_swcurve(p4); + let p5_swcurve = bjj.map_into_swcurve(p5); + + // Addition + assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve,p2_swcurve))); + + // Doubling + assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve))); + assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0,1], p1_swcurve))); + + // Subtraction + assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve))); + assert(p5_swcurve.eq(SWG::zero())); + + // Check that these points are on the curve + assert( + bjj_swcurve.contains(bjj_swcurve.gen) & + bjj_swcurve.contains(p1_swcurve) & + bjj_swcurve.contains(p2_swcurve) & + bjj_swcurve.contains(p3_swcurve) & + bjj_swcurve.contains(p4_swcurve) & + bjj_swcurve.contains(p5_swcurve) + ); + + // Test MontCurve conversions + // First the affine representation + let bjj_montcurve_affine = bjj_affine.into_montcurve(); + + let p1_montcurve_affine = p1_affine.into_montcurve(); + let p2_montcurve_affine = p2_affine.into_montcurve(); + let p3_montcurve_affine = p3_affine.into_montcurve(); + let p4_montcurve_affine = p4_affine.into_montcurve(); + let p5_montcurve_affine = p5_affine.into_montcurve(); + + // Addition + assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(p1_montcurve_affine, p2_montcurve_affine))); + + // Doubling + assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine))); + assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0,1], p1_montcurve_affine))); + + // Subtraction + assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(p3_montcurve_affine, p3_montcurve_affine))); + assert(p5_montcurve_affine.eq(MGaffine::zero())); + + // Check that these points are on the curve + assert( + bjj_montcurve_affine.contains(bjj_montcurve_affine.gen) & + bjj_montcurve_affine.contains(p1_montcurve_affine) & + bjj_montcurve_affine.contains(p2_montcurve_affine) & + bjj_montcurve_affine.contains(p3_montcurve_affine) & + bjj_montcurve_affine.contains(p4_montcurve_affine) & + bjj_montcurve_affine.contains(p5_montcurve_affine) + ); + + // Then the CurveGroup representation + let bjj_montcurve = bjj.into_montcurve(); + + let p1_montcurve = p1_montcurve_affine.into_group(); + let p2_montcurve = p2_montcurve_affine.into_group(); + let p3_montcurve = p3_montcurve_affine.into_group(); + let p4_montcurve = p4_montcurve_affine.into_group(); + let p5_montcurve = p5_montcurve_affine.into_group(); + + // Addition + assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve))); + + // Doubling + assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve))); + assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0,1], p1_montcurve))); + + // Subtraction + assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve))); + assert(p5_montcurve.eq(MG::zero())); + + // Check that these points are on the curve + assert( + bjj_montcurve.contains(bjj_montcurve.gen) & + bjj_montcurve.contains(p1_montcurve) & + bjj_montcurve.contains(p2_montcurve) & + bjj_montcurve.contains(p3_montcurve) & + bjj_montcurve.contains(p4_montcurve) & + bjj_montcurve.contains(p5_montcurve) + ); + + // Elligator 2 map-to-curve + let ell2_pt_map = bjj_affine.elligator2_map(27); + + assert(ell2_pt_map.eq(MGaffine::new(7972459279704486422145701269802978968072470631857513331988813812334797879121, 8142420778878030219043334189293412482212146646099536952861607542822144507872).into_tecurve())); + + // SWU map-to-curve + let swu_pt_map = bjj_affine.swu_map(5,27); + + assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(2162719247815120009132293839392097468339661471129795280520343931405114293888, 5341392251743377373758788728206293080122949448990104760111875914082289313973)))); + } +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml new file mode 100644 index 00000000000..7199d3305bf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "ECDSA secp256k1 verification" +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml new file mode 100644 index 00000000000..412c7b36e4c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/Prover.toml @@ -0,0 +1,209 @@ + +hashed_message = [ + 0x3a, + 0x73, + 0xf4, + 0x12, + 0x3a, + 0x5c, + 0xd2, + 0x12, + 0x1f, + 0x21, + 0xcd, + 0x7e, + 0x8d, + 0x35, + 0x88, + 0x35, + 0x47, + 0x69, + 0x49, + 0xd0, + 0x35, + 0xd9, + 0xc2, + 0xda, + 0x68, + 0x06, + 0xb4, + 0x63, + 0x3a, + 0xc8, + 0xc1, + 0xe2, +] +message = [ + 0x49, + 0x6e, + 0x73, + 0x74, + 0x72, + 0x75, + 0x63, + 0x74, + 0x69, + 0x6f, + 0x6e, + 0x73, + 0x20, + 0x75, + 0x6e, + 0x63, + 0x6c, + 0x65, + 0x61, + 0x72, + 0x2c, + 0x20, + 0x61, + 0x73, + 0x6b, + 0x20, + 0x61, + 0x67, + 0x61, + 0x69, + 0x6e, + 0x20, + 0x6c, + 0x61, + 0x74, + 0x65, + 0x72, + 0x2e, +] +pub_key_x = [ + 0xa0, + 0x43, + 0x4d, + 0x9e, + 0x47, + 0xf3, + 0xc8, + 0x62, + 0x35, + 0x47, + 0x7c, + 0x7b, + 0x1a, + 0xe6, + 0xae, + 0x5d, + 0x34, + 0x42, + 0xd4, + 0x9b, + 0x19, + 0x43, + 0xc2, + 0xb7, + 0x52, + 0xa6, + 0x8e, + 0x2a, + 0x47, + 0xe2, + 0x47, + 0xc7, +] +pub_key_y = [ + 0x89, + 0x3a, + 0xba, + 0x42, + 0x54, + 0x19, + 0xbc, + 0x27, + 0xa3, + 0xb6, + 0xc7, + 0xe6, + 0x93, + 0xa2, + 0x4c, + 0x69, + 0x6f, + 0x79, + 0x4c, + 0x2e, + 0xd8, + 0x77, + 0xa1, + 0x59, + 0x3c, + 0xbe, + 0xe5, + 0x3b, + 0x03, + 0x73, + 0x68, + 0xd7, +] +signature = [ + 0xe5, + 0x08, + 0x1c, + 0x80, + 0xab, + 0x42, + 0x7d, + 0xc3, + 0x70, + 0x34, + 0x6f, + 0x4a, + 0x0e, + 0x31, + 0xaa, + 0x2b, + 0xad, + 0x8d, + 0x97, + 0x98, + 0xc3, + 0x80, + 0x61, + 0xdb, + 0x9a, + 0xe5, + 0x5a, + 0x4e, + 0x8d, + 0xf4, + 0x54, + 0xfd, + 0x28, + 0x11, + 0x98, + 0x94, + 0x34, + 0x4e, + 0x71, + 0xb7, + 0x87, + 0x70, + 0xcc, + 0x93, + 0x1d, + 0x61, + 0xf4, + 0x80, + 0xec, + 0xbb, + 0x0b, + 0x89, + 0xd6, + 0xeb, + 0x69, + 0x69, + 0x01, + 0x61, + 0xe4, + 0x9a, + 0x71, + 0x5f, + 0xcd, + 0x55, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr new file mode 100644 index 00000000000..dfac8673b38 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/ecdsa_secp256k1/src/main.nr @@ -0,0 +1,11 @@ +use dep::std; + + +fn main(message : [u8;38],hashed_message : [u8;32], pub_key_x : [u8;32], pub_key_y : [u8;32], signature : [u8;64]) { + // Hash the message, since secp256k1 expects a hashed_message + let expected= std::hash::sha256(message); + assert(hashed_message == expected); + + let valid_signature = std::ecdsa_secp256k1::verify_signature(pub_key_x, pub_key_y, signature, hashed_message); + assert(valid_signature); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml new file mode 100644 index 00000000000..85f1e9f96f2 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/Prover.toml @@ -0,0 +1,2 @@ +x = "2" +y = "2" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr new file mode 100644 index 00000000000..bfde9d3c957 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/generics/src/main.nr @@ -0,0 +1,57 @@ +struct Bar { + one: Field, + two: Field, + other: T, +} + +fn foo(bar: Bar) { + assert(bar.one == bar.two); +} + +struct BigInt { + limbs: [u32; N], +} + +impl BigInt { + // `N` is in scope of all methods in the impl + fn first(first: BigInt, second: BigInt) -> Self { + assert(first.limbs != second.limbs); + first + } + + fn second(first: BigInt, second: Self) -> Self { + assert(first.limbs != second.limbs); + second + } +} + +impl Bar { + fn get_other(self) -> Field { + self.other + } +} + +fn main(x: Field, y: Field) { + let bar1: Bar = Bar { one: x, two: y, other: 0 }; + let bar2 = Bar { one: x, two: y, other: [0] }; + + foo(bar1); + foo(bar2); + + // Test generic impls + let int1 = BigInt { limbs: [1] }; + let int2 = BigInt { limbs: [2] }; + let BigInt { limbs } = int1.second(int2).first(int1); + assert(limbs == int2.limbs); + + // Test impl exclusively for Bar + assert(bar1.get_other() == bar1.other); + + // Expected type error + // assert(bar2.get_other() == bar2.other); + + let one = x; + let two = y; + let nested_generics: Bar> = Bar { one, two, other: Bar { one, two, other: 0 } }; + assert(nested_generics.other.other == bar1.get_other()); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml new file mode 100644 index 00000000000..66f7feb1dda --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/Prover.toml @@ -0,0 +1,4 @@ +a = [77,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +b = [44,75,108,209,54,16,50,202,155,210,174,185,217,0,170,77,69,217,234,216,10,201,66,51,116,196,81,167,37,77,7,102] +c = [3, 3, 3] +d = [5, 5, 5, 5, 5] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr new file mode 100644 index 00000000000..e52efc52eae --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/baz.nr @@ -0,0 +1,5 @@ +fn from_baz(x : [Field; crate::foo::MAGIC_NUMBER]) { + for i in 0..crate::foo::MAGIC_NUMBER { + assert(x[i] == crate::foo::MAGIC_NUMBER); + }; +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr new file mode 100644 index 00000000000..2db74fb1ff7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo.nr @@ -0,0 +1,11 @@ +mod bar; + +global N: Field = 5; +global MAGIC_NUMBER: Field = 3; +global TYPE_INFERRED = 42; + +fn from_foo(x : [Field; bar::N]) { + for i in 0..bar::N { + assert(x[i] == bar::N); + }; +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr new file mode 100644 index 00000000000..1b4d472b1e8 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/foo/bar.nr @@ -0,0 +1,5 @@ +global N: Field = 5; + +fn from_bar(x : Field) -> Field { + x * N +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr new file mode 100644 index 00000000000..9bcca2b8071 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/global_consts/src/main.nr @@ -0,0 +1,88 @@ +mod foo; +mod baz; + +global M: Field = 32; +global L: Field = 10; // Unused globals currently allowed +global N: Field = 5; +global T_LEN = 2; // Type inference is allowed on globals +//global N: Field = 5; // Uncomment to see duplicate globals error + +struct Dummy { + x: [Field; N], + y: [Field; foo::MAGIC_NUMBER] +} + +fn main(a: [Field; M + N - N], b: [Field; 30 + N / 2], c : pub [Field; foo::MAGIC_NUMBER], d: [Field; foo::bar::N]) { + let test_struct = Dummy { x: d, y: c }; + + for i in 0..foo::MAGIC_NUMBER { + assert(c[i] == foo::MAGIC_NUMBER); + assert(test_struct.y[i] == foo::MAGIC_NUMBER); + } + + assert(N != M); + + let expected: u32 = 42; + assert(foo::TYPE_INFERRED == expected); + + let mut y = 5; + let mut x = M; + for i in 0..N*N { + let M: comptime Field = 10; + x = M; + + y = i; + } + assert(y == 24); + assert(x == 10); + + let q = multiplyByM(3); + assert(q == 96); + + arrays_neq(a, b); + + let t: [Field; T_LEN] = [N, M]; + assert(t[1] == 32); + + assert(15 == mysubmodule::my_helper()); + + let add_submodules_N = mysubmodule::N + foo::bar::N; + assert(15 == add_submodules_N); + let add_from_bar_N = mysubmodule::N + foo::bar::from_bar(1); + assert(15 == add_from_bar_N); + + // Example showing an array filled with (mysubmodule::N + 2) 0's + let sugared = [0; mysubmodule::N + 2]; + assert(sugared[mysubmodule::N + 1] == 0); + + let arr: [Field; mysubmodule::N] = [N; 10]; + assert((arr[0] == 5) & (arr[9] == 5)); + + foo::from_foo(d); + baz::from_baz(c); +} + +fn multiplyByM(x: Field) -> Field { + x * M +} + +fn arrays_neq(a: [Field; M], b: [Field; M]) { + assert(a != b); +} + +mod mysubmodule { + use dep::std; + + global N: Field = 10; + global L: Field = 50; + + fn my_bool_or(x: u1, y: u1) { + assert(x | y == 1); + } + + fn my_helper() -> comptime Field { + let N: comptime Field = 15; // Like in Rust, local variables override globals + let x = N; + x + } +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml new file mode 100644 index 00000000000..f6597d3f78a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/Prover.toml @@ -0,0 +1 @@ +input = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr new file mode 100644 index 00000000000..ffc334179ee --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/hash_to_field/src/main.nr @@ -0,0 +1,5 @@ +use dep::std; + +fn main(input : Field) -> pub Field { + std::hash::hash_to_field([input]) +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml new file mode 100644 index 00000000000..84aeb36ac21 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/Prover.toml @@ -0,0 +1,2 @@ +a=0 +c=[2, 4, 3, 0, ] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr new file mode 100644 index 00000000000..5105c18c7de --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/if_else_chain/src/main.nr @@ -0,0 +1,16 @@ + +fn main(a: u32, mut c: [u32; 4]){ + if a == c[0] { + assert(c[0] == 0); + } else if a == c[1] { + assert(c[1] == 0); + } else if a == c[2] { + assert(c[2] == 0); + } else if a == c[3] { + // expect to match this case + assert(c[3] == 0); + } else { + assert(c[0] == 10); + } +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml new file mode 100644 index 00000000000..d65c4011d3f --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/Prover.toml @@ -0,0 +1,35 @@ +x = 0xbd +result = [ + 0x5a, + 0x50, + 0x2f, + 0x9f, + 0xca, + 0x46, + 0x7b, + 0x26, + 0x6d, + 0x5b, + 0x78, + 0x33, + 0x65, + 0x19, + 0x37, + 0xe8, + 0x05, + 0x27, + 0x0c, + 0xa3, + 0xf3, + 0xaf, + 0x1c, + 0x0d, + 0xd2, + 0x46, + 0x2d, + 0xca, + 0x4b, + 0x3b, + 0x1a, + 0xbf, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr new file mode 100644 index 00000000000..ba3ed7d07af --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/keccak256/src/main.nr @@ -0,0 +1,22 @@ +// Keccak256 example +// +use dep::std; + +fn main(x: Field, result: [u8; 32]) { + // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field + // The padding is taken care of by the program + let digest = std::hash::keccak256([x as u8], 1); + assert(digest == result); + + //#1399: variable meesage size + let message_size = 4; + let hash_a = std::hash::keccak256([1,2,3,4], message_size); + let hash_b = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size); + + assert(hash_a == hash_b); + + let message_size_big = 8; + let hash_c = std::hash::keccak256([1,2,3,4,0,0,0,0], message_size_big); + + assert(hash_a != hash_c); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml new file mode 100644 index 00000000000..fb93b9aa2a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml new file mode 100644 index 00000000000..f932e0b4817 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/Prover.toml @@ -0,0 +1,2 @@ +x = true +y = [true, false] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr new file mode 100644 index 00000000000..0615a7dbca4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_bool_arg/src/main.nr @@ -0,0 +1,8 @@ +fn main(x : bool, y: [bool;2]) { + if x { + assert(1 != 2); + } + + assert(x); + assert(y[0] != y[1]); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml new file mode 100644 index 00000000000..fb93b9aa2a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml new file mode 100644 index 00000000000..63e9878811a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/Prover.toml @@ -0,0 +1 @@ +x = "8" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr new file mode 100644 index 00000000000..06347eb0919 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/main_return/src/main.nr @@ -0,0 +1,3 @@ +fn main(x: pub Field) -> pub Field { + x +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml new file mode 100644 index 00000000000..fca4a077df4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/Prover.toml @@ -0,0 +1,11 @@ +old_root = "0x285785b10eca49cf456b935f1c9787ff571f306c1bc62549c31a9199a633f9f8" +old_leaf = "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0" +old_hash_path = [ + "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", + "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", + "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", +] +new_root = "0x2d05c2650e6c2ef02c6dc7fae7f517b8ac191386666c0b5a68130a8c11092f5f" +leaf = "0x085ca53be9c9d95b57e6e5fc91c5d531ad9e63e85dd71af7e35562991774b435" +index = "0" +mimc_input = [12,45,78,41] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr new file mode 100644 index 00000000000..3de10520037 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/merkle_insert/src/main.nr @@ -0,0 +1,21 @@ +use dep::std; + +fn main( + old_root: Field, + old_leaf: Field, + old_hash_path: [Field; 3], + new_root: pub Field, + leaf: Field, + index: Field, + mimc_input: [Field; 4], +) { + assert(old_root == std::merkle::compute_merkle_root(old_leaf, index, old_hash_path)); + + let calculated_root = std::merkle::compute_merkle_root(leaf, index, old_hash_path); + assert(new_root == calculated_root); + + let h = std::hash::mimc_bn254(mimc_input); + // Regression test for PR #891 + std::println(h); + assert(h == 18226366069841799622585958305961373004333097209608110160936134895615261821931); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml new file mode 100644 index 00000000000..c0a0cdfbeb0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/Prover.toml @@ -0,0 +1,2 @@ +x = "2" +y = "13" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr new file mode 100644 index 00000000000..1f771fa9425 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/foo.nr @@ -0,0 +1,3 @@ +fn hello(x : Field) -> Field { + x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr new file mode 100644 index 00000000000..167f7e671a0 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules/src/main.nr @@ -0,0 +1,14 @@ +mod foo; +// This is a comment. +// +// `main` is the entry point to a binary +// +// You can have a `Binary` or a `Library` +// Release : 0.2 +// +// To run a proof on the command line, type `cargo run prove {proof_name}` +// +// To verify that proof, type `cargo run verify {proof_name}` +fn main(x: Field, y: pub Field) { + assert(x != foo::hello(y)); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml new file mode 100644 index 00000000000..39a4ddb9d15 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/Prover.toml @@ -0,0 +1,4 @@ + + x = "5" + y = "15" + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr new file mode 100644 index 00000000000..ee0d20082f5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo.nr @@ -0,0 +1,5 @@ +mod bar; + +fn hello(x : Field) -> Field { + x +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr new file mode 100644 index 00000000000..a92fb81dceb --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/foo/bar.nr @@ -0,0 +1,3 @@ +fn from_bar(x : Field) -> Field { + x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr new file mode 100644 index 00000000000..8862e5a8650 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modules_more/src/main.nr @@ -0,0 +1,6 @@ +mod foo; + +// An example of the module system +fn main(x: Field, y: Field) { + assert(x != foo::bar::from_bar(y)); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml new file mode 100644 index 00000000000..d435609bb1a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/Prover.toml @@ -0,0 +1,290 @@ +bn254_modulus_be_bytes = [ + 48, + 100, + 78, + 114, + 225, + 49, + 160, + 41, + 184, + 80, + 69, + 182, + 129, + 129, + 88, + 93, + 40, + 51, + 232, + 72, + 121, + 185, + 112, + 145, + 67, + 225, + 245, + 147, + 240, + 0, + 0, + 1, +] +bn254_modulus_be_bits = [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr new file mode 100644 index 00000000000..4a13a6e06ba --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/modulus/src/main.nr @@ -0,0 +1,27 @@ +use dep::std; + +fn main(bn254_modulus_be_bytes : [u8; 32], bn254_modulus_be_bits : [u1; 254]) -> pub Field { + let modulus_size = std::field::modulus_num_bits(); + // NOTE: The constraints used in this circuit will only work when testing nargo with the plonk bn254 backend + assert(modulus_size == 254); + + let modulus_be_byte_array = std::field::modulus_be_bytes(); + for i in 0..32 { + assert(modulus_be_byte_array[i] == bn254_modulus_be_bytes[i]); + } + let modulus_le_byte_array = std::field::modulus_le_bytes(); + for i in 0..32 { + assert(modulus_le_byte_array[i] == bn254_modulus_be_bytes[31-i]); + } + + let modulus_be_bits = std::field::modulus_be_bits(); + for i in 0..254 { + assert(modulus_be_bits[i] == bn254_modulus_be_bits[i]); + } + let modulus_le_bits = std::field::modulus_le_bits(); + for i in 0..254 { + assert(modulus_le_bits[i] == bn254_modulus_be_bits[253-i]); + } + + modulus_size +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr new file mode 100644 index 00000000000..f1efafc19fd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/numeric_generics/src/main.nr @@ -0,0 +1,39 @@ +fn main() { + let a = id([1, 2]); + let b = id([1, 2, 3]); + + let itWorks1 = MyStruct { data: a }; + assert(itWorks1.data[1] == 2); + let itWorks2 = MyStruct { data: b }; + assert(itWorks2.data[1] == 2); + + let c = [1, 2]; + let itAlsoWorks = MyStruct { data: c }; + assert(itAlsoWorks.data[1] == 2); + + assert(foo(itWorks2).data[0] == itWorks2.data[0] + 1); +} + +fn id(x: [Field; I]) -> [Field; I] { + x +} + +struct MyStruct { + data: [Field; S], +} + +impl MyStruct { + fn insert(mut self: Self, index: comptime Field, elem: Field) -> Self { + // Regression test for numeric generics on impls + assert(index as u64 < S as u64); + + self.data[index] = elem; + self + } +} + +fn foo(mut s: MyStruct<2+1>) -> MyStruct<10/2-2> { + s.data[0] = s.data[0] + 1; + s +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml new file mode 100644 index 00000000000..2fb3b1e1abf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/Prover.toml @@ -0,0 +1,6 @@ +x = "0" +y = "1" +salt = "42" + +out_x = "0x0c5e1ddecd49de44ed5e5798d3f6fb7c71fe3d37f5bee8664cf88a445b5ba0af" +out_y = "0x230294a041e26fe80b827c2ef5cb8784642bbaa83842da2714d62b1f3c4f9752" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr new file mode 100644 index 00000000000..37fc3f61188 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pedersen_check/src/main.nr @@ -0,0 +1,17 @@ +use dep::std; + +fn main(x: Field, y: Field, salt: Field, out_x: Field, out_y: Field ) { + let res = std::hash::pedersen([x, y]); + assert(res[0] == out_x); + assert(res[1] == out_y); + + let raw_data = [x,y]; + let mut state = 0; + for i in 0..2 { + state = state * 8 + raw_data[i]; + } + state += salt; + let hash = std::hash::pedersen([state]); + assert(std::hash::pedersen([43])[0] == hash[0]); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml new file mode 100644 index 00000000000..465ef562de4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "1" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr new file mode 100644 index 00000000000..c7986cb7af3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/pred_eq/src/main.nr @@ -0,0 +1,6 @@ +use dep::std; + +fn main(x: Field, y: Field) { + let p = x == y; + assert(p == true); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/Prover.toml @@ -0,0 +1 @@ + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr new file mode 100644 index 00000000000..4c1f771ae6c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/regression_method_cannot_be_found/src/main.nr @@ -0,0 +1,23 @@ +use dep::std; +struct Item { + id: Field, +} + +impl Item { + fn log(self) { + let id = self.id; + std::println(id); + } +} + +fn create(something: V) -> V { + something +} + +fn main() { + let a = Item { id: 1 }; + let b = create(a); + let _id = b.id; + // Regression for: cannot find this method + b.log(); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml new file mode 100644 index 00000000000..69b91cb5f31 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/Prover.toml @@ -0,0 +1,7 @@ +a = "1" +a_pub_x = "0x0000000000000000000000000000000000000000000000000000000000000001" +a_pub_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" + +b = "2" +b_pub_x = "0x06ce1b0827aafa85ddeb49cdaa36306d19a74caa311e13d46d8bc688cdbffffe" +b_pub_y = "0x1c122f81a3a14964909ede0ba2a6855fc93faf6fa1a788bf467be7e7a43f80ac" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr new file mode 100644 index 00000000000..d9d267f1dcd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/scalar_mul/src/main.nr @@ -0,0 +1,22 @@ +use dep::std; + +fn main( + a: Field, + a_pub_x: pub Field, + a_pub_y: pub Field, + b: Field, + b_pub_x: pub Field, + b_pub_y: pub Field +) { + let mut priv_key = a; + let mut pub_x: Field = a_pub_x; + let mut pub_y: Field = a_pub_y; + if a != 1 { // Change `a` in Prover.toml to test input `b` + priv_key = b; + pub_x = b_pub_x; + pub_y = b_pub_y; + } + let res = std::scalar_mul::fixed_base(priv_key); + assert(res[0] == pub_x); + assert(res[1] == pub_y); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml new file mode 100644 index 00000000000..c5c3ab5101a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/Prover.toml @@ -0,0 +1,9 @@ +message = [0,1,2,3,4,5,6,7,8,9] +pub_key_x = "0x17cbd3ed3151ccfd170efe1d54280a6a4822640bf5c369908ad74ea21518a9c5" +pub_key_y = "0x0e0456e3795c1a31f20035b741cd6158929eeccd320d299cfcac962865a6bc74" +signature = [ + 5, 202, 31, 146, 81, 242, 246, 69, 43, 107, 249, 153, 198, 44, 14, 111, 191, 121, 137, 166, + 160, 103, 18, 181, 243, 233, 226, 95, 67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, + 205, 69, 33, 236, 163, 83, 194, 84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, + 250, 39, 239, +] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr new file mode 100644 index 00000000000..c0933b23029 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/schnorr/src/main.nr @@ -0,0 +1,10 @@ +use dep::std; + +// Note: If main has any unsized types, then the verifier will never be able +// to figure out the circuit instance +fn main(message: [u8; 10], pub_key_x: Field, pub_key_y: Field, signature: [u8; 64]) { + // Is there ever a situation where someone would want + // to ensure that a signature was invalid? + let valid_signature = std::schnorr::verify_signature(pub_key_x,pub_key_y,signature, message); + assert(valid_signature); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml new file mode 100644 index 00000000000..c4df1b749bb --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/Prover.toml @@ -0,0 +1,36 @@ + +x = 0xbd +result = [ + 0x68, + 0x32, + 0x57, + 0x20, + 0xaa, + 0xbd, + 0x7c, + 0x82, + 0xf3, + 0x0f, + 0x55, + 0x4b, + 0x31, + 0x3d, + 0x05, + 0x70, + 0xc9, + 0x5a, + 0xcc, + 0xbb, + 0x7d, + 0xc4, + 0xb5, + 0xaa, + 0xe1, + 0x12, + 0x04, + 0xc0, + 0x8f, + 0xfe, + 0x73, + 0x2b, +] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr new file mode 100644 index 00000000000..fd5340e2384 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/sha256/src/main.nr @@ -0,0 +1,19 @@ +// Sha256 example +// +// Calls Sha256 from the standard library. +// +// The Compiler sees this special function and creates an ACIR gate +// +// The ACIR SHA256 gate is passed to PLONK who should +// know how to create the necessary constraints. +// +// Not yet here: For R1CS, it is more about manipulating arithmetic gates to get performance +// This can be done in ACIR! +use dep::std; + +fn main(x: Field, result: [u8; 32]) { + // We use the `as` keyword here to denote the fact that we want to take just the first byte from the x Field + // The padding is taken care of by the program + let digest = std::hash::sha256([x as u8]); + assert(digest == result); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml new file mode 100644 index 00000000000..3d2b4b14efe --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/Prover.toml @@ -0,0 +1 @@ +x = 1 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr new file mode 100644 index 00000000000..016c4fedf40 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_add_and_ret_arr/src/main.nr @@ -0,0 +1,8 @@ +// A simple program to test that SSA array values elements +// aren't disconnected from their instruction results, and +// that dead instruction elemination looks inside of arrays +// when deciding whether of not an instruction should be +// retained. +fn main(x: Field) -> pub [Field; 1] { + [x + 1] +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml new file mode 100644 index 00000000000..66f0b9ccc1c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/Prover.toml @@ -0,0 +1 @@ +xs = [0, 1] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr new file mode 100644 index 00000000000..8dc9b138496 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_array_param/src/main.nr @@ -0,0 +1,7 @@ +// This program tests: +// - the allocation of virtual arrays for array params to main +// - load instructions for such arrays + +fn main(xs : [Field; 2]) -> pub Field { + xs[1] +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml new file mode 100644 index 00000000000..aa3715f9b3d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/Prover.toml @@ -0,0 +1,4 @@ +a = 1 +b = 0 +c = "10" +d = "11" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr new file mode 100644 index 00000000000..9ab738ae04d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_bitwise/src/main.nr @@ -0,0 +1,9 @@ +fn main(a: bool, b: bool, c: u8, d: u8) -> pub u8 { + let i = a & b; + let j = a ^ b; + let k = a | b; + let x = c & d; + let y = c ^ d; + let z = c | d; + (i as u8) + (j as u8) + (k as u8) + x + y + z +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml new file mode 100644 index 00000000000..ed94d313315 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/Prover.toml @@ -0,0 +1,2 @@ +x = "3" +y = "4" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr new file mode 100644 index 00000000000..671ea6cf35e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_comparison/src/main.nr @@ -0,0 +1,6 @@ +// Tests a very simple program. +// +// The features being tested is comparison +fn main(x : Field, y : Field) { + assert(x as u32 < y as u32); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml new file mode 100644 index 00000000000..7d4290a117a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/Prover.toml @@ -0,0 +1 @@ +x = 1 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr new file mode 100644 index 00000000000..502aceac546 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_mut/src/main.nr @@ -0,0 +1,7 @@ +// A simple program to test mutable variables + +fn main(x : Field) -> pub Field { + let mut y = 2; + y += x; + y +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml new file mode 100644 index 00000000000..b3accc9dd32 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/Prover.toml @@ -0,0 +1 @@ +x = false \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr new file mode 100644 index 00000000000..0069932cf24 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_not/src/main.nr @@ -0,0 +1,4 @@ +// A simple program for testing the NOT op +fn main(x : bool) -> pub bool { + !x +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml new file mode 100644 index 00000000000..2c1854573a4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/Prover.toml @@ -0,0 +1,2 @@ +x = 1 +y = 2 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr new file mode 100644 index 00000000000..5f49aa548bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_print/src/main.nr @@ -0,0 +1,8 @@ +// Simple program for testing the logging +// of single witnesses and witness arrays. +use dep::std; + +fn main(x : Field, y : pub Field) { + std::println(x); + std::println([x, y]); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml new file mode 100644 index 00000000000..07890234a19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/Prover.toml @@ -0,0 +1 @@ +x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr new file mode 100644 index 00000000000..59b03556d94 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_addition/src/main.nr @@ -0,0 +1,5 @@ +// The feature being tested is handling of +// a binary operation. +fn main(x : Field) -> pub Field { + x + 1 +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml new file mode 100644 index 00000000000..c2b2ccfd9f1 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/Prover.toml @@ -0,0 +1,2 @@ +_x = "3" +_y = "4" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr new file mode 100644 index 00000000000..b87f216b461 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_program_no_body/src/main.nr @@ -0,0 +1,9 @@ +// Tests a very simple program. +// +// The features being tested are: +// - Abi generation of private and public +// main parameters. +// +// This program will never fail since there are +// no assertions being applied. +fn main(_x : Field, _y : pub Field) {} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml new file mode 100644 index 00000000000..670888e37cd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml new file mode 100644 index 00000000000..1ddfb7dc8e4 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/Prover.toml @@ -0,0 +1 @@ +x = 2 \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr new file mode 100644 index 00000000000..4d07d8bd368 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_radix/src/main.nr @@ -0,0 +1,10 @@ +// Simple program to test to_radix + +use dep::std; + +fn main(x : Field) { + let bits = x.to_le_bits(3); + assert(bits[0] == 0); + assert(bits[1] == 1); + assert(bits[2] == 0); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml new file mode 100644 index 00000000000..07890234a19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/Prover.toml @@ -0,0 +1 @@ +x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr new file mode 100644 index 00000000000..9a4b9033493 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_range/src/main.nr @@ -0,0 +1,6 @@ +// Tests a very simple program. +// +// The features being tested is casting to an integer +fn main(x : Field) { + let _z = x as u32; +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml new file mode 100644 index 00000000000..5a9b2f21b9b --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/Prover.toml @@ -0,0 +1,11 @@ +# Random test key +priv_key = "0x000000000000000000000000000000000000000000000000000000616c696365" +note_root = "0x21386402d57460963f45f32577dc3902c38a6f6fab9ec7b1b708a92e48745de7" +index = "0" +note_hash_path = [ + "0x1cdcf02431ba623767fe389337d011df1048dcc24b98ed81cec97627bab454a0", + "0x0b5e9666e7323ce925c28201a97ddf4144ac9d148448ed6f49f9008719c1b85b", + "0x22ec636f8ad30ef78c42b7fe2be4a4cacf5a445cfb5948224539f59a11d70775", +] +to_pubkey_x = "0x0000000000000000000000000000000000000000000000000000000000000001" +to_pubkey_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr new file mode 100644 index 00000000000..18fccd862b5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shield/src/main.nr @@ -0,0 +1,35 @@ +use dep::std; + +fn main( + // Public key of note + // all notes have the same denomination + priv_key: Field, + + // Merkle membership proof + note_root: pub Field, + index: Field, + note_hash_path: [Field; 3], + + // Receiver public key + to_pubkey_x: Field, + to_pubkey_y: Field, +) -> pub [Field; 2] { + // Compute public key from private key to show ownership + let pubkey = std::scalar_mul::fixed_base(priv_key); + let pubkey_x = pubkey[0]; + let pubkey_y = pubkey[1]; + + // Compute input note commitment + let note_commitment = std::hash::pedersen([pubkey_x, pubkey_y]); + + // Compute input note nullifier + let nullifier = std::hash::pedersen([note_commitment[0], index, priv_key]); + + // Compute output note nullifier + let receiver_note_commitment = std::hash::pedersen([to_pubkey_x, to_pubkey_y]); + + // Check that the input note nullifier is in the root + assert(note_root == std::merkle::compute_merkle_root(note_commitment[0], index, note_hash_path)); + + [nullifier[0], receiver_note_commitment[0]] +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml new file mode 100644 index 00000000000..07890234a19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/Prover.toml @@ -0,0 +1 @@ +x = "3" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr new file mode 100644 index 00000000000..1bcbbde2eb5 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/simple_shift_left_right/src/main.nr @@ -0,0 +1,8 @@ +// Tests a very simple program. +// +// The features being tested are left and right shifts. +fn main(x : u32) { + let z = x >> 4; + let t = x << 4; + assert(z == t >> 8); +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml new file mode 100644 index 00000000000..0d1bd92b5de --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/Prover.toml @@ -0,0 +1,4 @@ +message = "hello world" +y = 5 +hex_as_string = "0x41" +hex_as_field = "0x41" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr new file mode 100644 index 00000000000..bee2370201c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/strings/src/main.nr @@ -0,0 +1,56 @@ +use dep::std; + +fn main(message : pub str<11>, y : Field, hex_as_string : str<4>, hex_as_field : Field) { + let mut bad_message = "hello world"; + + assert(message == "hello world"); + bad_message = "helld world"; + let x = 10; + let z = x * 5; + std::println(10); + + std::println(z); // x * 5 in println not yet supported + std::println(x); + + let array = [1, 2, 3, 5, 8]; + assert(y == 5); // Change to y != 5 to see how the later print statements are not called + std::println(array); + + std::println(bad_message); + assert(message != bad_message); + + let hash = std::hash::pedersen([x]); + std::println(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); +} + +#[test] +fn test_prints_strings() { + let message = "hello world!"; + + std::println(message); + std::println("goodbye world"); +} + +#[test] +fn test_prints_array() { + let array = [1, 2, 3, 5, 8]; + + // TODO: Printing structs currently not supported + // let s = Test { a: 1, b: 2, c: [3, 4] }; + // std::println(s); + + std::println(array); + + let hash = std::hash::pedersen(array); + std::println(hash); +} + +struct Test { + a: Field, + b: Field, + c: [Field; 2], +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml new file mode 100644 index 00000000000..7d59cc81807 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/Prover.toml @@ -0,0 +1,2 @@ +x = "0" +y = "1" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr new file mode 100644 index 00000000000..6d61393920d --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct/src/main.nr @@ -0,0 +1,77 @@ +use dep::std; + +struct Foo { + bar: Field, + array: [Field; 2], +} + +struct Pair { + first: Foo, + second: Field, +} + +impl Foo { + fn default(x: Field,y: Field) -> Self { + Self { bar: 0, array: [x,y] } + } +} + +impl Pair { + fn foo(p: Self) -> Foo { + p.first + } + + fn bar(self) -> Field { + self.foo().bar + } +} + +struct Nested { + a: Field, + b: Field +} +struct MyStruct { + my_bool: bool, + my_int: u32, + my_nest: Nested, +} +fn test_struct_in_tuple(a_bool : bool,x:Field, y:Field) -> (MyStruct, bool) { + let my_struct = MyStruct { + my_bool: a_bool, + my_int: 5, + my_nest: Nested{a:x,b:y}, + }; + (my_struct, a_bool) +} + +struct Animal { + legs: Field, + eyes: u8, +} + +fn get_dog() -> Animal { + let dog = Animal { legs: 4, eyes: 2 }; + dog +} + +fn main(x: Field, y: Field) { + let first = Foo::default(x,y); + let p = Pair { first, second: 1 }; + + assert(p.bar() == x); + assert(p.second == y); + assert(p.first.array[0] != p.first.array[1]); + + // Nested structs + let (struct_from_tuple, a_bool) = test_struct_in_tuple(true,x,y); + assert(struct_from_tuple.my_bool == true); + assert(a_bool == true); + assert(struct_from_tuple.my_int == 5); + assert(struct_from_tuple.my_nest.a == 0); + + // Regression test for issue #670 + let Animal { legs, eyes } = get_dog(); + let six = legs + eyes as Field; + + assert(six == 6); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml new file mode 100644 index 00000000000..70640bba4cc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/Prover.toml @@ -0,0 +1,3 @@ +[y] +foo = "5" +bar = "7" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr new file mode 100644 index 00000000000..0d6e411addf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_fields_ordering/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +// Note that fields are not in alphabetical order. +// We want to check that this ordering is maintained +struct myStruct { + foo: u32, + bar: Field, +} + +fn main(y : pub myStruct) { + assert(y.foo == 5); + assert(y.bar == 7); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml new file mode 100644 index 00000000000..339da5b1a00 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/Prover.toml @@ -0,0 +1,19 @@ +x = "5" + +[y] +foo = "5" +bar = "10" +message = "hello" + +[z] +val = "1" +array = [0, 1] +message = "helld" + +[a] +baz = 0 + +[a.bar_struct] +val = "1" +array = [0, 1] +message = "hello" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr new file mode 100644 index 00000000000..281769cfb07 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo.nr @@ -0,0 +1,6 @@ +mod bar; + +struct fooStruct { + bar_struct: bar::barStruct, + baz: Field, +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr new file mode 100644 index 00000000000..d1963f4a0a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/foo/bar.nr @@ -0,0 +1,7 @@ +global N = 2; + +struct barStruct { + val: Field, + array: [Field; 2], + message: str<5>, +} \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr new file mode 100644 index 00000000000..fe77ed6eee6 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/struct_inputs/src/main.nr @@ -0,0 +1,36 @@ +use dep::std; + +mod foo; + +struct myStruct { + foo: u32, + bar: Field, + message: str<5>, +} + +fn main(x : Field, y : pub myStruct, z: pub foo::bar::barStruct, a: pub foo::fooStruct) -> pub Field { + let struct_from_bar = foo::bar::barStruct { val: 1, array: [0, 1], message: "hello" }; + + check_inner_struct(a, z); + + for i in 0 .. struct_from_bar.array.len() { + assert(struct_from_bar.array[i] == z.array[i]); + } + assert(z.val == struct_from_bar.val); + + assert((struct_from_bar.val * x) == x); + + assert(x != y.bar); + + assert(y.message == "hello"); + assert(a.bar_struct.message == struct_from_bar.message); + + a.bar_struct.array[1] +} + +fn check_inner_struct(a: foo::fooStruct, z: foo::bar::barStruct) { + assert(a.bar_struct.val == z.val); + for i in 0.. a.bar_struct.array.len() { + assert(a.bar_struct.array[i] == z.array[i]); + } +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml new file mode 100644 index 00000000000..d9434868157 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Nargo.toml @@ -0,0 +1,7 @@ + + [package] + authors = [""] + compiler_version = "0.1" + + [dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml new file mode 100644 index 00000000000..b6626a67e19 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/Prover.toml @@ -0,0 +1,2 @@ +x = 1 +y = 0 diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr new file mode 100644 index 00000000000..9bfe382663f --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/submodules/src/main.nr @@ -0,0 +1,17 @@ +use mysubmodule::my_helper; + +fn main(x: u1, y: u1) { + my_helper(); + mysubmodule::my_bool_or(x, y); +} + +mod mysubmodule { + use dep::std; + + fn my_bool_or(x: u1, y: u1) { + assert(x | y == 1); + } + + fn my_helper() {} +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml new file mode 100644 index 00000000000..07fe857ac7c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/Prover.toml @@ -0,0 +1 @@ +x = "2040124" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr new file mode 100644 index 00000000000..f5831e8c524 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_be_bytes/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +fn main(x : Field) -> pub [u8; 31] { + // The result of this byte array will be big-endian + let byte_array = x.to_be_bytes(31); + let mut bytes = [0; 31]; + for i in 0..31 { + bytes[i] = byte_array[i]; + } + assert(bytes[30] == 60); + assert(bytes[29] == 33); + assert(bytes[28] == 31); + bytes +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml new file mode 100644 index 00000000000..bc4693e434a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/Prover.toml @@ -0,0 +1,2 @@ +x = "2040124" +a = "0x2000000000000000000000000000000000000000000000000000000000000000" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr new file mode 100644 index 00000000000..f76df026db7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_bytes_integration/src/main.nr @@ -0,0 +1,25 @@ +use dep::std; + +fn main(x : Field, a: Field) { + let y: Field = 2040124; + let be_byte_array = y.to_be_bytes(31); + let le_byte_array = x.to_le_bytes(31); + + assert(le_byte_array[0] == 60); + assert(le_byte_array[0] == be_byte_array[30]); + assert(le_byte_array[1] == be_byte_array[29]); + assert(le_byte_array[2] == be_byte_array[28]); + + let z = 0 - 1; + let p_bytes = std::field::modulus_le_bytes(); + let z_bytes = z.to_le_bytes(32); + assert(p_bytes[10] == z_bytes[10]); + assert(p_bytes[0] == z_bytes[0] as u8 + 1 as u8); + + let p_bits = std::field::modulus_le_bits(); + let z_bits = z.to_le_bits(std::field::modulus_num_bits() as u32); + assert(z_bits[0] == 0); + assert(p_bits[100] == z_bits[100]); + + a.to_le_bits(std::field::modulus_num_bits() as u32); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml new file mode 100644 index 00000000000..07fe857ac7c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/Prover.toml @@ -0,0 +1 @@ +x = "2040124" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr new file mode 100644 index 00000000000..a5476ec13bf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/to_le_bytes/src/main.nr @@ -0,0 +1,14 @@ +use dep::std; + +fn main(x : Field) -> pub [u8; 4] { + // The result of this byte array will be little-endian + let byte_array = x.to_le_bytes(31); + let mut first_four_bytes = [0; 4]; + for i in 0..4 { + first_four_bytes[i] = byte_array[i]; + } + // Issue #617 fix + // We were incorrectly mapping our output array from bit decomposition functions during acir generation + first_four_bytes[3] = byte_array[31]; + first_four_bytes +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml new file mode 100644 index 00000000000..5082c6e12ec --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml new file mode 100644 index 00000000000..a0397e89477 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/tuples/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml new file mode 100644 index 00000000000..6028aef164e --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.6.0" + +[dependencies] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml new file mode 100644 index 00000000000..11497a473bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/Prover.toml @@ -0,0 +1 @@ +x = "0" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr new file mode 100644 index 00000000000..6a3e59c5fed --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/unconstrained_empty/src/main.nr @@ -0,0 +1,2 @@ +unconstrained fn main() { +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml new file mode 100644 index 00000000000..f28f2f8cc48 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/Prover.toml @@ -0,0 +1,2 @@ +x = "5" +y = "10" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr new file mode 100644 index 00000000000..e893c938fc3 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/xor/src/main.nr @@ -0,0 +1,5 @@ +fn main(x : u32, y : pub u32) { + let m = x ^ y; + + assert(m != 10); +} \ No newline at end of file