diff --git a/fuzz/fuzz_targets/c_rust_merkle.rs b/fuzz/fuzz_targets/c_rust_merkle.rs index 0871d429..79b0d669 100644 --- a/fuzz/fuzz_targets/c_rust_merkle.rs +++ b/fuzz/fuzz_targets/c_rust_merkle.rs @@ -6,7 +6,7 @@ fn do_test(data: &[u8]) { use simplicity::ffi::tests::{ffi::SimplicityErr, run_program, TestUpTo}; use simplicity::hashes::sha256::Midstate; - use simplicity::jet::Elements; + use simplicity::jet::ElementsTxEnv; use simplicity::types; use simplicity::{BitIter, RedeemNode}; @@ -18,7 +18,7 @@ fn do_test(data: &[u8]) { // If the program doesn't decode, just use the first byte as a "length". let prog_len: Option = types::Context::with_context(|ctx| { let mut iter = BitIter::from(data); - match simplicity::decode::decode_expression::<_, Elements>(&ctx, &mut iter) { + match simplicity::decode::decode_expression::<_, ElementsTxEnv>(&ctx, &mut iter) { Ok(_) => Some((iter.n_total_read() + 7) / 8), Err(_) => match data.first() { Some(&n) => Some(core::cmp::min(data.len(), n.into())), @@ -36,7 +36,7 @@ fn do_test(data: &[u8]) { let prog_iter = BitIter::from(program); let wit_iter = BitIter::from(witness); - let rust_result = RedeemNode::::decode(prog_iter, wit_iter); + let rust_result = RedeemNode::decode::<_, _, ElementsTxEnv>(prog_iter, wit_iter); match (c_result, rust_result) { (Ok(_), Err(e)) => panic!("C accepted code that Rust rejected: {}", e), diff --git a/fuzz/fuzz_targets/decode_program.rs b/fuzz/fuzz_targets/decode_program.rs index e4583d83..da75679b 100644 --- a/fuzz/fuzz_targets/decode_program.rs +++ b/fuzz/fuzz_targets/decode_program.rs @@ -4,17 +4,19 @@ #[cfg(any(fuzzing, test))] fn do_test(data: &[u8]) { - use simplicity::jet::Core; + use simplicity::jet::CoreEnv; use simplicity::{BitIter, BitWriter, RedeemNode}; let prog_iter = BitIter::new(data.iter().cloned()); let wit_iter = BitIter::new(core::iter::repeat(0)); - if let Ok(program) = RedeemNode::::decode(prog_iter, wit_iter) { + if let Ok(program) = RedeemNode::decode::<_, _, CoreEnv>(prog_iter, wit_iter) { let mut prog_reser = Vec::::new(); - let mut wit_reser = std::io::sink(); + let mut wit_reser = Vec::::new(); - let mut prog_w = BitWriter::from(&mut prog_reser); - let mut wit_w = BitWriter::from(&mut wit_reser); + let prog_sink: &mut dyn std::io::Write = &mut prog_reser; + let wit_sink: &mut dyn std::io::Write = &mut wit_reser; + let mut prog_w = BitWriter::from(prog_sink); + let mut wit_w = BitWriter::from(wit_sink); program .encode(&mut prog_w, &mut wit_w) .expect("encoding to vector"); diff --git a/fuzz/fuzz_targets/parse_human.rs b/fuzz/fuzz_targets/parse_human.rs index 877e5a8b..3018aea1 100644 --- a/fuzz/fuzz_targets/parse_human.rs +++ b/fuzz/fuzz_targets/parse_human.rs @@ -5,16 +5,16 @@ #[cfg(any(fuzzing, test))] fn do_test(data: &[u8]) { use simplicity::human_encoding::Forest; - use simplicity::jet::Elements; + use simplicity::jet::ElementsTxEnv; let s = match std::str::from_utf8(data) { Ok(s) => s, Err(_) => return, }; - if let Ok(program) = Forest::::parse(s) { + if let Ok(program) = Forest::parse::(s) { let reserialize = program.string_serialize(); - let round_trip = Forest::::parse(&reserialize).unwrap(); + let round_trip = Forest::parse::(&reserialize).unwrap(); assert_eq!(program, round_trip); } } diff --git a/fuzz/fuzz_targets/regression_286.rs b/fuzz/fuzz_targets/regression_286.rs index 2dbef6ed..97a29406 100644 --- a/fuzz/fuzz_targets/regression_286.rs +++ b/fuzz/fuzz_targets/regression_286.rs @@ -4,7 +4,7 @@ #[cfg(any(fuzzing, test))] fn do_test(data: &[u8]) { - use simplicity::{jet::Core, types, BitIter, CommitNode}; + use simplicity::{jet::CoreEnv, types, BitIter, CommitNode}; types::Context::with_context(|ctx| { let mut extractor = simplicity_fuzz::Extractor::new(data); @@ -32,7 +32,7 @@ fn do_test(data: &[u8]) { let prog = finalized.encode_to_vec(); //println!("{}", simplicity::bitcoin::hex::DisplayHex::as_hex(&prog)); let prog = BitIter::from(prog); - let decode = CommitNode::::decode(prog).unwrap(); + let decode = CommitNode::decode::<_, CoreEnv>(prog).unwrap(); assert_eq!( finalized, decode, "Constructed committed LHS; encoded and decoded to get RHS", diff --git a/jets-bench/src/check_all_jets.rs b/jets-bench/src/check_all_jets.rs index ca41173d..439fe978 100644 --- a/jets-bench/src/check_all_jets.rs +++ b/jets-bench/src/check_all_jets.rs @@ -1,10 +1,11 @@ use std::collections::BTreeMap; use std::sync::Mutex; -use simplicity::jet::Jet as _; +use simplicity::jet::JetEnvironment; use simplicity::BitIter; -type Jet = simplicity::jet::Elements; +type JetEnv = simplicity::jet::ElementsTxEnv; +type Jet = ::Jet; static CHECKED_JETS: Mutex>> = Mutex::new(None); pub const N_TOTAL: usize = 469; @@ -22,7 +23,7 @@ pub fn initialize() { for u2 in 0..=255 { let arr = [u0, u1, u2]; let mut iter = BitIter::new(arr.iter().copied()); - if let Ok(jet) = Jet::decode(&mut iter) { + if let Ok(jet) = JetEnv::decode_jet(&mut iter) { map.insert(jet, 0); } } diff --git a/simpcli/src/main.rs b/simpcli/src/main.rs index cb7660a7..4dbad526 100644 --- a/simpcli/src/main.rs +++ b/simpcli/src/main.rs @@ -13,6 +13,7 @@ // use simplicity::human_encoding::Forest; +use simplicity::jet::JetEnvironment; use simplicity::node::CommitNode; use simplicity::{self, BitIter}; @@ -22,7 +23,8 @@ use std::{env, fs}; /// What set of jets to use in the program. // FIXME this should probably be configurable. -type DefaultJet = simplicity::jet::Elements; +type DefaultJetEnv = simplicity::jet::ElementsTxEnv; +type DefaultJet = ::Jet; fn usage(process_name: &str) { eprintln!("Usage:"); @@ -77,7 +79,7 @@ impl Command { fn parse_file(name: &str) -> Result, String> { let s = fs::read_to_string(name).map_err(|e| format!("failed to read file {}: {}", name, e))?; - match Forest::parse(&s) { + match Forest::parse::(&s) { Ok(prog) => Ok(prog), Err(mut errs) => { errs.add_context(std::sync::Arc::from(s)); @@ -154,8 +156,8 @@ fn main() -> Result<(), String> { let v = simplicity::base64::Engine::decode(&STANDARD, first_arg.as_bytes()) .map_err(|e| format!("failed to parse base64: {}", e))?; let iter = BitIter::from(v.into_iter()); - let commit = - CommitNode::decode(iter).map_err(|e| format!("failed to decode program: {}", e))?; + let commit = CommitNode::decode::<_, DefaultJetEnv>(iter) + .map_err(|e| format!("failed to decode program: {}", e))?; let prog = Forest::::from_program(commit); println!("{}", prog.string_serialize()); } @@ -163,7 +165,7 @@ fn main() -> Result<(), String> { let v = simplicity::base64::Engine::decode(&STANDARD, first_arg.as_bytes()) .map_err(|e| format!("failed to parse base64: {}", e))?; let iter = BitIter::from(v.into_iter()); - let commit = CommitNode::::decode(iter) + let commit = CommitNode::decode::<_, DefaultJetEnv>(iter) .map_err(|e| format!("failed to decode program: {}", e))?; println!("{}", commit.display_as_dot()); } diff --git a/src/bit_encoding/decode.rs b/src/bit_encoding/decode.rs index fc89e9a4..12647128 100644 --- a/src/bit_encoding/decode.rs +++ b/src/bit_encoding/decode.rs @@ -6,7 +6,7 @@ //! Refer to [`crate::encode`] for information on the encoding. use crate::dag::{Dag, DagLike, InternalSharing}; -use crate::jet::Jet; +use crate::jet::{Jet, JetEnvironment}; use crate::merkle::cmr::Cmr; use crate::node::{ ConstructNode, CoreConstructible, DisconnectConstructible, JetConstructible, @@ -153,10 +153,10 @@ impl DagLike for (usize, &'_ [DecodeNode]) { } } -pub fn decode_expression<'brand, I: Iterator, J: Jet>( +pub fn decode_expression<'brand, I: Iterator, JE: JetEnvironment>( ctx: &types::Context<'brand>, bits: &mut BitIter, -) -> Result, Error> { +) -> Result, Error> { enum Converted<'brand, J: Jet> { Node(ArcNode<'brand, J>), Hidden(Cmr), @@ -176,14 +176,14 @@ pub fn decode_expression<'brand, I: Iterator, J: Jet>( let mut nodes = Vec::with_capacity(cmp::min(len, 10_000)); for _ in 0..len { - let new_node = decode_node(bits, nodes.len())?; + let new_node = decode_node::<_, JE>(bits, nodes.len())?; nodes.push(new_node); } // It is a sharing violation for any hidden node to be repeated. Track them in this set. let mut hidden_set = HashSet::::new(); // Convert the DecodeNode structure into a CommitNode structure - let mut converted = Vec::>::with_capacity(len); + let mut converted = Vec::>::with_capacity(len); for data in (nodes.len() - 1, &nodes[..]).post_order_iter::() { // Check canonical order as we go if data.index != data.node.0 { @@ -237,15 +237,15 @@ pub fn decode_expression<'brand, I: Iterator, J: Jet>( /// Decode a single Simplicity node from bits and /// insert it into a hash map at its index for future reference by ancestor nodes. -fn decode_node, J: Jet>( +fn decode_node, JE: JetEnvironment>( bits: &mut BitIter, index: usize, -) -> Result, Error> { +) -> Result, Error> { // First bit: 1 for jets/words, 0 for normal combinators if bits.read_bit()? { // Second bit: 1 for jets, 0 for words if bits.read_bit()? { - J::decode(bits).map(|jet| DecodeNode::Jet(jet)) + JE::decode_jet(bits).map(DecodeNode::Jet) } else { let n = bits.read_natural(Some(32))?; let word = Word::from_bits(bits, n - 1)?; @@ -306,7 +306,7 @@ fn decode_node, J: Jet>( mod tests { use super::*; use crate::encode; - use crate::jet::Core; + use crate::jet::CoreEnv; use crate::node::{CommitNode, RedeemNode}; use crate::BitWriter; @@ -317,14 +317,14 @@ mod tests { // Should be able to decode this as an expression... let mut iter = BitIter::from(&justjet[..]); types::Context::with_context(|ctx| { - decode_expression::<_, Core>(&ctx, &mut iter).unwrap(); + decode_expression::<_, CoreEnv>(&ctx, &mut iter).unwrap(); }); // ...but NOT as a CommitNode let iter = BitIter::from(&justjet[..]); - CommitNode::::decode(iter).unwrap_err(); + CommitNode::decode::<_, CoreEnv>(iter).unwrap_err(); // ...or as a RedeemNode let iter = BitIter::from(&justjet[..]); - RedeemNode::::decode(iter, BitIter::from(&[][..])).unwrap_err(); + RedeemNode::decode::<_, _, CoreEnv>(iter, BitIter::from(&[][..])).unwrap_err(); } #[test] diff --git a/src/bit_encoding/encode.rs b/src/bit_encoding/encode.rs index 1c024bcd..546b0ba5 100644 --- a/src/bit_encoding/encode.rs +++ b/src/bit_encoding/encode.rs @@ -154,9 +154,9 @@ impl SharingTracker> for EncodeSharing { /// Encode a Simplicity program to bits, without witness data. /// /// Returns the number of written bits. -pub fn encode_program( +pub fn encode_program( program: &node::Node, - w: &mut BitWriter, + w: &mut BitWriter<&mut dyn io::Write>, ) -> io::Result { let iter = EncodeNode::Node(program).post_order_iter::>(); @@ -172,9 +172,9 @@ pub fn encode_program( } /// Encode a node to bits. -fn encode_node( +fn encode_node( data: PostOrderIterItem>, - w: &mut BitWriter, + w: &mut BitWriter<&mut dyn io::Write>, ) -> io::Result<()> { // Handle Hidden nodes specially let node = match data.node { diff --git a/src/bit_machine/mod.rs b/src/bit_machine/mod.rs index e5c466de..a8f32798 100644 --- a/src/bit_machine/mod.rs +++ b/src/bit_machine/mod.rs @@ -599,9 +599,11 @@ impl From for ExecutionError { mod tests { use super::*; + #[cfg(feature = "elements")] + use crate::jet::elements::ElementsEnv; use crate::jet::CoreEnv; #[cfg(feature = "elements")] - use crate::jet::{elements::ElementsEnv, Elements}; + use crate::jet::ElementsTxEnv; #[cfg(feature = "elements")] use crate::{node::RedeemNode, BitIter}; #[cfg(feature = "elements")] @@ -619,7 +621,7 @@ mod tests { let prog = BitIter::from(prog_bytes); let witness = BitIter::from(witness_bytes); - let prog = match RedeemNode::::decode(prog, witness) { + let prog = match RedeemNode::decode::<_, _, ElementsTxEnv>(prog, witness) { Ok(prog) => prog, Err(e) => panic!("program {} failed: {}", prog_hex, e), }; diff --git a/src/human_encoding/mod.rs b/src/human_encoding/mod.rs index f8c0fed8..ac0557b8 100644 --- a/src/human_encoding/mod.rs +++ b/src/human_encoding/mod.rs @@ -11,7 +11,7 @@ mod named_node; mod parse; use crate::dag::{DagLike, MaxSharing}; -use crate::jet::Jet; +use crate::jet::{Jet, JetEnvironment}; use crate::node::{self, CommitNode, NoWitness}; use crate::types; use crate::{Cmr, ConstructNode, Ihr, Value}; @@ -74,8 +74,8 @@ pub struct Forest { impl Forest { /// Parses a forest from a string - pub fn parse(s: &str) -> Result { - parse::parse(s).map(|roots| Forest { roots }) + pub fn parse>(s: &str) -> Result { + parse::parse::(s).map(|roots| Forest { roots }) } /// Parses a program from a bytestring @@ -221,7 +221,7 @@ mod tests { env: &JE, ) { types::Context::with_context(|ctx| { - let program = Forest::::parse(s) + let program = Forest::parse::(s) .expect("Failed to parse human encoding") .to_witness_node(&ctx, witness) .expect("Forest is missing expected root") @@ -239,7 +239,7 @@ mod tests { err_msg: &'static str, ) { types::Context::with_context(|ctx| { - let program = match Forest::::parse(s) + let program = match Forest::::parse::(s) .expect("Failed to parse human encoding") .to_witness_node(&ctx, witness) .expect("Forest is missing expected root") diff --git a/src/human_encoding/named_node.rs b/src/human_encoding/named_node.rs index 8ee4896b..e53122a6 100644 --- a/src/human_encoding/named_node.rs +++ b/src/human_encoding/named_node.rs @@ -199,7 +199,7 @@ impl NamedCommitNode { /// Encode a Simplicity expression to bits without any witness data #[deprecated(since = "0.5.0", note = "use Self::encode_without_witness instead")] - pub fn encode(&self, w: &mut BitWriter) -> io::Result { + pub fn encode(&self, w: &mut BitWriter<&mut dyn io::Write>) -> io::Result { let program_bits = encode::encode_program(self, w)?; w.flush_all()?; Ok(program_bits) diff --git a/src/human_encoding/parse/ast.rs b/src/human_encoding/parse/ast.rs index eb5c0c3a..2458a317 100644 --- a/src/human_encoding/parse/ast.rs +++ b/src/human_encoding/parse/ast.rs @@ -8,7 +8,7 @@ use std::sync::Arc; use logos::{Lexer, Logos}; use crate::human_encoding::{Error, ErrorSet, Position, WitnessOrHole}; -use crate::jet::Jet; +use crate::jet::{Jet, JetEnvironment}; use crate::value::Word; use crate::{node, types}; use crate::{BitIter, FailEntropy}; @@ -339,23 +339,25 @@ impl Parser { } /// Takes a program as a string and parses it into an AST -pub fn parse_line_vector(input: &str) -> Result>, ErrorSet> { +pub fn parse_line_vector( + input: &str, +) -> Result>, ErrorSet> { let tokens = lex_all(input)?; let mut parser = Parser::new(tokens); let mut lines = Vec::new(); while !parser.at_end() { - lines.push(parse_line(&mut parser)?); + lines.push(parse_line::(&mut parser)?); } Ok(lines) } /// Parse a line -fn parse_line(p: &mut Parser) -> Result, ErrorSet> { +fn parse_line(p: &mut Parser) -> Result, ErrorSet> { let (name, position) = parse_symbol_value(p)?; if p.eat(&Token::Assign) { // symbol ":=" expr (optionally followed by ":" arrow) - let expr = parse_expr(p)?; + let expr = parse_expr::(p)?; let arrow = if p.eat(&Token::Colon) { parse_arrow(p)? } else { @@ -395,13 +397,15 @@ fn parse_arrow(p: &mut Parser) -> Result<(Option, Option), ErrorSet> } /// Parse an expression -fn parse_expr(p: &mut Parser) -> Result, ErrorSet> { +fn parse_expr( + p: &mut Parser, +) -> Result, ErrorSet> { let position = p.current_position(); match p.peek().cloned() { Some(Token::LParen) => { p.advance(); - let inner = parse_expr(p)?; + let inner = parse_expr::(p)?; p.expect(&Token::RParen)?; Ok(inner) } @@ -431,8 +435,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::AssertL) => { p.advance(); - let left = parse_expr(p)?; - let cmr = parse_cmr(p)?; + let left = parse_expr::(p)?; + let cmr = parse_cmr::(p)?; Ok(Expression { inner: ExprInner::AssertL(Arc::new(left), cmr), position, @@ -440,8 +444,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::AssertR) => { p.advance(); - let cmr = parse_cmr(p)?; - let right = parse_expr(p)?; + let cmr = parse_cmr::(p)?; + let right = parse_expr::(p)?; Ok(Expression { inner: ExprInner::AssertR(cmr, Arc::new(right)), position, @@ -495,7 +499,7 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe Some(Token::Jet(ref name)) => { let jet_name = name.clone(); p.advance(); - let Ok(jet) = J::from_str(&jet_name[4..]) else { + let Ok(jet) = JE::parse(&jet_name[4..]) else { return Err(ErrorSet::single(position, Error::UnknownJet(jet_name))); }; Ok(Expression { @@ -506,7 +510,7 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe // Unary Some(Token::InjL) => { p.advance(); - let child = Arc::new(parse_expr(p)?); + let child = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::InjL(child)), position, @@ -514,7 +518,7 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::InjR) => { p.advance(); - let child = Arc::new(parse_expr(p)?); + let child = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::InjR(child)), position, @@ -522,7 +526,7 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::Take) => { p.advance(); - let child = Arc::new(parse_expr(p)?); + let child = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Take(child)), position, @@ -530,7 +534,7 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::Drop) => { p.advance(); - let child = Arc::new(parse_expr(p)?); + let child = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Drop(child)), position, @@ -539,8 +543,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe // Binary Some(Token::Case) => { p.advance(); - let left = Arc::new(parse_expr(p)?); - let right = Arc::new(parse_expr(p)?); + let left = Arc::new(parse_expr::(p)?); + let right = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Case(left, right)), position, @@ -548,8 +552,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::Comp) => { p.advance(); - let left = Arc::new(parse_expr(p)?); - let right = Arc::new(parse_expr(p)?); + let left = Arc::new(parse_expr::(p)?); + let right = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Comp(left, right)), position, @@ -557,8 +561,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::Pair) => { p.advance(); - let left = Arc::new(parse_expr(p)?); - let right = Arc::new(parse_expr(p)?); + let left = Arc::new(parse_expr::(p)?); + let right = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Pair(left, right)), position, @@ -566,8 +570,8 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } Some(Token::Disconnect) => { p.advance(); - let left = Arc::new(parse_expr(p)?); - let right = Arc::new(parse_expr(p)?); + let left = Arc::new(parse_expr::(p)?); + let right = Arc::new(parse_expr::(p)?); Ok(Expression { inner: ExprInner::Inline(node::Inner::Disconnect(left, right)), position, @@ -586,9 +590,9 @@ fn parse_expr(p: &mut Parser) -> Result, ErrorSe } /// Parse a CMR (either an expression in #{} or a literal) -fn parse_cmr(p: &mut Parser) -> Result, ErrorSet> { +fn parse_cmr(p: &mut Parser) -> Result, ErrorSet> { if p.eat(&Token::HashBrace) { - let expr = parse_expr(p)?; + let expr = parse_expr::(p)?; p.expect(&Token::RBrace)?; return Ok(AstCmr::Expr(Arc::new(expr))); } @@ -754,54 +758,54 @@ fn parse_symbol_value(p: &mut Parser) -> Result<(Arc, Position), ErrorSet> #[cfg(test)] mod tests { - use super::*; + use crate::jet::CoreEnv; - use crate::jet::Core; + use super::*; #[test] fn fixed_vectors() { // Single line - parse_line_vector::("a := b").unwrap(); + parse_line_vector::("a := b").unwrap(); // Bad lex - parse_line_vector::("?P<").unwrap_err(); + parse_line_vector::("?P<").unwrap_err(); // Witness - parse_line_vector::("U := witness").unwrap(); + parse_line_vector::("U := witness").unwrap(); // Name with type - parse_line_vector::("U : T -> 1").unwrap(); - parse_line_vector::("U : 2 -> 1").unwrap(); - parse_line_vector::("U : 2^2 -> 1").unwrap(); - parse_line_vector::("U : 2^512 -> 1").unwrap(); - parse_line_vector::("U : (2^512) -> 1").unwrap(); - parse_line_vector::("U : (2^512 * 2^512) -> 1").unwrap(); - parse_line_vector::("U : 1 -> (2^512 * 2^512)").unwrap(); + parse_line_vector::("U : T -> 1").unwrap(); + parse_line_vector::("U : 2 -> 1").unwrap(); + parse_line_vector::("U : 2^2 -> 1").unwrap(); + parse_line_vector::("U : 2^512 -> 1").unwrap(); + parse_line_vector::("U : (2^512) -> 1").unwrap(); + parse_line_vector::("U : (2^512 * 2^512) -> 1").unwrap(); + parse_line_vector::("U : 1 -> (2^512 * 2^512)").unwrap(); // Witness with type and expression - parse_line_vector::("U := witness : 1 -> 1").unwrap(); - parse_line_vector::("U := witness : _ -> 1").unwrap(); - parse_line_vector::("U := witness : 1 -> _").unwrap(); - parse_line_vector::("U := witness : _ -> _").unwrap(); + parse_line_vector::("U := witness : 1 -> 1").unwrap(); + parse_line_vector::("U := witness : _ -> 1").unwrap(); + parse_line_vector::("U := witness : 1 -> _").unwrap(); + parse_line_vector::("U := witness : _ -> _").unwrap(); // Case with nested unit - parse_line_vector::("ABC := case unit injl DEF").unwrap(); + parse_line_vector::("ABC := case unit injl DEF").unwrap(); // word hex - parse_line_vector::("U := const 0xabcd").unwrap(); + parse_line_vector::("U := const 0xabcd").unwrap(); // word bin - parse_line_vector::("U := const 0b0101001011111000").unwrap(); + parse_line_vector::("U := const 0b0101001011111000").unwrap(); // asserts - parse_line_vector::( + parse_line_vector::( "U := assertl unit #abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234", ) .unwrap(); - parse_line_vector::("U := assertl unit #{comp iden iden}").unwrap(); - parse_line_vector::( + parse_line_vector::("U := assertl unit #{comp iden iden}").unwrap(); + parse_line_vector::( "U := assertr #abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234 unit", ) .unwrap(); - parse_line_vector::("U := assertr #{comp iden iden} unit").unwrap(); + parse_line_vector::("U := assertr #{comp iden iden} unit").unwrap(); } #[test] fn simple_program() { - parse_line_vector::( + parse_line_vector::( " v2 := unit : B -> 1 -- 62274a89 v1 := pair v2 v2 : B -> (1 * 1) -- 822d5a17 diff --git a/src/human_encoding/parse/mod.rs b/src/human_encoding/parse/mod.rs index e57e3518..c0de5a87 100644 --- a/src/human_encoding/parse/mod.rs +++ b/src/human_encoding/parse/mod.rs @@ -5,7 +5,7 @@ mod ast; use crate::dag::{Dag, DagLike, InternalSharing}; -use crate::jet::Jet; +use crate::jet::{Jet, JetEnvironment}; use crate::node; use crate::types::{self, Type}; use std::collections::HashMap; @@ -184,22 +184,22 @@ enum ResolvedInner<'brand, J: Jet> { ), } -pub fn parse( +pub fn parse( program: &str, -) -> Result, Arc>>, ErrorSet> { - types::Context::with_context(|ctx| parse_inner(ctx, program)) +) -> Result, Arc>>, ErrorSet> { + types::Context::with_context(|ctx| parse_inner::(ctx, program)) } -fn parse_inner( +fn parse_inner( inference_context: types::Context<'_>, program: &str, -) -> Result, Arc>>, ErrorSet> { +) -> Result, Arc>>, ErrorSet> { let mut errors = ErrorSet::new(); // ** // Step 1: Read expressions into HashMap, checking for dupes and illegal names. // ** - let mut unresolved_map = HashMap::, UnresolvedExpression>::new(); - for line in ast::parse_line_vector(program)? { + let mut unresolved_map = HashMap::, UnresolvedExpression>::new(); + for line in ast::parse_line_vector::(program)? { if line.name.as_ref() == "_" || line.name.starts_with("prim") { errors.add(line.position, Error::NameIllegal(Arc::clone(&line.name))); continue; @@ -232,7 +232,7 @@ fn parse_inner( // we may have multiple disconnected components. // ** let mut resolved_map = - HashMap::, Arc>>::with_capacity(unresolved_map.len()); + HashMap::, Arc>>::with_capacity(unresolved_map.len()); while let Some(name) = unresolved_map.keys().next() { let name = Arc::clone(name); @@ -263,7 +263,7 @@ fn parse_inner( // On the other hand, inline expressions do not have names or any other identifying // characteristics except the order in which they appear. So for these we need to // use the `inline_stack` to keep track of which ones we've already resolved.. - let mut inline_stack: Vec>> = vec![]; + let mut inline_stack: Vec>> = vec![]; stack.push(StackItem { expr, name: Some(Arc::clone(&name)), @@ -325,7 +325,7 @@ fn parse_inner( continue; } - let mut convert_expr_inner = |expr_inner: &ast::ExprInner| match expr_inner { + let mut convert_expr_inner = |expr_inner: &ast::ExprInner| match expr_inner { ast::ExprInner::Reference(ref ref_name) => { if let Some(referent) = resolved_map.get(ref_name) { referent.in_degree.fetch_add(1, Ordering::SeqCst); @@ -384,7 +384,7 @@ fn parse_inner( // Then, convert the node. At this point if we are missing any children // it is because there was a resolution error, i.e. the expression // references a child that doesn't exist. - let resolved: ResolvedExpression = match stack_item.expr.inner { + let resolved: ResolvedExpression = match stack_item.expr.inner { UnresolvedInner::NoExpr { ref name, ref user_source_types, @@ -433,14 +433,14 @@ fn parse_inner( drop(unresolved_map); // ** Step 3: convert each DAG of names/expressions into a DAG of NamedNodes. - let mut roots = HashMap::, Arc>>::new(); + let mut roots = HashMap::, Arc>>::new(); for (name, expr) in &resolved_map { if expr.in_degree.load(Ordering::SeqCst) > 0 { continue; } let mut namer = Namer::new(); - let mut converted: Vec>>> = vec![]; + let mut converted: Vec>>> = vec![]; for data in expr.as_ref().post_order_iter::() { let left = data .left_index @@ -586,7 +586,7 @@ mod tests { use crate::dag::MaxSharing; use crate::human_encoding::Forest; - use crate::jet::{Core, CoreEnv, Jet, JetEnvironment}; + use crate::jet::{CoreEnv, JetEnvironment}; use crate::node::Inner; use crate::value::Word; use crate::{BitMachine, Value}; @@ -597,7 +597,7 @@ mod tests { witness: &HashMap, Value>, env: &JE, ) { - match parse::(s) { + match parse::(s) { Ok(forest) => { assert_eq!(forest.len(), 1); let main = &forest["main"]; @@ -635,8 +635,8 @@ mod tests { } } - fn assert_const(s: &str, word: Word) { - match parse::(s) { + fn assert_const(s: &str, word: Word) { + match parse::(s) { Ok(forest) => { assert_eq!(forest.len(), 1); let main = &forest["main"]; @@ -657,15 +657,15 @@ mod tests { #[test] fn errors() { error_contains( - parse::("main := a"), + parse::("main := a"), "name `a` is referred to but does not exist", ); error_contains( - parse::("main := unit : 1 -> 2"), + parse::("main := unit : 1 -> 2"), "failed to apply bound `2` to existing bound `1`", ); error_contains( - parse::("main := pair unit unit"), + parse::("main := pair unit unit"), "failed to apply bound `1 × 1` to existing bound `1`", ); } @@ -701,14 +701,14 @@ mod tests { #[test] fn circular_program() { error_contains( - parse::("main := comp main unit"), + parse::("main := comp main unit"), "name `main` is referred to but does not exist", ); } #[test] fn preserve_name() { - let program = &Forest::::parse("main := x x := unit").unwrap(); + let program = &Forest::parse::("main := x x := unit").unwrap(); assert!(program.string_serialize().contains("main := unit")); } @@ -786,14 +786,14 @@ mod tests { for (human, word) in human_words { let s = format!("main := comp const {human} unit"); - assert_const::(s.as_str(), word); + assert_const::(s.as_str(), word); } } #[test] fn duplicate_witness_in_disconnected_branch() { error_contains( - parse::( + parse::( " wit1 := witness main := comp wit1 comp disconnect iden ?dis2 unit diff --git a/src/jet/bitcoin/mod.rs b/src/jet/bitcoin/mod.rs index 20ee978c..914c4a0a 100644 --- a/src/jet/bitcoin/mod.rs +++ b/src/jet/bitcoin/mod.rs @@ -2,11 +2,15 @@ mod environment; +use std::str::FromStr; + pub use environment::BitcoinEnv; +use crate::bit_encoding::decode; +use crate::BitIter; + use super::init::bitcoin::Bitcoin; use super::JetEnvironment; -use crate::jet::Jet; use simplicity_sys::c_jets::frame_ffi::CFrameItem; impl JetEnvironment for BitcoinEnv { @@ -19,7 +23,17 @@ impl JetEnvironment for BitcoinEnv { fn c_jet_ptr( jet: &Self::Jet, - ) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - jet.c_jet_ptr() + ) -> fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { + super::init::bitcoin::c_jet_ptr(jet) + } + + fn decode_jet>( + bits: &mut BitIter, + ) -> Result { + super::init::bitcoin::decode(bits) + } + + fn parse(s: &str) -> Result { + Bitcoin::from_str(s) } } diff --git a/src/jet/core/mod.rs b/src/jet/core/mod.rs index 1c9e6e51..d0abd83a 100644 --- a/src/jet/core/mod.rs +++ b/src/jet/core/mod.rs @@ -1,8 +1,9 @@ // SPDX-License-Identifier: CC0-1.0 +use std::str::FromStr; + use super::init::core::Core; use super::JetEnvironment; -use crate::jet::Jet; use simplicity_sys::c_jets::frame_ffi::CFrameItem; /// Type alias for the Core jet environment. @@ -27,7 +28,17 @@ impl JetEnvironment for CoreEnv { fn c_jet_ptr( jet: &Self::Jet, - ) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - jet.c_jet_ptr() + ) -> fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { + super::init::core::c_jet_ptr(jet) + } + + fn decode_jet>( + bits: &mut crate::BitIter, + ) -> Result { + super::init::core::decode(bits) + } + + fn parse(s: &str) -> Result { + Core::from_str(s) } } diff --git a/src/jet/elements/mod.rs b/src/jet/elements/mod.rs index e5f2af2a..b3589ac5 100644 --- a/src/jet/elements/mod.rs +++ b/src/jet/elements/mod.rs @@ -5,11 +5,12 @@ mod environment; #[cfg(test)] mod tests; +use std::str::FromStr; + pub use environment::{ElementsEnv, ElementsUtxo}; use super::init::elements::Elements; use super::JetEnvironment; -use crate::jet::Jet; use simplicity_sys::c_jets::frame_ffi::CFrameItem; use simplicity_sys::CElementsTxEnv; @@ -26,7 +27,17 @@ impl JetEnvironment for ElementsTxEnv { fn c_jet_ptr( jet: &Self::Jet, - ) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - jet.c_jet_ptr() + ) -> fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { + super::init::elements::c_jet_ptr(jet) + } + + fn decode_jet>( + bits: &mut crate::BitIter, + ) -> Result { + super::init::elements::decode(bits) + } + + fn parse(s: &str) -> Result { + Elements::from_str(s) } } diff --git a/src/jet/init/bitcoin.rs b/src/jet/init/bitcoin.rs index 77e437d5..8a2cdaa8 100644 --- a/src/jet/init/bitcoin.rs +++ b/src/jet/init/bitcoin.rs @@ -10,7 +10,6 @@ use hashes::sha256::Midstate; use simplicity_sys::CFrameItem; use std::io::Write; use std::{fmt, str}; -use crate::jet::bitcoin::BitcoinEnv; /// The Bitcoin jet family. #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] @@ -881,13 +880,6 @@ impl Bitcoin { impl Jet for Bitcoin { - type Environment = BitcoinEnv; - type CJetEnvironment = (); - - fn c_jet_env(_env: &Self::Environment) -> &Self::CJetEnvironment { - unimplemented!("Unspecified CJetEnvironment for Bitcoin jets") - } - fn cmr(&self) -> Cmr { unimplemented!("Bitcoin jet CMRs weights have not yet been implemented.") } @@ -1762,7 +1754,7 @@ impl Jet for Bitcoin { TypeName(name) } - fn encode(&self, w: &mut BitWriter) -> std::io::Result { + fn encode(&self, w: &mut BitWriter<&mut dyn Write>) -> std::io::Result { let (n, len) = match self { Bitcoin::Verify => (0, 3), Bitcoin::Low1 => (8, 6), @@ -2197,2519 +2189,6 @@ impl Jet for Bitcoin { w.write_bits_be(n, len) } - fn decode>(bits: &mut BitIter) -> Result { - decode_bits!(bits, { - 0 => { - 0 => { - 0 => {Bitcoin::Verify}, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::Low1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Low8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Low16}, - 1 => {Bitcoin::Low32} - }, - 1 => { - 0 => {Bitcoin::Low64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::High1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::High8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::High16}, - 1 => {Bitcoin::High32} - }, - 1 => { - 0 => {Bitcoin::High64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Complement1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Complement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Complement16}, - 1 => {Bitcoin::Complement32} - }, - 1 => { - 0 => {Bitcoin::Complement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::And1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::And8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::And16}, - 1 => {Bitcoin::And32} - }, - 1 => { - 0 => {Bitcoin::And64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::Or1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Or8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Or16}, - 1 => {Bitcoin::Or32} - }, - 1 => { - 0 => {Bitcoin::Or64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::Xor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Xor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Xor16}, - 1 => {Bitcoin::Xor32} - }, - 1 => { - 0 => {Bitcoin::Xor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Maj1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Maj8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Maj16}, - 1 => {Bitcoin::Maj32} - }, - 1 => { - 0 => {Bitcoin::Maj64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::XorXor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::XorXor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::XorXor16}, - 1 => {Bitcoin::XorXor32} - }, - 1 => { - 0 => {Bitcoin::XorXor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::Ch1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Ch8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Ch16}, - 1 => {Bitcoin::Ch32} - }, - 1 => { - 0 => {Bitcoin::Ch64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::Some1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Some8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Some16}, - 1 => {Bitcoin::Some32} - }, - 1 => { - 0 => {Bitcoin::Some64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::All8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::All16}, - 1 => {Bitcoin::All32} - }, - 1 => { - 0 => {Bitcoin::All64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::Eq1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Eq8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Eq16}, - 1 => {Bitcoin::Eq32} - }, - 1 => { - 0 => {Bitcoin::Eq64}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::Eq256}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullLeftShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullLeftShift16_1}, - 1 => {Bitcoin::FullLeftShift32_1} - }, - 1 => { - 0 => {Bitcoin::FullLeftShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Bitcoin::FullLeftShift8_2}, - 1 => {Bitcoin::FullLeftShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullLeftShift32_2}, - 1 => {Bitcoin::FullLeftShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::FullLeftShift8_4}, - 1 => { - 0 => { - 0 => {Bitcoin::FullLeftShift16_4}, - 1 => {Bitcoin::FullLeftShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullLeftShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullLeftShift16_8}, - 1 => { - 0 => { - 0 => {Bitcoin::FullLeftShift32_8}, - 1 => {Bitcoin::FullLeftShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::FullLeftShift32_16}, - 1 => { - 0 => { - 0 => {Bitcoin::FullLeftShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::FullLeftShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullRightShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullRightShift16_1}, - 1 => {Bitcoin::FullRightShift32_1} - }, - 1 => { - 0 => {Bitcoin::FullRightShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Bitcoin::FullRightShift8_2}, - 1 => {Bitcoin::FullRightShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullRightShift32_2}, - 1 => {Bitcoin::FullRightShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::FullRightShift8_4}, - 1 => { - 0 => { - 0 => {Bitcoin::FullRightShift16_4}, - 1 => {Bitcoin::FullRightShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullRightShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullRightShift16_8}, - 1 => { - 0 => { - 0 => {Bitcoin::FullRightShift32_8}, - 1 => {Bitcoin::FullRightShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::FullRightShift32_16}, - 1 => { - 0 => { - 0 => {Bitcoin::FullRightShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::FullRightShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Leftmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Leftmost16_1}, - 1 => {Bitcoin::Leftmost32_1} - }, - 1 => { - 0 => {Bitcoin::Leftmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Bitcoin::Leftmost8_2}, - 1 => {Bitcoin::Leftmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Leftmost32_2}, - 1 => {Bitcoin::Leftmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::Leftmost8_4}, - 1 => { - 0 => { - 0 => {Bitcoin::Leftmost16_4}, - 1 => {Bitcoin::Leftmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Leftmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Leftmost16_8}, - 1 => { - 0 => { - 0 => {Bitcoin::Leftmost32_8}, - 1 => {Bitcoin::Leftmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::Leftmost32_16}, - 1 => { - 0 => { - 0 => {Bitcoin::Leftmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::Leftmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Rightmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Rightmost16_1}, - 1 => {Bitcoin::Rightmost32_1} - }, - 1 => { - 0 => {Bitcoin::Rightmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Bitcoin::Rightmost8_2}, - 1 => {Bitcoin::Rightmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Rightmost32_2}, - 1 => {Bitcoin::Rightmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::Rightmost8_4}, - 1 => { - 0 => { - 0 => {Bitcoin::Rightmost16_4}, - 1 => {Bitcoin::Rightmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Rightmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Rightmost16_8}, - 1 => { - 0 => { - 0 => {Bitcoin::Rightmost32_8}, - 1 => {Bitcoin::Rightmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::Rightmost32_16}, - 1 => { - 0 => { - 0 => {Bitcoin::Rightmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::Rightmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftPadLow1_16}, - 1 => {Bitcoin::LeftPadLow1_32} - }, - 1 => { - 0 => {Bitcoin::LeftPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftPadLow8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadLow8_32}, - 1 => {Bitcoin::LeftPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::LeftPadLow16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftPadHigh1_16}, - 1 => {Bitcoin::LeftPadHigh1_32} - }, - 1 => { - 0 => {Bitcoin::LeftPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftPadHigh8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadHigh8_32}, - 1 => {Bitcoin::LeftPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::LeftPadHigh16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::LeftPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftExtend1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftExtend1_16}, - 1 => {Bitcoin::LeftExtend1_32} - }, - 1 => { - 0 => {Bitcoin::LeftExtend1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftExtend8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftExtend8_32}, - 1 => {Bitcoin::LeftExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::LeftExtend16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::LeftExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::LeftExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::RightPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightPadLow1_16}, - 1 => {Bitcoin::RightPadLow1_32} - }, - 1 => { - 0 => {Bitcoin::RightPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightPadLow8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadLow8_32}, - 1 => {Bitcoin::RightPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::RightPadLow16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::RightPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightPadHigh1_16}, - 1 => {Bitcoin::RightPadHigh1_32} - }, - 1 => { - 0 => {Bitcoin::RightPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightPadHigh8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadHigh8_32}, - 1 => {Bitcoin::RightPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::RightPadHigh16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::RightPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightExtend8_16}, - 1 => { - 0 => { - 0 => {Bitcoin::RightExtend8_32}, - 1 => {Bitcoin::RightExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Bitcoin::RightExtend16_32}, - 1 => { - 0 => { - 0 => {Bitcoin::RightExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::RightExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftShiftWith16}, - 1 => {Bitcoin::LeftShiftWith32} - }, - 1 => { - 0 => {Bitcoin::LeftShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::RightShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightShiftWith16}, - 1 => {Bitcoin::RightShiftWith32} - }, - 1 => { - 0 => {Bitcoin::RightShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftShift16}, - 1 => {Bitcoin::LeftShift32} - }, - 1 => { - 0 => {Bitcoin::LeftShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::RightShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightShift16}, - 1 => {Bitcoin::RightShift32} - }, - 1 => { - 0 => {Bitcoin::RightShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::LeftRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LeftRotate16}, - 1 => {Bitcoin::LeftRotate32} - }, - 1 => { - 0 => {Bitcoin::LeftRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::RightRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::RightRotate16}, - 1 => {Bitcoin::RightRotate32} - }, - 1 => { - 0 => {Bitcoin::RightRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - } - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::One8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::One16}, - 1 => {Bitcoin::One32} - }, - 1 => { - 0 => {Bitcoin::One64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullAdd8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullAdd16}, - 1 => {Bitcoin::FullAdd32} - }, - 1 => { - 0 => {Bitcoin::FullAdd64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Add8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Add16}, - 1 => {Bitcoin::Add32} - }, - 1 => { - 0 => {Bitcoin::Add64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullIncrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullIncrement16}, - 1 => {Bitcoin::FullIncrement32} - }, - 1 => { - 0 => {Bitcoin::FullIncrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Increment8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Increment16}, - 1 => {Bitcoin::Increment32} - }, - 1 => { - 0 => {Bitcoin::Increment64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullSubtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullSubtract16}, - 1 => {Bitcoin::FullSubtract32} - }, - 1 => { - 0 => {Bitcoin::FullSubtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Subtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Subtract16}, - 1 => {Bitcoin::Subtract32} - }, - 1 => { - 0 => {Bitcoin::Subtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Negate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Negate16}, - 1 => {Bitcoin::Negate32} - }, - 1 => { - 0 => {Bitcoin::Negate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullDecrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullDecrement16}, - 1 => {Bitcoin::FullDecrement32} - }, - 1 => { - 0 => {Bitcoin::FullDecrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Decrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Decrement16}, - 1 => {Bitcoin::Decrement32} - }, - 1 => { - 0 => {Bitcoin::Decrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::FullMultiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::FullMultiply16}, - 1 => {Bitcoin::FullMultiply32} - }, - 1 => { - 0 => {Bitcoin::FullMultiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Multiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Multiply16}, - 1 => {Bitcoin::Multiply32} - }, - 1 => { - 0 => {Bitcoin::Multiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::IsZero8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::IsZero16}, - 1 => {Bitcoin::IsZero32} - }, - 1 => { - 0 => {Bitcoin::IsZero64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::IsOne8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::IsOne16}, - 1 => {Bitcoin::IsOne32} - }, - 1 => { - 0 => {Bitcoin::IsOne64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Le8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Le16}, - 1 => {Bitcoin::Le32} - }, - 1 => { - 0 => {Bitcoin::Le64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Lt8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Lt16}, - 1 => {Bitcoin::Lt32} - }, - 1 => { - 0 => {Bitcoin::Lt64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Min8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Min16}, - 1 => {Bitcoin::Min32} - }, - 1 => { - 0 => {Bitcoin::Min64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Max8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Max16}, - 1 => {Bitcoin::Max32} - }, - 1 => { - 0 => {Bitcoin::Max64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Median8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Median16}, - 1 => {Bitcoin::Median32} - }, - 1 => { - 0 => {Bitcoin::Median64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {Bitcoin::DivMod128_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::DivMod8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::DivMod16}, - 1 => {Bitcoin::DivMod32} - }, - 1 => { - 0 => {Bitcoin::DivMod64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Divide8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Divide16}, - 1 => {Bitcoin::Divide32} - }, - 1 => { - 0 => {Bitcoin::Divide64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Modulo8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Modulo16}, - 1 => {Bitcoin::Modulo32} - }, - 1 => { - 0 => {Bitcoin::Modulo64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Bitcoin::Divides8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Divides16}, - 1 => {Bitcoin::Divides32} - }, - 1 => { - 0 => {Bitcoin::Divides64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::Sha256Block}, - 1 => { - 0 => { - 0 => {Bitcoin::Sha256Iv}, - 1 => { - 0 => {Bitcoin::Sha256Ctx8Add1}, - 1 => { - 0 => { - 0 => {Bitcoin::Sha256Ctx8Add2}, - 1 => {Bitcoin::Sha256Ctx8Add4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Sha256Ctx8Add8}, - 1 => {Bitcoin::Sha256Ctx8Add16} - }, - 1 => { - 0 => {Bitcoin::Sha256Ctx8Add32}, - 1 => {Bitcoin::Sha256Ctx8Add64} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::Sha256Ctx8Add128}, - 1 => {Bitcoin::Sha256Ctx8Add256} - }, - 1 => { - 0 => {Bitcoin::Sha256Ctx8Add512}, - 1 => {} - } - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::Sha256Ctx8AddBuffer511}, - 1 => {Bitcoin::Sha256Ctx8Finalize} - }, - 1 => { - 0 => {Bitcoin::Sha256Ctx8Init}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::PointVerify1}, - 1 => {} - }, - 1 => { - 0 => { - 0 => {Bitcoin::Decompress}, - 1 => { - 0 => {Bitcoin::LinearVerify1}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::LinearCombination1}, - 1 => {} - }, - 1 => {Bitcoin::Scale} - }, - 1 => { - 0 => {Bitcoin::Generate}, - 1 => {Bitcoin::GejInfinity} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::GejNormalize}, - 1 => {Bitcoin::GejNegate} - }, - 1 => { - 0 => {Bitcoin::GeNegate}, - 1 => {Bitcoin::GejDouble} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::GejAdd}, - 1 => {Bitcoin::GejGeAddEx} - }, - 1 => { - 0 => {Bitcoin::GejGeAdd}, - 1 => {Bitcoin::GejRescale} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::GejIsInfinity}, - 1 => {Bitcoin::GejEquiv} - }, - 1 => { - 0 => {Bitcoin::GejGeEquiv}, - 1 => {Bitcoin::GejXEquiv} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::GejYIsOdd}, - 1 => {Bitcoin::GejIsOnCurve} - }, - 1 => { - 0 => {Bitcoin::GeIsOnCurve}, - 1 => {Bitcoin::ScalarNormalize} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::ScalarNegate}, - 1 => {Bitcoin::ScalarAdd} - }, - 1 => { - 0 => {Bitcoin::ScalarSquare}, - 1 => {Bitcoin::ScalarMultiply} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::ScalarMultiplyLambda}, - 1 => {Bitcoin::ScalarInvert} - }, - 1 => { - 0 => {Bitcoin::ScalarIsZero}, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => {Bitcoin::FeNormalize} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::FeNegate}, - 1 => {Bitcoin::FeAdd} - }, - 1 => { - 0 => {Bitcoin::FeSquare}, - 1 => {Bitcoin::FeMultiply} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::FeMultiplyBeta}, - 1 => {Bitcoin::FeInvert} - }, - 1 => { - 0 => {Bitcoin::FeSquareRoot}, - 1 => {Bitcoin::FeIsZero} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::FeIsOdd}, - 1 => {} - }, - 1 => { - 0 => {Bitcoin::HashToCurve}, - 1 => {Bitcoin::Swu} - } - } - } - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {Bitcoin::CheckSigVerify}, - 1 => { - 0 => { - 0 => {Bitcoin::Bip0340Verify}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {Bitcoin::ParseLock}, - 1 => { - 0 => { - 0 => {Bitcoin::ParseSequence}, - 1 => {Bitcoin::TapdataInit} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::SigAllHash}, - 1 => { - 0 => { - 0 => {Bitcoin::TxHash}, - 1 => {Bitcoin::TapEnvHash} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::OutputsHash}, - 1 => {Bitcoin::InputsHash} - }, - 1 => { - 0 => {Bitcoin::InputUtxosHash}, - 1 => {Bitcoin::OutputHash} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::OutputValuesHash}, - 1 => {Bitcoin::OutputScriptsHash} - }, - 1 => { - 0 => {Bitcoin::InputHash}, - 1 => {Bitcoin::InputOutpointsHash} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::InputSequencesHash}, - 1 => {Bitcoin::InputAnnexesHash} - }, - 1 => { - 0 => {Bitcoin::InputScriptSigsHash}, - 1 => {Bitcoin::InputUtxoHash} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::InputValuesHash}, - 1 => {Bitcoin::InputScriptsHash} - }, - 1 => { - 0 => {Bitcoin::TapleafHash}, - 1 => {Bitcoin::TappathHash} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::OutpointHash}, - 1 => {Bitcoin::AnnexHash} - }, - 1 => { - 0 => {Bitcoin::BuildTapleafSimplicity}, - 1 => {Bitcoin::BuildTapbranch} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::BuildTaptweak}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::CheckLockHeight}, - 1 => { - 0 => { - 0 => {Bitcoin::CheckLockTime}, - 1 => {Bitcoin::CheckLockDistance} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::CheckLockDuration}, - 1 => {Bitcoin::TxLockHeight} - }, - 1 => { - 0 => {Bitcoin::TxLockTime}, - 1 => {Bitcoin::TxLockDistance} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::TxLockDuration}, - 1 => {Bitcoin::TxIsFinal} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Bitcoin::ScriptCMR}, - 1 => { - 0 => { - 0 => {Bitcoin::InternalKey}, - 1 => {Bitcoin::CurrentIndex} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::NumInputs}, - 1 => {Bitcoin::NumOutputs} - }, - 1 => { - 0 => {Bitcoin::LockTime}, - 1 => {Bitcoin::Fee} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::OutputValue}, - 1 => {Bitcoin::OutputScriptHash} - }, - 1 => { - 0 => {Bitcoin::TotalOutputValue}, - 1 => {Bitcoin::CurrentPrevOutpoint} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::CurrentValue}, - 1 => {Bitcoin::CurrentScriptHash} - }, - 1 => { - 0 => {Bitcoin::CurrentSequence}, - 1 => {Bitcoin::CurrentAnnexHash} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Bitcoin::CurrentScriptSigHash}, - 1 => {Bitcoin::InputPrevOutpoint} - }, - 1 => { - 0 => {Bitcoin::InputValue}, - 1 => {Bitcoin::InputScriptHash} - } - }, - 1 => { - 0 => { - 0 => {Bitcoin::InputSequence}, - 1 => {Bitcoin::InputAnnexHash} - }, - 1 => { - 0 => {Bitcoin::InputScriptSigHash}, - 1 => {Bitcoin::TotalInputValue} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Bitcoin::TapleafVersion}, - 1 => {Bitcoin::Tappath} - }, - 1 => { - 0 => {Bitcoin::Version}, - 1 => {Bitcoin::TransactionId} - } - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => {} - } - } - }) - } - - fn c_jet_ptr(&self) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - unimplemented!("Bitcoin jets have not yet been implemented.") - } - fn cost(&self) -> Cost { unimplemented!("Unspecified cost of Bitcoin jets") } @@ -5585,5 +3064,2518 @@ impl str::FromStr for Bitcoin { "xor_xor_8" => Ok(Bitcoin::XorXor8), x => Err(crate::Error::InvalidJetName(x.to_owned())), } - } + } +} + +pub(crate) fn c_jet_ptr(jet: &Bitcoin) -> fn(&mut CFrameItem, CFrameItem, &()) -> bool { + unimplemented!("Bitcoin jets have not yet been implemented.") +} + +pub(crate) fn decode>(bits: &mut BitIter) -> Result { + decode_bits!(bits, { + 0 => { + 0 => { + 0 => {Bitcoin::Verify}, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::Low1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Low8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Low16}, + 1 => {Bitcoin::Low32} + }, + 1 => { + 0 => {Bitcoin::Low64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::High1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::High8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::High16}, + 1 => {Bitcoin::High32} + }, + 1 => { + 0 => {Bitcoin::High64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Complement1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Complement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Complement16}, + 1 => {Bitcoin::Complement32} + }, + 1 => { + 0 => {Bitcoin::Complement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::And1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::And8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::And16}, + 1 => {Bitcoin::And32} + }, + 1 => { + 0 => {Bitcoin::And64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::Or1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Or8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Or16}, + 1 => {Bitcoin::Or32} + }, + 1 => { + 0 => {Bitcoin::Or64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::Xor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Xor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Xor16}, + 1 => {Bitcoin::Xor32} + }, + 1 => { + 0 => {Bitcoin::Xor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Maj1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Maj8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Maj16}, + 1 => {Bitcoin::Maj32} + }, + 1 => { + 0 => {Bitcoin::Maj64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::XorXor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::XorXor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::XorXor16}, + 1 => {Bitcoin::XorXor32} + }, + 1 => { + 0 => {Bitcoin::XorXor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::Ch1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Ch8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Ch16}, + 1 => {Bitcoin::Ch32} + }, + 1 => { + 0 => {Bitcoin::Ch64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::Some1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Some8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Some16}, + 1 => {Bitcoin::Some32} + }, + 1 => { + 0 => {Bitcoin::Some64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::All8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::All16}, + 1 => {Bitcoin::All32} + }, + 1 => { + 0 => {Bitcoin::All64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::Eq1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Eq8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Eq16}, + 1 => {Bitcoin::Eq32} + }, + 1 => { + 0 => {Bitcoin::Eq64}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::Eq256}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullLeftShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullLeftShift16_1}, + 1 => {Bitcoin::FullLeftShift32_1} + }, + 1 => { + 0 => {Bitcoin::FullLeftShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Bitcoin::FullLeftShift8_2}, + 1 => {Bitcoin::FullLeftShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullLeftShift32_2}, + 1 => {Bitcoin::FullLeftShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::FullLeftShift8_4}, + 1 => { + 0 => { + 0 => {Bitcoin::FullLeftShift16_4}, + 1 => {Bitcoin::FullLeftShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullLeftShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullLeftShift16_8}, + 1 => { + 0 => { + 0 => {Bitcoin::FullLeftShift32_8}, + 1 => {Bitcoin::FullLeftShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::FullLeftShift32_16}, + 1 => { + 0 => { + 0 => {Bitcoin::FullLeftShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::FullLeftShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullRightShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullRightShift16_1}, + 1 => {Bitcoin::FullRightShift32_1} + }, + 1 => { + 0 => {Bitcoin::FullRightShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Bitcoin::FullRightShift8_2}, + 1 => {Bitcoin::FullRightShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullRightShift32_2}, + 1 => {Bitcoin::FullRightShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::FullRightShift8_4}, + 1 => { + 0 => { + 0 => {Bitcoin::FullRightShift16_4}, + 1 => {Bitcoin::FullRightShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullRightShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullRightShift16_8}, + 1 => { + 0 => { + 0 => {Bitcoin::FullRightShift32_8}, + 1 => {Bitcoin::FullRightShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::FullRightShift32_16}, + 1 => { + 0 => { + 0 => {Bitcoin::FullRightShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::FullRightShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Leftmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Leftmost16_1}, + 1 => {Bitcoin::Leftmost32_1} + }, + 1 => { + 0 => {Bitcoin::Leftmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Bitcoin::Leftmost8_2}, + 1 => {Bitcoin::Leftmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Leftmost32_2}, + 1 => {Bitcoin::Leftmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::Leftmost8_4}, + 1 => { + 0 => { + 0 => {Bitcoin::Leftmost16_4}, + 1 => {Bitcoin::Leftmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Leftmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Leftmost16_8}, + 1 => { + 0 => { + 0 => {Bitcoin::Leftmost32_8}, + 1 => {Bitcoin::Leftmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::Leftmost32_16}, + 1 => { + 0 => { + 0 => {Bitcoin::Leftmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::Leftmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Rightmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Rightmost16_1}, + 1 => {Bitcoin::Rightmost32_1} + }, + 1 => { + 0 => {Bitcoin::Rightmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Bitcoin::Rightmost8_2}, + 1 => {Bitcoin::Rightmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Rightmost32_2}, + 1 => {Bitcoin::Rightmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::Rightmost8_4}, + 1 => { + 0 => { + 0 => {Bitcoin::Rightmost16_4}, + 1 => {Bitcoin::Rightmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Rightmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Rightmost16_8}, + 1 => { + 0 => { + 0 => {Bitcoin::Rightmost32_8}, + 1 => {Bitcoin::Rightmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::Rightmost32_16}, + 1 => { + 0 => { + 0 => {Bitcoin::Rightmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::Rightmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftPadLow1_16}, + 1 => {Bitcoin::LeftPadLow1_32} + }, + 1 => { + 0 => {Bitcoin::LeftPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftPadLow8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadLow8_32}, + 1 => {Bitcoin::LeftPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::LeftPadLow16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftPadHigh1_16}, + 1 => {Bitcoin::LeftPadHigh1_32} + }, + 1 => { + 0 => {Bitcoin::LeftPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftPadHigh8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadHigh8_32}, + 1 => {Bitcoin::LeftPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::LeftPadHigh16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::LeftPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftExtend1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftExtend1_16}, + 1 => {Bitcoin::LeftExtend1_32} + }, + 1 => { + 0 => {Bitcoin::LeftExtend1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftExtend8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftExtend8_32}, + 1 => {Bitcoin::LeftExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::LeftExtend16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::LeftExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::LeftExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::RightPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightPadLow1_16}, + 1 => {Bitcoin::RightPadLow1_32} + }, + 1 => { + 0 => {Bitcoin::RightPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightPadLow8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadLow8_32}, + 1 => {Bitcoin::RightPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::RightPadLow16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::RightPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightPadHigh1_16}, + 1 => {Bitcoin::RightPadHigh1_32} + }, + 1 => { + 0 => {Bitcoin::RightPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightPadHigh8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadHigh8_32}, + 1 => {Bitcoin::RightPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::RightPadHigh16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::RightPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightExtend8_16}, + 1 => { + 0 => { + 0 => {Bitcoin::RightExtend8_32}, + 1 => {Bitcoin::RightExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Bitcoin::RightExtend16_32}, + 1 => { + 0 => { + 0 => {Bitcoin::RightExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::RightExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftShiftWith16}, + 1 => {Bitcoin::LeftShiftWith32} + }, + 1 => { + 0 => {Bitcoin::LeftShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::RightShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightShiftWith16}, + 1 => {Bitcoin::RightShiftWith32} + }, + 1 => { + 0 => {Bitcoin::RightShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftShift16}, + 1 => {Bitcoin::LeftShift32} + }, + 1 => { + 0 => {Bitcoin::LeftShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::RightShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightShift16}, + 1 => {Bitcoin::RightShift32} + }, + 1 => { + 0 => {Bitcoin::RightShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::LeftRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LeftRotate16}, + 1 => {Bitcoin::LeftRotate32} + }, + 1 => { + 0 => {Bitcoin::LeftRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::RightRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::RightRotate16}, + 1 => {Bitcoin::RightRotate32} + }, + 1 => { + 0 => {Bitcoin::RightRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + } + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::One8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::One16}, + 1 => {Bitcoin::One32} + }, + 1 => { + 0 => {Bitcoin::One64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullAdd8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullAdd16}, + 1 => {Bitcoin::FullAdd32} + }, + 1 => { + 0 => {Bitcoin::FullAdd64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Add8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Add16}, + 1 => {Bitcoin::Add32} + }, + 1 => { + 0 => {Bitcoin::Add64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullIncrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullIncrement16}, + 1 => {Bitcoin::FullIncrement32} + }, + 1 => { + 0 => {Bitcoin::FullIncrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Increment8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Increment16}, + 1 => {Bitcoin::Increment32} + }, + 1 => { + 0 => {Bitcoin::Increment64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullSubtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullSubtract16}, + 1 => {Bitcoin::FullSubtract32} + }, + 1 => { + 0 => {Bitcoin::FullSubtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Subtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Subtract16}, + 1 => {Bitcoin::Subtract32} + }, + 1 => { + 0 => {Bitcoin::Subtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Negate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Negate16}, + 1 => {Bitcoin::Negate32} + }, + 1 => { + 0 => {Bitcoin::Negate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullDecrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullDecrement16}, + 1 => {Bitcoin::FullDecrement32} + }, + 1 => { + 0 => {Bitcoin::FullDecrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Decrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Decrement16}, + 1 => {Bitcoin::Decrement32} + }, + 1 => { + 0 => {Bitcoin::Decrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::FullMultiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::FullMultiply16}, + 1 => {Bitcoin::FullMultiply32} + }, + 1 => { + 0 => {Bitcoin::FullMultiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Multiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Multiply16}, + 1 => {Bitcoin::Multiply32} + }, + 1 => { + 0 => {Bitcoin::Multiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::IsZero8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::IsZero16}, + 1 => {Bitcoin::IsZero32} + }, + 1 => { + 0 => {Bitcoin::IsZero64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::IsOne8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::IsOne16}, + 1 => {Bitcoin::IsOne32} + }, + 1 => { + 0 => {Bitcoin::IsOne64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Le8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Le16}, + 1 => {Bitcoin::Le32} + }, + 1 => { + 0 => {Bitcoin::Le64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Lt8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Lt16}, + 1 => {Bitcoin::Lt32} + }, + 1 => { + 0 => {Bitcoin::Lt64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Min8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Min16}, + 1 => {Bitcoin::Min32} + }, + 1 => { + 0 => {Bitcoin::Min64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Max8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Max16}, + 1 => {Bitcoin::Max32} + }, + 1 => { + 0 => {Bitcoin::Max64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Median8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Median16}, + 1 => {Bitcoin::Median32} + }, + 1 => { + 0 => {Bitcoin::Median64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {Bitcoin::DivMod128_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::DivMod8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::DivMod16}, + 1 => {Bitcoin::DivMod32} + }, + 1 => { + 0 => {Bitcoin::DivMod64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Divide8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Divide16}, + 1 => {Bitcoin::Divide32} + }, + 1 => { + 0 => {Bitcoin::Divide64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Modulo8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Modulo16}, + 1 => {Bitcoin::Modulo32} + }, + 1 => { + 0 => {Bitcoin::Modulo64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Bitcoin::Divides8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Divides16}, + 1 => {Bitcoin::Divides32} + }, + 1 => { + 0 => {Bitcoin::Divides64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::Sha256Block}, + 1 => { + 0 => { + 0 => {Bitcoin::Sha256Iv}, + 1 => { + 0 => {Bitcoin::Sha256Ctx8Add1}, + 1 => { + 0 => { + 0 => {Bitcoin::Sha256Ctx8Add2}, + 1 => {Bitcoin::Sha256Ctx8Add4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Sha256Ctx8Add8}, + 1 => {Bitcoin::Sha256Ctx8Add16} + }, + 1 => { + 0 => {Bitcoin::Sha256Ctx8Add32}, + 1 => {Bitcoin::Sha256Ctx8Add64} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::Sha256Ctx8Add128}, + 1 => {Bitcoin::Sha256Ctx8Add256} + }, + 1 => { + 0 => {Bitcoin::Sha256Ctx8Add512}, + 1 => {} + } + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::Sha256Ctx8AddBuffer511}, + 1 => {Bitcoin::Sha256Ctx8Finalize} + }, + 1 => { + 0 => {Bitcoin::Sha256Ctx8Init}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::PointVerify1}, + 1 => {} + }, + 1 => { + 0 => { + 0 => {Bitcoin::Decompress}, + 1 => { + 0 => {Bitcoin::LinearVerify1}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::LinearCombination1}, + 1 => {} + }, + 1 => {Bitcoin::Scale} + }, + 1 => { + 0 => {Bitcoin::Generate}, + 1 => {Bitcoin::GejInfinity} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::GejNormalize}, + 1 => {Bitcoin::GejNegate} + }, + 1 => { + 0 => {Bitcoin::GeNegate}, + 1 => {Bitcoin::GejDouble} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::GejAdd}, + 1 => {Bitcoin::GejGeAddEx} + }, + 1 => { + 0 => {Bitcoin::GejGeAdd}, + 1 => {Bitcoin::GejRescale} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::GejIsInfinity}, + 1 => {Bitcoin::GejEquiv} + }, + 1 => { + 0 => {Bitcoin::GejGeEquiv}, + 1 => {Bitcoin::GejXEquiv} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::GejYIsOdd}, + 1 => {Bitcoin::GejIsOnCurve} + }, + 1 => { + 0 => {Bitcoin::GeIsOnCurve}, + 1 => {Bitcoin::ScalarNormalize} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::ScalarNegate}, + 1 => {Bitcoin::ScalarAdd} + }, + 1 => { + 0 => {Bitcoin::ScalarSquare}, + 1 => {Bitcoin::ScalarMultiply} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::ScalarMultiplyLambda}, + 1 => {Bitcoin::ScalarInvert} + }, + 1 => { + 0 => {Bitcoin::ScalarIsZero}, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => {Bitcoin::FeNormalize} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::FeNegate}, + 1 => {Bitcoin::FeAdd} + }, + 1 => { + 0 => {Bitcoin::FeSquare}, + 1 => {Bitcoin::FeMultiply} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::FeMultiplyBeta}, + 1 => {Bitcoin::FeInvert} + }, + 1 => { + 0 => {Bitcoin::FeSquareRoot}, + 1 => {Bitcoin::FeIsZero} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::FeIsOdd}, + 1 => {} + }, + 1 => { + 0 => {Bitcoin::HashToCurve}, + 1 => {Bitcoin::Swu} + } + } + } + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {Bitcoin::CheckSigVerify}, + 1 => { + 0 => { + 0 => {Bitcoin::Bip0340Verify}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {Bitcoin::ParseLock}, + 1 => { + 0 => { + 0 => {Bitcoin::ParseSequence}, + 1 => {Bitcoin::TapdataInit} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::SigAllHash}, + 1 => { + 0 => { + 0 => {Bitcoin::TxHash}, + 1 => {Bitcoin::TapEnvHash} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::OutputsHash}, + 1 => {Bitcoin::InputsHash} + }, + 1 => { + 0 => {Bitcoin::InputUtxosHash}, + 1 => {Bitcoin::OutputHash} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::OutputValuesHash}, + 1 => {Bitcoin::OutputScriptsHash} + }, + 1 => { + 0 => {Bitcoin::InputHash}, + 1 => {Bitcoin::InputOutpointsHash} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::InputSequencesHash}, + 1 => {Bitcoin::InputAnnexesHash} + }, + 1 => { + 0 => {Bitcoin::InputScriptSigsHash}, + 1 => {Bitcoin::InputUtxoHash} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::InputValuesHash}, + 1 => {Bitcoin::InputScriptsHash} + }, + 1 => { + 0 => {Bitcoin::TapleafHash}, + 1 => {Bitcoin::TappathHash} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::OutpointHash}, + 1 => {Bitcoin::AnnexHash} + }, + 1 => { + 0 => {Bitcoin::BuildTapleafSimplicity}, + 1 => {Bitcoin::BuildTapbranch} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::BuildTaptweak}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::CheckLockHeight}, + 1 => { + 0 => { + 0 => {Bitcoin::CheckLockTime}, + 1 => {Bitcoin::CheckLockDistance} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::CheckLockDuration}, + 1 => {Bitcoin::TxLockHeight} + }, + 1 => { + 0 => {Bitcoin::TxLockTime}, + 1 => {Bitcoin::TxLockDistance} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::TxLockDuration}, + 1 => {Bitcoin::TxIsFinal} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Bitcoin::ScriptCMR}, + 1 => { + 0 => { + 0 => {Bitcoin::InternalKey}, + 1 => {Bitcoin::CurrentIndex} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::NumInputs}, + 1 => {Bitcoin::NumOutputs} + }, + 1 => { + 0 => {Bitcoin::LockTime}, + 1 => {Bitcoin::Fee} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::OutputValue}, + 1 => {Bitcoin::OutputScriptHash} + }, + 1 => { + 0 => {Bitcoin::TotalOutputValue}, + 1 => {Bitcoin::CurrentPrevOutpoint} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::CurrentValue}, + 1 => {Bitcoin::CurrentScriptHash} + }, + 1 => { + 0 => {Bitcoin::CurrentSequence}, + 1 => {Bitcoin::CurrentAnnexHash} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Bitcoin::CurrentScriptSigHash}, + 1 => {Bitcoin::InputPrevOutpoint} + }, + 1 => { + 0 => {Bitcoin::InputValue}, + 1 => {Bitcoin::InputScriptHash} + } + }, + 1 => { + 0 => { + 0 => {Bitcoin::InputSequence}, + 1 => {Bitcoin::InputAnnexHash} + }, + 1 => { + 0 => {Bitcoin::InputScriptSigHash}, + 1 => {Bitcoin::TotalInputValue} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Bitcoin::TapleafVersion}, + 1 => {Bitcoin::Tappath} + }, + 1 => { + 0 => {Bitcoin::Version}, + 1 => {Bitcoin::TransactionId} + } + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => {} + } + } + }) } diff --git a/src/jet/init/core.rs b/src/jet/init/core.rs index bd58642b..3a549b8c 100644 --- a/src/jet/init/core.rs +++ b/src/jet/init/core.rs @@ -760,13 +760,6 @@ impl Core { impl Jet for Core { - type Environment = (); - type CJetEnvironment = (); - - fn c_jet_env(env: &Self::Environment) -> &Self::CJetEnvironment { - env - } - fn cmr(&self) -> Cmr { let bytes = match self { Core::Add16 => [ @@ -3364,7 +3357,7 @@ impl Jet for Core { TypeName(name) } - fn encode(&self, w: &mut BitWriter) -> std::io::Result { + fn encode(&self, w: &mut BitWriter<&mut dyn Write>) -> std::io::Result { let (n, len) = match self { Core::Verify => (0, 2), Core::Low1 => (8, 5), @@ -3739,2660 +3732,6 @@ impl Jet for Core { w.write_bits_be(n, len) } - fn decode>(bits: &mut BitIter) -> Result { - decode_bits!(bits, { - 0 => { - 0 => {Core::Verify}, - 1 => { - 0 => { - 0 => { - 0 => {Core::Low1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Low8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Low16}, - 1 => {Core::Low32} - }, - 1 => { - 0 => {Core::Low64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::High1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::High8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::High16}, - 1 => {Core::High32} - }, - 1 => { - 0 => {Core::High64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Complement1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Complement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Complement16}, - 1 => {Core::Complement32} - }, - 1 => { - 0 => {Core::Complement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::And1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::And8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::And16}, - 1 => {Core::And32} - }, - 1 => { - 0 => {Core::And64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Core::Or1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Or8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Or16}, - 1 => {Core::Or32} - }, - 1 => { - 0 => {Core::Or64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::Xor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Xor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Xor16}, - 1 => {Core::Xor32} - }, - 1 => { - 0 => {Core::Xor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Maj1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Maj8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Maj16}, - 1 => {Core::Maj32} - }, - 1 => { - 0 => {Core::Maj64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::XorXor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::XorXor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::XorXor16}, - 1 => {Core::XorXor32} - }, - 1 => { - 0 => {Core::XorXor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Core::Ch1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Ch8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Ch16}, - 1 => {Core::Ch32} - }, - 1 => { - 0 => {Core::Ch64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::Some1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Some8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Some16}, - 1 => {Core::Some32} - }, - 1 => { - 0 => {Core::Some64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::All8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::All16}, - 1 => {Core::All32} - }, - 1 => { - 0 => {Core::All64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::Eq1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Eq8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Eq16}, - 1 => {Core::Eq32} - }, - 1 => { - 0 => {Core::Eq64}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Core::Eq256}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullLeftShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullLeftShift16_1}, - 1 => {Core::FullLeftShift32_1} - }, - 1 => { - 0 => {Core::FullLeftShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Core::FullLeftShift8_2}, - 1 => {Core::FullLeftShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullLeftShift32_2}, - 1 => {Core::FullLeftShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::FullLeftShift8_4}, - 1 => { - 0 => { - 0 => {Core::FullLeftShift16_4}, - 1 => {Core::FullLeftShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullLeftShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullLeftShift16_8}, - 1 => { - 0 => { - 0 => {Core::FullLeftShift32_8}, - 1 => {Core::FullLeftShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::FullLeftShift32_16}, - 1 => { - 0 => { - 0 => {Core::FullLeftShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::FullLeftShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullRightShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullRightShift16_1}, - 1 => {Core::FullRightShift32_1} - }, - 1 => { - 0 => {Core::FullRightShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Core::FullRightShift8_2}, - 1 => {Core::FullRightShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullRightShift32_2}, - 1 => {Core::FullRightShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::FullRightShift8_4}, - 1 => { - 0 => { - 0 => {Core::FullRightShift16_4}, - 1 => {Core::FullRightShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullRightShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullRightShift16_8}, - 1 => { - 0 => { - 0 => {Core::FullRightShift32_8}, - 1 => {Core::FullRightShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::FullRightShift32_16}, - 1 => { - 0 => { - 0 => {Core::FullRightShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::FullRightShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Leftmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Leftmost16_1}, - 1 => {Core::Leftmost32_1} - }, - 1 => { - 0 => {Core::Leftmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Core::Leftmost8_2}, - 1 => {Core::Leftmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Leftmost32_2}, - 1 => {Core::Leftmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::Leftmost8_4}, - 1 => { - 0 => { - 0 => {Core::Leftmost16_4}, - 1 => {Core::Leftmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Leftmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Leftmost16_8}, - 1 => { - 0 => { - 0 => {Core::Leftmost32_8}, - 1 => {Core::Leftmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::Leftmost32_16}, - 1 => { - 0 => { - 0 => {Core::Leftmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::Leftmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Rightmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Rightmost16_1}, - 1 => {Core::Rightmost32_1} - }, - 1 => { - 0 => {Core::Rightmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Core::Rightmost8_2}, - 1 => {Core::Rightmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Rightmost32_2}, - 1 => {Core::Rightmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Core::Rightmost8_4}, - 1 => { - 0 => { - 0 => {Core::Rightmost16_4}, - 1 => {Core::Rightmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Rightmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Rightmost16_8}, - 1 => { - 0 => { - 0 => {Core::Rightmost32_8}, - 1 => {Core::Rightmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::Rightmost32_16}, - 1 => { - 0 => { - 0 => {Core::Rightmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::Rightmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftPadLow1_16}, - 1 => {Core::LeftPadLow1_32} - }, - 1 => { - 0 => {Core::LeftPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftPadLow8_16}, - 1 => { - 0 => { - 0 => {Core::LeftPadLow8_32}, - 1 => {Core::LeftPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::LeftPadLow16_32}, - 1 => { - 0 => { - 0 => {Core::LeftPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::LeftPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftPadHigh1_16}, - 1 => {Core::LeftPadHigh1_32} - }, - 1 => { - 0 => {Core::LeftPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftPadHigh8_16}, - 1 => { - 0 => { - 0 => {Core::LeftPadHigh8_32}, - 1 => {Core::LeftPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::LeftPadHigh16_32}, - 1 => { - 0 => { - 0 => {Core::LeftPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::LeftPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftExtend1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftExtend1_16}, - 1 => {Core::LeftExtend1_32} - }, - 1 => { - 0 => {Core::LeftExtend1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftExtend8_16}, - 1 => { - 0 => { - 0 => {Core::LeftExtend8_32}, - 1 => {Core::LeftExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::LeftExtend16_32}, - 1 => { - 0 => { - 0 => {Core::LeftExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::LeftExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::RightPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightPadLow1_16}, - 1 => {Core::RightPadLow1_32} - }, - 1 => { - 0 => {Core::RightPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightPadLow8_16}, - 1 => { - 0 => { - 0 => {Core::RightPadLow8_32}, - 1 => {Core::RightPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::RightPadLow16_32}, - 1 => { - 0 => { - 0 => {Core::RightPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::RightPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::RightPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightPadHigh1_16}, - 1 => {Core::RightPadHigh1_32} - }, - 1 => { - 0 => {Core::RightPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightPadHigh8_16}, - 1 => { - 0 => { - 0 => {Core::RightPadHigh8_32}, - 1 => {Core::RightPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::RightPadHigh16_32}, - 1 => { - 0 => { - 0 => {Core::RightPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::RightPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightExtend8_16}, - 1 => { - 0 => { - 0 => {Core::RightExtend8_32}, - 1 => {Core::RightExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Core::RightExtend16_32}, - 1 => { - 0 => { - 0 => {Core::RightExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Core::RightExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftShiftWith16}, - 1 => {Core::LeftShiftWith32} - }, - 1 => { - 0 => {Core::LeftShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::RightShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightShiftWith16}, - 1 => {Core::RightShiftWith32} - }, - 1 => { - 0 => {Core::RightShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftShift16}, - 1 => {Core::LeftShift32} - }, - 1 => { - 0 => {Core::LeftShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::RightShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightShift16}, - 1 => {Core::RightShift32} - }, - 1 => { - 0 => {Core::RightShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::LeftRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LeftRotate16}, - 1 => {Core::LeftRotate32} - }, - 1 => { - 0 => {Core::LeftRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::RightRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::RightRotate16}, - 1 => {Core::RightRotate32} - }, - 1 => { - 0 => {Core::RightRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - } - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::One8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::One16}, - 1 => {Core::One32} - }, - 1 => { - 0 => {Core::One64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullAdd8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullAdd16}, - 1 => {Core::FullAdd32} - }, - 1 => { - 0 => {Core::FullAdd64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Add8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Add16}, - 1 => {Core::Add32} - }, - 1 => { - 0 => {Core::Add64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullIncrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullIncrement16}, - 1 => {Core::FullIncrement32} - }, - 1 => { - 0 => {Core::FullIncrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Increment8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Increment16}, - 1 => {Core::Increment32} - }, - 1 => { - 0 => {Core::Increment64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullSubtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullSubtract16}, - 1 => {Core::FullSubtract32} - }, - 1 => { - 0 => {Core::FullSubtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Subtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Subtract16}, - 1 => {Core::Subtract32} - }, - 1 => { - 0 => {Core::Subtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Negate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Negate16}, - 1 => {Core::Negate32} - }, - 1 => { - 0 => {Core::Negate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullDecrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullDecrement16}, - 1 => {Core::FullDecrement32} - }, - 1 => { - 0 => {Core::FullDecrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Decrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Decrement16}, - 1 => {Core::Decrement32} - }, - 1 => { - 0 => {Core::Decrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::FullMultiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::FullMultiply16}, - 1 => {Core::FullMultiply32} - }, - 1 => { - 0 => {Core::FullMultiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Multiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Multiply16}, - 1 => {Core::Multiply32} - }, - 1 => { - 0 => {Core::Multiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::IsZero8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::IsZero16}, - 1 => {Core::IsZero32} - }, - 1 => { - 0 => {Core::IsZero64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::IsOne8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::IsOne16}, - 1 => {Core::IsOne32} - }, - 1 => { - 0 => {Core::IsOne64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Le8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Le16}, - 1 => {Core::Le32} - }, - 1 => { - 0 => {Core::Le64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Lt8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Lt16}, - 1 => {Core::Lt32} - }, - 1 => { - 0 => {Core::Lt64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Min8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Min16}, - 1 => {Core::Min32} - }, - 1 => { - 0 => {Core::Min64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Max8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Max16}, - 1 => {Core::Max32} - }, - 1 => { - 0 => {Core::Max64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Median8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Median16}, - 1 => {Core::Median32} - }, - 1 => { - 0 => {Core::Median64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {Core::DivMod128_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::DivMod8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::DivMod16}, - 1 => {Core::DivMod32} - }, - 1 => { - 0 => {Core::DivMod64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Divide8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Divide16}, - 1 => {Core::Divide32} - }, - 1 => { - 0 => {Core::Divide64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Modulo8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Modulo16}, - 1 => {Core::Modulo32} - }, - 1 => { - 0 => {Core::Modulo64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Core::Divides8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Divides16}, - 1 => {Core::Divides32} - }, - 1 => { - 0 => {Core::Divides64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Core::Sha256Block}, - 1 => { - 0 => { - 0 => {Core::Sha256Iv}, - 1 => { - 0 => {Core::Sha256Ctx8Add1}, - 1 => { - 0 => { - 0 => {Core::Sha256Ctx8Add2}, - 1 => {Core::Sha256Ctx8Add4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Sha256Ctx8Add8}, - 1 => {Core::Sha256Ctx8Add16} - }, - 1 => { - 0 => {Core::Sha256Ctx8Add32}, - 1 => {Core::Sha256Ctx8Add64} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Core::Sha256Ctx8Add128}, - 1 => {Core::Sha256Ctx8Add256} - }, - 1 => { - 0 => {Core::Sha256Ctx8Add512}, - 1 => {} - } - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::Sha256Ctx8AddBuffer511}, - 1 => {Core::Sha256Ctx8Finalize} - }, - 1 => { - 0 => {Core::Sha256Ctx8Init}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::PointVerify1}, - 1 => {} - }, - 1 => { - 0 => { - 0 => {Core::Decompress}, - 1 => { - 0 => {Core::LinearVerify1}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::LinearCombination1}, - 1 => {} - }, - 1 => {Core::Scale} - }, - 1 => { - 0 => {Core::Generate}, - 1 => {Core::GejInfinity} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Core::GejNormalize}, - 1 => {Core::GejNegate} - }, - 1 => { - 0 => {Core::GeNegate}, - 1 => {Core::GejDouble} - } - }, - 1 => { - 0 => { - 0 => {Core::GejAdd}, - 1 => {Core::GejGeAddEx} - }, - 1 => { - 0 => {Core::GejGeAdd}, - 1 => {Core::GejRescale} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Core::GejIsInfinity}, - 1 => {Core::GejEquiv} - }, - 1 => { - 0 => {Core::GejGeEquiv}, - 1 => {Core::GejXEquiv} - } - }, - 1 => { - 0 => { - 0 => {Core::GejYIsOdd}, - 1 => {Core::GejIsOnCurve} - }, - 1 => { - 0 => {Core::GeIsOnCurve}, - 1 => {Core::ScalarNormalize} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Core::ScalarNegate}, - 1 => {Core::ScalarAdd} - }, - 1 => { - 0 => {Core::ScalarSquare}, - 1 => {Core::ScalarMultiply} - } - }, - 1 => { - 0 => { - 0 => {Core::ScalarMultiplyLambda}, - 1 => {Core::ScalarInvert} - }, - 1 => { - 0 => {Core::ScalarIsZero}, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => {Core::FeNormalize} - } - }, - 1 => { - 0 => { - 0 => {Core::FeNegate}, - 1 => {Core::FeAdd} - }, - 1 => { - 0 => {Core::FeSquare}, - 1 => {Core::FeMultiply} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Core::FeMultiplyBeta}, - 1 => {Core::FeInvert} - }, - 1 => { - 0 => {Core::FeSquareRoot}, - 1 => {Core::FeIsZero} - } - }, - 1 => { - 0 => { - 0 => {Core::FeIsOdd}, - 1 => {} - }, - 1 => { - 0 => {Core::HashToCurve}, - 1 => {Core::Swu} - } - } - } - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {Core::CheckSigVerify}, - 1 => { - 0 => { - 0 => {Core::Bip0340Verify}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {Core::ParseLock}, - 1 => { - 0 => { - 0 => {Core::ParseSequence}, - 1 => {Core::TapdataInit} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - } - }) - } - - fn c_jet_ptr(&self) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - match self { - Core::Add16 => &simplicity_sys::c_jets::jets_wrapper::add_16, - Core::Add32 => &simplicity_sys::c_jets::jets_wrapper::add_32, - Core::Add64 => &simplicity_sys::c_jets::jets_wrapper::add_64, - Core::Add8 => &simplicity_sys::c_jets::jets_wrapper::add_8, - Core::All16 => &simplicity_sys::c_jets::jets_wrapper::all_16, - Core::All32 => &simplicity_sys::c_jets::jets_wrapper::all_32, - Core::All64 => &simplicity_sys::c_jets::jets_wrapper::all_64, - Core::All8 => &simplicity_sys::c_jets::jets_wrapper::all_8, - Core::And1 => &simplicity_sys::c_jets::jets_wrapper::and_1, - Core::And16 => &simplicity_sys::c_jets::jets_wrapper::and_16, - Core::And32 => &simplicity_sys::c_jets::jets_wrapper::and_32, - Core::And64 => &simplicity_sys::c_jets::jets_wrapper::and_64, - Core::And8 => &simplicity_sys::c_jets::jets_wrapper::and_8, - Core::Bip0340Verify => &simplicity_sys::c_jets::jets_wrapper::bip_0340_verify, - Core::Ch1 => &simplicity_sys::c_jets::jets_wrapper::ch_1, - Core::Ch16 => &simplicity_sys::c_jets::jets_wrapper::ch_16, - Core::Ch32 => &simplicity_sys::c_jets::jets_wrapper::ch_32, - Core::Ch64 => &simplicity_sys::c_jets::jets_wrapper::ch_64, - Core::Ch8 => &simplicity_sys::c_jets::jets_wrapper::ch_8, - Core::CheckSigVerify => &simplicity_sys::c_jets::jets_wrapper::check_sig_verify, - Core::Complement1 => &simplicity_sys::c_jets::jets_wrapper::complement_1, - Core::Complement16 => &simplicity_sys::c_jets::jets_wrapper::complement_16, - Core::Complement32 => &simplicity_sys::c_jets::jets_wrapper::complement_32, - Core::Complement64 => &simplicity_sys::c_jets::jets_wrapper::complement_64, - Core::Complement8 => &simplicity_sys::c_jets::jets_wrapper::complement_8, - Core::Decompress => &simplicity_sys::c_jets::jets_wrapper::decompress, - Core::Decrement16 => &simplicity_sys::c_jets::jets_wrapper::decrement_16, - Core::Decrement32 => &simplicity_sys::c_jets::jets_wrapper::decrement_32, - Core::Decrement64 => &simplicity_sys::c_jets::jets_wrapper::decrement_64, - Core::Decrement8 => &simplicity_sys::c_jets::jets_wrapper::decrement_8, - Core::DivMod128_64 => &simplicity_sys::c_jets::jets_wrapper::div_mod_128_64, - Core::DivMod16 => &simplicity_sys::c_jets::jets_wrapper::div_mod_16, - Core::DivMod32 => &simplicity_sys::c_jets::jets_wrapper::div_mod_32, - Core::DivMod64 => &simplicity_sys::c_jets::jets_wrapper::div_mod_64, - Core::DivMod8 => &simplicity_sys::c_jets::jets_wrapper::div_mod_8, - Core::Divide16 => &simplicity_sys::c_jets::jets_wrapper::divide_16, - Core::Divide32 => &simplicity_sys::c_jets::jets_wrapper::divide_32, - Core::Divide64 => &simplicity_sys::c_jets::jets_wrapper::divide_64, - Core::Divide8 => &simplicity_sys::c_jets::jets_wrapper::divide_8, - Core::Divides16 => &simplicity_sys::c_jets::jets_wrapper::divides_16, - Core::Divides32 => &simplicity_sys::c_jets::jets_wrapper::divides_32, - Core::Divides64 => &simplicity_sys::c_jets::jets_wrapper::divides_64, - Core::Divides8 => &simplicity_sys::c_jets::jets_wrapper::divides_8, - Core::Eq1 => &simplicity_sys::c_jets::jets_wrapper::eq_1, - Core::Eq16 => &simplicity_sys::c_jets::jets_wrapper::eq_16, - Core::Eq256 => &simplicity_sys::c_jets::jets_wrapper::eq_256, - Core::Eq32 => &simplicity_sys::c_jets::jets_wrapper::eq_32, - Core::Eq64 => &simplicity_sys::c_jets::jets_wrapper::eq_64, - Core::Eq8 => &simplicity_sys::c_jets::jets_wrapper::eq_8, - Core::FeAdd => &simplicity_sys::c_jets::jets_wrapper::fe_add, - Core::FeInvert => &simplicity_sys::c_jets::jets_wrapper::fe_invert, - Core::FeIsOdd => &simplicity_sys::c_jets::jets_wrapper::fe_is_odd, - Core::FeIsZero => &simplicity_sys::c_jets::jets_wrapper::fe_is_zero, - Core::FeMultiply => &simplicity_sys::c_jets::jets_wrapper::fe_multiply, - Core::FeMultiplyBeta => &simplicity_sys::c_jets::jets_wrapper::fe_multiply_beta, - Core::FeNegate => &simplicity_sys::c_jets::jets_wrapper::fe_negate, - Core::FeNormalize => &simplicity_sys::c_jets::jets_wrapper::fe_normalize, - Core::FeSquare => &simplicity_sys::c_jets::jets_wrapper::fe_square, - Core::FeSquareRoot => &simplicity_sys::c_jets::jets_wrapper::fe_square_root, - Core::FullAdd16 => &simplicity_sys::c_jets::jets_wrapper::full_add_16, - Core::FullAdd32 => &simplicity_sys::c_jets::jets_wrapper::full_add_32, - Core::FullAdd64 => &simplicity_sys::c_jets::jets_wrapper::full_add_64, - Core::FullAdd8 => &simplicity_sys::c_jets::jets_wrapper::full_add_8, - Core::FullDecrement16 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_16, - Core::FullDecrement32 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_32, - Core::FullDecrement64 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_64, - Core::FullDecrement8 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_8, - Core::FullIncrement16 => &simplicity_sys::c_jets::jets_wrapper::full_increment_16, - Core::FullIncrement32 => &simplicity_sys::c_jets::jets_wrapper::full_increment_32, - Core::FullIncrement64 => &simplicity_sys::c_jets::jets_wrapper::full_increment_64, - Core::FullIncrement8 => &simplicity_sys::c_jets::jets_wrapper::full_increment_8, - Core::FullLeftShift16_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_1, - Core::FullLeftShift16_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_2, - Core::FullLeftShift16_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_4, - Core::FullLeftShift16_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_8, - Core::FullLeftShift32_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_1, - Core::FullLeftShift32_16 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_16, - Core::FullLeftShift32_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_2, - Core::FullLeftShift32_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_4, - Core::FullLeftShift32_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_8, - Core::FullLeftShift64_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_1, - Core::FullLeftShift64_16 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_16, - Core::FullLeftShift64_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_2, - Core::FullLeftShift64_32 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_32, - Core::FullLeftShift64_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_4, - Core::FullLeftShift64_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_8, - Core::FullLeftShift8_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_1, - Core::FullLeftShift8_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_2, - Core::FullLeftShift8_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_4, - Core::FullMultiply16 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_16, - Core::FullMultiply32 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_32, - Core::FullMultiply64 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_64, - Core::FullMultiply8 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_8, - Core::FullRightShift16_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_1, - Core::FullRightShift16_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_2, - Core::FullRightShift16_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_4, - Core::FullRightShift16_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_8, - Core::FullRightShift32_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_1, - Core::FullRightShift32_16 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_16, - Core::FullRightShift32_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_2, - Core::FullRightShift32_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_4, - Core::FullRightShift32_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_8, - Core::FullRightShift64_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_1, - Core::FullRightShift64_16 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_16, - Core::FullRightShift64_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_2, - Core::FullRightShift64_32 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_32, - Core::FullRightShift64_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_4, - Core::FullRightShift64_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_8, - Core::FullRightShift8_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_1, - Core::FullRightShift8_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_2, - Core::FullRightShift8_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_4, - Core::FullSubtract16 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_16, - Core::FullSubtract32 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_32, - Core::FullSubtract64 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_64, - Core::FullSubtract8 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_8, - Core::GeIsOnCurve => &simplicity_sys::c_jets::jets_wrapper::ge_is_on_curve, - Core::GeNegate => &simplicity_sys::c_jets::jets_wrapper::ge_negate, - Core::GejAdd => &simplicity_sys::c_jets::jets_wrapper::gej_add, - Core::GejDouble => &simplicity_sys::c_jets::jets_wrapper::gej_double, - Core::GejEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_equiv, - Core::GejGeAdd => &simplicity_sys::c_jets::jets_wrapper::gej_ge_add, - Core::GejGeAddEx => &simplicity_sys::c_jets::jets_wrapper::gej_ge_add_ex, - Core::GejGeEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_ge_equiv, - Core::GejInfinity => &simplicity_sys::c_jets::jets_wrapper::gej_infinity, - Core::GejIsInfinity => &simplicity_sys::c_jets::jets_wrapper::gej_is_infinity, - Core::GejIsOnCurve => &simplicity_sys::c_jets::jets_wrapper::gej_is_on_curve, - Core::GejNegate => &simplicity_sys::c_jets::jets_wrapper::gej_negate, - Core::GejNormalize => &simplicity_sys::c_jets::jets_wrapper::gej_normalize, - Core::GejRescale => &simplicity_sys::c_jets::jets_wrapper::gej_rescale, - Core::GejXEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_x_equiv, - Core::GejYIsOdd => &simplicity_sys::c_jets::jets_wrapper::gej_y_is_odd, - Core::Generate => &simplicity_sys::c_jets::jets_wrapper::generate, - Core::HashToCurve => &simplicity_sys::c_jets::jets_wrapper::hash_to_curve, - Core::High1 => &simplicity_sys::c_jets::jets_wrapper::high_1, - Core::High16 => &simplicity_sys::c_jets::jets_wrapper::high_16, - Core::High32 => &simplicity_sys::c_jets::jets_wrapper::high_32, - Core::High64 => &simplicity_sys::c_jets::jets_wrapper::high_64, - Core::High8 => &simplicity_sys::c_jets::jets_wrapper::high_8, - Core::Increment16 => &simplicity_sys::c_jets::jets_wrapper::increment_16, - Core::Increment32 => &simplicity_sys::c_jets::jets_wrapper::increment_32, - Core::Increment64 => &simplicity_sys::c_jets::jets_wrapper::increment_64, - Core::Increment8 => &simplicity_sys::c_jets::jets_wrapper::increment_8, - Core::IsOne16 => &simplicity_sys::c_jets::jets_wrapper::is_one_16, - Core::IsOne32 => &simplicity_sys::c_jets::jets_wrapper::is_one_32, - Core::IsOne64 => &simplicity_sys::c_jets::jets_wrapper::is_one_64, - Core::IsOne8 => &simplicity_sys::c_jets::jets_wrapper::is_one_8, - Core::IsZero16 => &simplicity_sys::c_jets::jets_wrapper::is_zero_16, - Core::IsZero32 => &simplicity_sys::c_jets::jets_wrapper::is_zero_32, - Core::IsZero64 => &simplicity_sys::c_jets::jets_wrapper::is_zero_64, - Core::IsZero8 => &simplicity_sys::c_jets::jets_wrapper::is_zero_8, - Core::Le16 => &simplicity_sys::c_jets::jets_wrapper::le_16, - Core::Le32 => &simplicity_sys::c_jets::jets_wrapper::le_32, - Core::Le64 => &simplicity_sys::c_jets::jets_wrapper::le_64, - Core::Le8 => &simplicity_sys::c_jets::jets_wrapper::le_8, - Core::LeftExtend16_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_16_32, - Core::LeftExtend16_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_16_64, - Core::LeftExtend1_16 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_16, - Core::LeftExtend1_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_32, - Core::LeftExtend1_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_64, - Core::LeftExtend1_8 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_8, - Core::LeftExtend32_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_32_64, - Core::LeftExtend8_16 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_16, - Core::LeftExtend8_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_32, - Core::LeftExtend8_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_64, - Core::LeftPadHigh16_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_32, - Core::LeftPadHigh16_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_64, - Core::LeftPadHigh1_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_16, - Core::LeftPadHigh1_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_32, - Core::LeftPadHigh1_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_64, - Core::LeftPadHigh1_8 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_8, - Core::LeftPadHigh32_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_32_64, - Core::LeftPadHigh8_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_16, - Core::LeftPadHigh8_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_32, - Core::LeftPadHigh8_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_64, - Core::LeftPadLow16_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_32, - Core::LeftPadLow16_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_64, - Core::LeftPadLow1_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_16, - Core::LeftPadLow1_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_32, - Core::LeftPadLow1_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_64, - Core::LeftPadLow1_8 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_8, - Core::LeftPadLow32_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_32_64, - Core::LeftPadLow8_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_16, - Core::LeftPadLow8_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_32, - Core::LeftPadLow8_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_64, - Core::LeftRotate16 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_16, - Core::LeftRotate32 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_32, - Core::LeftRotate64 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_64, - Core::LeftRotate8 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_8, - Core::LeftShift16 => &simplicity_sys::c_jets::jets_wrapper::left_shift_16, - Core::LeftShift32 => &simplicity_sys::c_jets::jets_wrapper::left_shift_32, - Core::LeftShift64 => &simplicity_sys::c_jets::jets_wrapper::left_shift_64, - Core::LeftShift8 => &simplicity_sys::c_jets::jets_wrapper::left_shift_8, - Core::LeftShiftWith16 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_16, - Core::LeftShiftWith32 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_32, - Core::LeftShiftWith64 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_64, - Core::LeftShiftWith8 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_8, - Core::Leftmost16_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_1, - Core::Leftmost16_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_2, - Core::Leftmost16_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_4, - Core::Leftmost16_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_8, - Core::Leftmost32_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_1, - Core::Leftmost32_16 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_16, - Core::Leftmost32_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_2, - Core::Leftmost32_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_4, - Core::Leftmost32_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_8, - Core::Leftmost64_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_1, - Core::Leftmost64_16 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_16, - Core::Leftmost64_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_2, - Core::Leftmost64_32 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_32, - Core::Leftmost64_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_4, - Core::Leftmost64_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_8, - Core::Leftmost8_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_1, - Core::Leftmost8_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_2, - Core::Leftmost8_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_4, - Core::LinearCombination1 => &simplicity_sys::c_jets::jets_wrapper::linear_combination_1, - Core::LinearVerify1 => &simplicity_sys::c_jets::jets_wrapper::linear_verify_1, - Core::Low1 => &simplicity_sys::c_jets::jets_wrapper::low_1, - Core::Low16 => &simplicity_sys::c_jets::jets_wrapper::low_16, - Core::Low32 => &simplicity_sys::c_jets::jets_wrapper::low_32, - Core::Low64 => &simplicity_sys::c_jets::jets_wrapper::low_64, - Core::Low8 => &simplicity_sys::c_jets::jets_wrapper::low_8, - Core::Lt16 => &simplicity_sys::c_jets::jets_wrapper::lt_16, - Core::Lt32 => &simplicity_sys::c_jets::jets_wrapper::lt_32, - Core::Lt64 => &simplicity_sys::c_jets::jets_wrapper::lt_64, - Core::Lt8 => &simplicity_sys::c_jets::jets_wrapper::lt_8, - Core::Maj1 => &simplicity_sys::c_jets::jets_wrapper::maj_1, - Core::Maj16 => &simplicity_sys::c_jets::jets_wrapper::maj_16, - Core::Maj32 => &simplicity_sys::c_jets::jets_wrapper::maj_32, - Core::Maj64 => &simplicity_sys::c_jets::jets_wrapper::maj_64, - Core::Maj8 => &simplicity_sys::c_jets::jets_wrapper::maj_8, - Core::Max16 => &simplicity_sys::c_jets::jets_wrapper::max_16, - Core::Max32 => &simplicity_sys::c_jets::jets_wrapper::max_32, - Core::Max64 => &simplicity_sys::c_jets::jets_wrapper::max_64, - Core::Max8 => &simplicity_sys::c_jets::jets_wrapper::max_8, - Core::Median16 => &simplicity_sys::c_jets::jets_wrapper::median_16, - Core::Median32 => &simplicity_sys::c_jets::jets_wrapper::median_32, - Core::Median64 => &simplicity_sys::c_jets::jets_wrapper::median_64, - Core::Median8 => &simplicity_sys::c_jets::jets_wrapper::median_8, - Core::Min16 => &simplicity_sys::c_jets::jets_wrapper::min_16, - Core::Min32 => &simplicity_sys::c_jets::jets_wrapper::min_32, - Core::Min64 => &simplicity_sys::c_jets::jets_wrapper::min_64, - Core::Min8 => &simplicity_sys::c_jets::jets_wrapper::min_8, - Core::Modulo16 => &simplicity_sys::c_jets::jets_wrapper::modulo_16, - Core::Modulo32 => &simplicity_sys::c_jets::jets_wrapper::modulo_32, - Core::Modulo64 => &simplicity_sys::c_jets::jets_wrapper::modulo_64, - Core::Modulo8 => &simplicity_sys::c_jets::jets_wrapper::modulo_8, - Core::Multiply16 => &simplicity_sys::c_jets::jets_wrapper::multiply_16, - Core::Multiply32 => &simplicity_sys::c_jets::jets_wrapper::multiply_32, - Core::Multiply64 => &simplicity_sys::c_jets::jets_wrapper::multiply_64, - Core::Multiply8 => &simplicity_sys::c_jets::jets_wrapper::multiply_8, - Core::Negate16 => &simplicity_sys::c_jets::jets_wrapper::negate_16, - Core::Negate32 => &simplicity_sys::c_jets::jets_wrapper::negate_32, - Core::Negate64 => &simplicity_sys::c_jets::jets_wrapper::negate_64, - Core::Negate8 => &simplicity_sys::c_jets::jets_wrapper::negate_8, - Core::One16 => &simplicity_sys::c_jets::jets_wrapper::one_16, - Core::One32 => &simplicity_sys::c_jets::jets_wrapper::one_32, - Core::One64 => &simplicity_sys::c_jets::jets_wrapper::one_64, - Core::One8 => &simplicity_sys::c_jets::jets_wrapper::one_8, - Core::Or1 => &simplicity_sys::c_jets::jets_wrapper::or_1, - Core::Or16 => &simplicity_sys::c_jets::jets_wrapper::or_16, - Core::Or32 => &simplicity_sys::c_jets::jets_wrapper::or_32, - Core::Or64 => &simplicity_sys::c_jets::jets_wrapper::or_64, - Core::Or8 => &simplicity_sys::c_jets::jets_wrapper::or_8, - Core::ParseLock => &simplicity_sys::c_jets::jets_wrapper::parse_lock, - Core::ParseSequence => &simplicity_sys::c_jets::jets_wrapper::parse_sequence, - Core::PointVerify1 => &simplicity_sys::c_jets::jets_wrapper::point_verify_1, - Core::RightExtend16_32 => &simplicity_sys::c_jets::jets_wrapper::right_extend_16_32, - Core::RightExtend16_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_16_64, - Core::RightExtend32_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_32_64, - Core::RightExtend8_16 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_16, - Core::RightExtend8_32 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_32, - Core::RightExtend8_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_64, - Core::RightPadHigh16_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_32, - Core::RightPadHigh16_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_64, - Core::RightPadHigh1_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_16, - Core::RightPadHigh1_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_32, - Core::RightPadHigh1_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_64, - Core::RightPadHigh1_8 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_8, - Core::RightPadHigh32_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_32_64, - Core::RightPadHigh8_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_16, - Core::RightPadHigh8_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_32, - Core::RightPadHigh8_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_64, - Core::RightPadLow16_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_32, - Core::RightPadLow16_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_64, - Core::RightPadLow1_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_16, - Core::RightPadLow1_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_32, - Core::RightPadLow1_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_64, - Core::RightPadLow1_8 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_8, - Core::RightPadLow32_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_32_64, - Core::RightPadLow8_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_16, - Core::RightPadLow8_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_32, - Core::RightPadLow8_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_64, - Core::RightRotate16 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_16, - Core::RightRotate32 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_32, - Core::RightRotate64 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_64, - Core::RightRotate8 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_8, - Core::RightShift16 => &simplicity_sys::c_jets::jets_wrapper::right_shift_16, - Core::RightShift32 => &simplicity_sys::c_jets::jets_wrapper::right_shift_32, - Core::RightShift64 => &simplicity_sys::c_jets::jets_wrapper::right_shift_64, - Core::RightShift8 => &simplicity_sys::c_jets::jets_wrapper::right_shift_8, - Core::RightShiftWith16 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_16, - Core::RightShiftWith32 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_32, - Core::RightShiftWith64 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_64, - Core::RightShiftWith8 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_8, - Core::Rightmost16_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_1, - Core::Rightmost16_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_2, - Core::Rightmost16_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_4, - Core::Rightmost16_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_8, - Core::Rightmost32_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_1, - Core::Rightmost32_16 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_16, - Core::Rightmost32_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_2, - Core::Rightmost32_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_4, - Core::Rightmost32_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_8, - Core::Rightmost64_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_1, - Core::Rightmost64_16 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_16, - Core::Rightmost64_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_2, - Core::Rightmost64_32 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_32, - Core::Rightmost64_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_4, - Core::Rightmost64_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_8, - Core::Rightmost8_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_1, - Core::Rightmost8_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_2, - Core::Rightmost8_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_4, - Core::ScalarAdd => &simplicity_sys::c_jets::jets_wrapper::scalar_add, - Core::ScalarInvert => &simplicity_sys::c_jets::jets_wrapper::scalar_invert, - Core::ScalarIsZero => &simplicity_sys::c_jets::jets_wrapper::scalar_is_zero, - Core::ScalarMultiply => &simplicity_sys::c_jets::jets_wrapper::scalar_multiply, - Core::ScalarMultiplyLambda => &simplicity_sys::c_jets::jets_wrapper::scalar_multiply_lambda, - Core::ScalarNegate => &simplicity_sys::c_jets::jets_wrapper::scalar_negate, - Core::ScalarNormalize => &simplicity_sys::c_jets::jets_wrapper::scalar_normalize, - Core::ScalarSquare => &simplicity_sys::c_jets::jets_wrapper::scalar_square, - Core::Scale => &simplicity_sys::c_jets::jets_wrapper::scale, - Core::Sha256Block => &simplicity_sys::c_jets::jets_wrapper::sha_256_block, - Core::Sha256Ctx8Add1 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_1, - Core::Sha256Ctx8Add128 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_128, - Core::Sha256Ctx8Add16 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_16, - Core::Sha256Ctx8Add2 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_2, - Core::Sha256Ctx8Add256 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_256, - Core::Sha256Ctx8Add32 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_32, - Core::Sha256Ctx8Add4 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_4, - Core::Sha256Ctx8Add512 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_512, - Core::Sha256Ctx8Add64 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_64, - Core::Sha256Ctx8Add8 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_8, - Core::Sha256Ctx8AddBuffer511 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_buffer_511, - Core::Sha256Ctx8Finalize => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_finalize, - Core::Sha256Ctx8Init => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_init, - Core::Sha256Iv => &simplicity_sys::c_jets::jets_wrapper::sha_256_iv, - Core::Some1 => &simplicity_sys::c_jets::jets_wrapper::some_1, - Core::Some16 => &simplicity_sys::c_jets::jets_wrapper::some_16, - Core::Some32 => &simplicity_sys::c_jets::jets_wrapper::some_32, - Core::Some64 => &simplicity_sys::c_jets::jets_wrapper::some_64, - Core::Some8 => &simplicity_sys::c_jets::jets_wrapper::some_8, - Core::Subtract16 => &simplicity_sys::c_jets::jets_wrapper::subtract_16, - Core::Subtract32 => &simplicity_sys::c_jets::jets_wrapper::subtract_32, - Core::Subtract64 => &simplicity_sys::c_jets::jets_wrapper::subtract_64, - Core::Subtract8 => &simplicity_sys::c_jets::jets_wrapper::subtract_8, - Core::Swu => &simplicity_sys::c_jets::jets_wrapper::swu, - Core::TapdataInit => &simplicity_sys::c_jets::jets_wrapper::tapdata_init, - Core::Verify => &simplicity_sys::c_jets::jets_wrapper::verify, - Core::Xor1 => &simplicity_sys::c_jets::jets_wrapper::xor_1, - Core::Xor16 => &simplicity_sys::c_jets::jets_wrapper::xor_16, - Core::Xor32 => &simplicity_sys::c_jets::jets_wrapper::xor_32, - Core::Xor64 => &simplicity_sys::c_jets::jets_wrapper::xor_64, - Core::Xor8 => &simplicity_sys::c_jets::jets_wrapper::xor_8, - Core::XorXor1 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_1, - Core::XorXor16 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_16, - Core::XorXor32 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_32, - Core::XorXor64 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_64, - Core::XorXor8 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_8, - } - } - fn cost(&self) -> Cost { match self { Core::Add16 => Cost::from_milliweight(80), @@ -7517,5 +4856,2659 @@ impl str::FromStr for Core { "xor_xor_8" => Ok(Core::XorXor8), x => Err(crate::Error::InvalidJetName(x.to_owned())), } - } + } +} + +pub(crate) fn c_jet_ptr(jet: &Core) -> fn(&mut CFrameItem, CFrameItem, &()) -> bool { + match jet { + Core::Add16 => simplicity_sys::c_jets::jets_wrapper::add_16, + Core::Add32 => simplicity_sys::c_jets::jets_wrapper::add_32, + Core::Add64 => simplicity_sys::c_jets::jets_wrapper::add_64, + Core::Add8 => simplicity_sys::c_jets::jets_wrapper::add_8, + Core::All16 => simplicity_sys::c_jets::jets_wrapper::all_16, + Core::All32 => simplicity_sys::c_jets::jets_wrapper::all_32, + Core::All64 => simplicity_sys::c_jets::jets_wrapper::all_64, + Core::All8 => simplicity_sys::c_jets::jets_wrapper::all_8, + Core::And1 => simplicity_sys::c_jets::jets_wrapper::and_1, + Core::And16 => simplicity_sys::c_jets::jets_wrapper::and_16, + Core::And32 => simplicity_sys::c_jets::jets_wrapper::and_32, + Core::And64 => simplicity_sys::c_jets::jets_wrapper::and_64, + Core::And8 => simplicity_sys::c_jets::jets_wrapper::and_8, + Core::Bip0340Verify => simplicity_sys::c_jets::jets_wrapper::bip_0340_verify, + Core::Ch1 => simplicity_sys::c_jets::jets_wrapper::ch_1, + Core::Ch16 => simplicity_sys::c_jets::jets_wrapper::ch_16, + Core::Ch32 => simplicity_sys::c_jets::jets_wrapper::ch_32, + Core::Ch64 => simplicity_sys::c_jets::jets_wrapper::ch_64, + Core::Ch8 => simplicity_sys::c_jets::jets_wrapper::ch_8, + Core::CheckSigVerify => simplicity_sys::c_jets::jets_wrapper::check_sig_verify, + Core::Complement1 => simplicity_sys::c_jets::jets_wrapper::complement_1, + Core::Complement16 => simplicity_sys::c_jets::jets_wrapper::complement_16, + Core::Complement32 => simplicity_sys::c_jets::jets_wrapper::complement_32, + Core::Complement64 => simplicity_sys::c_jets::jets_wrapper::complement_64, + Core::Complement8 => simplicity_sys::c_jets::jets_wrapper::complement_8, + Core::Decompress => simplicity_sys::c_jets::jets_wrapper::decompress, + Core::Decrement16 => simplicity_sys::c_jets::jets_wrapper::decrement_16, + Core::Decrement32 => simplicity_sys::c_jets::jets_wrapper::decrement_32, + Core::Decrement64 => simplicity_sys::c_jets::jets_wrapper::decrement_64, + Core::Decrement8 => simplicity_sys::c_jets::jets_wrapper::decrement_8, + Core::DivMod128_64 => simplicity_sys::c_jets::jets_wrapper::div_mod_128_64, + Core::DivMod16 => simplicity_sys::c_jets::jets_wrapper::div_mod_16, + Core::DivMod32 => simplicity_sys::c_jets::jets_wrapper::div_mod_32, + Core::DivMod64 => simplicity_sys::c_jets::jets_wrapper::div_mod_64, + Core::DivMod8 => simplicity_sys::c_jets::jets_wrapper::div_mod_8, + Core::Divide16 => simplicity_sys::c_jets::jets_wrapper::divide_16, + Core::Divide32 => simplicity_sys::c_jets::jets_wrapper::divide_32, + Core::Divide64 => simplicity_sys::c_jets::jets_wrapper::divide_64, + Core::Divide8 => simplicity_sys::c_jets::jets_wrapper::divide_8, + Core::Divides16 => simplicity_sys::c_jets::jets_wrapper::divides_16, + Core::Divides32 => simplicity_sys::c_jets::jets_wrapper::divides_32, + Core::Divides64 => simplicity_sys::c_jets::jets_wrapper::divides_64, + Core::Divides8 => simplicity_sys::c_jets::jets_wrapper::divides_8, + Core::Eq1 => simplicity_sys::c_jets::jets_wrapper::eq_1, + Core::Eq16 => simplicity_sys::c_jets::jets_wrapper::eq_16, + Core::Eq256 => simplicity_sys::c_jets::jets_wrapper::eq_256, + Core::Eq32 => simplicity_sys::c_jets::jets_wrapper::eq_32, + Core::Eq64 => simplicity_sys::c_jets::jets_wrapper::eq_64, + Core::Eq8 => simplicity_sys::c_jets::jets_wrapper::eq_8, + Core::FeAdd => simplicity_sys::c_jets::jets_wrapper::fe_add, + Core::FeInvert => simplicity_sys::c_jets::jets_wrapper::fe_invert, + Core::FeIsOdd => simplicity_sys::c_jets::jets_wrapper::fe_is_odd, + Core::FeIsZero => simplicity_sys::c_jets::jets_wrapper::fe_is_zero, + Core::FeMultiply => simplicity_sys::c_jets::jets_wrapper::fe_multiply, + Core::FeMultiplyBeta => simplicity_sys::c_jets::jets_wrapper::fe_multiply_beta, + Core::FeNegate => simplicity_sys::c_jets::jets_wrapper::fe_negate, + Core::FeNormalize => simplicity_sys::c_jets::jets_wrapper::fe_normalize, + Core::FeSquare => simplicity_sys::c_jets::jets_wrapper::fe_square, + Core::FeSquareRoot => simplicity_sys::c_jets::jets_wrapper::fe_square_root, + Core::FullAdd16 => simplicity_sys::c_jets::jets_wrapper::full_add_16, + Core::FullAdd32 => simplicity_sys::c_jets::jets_wrapper::full_add_32, + Core::FullAdd64 => simplicity_sys::c_jets::jets_wrapper::full_add_64, + Core::FullAdd8 => simplicity_sys::c_jets::jets_wrapper::full_add_8, + Core::FullDecrement16 => simplicity_sys::c_jets::jets_wrapper::full_decrement_16, + Core::FullDecrement32 => simplicity_sys::c_jets::jets_wrapper::full_decrement_32, + Core::FullDecrement64 => simplicity_sys::c_jets::jets_wrapper::full_decrement_64, + Core::FullDecrement8 => simplicity_sys::c_jets::jets_wrapper::full_decrement_8, + Core::FullIncrement16 => simplicity_sys::c_jets::jets_wrapper::full_increment_16, + Core::FullIncrement32 => simplicity_sys::c_jets::jets_wrapper::full_increment_32, + Core::FullIncrement64 => simplicity_sys::c_jets::jets_wrapper::full_increment_64, + Core::FullIncrement8 => simplicity_sys::c_jets::jets_wrapper::full_increment_8, + Core::FullLeftShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_1, + Core::FullLeftShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_2, + Core::FullLeftShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_4, + Core::FullLeftShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_8, + Core::FullLeftShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_1, + Core::FullLeftShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_16, + Core::FullLeftShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_2, + Core::FullLeftShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_4, + Core::FullLeftShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_8, + Core::FullLeftShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_1, + Core::FullLeftShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_16, + Core::FullLeftShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_2, + Core::FullLeftShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_32, + Core::FullLeftShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_4, + Core::FullLeftShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_8, + Core::FullLeftShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_1, + Core::FullLeftShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_2, + Core::FullLeftShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_4, + Core::FullMultiply16 => simplicity_sys::c_jets::jets_wrapper::full_multiply_16, + Core::FullMultiply32 => simplicity_sys::c_jets::jets_wrapper::full_multiply_32, + Core::FullMultiply64 => simplicity_sys::c_jets::jets_wrapper::full_multiply_64, + Core::FullMultiply8 => simplicity_sys::c_jets::jets_wrapper::full_multiply_8, + Core::FullRightShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_1, + Core::FullRightShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_2, + Core::FullRightShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_4, + Core::FullRightShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_8, + Core::FullRightShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_1, + Core::FullRightShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_16, + Core::FullRightShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_2, + Core::FullRightShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_4, + Core::FullRightShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_8, + Core::FullRightShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_1, + Core::FullRightShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_16, + Core::FullRightShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_2, + Core::FullRightShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_32, + Core::FullRightShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_4, + Core::FullRightShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_8, + Core::FullRightShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_1, + Core::FullRightShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_2, + Core::FullRightShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_4, + Core::FullSubtract16 => simplicity_sys::c_jets::jets_wrapper::full_subtract_16, + Core::FullSubtract32 => simplicity_sys::c_jets::jets_wrapper::full_subtract_32, + Core::FullSubtract64 => simplicity_sys::c_jets::jets_wrapper::full_subtract_64, + Core::FullSubtract8 => simplicity_sys::c_jets::jets_wrapper::full_subtract_8, + Core::GeIsOnCurve => simplicity_sys::c_jets::jets_wrapper::ge_is_on_curve, + Core::GeNegate => simplicity_sys::c_jets::jets_wrapper::ge_negate, + Core::GejAdd => simplicity_sys::c_jets::jets_wrapper::gej_add, + Core::GejDouble => simplicity_sys::c_jets::jets_wrapper::gej_double, + Core::GejEquiv => simplicity_sys::c_jets::jets_wrapper::gej_equiv, + Core::GejGeAdd => simplicity_sys::c_jets::jets_wrapper::gej_ge_add, + Core::GejGeAddEx => simplicity_sys::c_jets::jets_wrapper::gej_ge_add_ex, + Core::GejGeEquiv => simplicity_sys::c_jets::jets_wrapper::gej_ge_equiv, + Core::GejInfinity => simplicity_sys::c_jets::jets_wrapper::gej_infinity, + Core::GejIsInfinity => simplicity_sys::c_jets::jets_wrapper::gej_is_infinity, + Core::GejIsOnCurve => simplicity_sys::c_jets::jets_wrapper::gej_is_on_curve, + Core::GejNegate => simplicity_sys::c_jets::jets_wrapper::gej_negate, + Core::GejNormalize => simplicity_sys::c_jets::jets_wrapper::gej_normalize, + Core::GejRescale => simplicity_sys::c_jets::jets_wrapper::gej_rescale, + Core::GejXEquiv => simplicity_sys::c_jets::jets_wrapper::gej_x_equiv, + Core::GejYIsOdd => simplicity_sys::c_jets::jets_wrapper::gej_y_is_odd, + Core::Generate => simplicity_sys::c_jets::jets_wrapper::generate, + Core::HashToCurve => simplicity_sys::c_jets::jets_wrapper::hash_to_curve, + Core::High1 => simplicity_sys::c_jets::jets_wrapper::high_1, + Core::High16 => simplicity_sys::c_jets::jets_wrapper::high_16, + Core::High32 => simplicity_sys::c_jets::jets_wrapper::high_32, + Core::High64 => simplicity_sys::c_jets::jets_wrapper::high_64, + Core::High8 => simplicity_sys::c_jets::jets_wrapper::high_8, + Core::Increment16 => simplicity_sys::c_jets::jets_wrapper::increment_16, + Core::Increment32 => simplicity_sys::c_jets::jets_wrapper::increment_32, + Core::Increment64 => simplicity_sys::c_jets::jets_wrapper::increment_64, + Core::Increment8 => simplicity_sys::c_jets::jets_wrapper::increment_8, + Core::IsOne16 => simplicity_sys::c_jets::jets_wrapper::is_one_16, + Core::IsOne32 => simplicity_sys::c_jets::jets_wrapper::is_one_32, + Core::IsOne64 => simplicity_sys::c_jets::jets_wrapper::is_one_64, + Core::IsOne8 => simplicity_sys::c_jets::jets_wrapper::is_one_8, + Core::IsZero16 => simplicity_sys::c_jets::jets_wrapper::is_zero_16, + Core::IsZero32 => simplicity_sys::c_jets::jets_wrapper::is_zero_32, + Core::IsZero64 => simplicity_sys::c_jets::jets_wrapper::is_zero_64, + Core::IsZero8 => simplicity_sys::c_jets::jets_wrapper::is_zero_8, + Core::Le16 => simplicity_sys::c_jets::jets_wrapper::le_16, + Core::Le32 => simplicity_sys::c_jets::jets_wrapper::le_32, + Core::Le64 => simplicity_sys::c_jets::jets_wrapper::le_64, + Core::Le8 => simplicity_sys::c_jets::jets_wrapper::le_8, + Core::LeftExtend16_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_32, + Core::LeftExtend16_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_64, + Core::LeftExtend1_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_16, + Core::LeftExtend1_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_32, + Core::LeftExtend1_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_64, + Core::LeftExtend1_8 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_8, + Core::LeftExtend32_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_32_64, + Core::LeftExtend8_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_16, + Core::LeftExtend8_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_32, + Core::LeftExtend8_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_64, + Core::LeftPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_32, + Core::LeftPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_64, + Core::LeftPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_16, + Core::LeftPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_32, + Core::LeftPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_64, + Core::LeftPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_8, + Core::LeftPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_32_64, + Core::LeftPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_16, + Core::LeftPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_32, + Core::LeftPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_64, + Core::LeftPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_32, + Core::LeftPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_64, + Core::LeftPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_16, + Core::LeftPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_32, + Core::LeftPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_64, + Core::LeftPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_8, + Core::LeftPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_32_64, + Core::LeftPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_16, + Core::LeftPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_32, + Core::LeftPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_64, + Core::LeftRotate16 => simplicity_sys::c_jets::jets_wrapper::left_rotate_16, + Core::LeftRotate32 => simplicity_sys::c_jets::jets_wrapper::left_rotate_32, + Core::LeftRotate64 => simplicity_sys::c_jets::jets_wrapper::left_rotate_64, + Core::LeftRotate8 => simplicity_sys::c_jets::jets_wrapper::left_rotate_8, + Core::LeftShift16 => simplicity_sys::c_jets::jets_wrapper::left_shift_16, + Core::LeftShift32 => simplicity_sys::c_jets::jets_wrapper::left_shift_32, + Core::LeftShift64 => simplicity_sys::c_jets::jets_wrapper::left_shift_64, + Core::LeftShift8 => simplicity_sys::c_jets::jets_wrapper::left_shift_8, + Core::LeftShiftWith16 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_16, + Core::LeftShiftWith32 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_32, + Core::LeftShiftWith64 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_64, + Core::LeftShiftWith8 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_8, + Core::Leftmost16_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_1, + Core::Leftmost16_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_2, + Core::Leftmost16_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_4, + Core::Leftmost16_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_8, + Core::Leftmost32_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_1, + Core::Leftmost32_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_16, + Core::Leftmost32_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_2, + Core::Leftmost32_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_4, + Core::Leftmost32_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_8, + Core::Leftmost64_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_1, + Core::Leftmost64_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_16, + Core::Leftmost64_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_2, + Core::Leftmost64_32 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_32, + Core::Leftmost64_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_4, + Core::Leftmost64_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_8, + Core::Leftmost8_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_1, + Core::Leftmost8_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_2, + Core::Leftmost8_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_4, + Core::LinearCombination1 => simplicity_sys::c_jets::jets_wrapper::linear_combination_1, + Core::LinearVerify1 => simplicity_sys::c_jets::jets_wrapper::linear_verify_1, + Core::Low1 => simplicity_sys::c_jets::jets_wrapper::low_1, + Core::Low16 => simplicity_sys::c_jets::jets_wrapper::low_16, + Core::Low32 => simplicity_sys::c_jets::jets_wrapper::low_32, + Core::Low64 => simplicity_sys::c_jets::jets_wrapper::low_64, + Core::Low8 => simplicity_sys::c_jets::jets_wrapper::low_8, + Core::Lt16 => simplicity_sys::c_jets::jets_wrapper::lt_16, + Core::Lt32 => simplicity_sys::c_jets::jets_wrapper::lt_32, + Core::Lt64 => simplicity_sys::c_jets::jets_wrapper::lt_64, + Core::Lt8 => simplicity_sys::c_jets::jets_wrapper::lt_8, + Core::Maj1 => simplicity_sys::c_jets::jets_wrapper::maj_1, + Core::Maj16 => simplicity_sys::c_jets::jets_wrapper::maj_16, + Core::Maj32 => simplicity_sys::c_jets::jets_wrapper::maj_32, + Core::Maj64 => simplicity_sys::c_jets::jets_wrapper::maj_64, + Core::Maj8 => simplicity_sys::c_jets::jets_wrapper::maj_8, + Core::Max16 => simplicity_sys::c_jets::jets_wrapper::max_16, + Core::Max32 => simplicity_sys::c_jets::jets_wrapper::max_32, + Core::Max64 => simplicity_sys::c_jets::jets_wrapper::max_64, + Core::Max8 => simplicity_sys::c_jets::jets_wrapper::max_8, + Core::Median16 => simplicity_sys::c_jets::jets_wrapper::median_16, + Core::Median32 => simplicity_sys::c_jets::jets_wrapper::median_32, + Core::Median64 => simplicity_sys::c_jets::jets_wrapper::median_64, + Core::Median8 => simplicity_sys::c_jets::jets_wrapper::median_8, + Core::Min16 => simplicity_sys::c_jets::jets_wrapper::min_16, + Core::Min32 => simplicity_sys::c_jets::jets_wrapper::min_32, + Core::Min64 => simplicity_sys::c_jets::jets_wrapper::min_64, + Core::Min8 => simplicity_sys::c_jets::jets_wrapper::min_8, + Core::Modulo16 => simplicity_sys::c_jets::jets_wrapper::modulo_16, + Core::Modulo32 => simplicity_sys::c_jets::jets_wrapper::modulo_32, + Core::Modulo64 => simplicity_sys::c_jets::jets_wrapper::modulo_64, + Core::Modulo8 => simplicity_sys::c_jets::jets_wrapper::modulo_8, + Core::Multiply16 => simplicity_sys::c_jets::jets_wrapper::multiply_16, + Core::Multiply32 => simplicity_sys::c_jets::jets_wrapper::multiply_32, + Core::Multiply64 => simplicity_sys::c_jets::jets_wrapper::multiply_64, + Core::Multiply8 => simplicity_sys::c_jets::jets_wrapper::multiply_8, + Core::Negate16 => simplicity_sys::c_jets::jets_wrapper::negate_16, + Core::Negate32 => simplicity_sys::c_jets::jets_wrapper::negate_32, + Core::Negate64 => simplicity_sys::c_jets::jets_wrapper::negate_64, + Core::Negate8 => simplicity_sys::c_jets::jets_wrapper::negate_8, + Core::One16 => simplicity_sys::c_jets::jets_wrapper::one_16, + Core::One32 => simplicity_sys::c_jets::jets_wrapper::one_32, + Core::One64 => simplicity_sys::c_jets::jets_wrapper::one_64, + Core::One8 => simplicity_sys::c_jets::jets_wrapper::one_8, + Core::Or1 => simplicity_sys::c_jets::jets_wrapper::or_1, + Core::Or16 => simplicity_sys::c_jets::jets_wrapper::or_16, + Core::Or32 => simplicity_sys::c_jets::jets_wrapper::or_32, + Core::Or64 => simplicity_sys::c_jets::jets_wrapper::or_64, + Core::Or8 => simplicity_sys::c_jets::jets_wrapper::or_8, + Core::ParseLock => simplicity_sys::c_jets::jets_wrapper::parse_lock, + Core::ParseSequence => simplicity_sys::c_jets::jets_wrapper::parse_sequence, + Core::PointVerify1 => simplicity_sys::c_jets::jets_wrapper::point_verify_1, + Core::RightExtend16_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_32, + Core::RightExtend16_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_64, + Core::RightExtend32_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_32_64, + Core::RightExtend8_16 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_16, + Core::RightExtend8_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_32, + Core::RightExtend8_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_64, + Core::RightPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_32, + Core::RightPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_64, + Core::RightPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_16, + Core::RightPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_32, + Core::RightPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_64, + Core::RightPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_8, + Core::RightPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_32_64, + Core::RightPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_16, + Core::RightPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_32, + Core::RightPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_64, + Core::RightPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_32, + Core::RightPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_64, + Core::RightPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_16, + Core::RightPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_32, + Core::RightPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_64, + Core::RightPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_8, + Core::RightPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_32_64, + Core::RightPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_16, + Core::RightPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_32, + Core::RightPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_64, + Core::RightRotate16 => simplicity_sys::c_jets::jets_wrapper::right_rotate_16, + Core::RightRotate32 => simplicity_sys::c_jets::jets_wrapper::right_rotate_32, + Core::RightRotate64 => simplicity_sys::c_jets::jets_wrapper::right_rotate_64, + Core::RightRotate8 => simplicity_sys::c_jets::jets_wrapper::right_rotate_8, + Core::RightShift16 => simplicity_sys::c_jets::jets_wrapper::right_shift_16, + Core::RightShift32 => simplicity_sys::c_jets::jets_wrapper::right_shift_32, + Core::RightShift64 => simplicity_sys::c_jets::jets_wrapper::right_shift_64, + Core::RightShift8 => simplicity_sys::c_jets::jets_wrapper::right_shift_8, + Core::RightShiftWith16 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_16, + Core::RightShiftWith32 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_32, + Core::RightShiftWith64 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_64, + Core::RightShiftWith8 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_8, + Core::Rightmost16_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_1, + Core::Rightmost16_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_2, + Core::Rightmost16_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_4, + Core::Rightmost16_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_8, + Core::Rightmost32_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_1, + Core::Rightmost32_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_16, + Core::Rightmost32_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_2, + Core::Rightmost32_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_4, + Core::Rightmost32_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_8, + Core::Rightmost64_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_1, + Core::Rightmost64_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_16, + Core::Rightmost64_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_2, + Core::Rightmost64_32 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_32, + Core::Rightmost64_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_4, + Core::Rightmost64_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_8, + Core::Rightmost8_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_1, + Core::Rightmost8_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_2, + Core::Rightmost8_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_4, + Core::ScalarAdd => simplicity_sys::c_jets::jets_wrapper::scalar_add, + Core::ScalarInvert => simplicity_sys::c_jets::jets_wrapper::scalar_invert, + Core::ScalarIsZero => simplicity_sys::c_jets::jets_wrapper::scalar_is_zero, + Core::ScalarMultiply => simplicity_sys::c_jets::jets_wrapper::scalar_multiply, + Core::ScalarMultiplyLambda => simplicity_sys::c_jets::jets_wrapper::scalar_multiply_lambda, + Core::ScalarNegate => simplicity_sys::c_jets::jets_wrapper::scalar_negate, + Core::ScalarNormalize => simplicity_sys::c_jets::jets_wrapper::scalar_normalize, + Core::ScalarSquare => simplicity_sys::c_jets::jets_wrapper::scalar_square, + Core::Scale => simplicity_sys::c_jets::jets_wrapper::scale, + Core::Sha256Block => simplicity_sys::c_jets::jets_wrapper::sha_256_block, + Core::Sha256Ctx8Add1 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_1, + Core::Sha256Ctx8Add128 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_128, + Core::Sha256Ctx8Add16 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_16, + Core::Sha256Ctx8Add2 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_2, + Core::Sha256Ctx8Add256 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_256, + Core::Sha256Ctx8Add32 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_32, + Core::Sha256Ctx8Add4 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_4, + Core::Sha256Ctx8Add512 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_512, + Core::Sha256Ctx8Add64 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_64, + Core::Sha256Ctx8Add8 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_8, + Core::Sha256Ctx8AddBuffer511 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_buffer_511, + Core::Sha256Ctx8Finalize => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_finalize, + Core::Sha256Ctx8Init => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_init, + Core::Sha256Iv => simplicity_sys::c_jets::jets_wrapper::sha_256_iv, + Core::Some1 => simplicity_sys::c_jets::jets_wrapper::some_1, + Core::Some16 => simplicity_sys::c_jets::jets_wrapper::some_16, + Core::Some32 => simplicity_sys::c_jets::jets_wrapper::some_32, + Core::Some64 => simplicity_sys::c_jets::jets_wrapper::some_64, + Core::Some8 => simplicity_sys::c_jets::jets_wrapper::some_8, + Core::Subtract16 => simplicity_sys::c_jets::jets_wrapper::subtract_16, + Core::Subtract32 => simplicity_sys::c_jets::jets_wrapper::subtract_32, + Core::Subtract64 => simplicity_sys::c_jets::jets_wrapper::subtract_64, + Core::Subtract8 => simplicity_sys::c_jets::jets_wrapper::subtract_8, + Core::Swu => simplicity_sys::c_jets::jets_wrapper::swu, + Core::TapdataInit => simplicity_sys::c_jets::jets_wrapper::tapdata_init, + Core::Verify => simplicity_sys::c_jets::jets_wrapper::verify, + Core::Xor1 => simplicity_sys::c_jets::jets_wrapper::xor_1, + Core::Xor16 => simplicity_sys::c_jets::jets_wrapper::xor_16, + Core::Xor32 => simplicity_sys::c_jets::jets_wrapper::xor_32, + Core::Xor64 => simplicity_sys::c_jets::jets_wrapper::xor_64, + Core::Xor8 => simplicity_sys::c_jets::jets_wrapper::xor_8, + Core::XorXor1 => simplicity_sys::c_jets::jets_wrapper::xor_xor_1, + Core::XorXor16 => simplicity_sys::c_jets::jets_wrapper::xor_xor_16, + Core::XorXor32 => simplicity_sys::c_jets::jets_wrapper::xor_xor_32, + Core::XorXor64 => simplicity_sys::c_jets::jets_wrapper::xor_xor_64, + Core::XorXor8 => simplicity_sys::c_jets::jets_wrapper::xor_xor_8, + } +} + +pub(crate) fn decode>(bits: &mut BitIter) -> Result { + decode_bits!(bits, { + 0 => { + 0 => {Core::Verify}, + 1 => { + 0 => { + 0 => { + 0 => {Core::Low1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Low8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Low16}, + 1 => {Core::Low32} + }, + 1 => { + 0 => {Core::Low64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::High1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::High8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::High16}, + 1 => {Core::High32} + }, + 1 => { + 0 => {Core::High64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Complement1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Complement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Complement16}, + 1 => {Core::Complement32} + }, + 1 => { + 0 => {Core::Complement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::And1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::And8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::And16}, + 1 => {Core::And32} + }, + 1 => { + 0 => {Core::And64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Core::Or1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Or8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Or16}, + 1 => {Core::Or32} + }, + 1 => { + 0 => {Core::Or64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::Xor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Xor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Xor16}, + 1 => {Core::Xor32} + }, + 1 => { + 0 => {Core::Xor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Maj1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Maj8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Maj16}, + 1 => {Core::Maj32} + }, + 1 => { + 0 => {Core::Maj64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::XorXor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::XorXor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::XorXor16}, + 1 => {Core::XorXor32} + }, + 1 => { + 0 => {Core::XorXor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Core::Ch1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Ch8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Ch16}, + 1 => {Core::Ch32} + }, + 1 => { + 0 => {Core::Ch64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::Some1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Some8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Some16}, + 1 => {Core::Some32} + }, + 1 => { + 0 => {Core::Some64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::All8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::All16}, + 1 => {Core::All32} + }, + 1 => { + 0 => {Core::All64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::Eq1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Eq8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Eq16}, + 1 => {Core::Eq32} + }, + 1 => { + 0 => {Core::Eq64}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Core::Eq256}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullLeftShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullLeftShift16_1}, + 1 => {Core::FullLeftShift32_1} + }, + 1 => { + 0 => {Core::FullLeftShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Core::FullLeftShift8_2}, + 1 => {Core::FullLeftShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullLeftShift32_2}, + 1 => {Core::FullLeftShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::FullLeftShift8_4}, + 1 => { + 0 => { + 0 => {Core::FullLeftShift16_4}, + 1 => {Core::FullLeftShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullLeftShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullLeftShift16_8}, + 1 => { + 0 => { + 0 => {Core::FullLeftShift32_8}, + 1 => {Core::FullLeftShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::FullLeftShift32_16}, + 1 => { + 0 => { + 0 => {Core::FullLeftShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::FullLeftShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullRightShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullRightShift16_1}, + 1 => {Core::FullRightShift32_1} + }, + 1 => { + 0 => {Core::FullRightShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Core::FullRightShift8_2}, + 1 => {Core::FullRightShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullRightShift32_2}, + 1 => {Core::FullRightShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::FullRightShift8_4}, + 1 => { + 0 => { + 0 => {Core::FullRightShift16_4}, + 1 => {Core::FullRightShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullRightShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullRightShift16_8}, + 1 => { + 0 => { + 0 => {Core::FullRightShift32_8}, + 1 => {Core::FullRightShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::FullRightShift32_16}, + 1 => { + 0 => { + 0 => {Core::FullRightShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::FullRightShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Leftmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Leftmost16_1}, + 1 => {Core::Leftmost32_1} + }, + 1 => { + 0 => {Core::Leftmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Core::Leftmost8_2}, + 1 => {Core::Leftmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Leftmost32_2}, + 1 => {Core::Leftmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::Leftmost8_4}, + 1 => { + 0 => { + 0 => {Core::Leftmost16_4}, + 1 => {Core::Leftmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Leftmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Leftmost16_8}, + 1 => { + 0 => { + 0 => {Core::Leftmost32_8}, + 1 => {Core::Leftmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::Leftmost32_16}, + 1 => { + 0 => { + 0 => {Core::Leftmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::Leftmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Rightmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Rightmost16_1}, + 1 => {Core::Rightmost32_1} + }, + 1 => { + 0 => {Core::Rightmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Core::Rightmost8_2}, + 1 => {Core::Rightmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Rightmost32_2}, + 1 => {Core::Rightmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Core::Rightmost8_4}, + 1 => { + 0 => { + 0 => {Core::Rightmost16_4}, + 1 => {Core::Rightmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Rightmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Rightmost16_8}, + 1 => { + 0 => { + 0 => {Core::Rightmost32_8}, + 1 => {Core::Rightmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::Rightmost32_16}, + 1 => { + 0 => { + 0 => {Core::Rightmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::Rightmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftPadLow1_16}, + 1 => {Core::LeftPadLow1_32} + }, + 1 => { + 0 => {Core::LeftPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftPadLow8_16}, + 1 => { + 0 => { + 0 => {Core::LeftPadLow8_32}, + 1 => {Core::LeftPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::LeftPadLow16_32}, + 1 => { + 0 => { + 0 => {Core::LeftPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::LeftPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftPadHigh1_16}, + 1 => {Core::LeftPadHigh1_32} + }, + 1 => { + 0 => {Core::LeftPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftPadHigh8_16}, + 1 => { + 0 => { + 0 => {Core::LeftPadHigh8_32}, + 1 => {Core::LeftPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::LeftPadHigh16_32}, + 1 => { + 0 => { + 0 => {Core::LeftPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::LeftPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftExtend1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftExtend1_16}, + 1 => {Core::LeftExtend1_32} + }, + 1 => { + 0 => {Core::LeftExtend1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftExtend8_16}, + 1 => { + 0 => { + 0 => {Core::LeftExtend8_32}, + 1 => {Core::LeftExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::LeftExtend16_32}, + 1 => { + 0 => { + 0 => {Core::LeftExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::LeftExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::RightPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightPadLow1_16}, + 1 => {Core::RightPadLow1_32} + }, + 1 => { + 0 => {Core::RightPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightPadLow8_16}, + 1 => { + 0 => { + 0 => {Core::RightPadLow8_32}, + 1 => {Core::RightPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::RightPadLow16_32}, + 1 => { + 0 => { + 0 => {Core::RightPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::RightPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::RightPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightPadHigh1_16}, + 1 => {Core::RightPadHigh1_32} + }, + 1 => { + 0 => {Core::RightPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightPadHigh8_16}, + 1 => { + 0 => { + 0 => {Core::RightPadHigh8_32}, + 1 => {Core::RightPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::RightPadHigh16_32}, + 1 => { + 0 => { + 0 => {Core::RightPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::RightPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightExtend8_16}, + 1 => { + 0 => { + 0 => {Core::RightExtend8_32}, + 1 => {Core::RightExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Core::RightExtend16_32}, + 1 => { + 0 => { + 0 => {Core::RightExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Core::RightExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftShiftWith16}, + 1 => {Core::LeftShiftWith32} + }, + 1 => { + 0 => {Core::LeftShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::RightShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightShiftWith16}, + 1 => {Core::RightShiftWith32} + }, + 1 => { + 0 => {Core::RightShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftShift16}, + 1 => {Core::LeftShift32} + }, + 1 => { + 0 => {Core::LeftShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::RightShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightShift16}, + 1 => {Core::RightShift32} + }, + 1 => { + 0 => {Core::RightShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::LeftRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LeftRotate16}, + 1 => {Core::LeftRotate32} + }, + 1 => { + 0 => {Core::LeftRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::RightRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::RightRotate16}, + 1 => {Core::RightRotate32} + }, + 1 => { + 0 => {Core::RightRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + } + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::One8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::One16}, + 1 => {Core::One32} + }, + 1 => { + 0 => {Core::One64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullAdd8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullAdd16}, + 1 => {Core::FullAdd32} + }, + 1 => { + 0 => {Core::FullAdd64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Add8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Add16}, + 1 => {Core::Add32} + }, + 1 => { + 0 => {Core::Add64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullIncrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullIncrement16}, + 1 => {Core::FullIncrement32} + }, + 1 => { + 0 => {Core::FullIncrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Increment8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Increment16}, + 1 => {Core::Increment32} + }, + 1 => { + 0 => {Core::Increment64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullSubtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullSubtract16}, + 1 => {Core::FullSubtract32} + }, + 1 => { + 0 => {Core::FullSubtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Subtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Subtract16}, + 1 => {Core::Subtract32} + }, + 1 => { + 0 => {Core::Subtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Negate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Negate16}, + 1 => {Core::Negate32} + }, + 1 => { + 0 => {Core::Negate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullDecrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullDecrement16}, + 1 => {Core::FullDecrement32} + }, + 1 => { + 0 => {Core::FullDecrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Decrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Decrement16}, + 1 => {Core::Decrement32} + }, + 1 => { + 0 => {Core::Decrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::FullMultiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::FullMultiply16}, + 1 => {Core::FullMultiply32} + }, + 1 => { + 0 => {Core::FullMultiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Multiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Multiply16}, + 1 => {Core::Multiply32} + }, + 1 => { + 0 => {Core::Multiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::IsZero8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::IsZero16}, + 1 => {Core::IsZero32} + }, + 1 => { + 0 => {Core::IsZero64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::IsOne8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::IsOne16}, + 1 => {Core::IsOne32} + }, + 1 => { + 0 => {Core::IsOne64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Le8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Le16}, + 1 => {Core::Le32} + }, + 1 => { + 0 => {Core::Le64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Lt8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Lt16}, + 1 => {Core::Lt32} + }, + 1 => { + 0 => {Core::Lt64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Min8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Min16}, + 1 => {Core::Min32} + }, + 1 => { + 0 => {Core::Min64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Max8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Max16}, + 1 => {Core::Max32} + }, + 1 => { + 0 => {Core::Max64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Median8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Median16}, + 1 => {Core::Median32} + }, + 1 => { + 0 => {Core::Median64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {Core::DivMod128_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::DivMod8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::DivMod16}, + 1 => {Core::DivMod32} + }, + 1 => { + 0 => {Core::DivMod64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Divide8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Divide16}, + 1 => {Core::Divide32} + }, + 1 => { + 0 => {Core::Divide64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Modulo8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Modulo16}, + 1 => {Core::Modulo32} + }, + 1 => { + 0 => {Core::Modulo64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Core::Divides8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Divides16}, + 1 => {Core::Divides32} + }, + 1 => { + 0 => {Core::Divides64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Core::Sha256Block}, + 1 => { + 0 => { + 0 => {Core::Sha256Iv}, + 1 => { + 0 => {Core::Sha256Ctx8Add1}, + 1 => { + 0 => { + 0 => {Core::Sha256Ctx8Add2}, + 1 => {Core::Sha256Ctx8Add4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Sha256Ctx8Add8}, + 1 => {Core::Sha256Ctx8Add16} + }, + 1 => { + 0 => {Core::Sha256Ctx8Add32}, + 1 => {Core::Sha256Ctx8Add64} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Core::Sha256Ctx8Add128}, + 1 => {Core::Sha256Ctx8Add256} + }, + 1 => { + 0 => {Core::Sha256Ctx8Add512}, + 1 => {} + } + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::Sha256Ctx8AddBuffer511}, + 1 => {Core::Sha256Ctx8Finalize} + }, + 1 => { + 0 => {Core::Sha256Ctx8Init}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::PointVerify1}, + 1 => {} + }, + 1 => { + 0 => { + 0 => {Core::Decompress}, + 1 => { + 0 => {Core::LinearVerify1}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::LinearCombination1}, + 1 => {} + }, + 1 => {Core::Scale} + }, + 1 => { + 0 => {Core::Generate}, + 1 => {Core::GejInfinity} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Core::GejNormalize}, + 1 => {Core::GejNegate} + }, + 1 => { + 0 => {Core::GeNegate}, + 1 => {Core::GejDouble} + } + }, + 1 => { + 0 => { + 0 => {Core::GejAdd}, + 1 => {Core::GejGeAddEx} + }, + 1 => { + 0 => {Core::GejGeAdd}, + 1 => {Core::GejRescale} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Core::GejIsInfinity}, + 1 => {Core::GejEquiv} + }, + 1 => { + 0 => {Core::GejGeEquiv}, + 1 => {Core::GejXEquiv} + } + }, + 1 => { + 0 => { + 0 => {Core::GejYIsOdd}, + 1 => {Core::GejIsOnCurve} + }, + 1 => { + 0 => {Core::GeIsOnCurve}, + 1 => {Core::ScalarNormalize} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Core::ScalarNegate}, + 1 => {Core::ScalarAdd} + }, + 1 => { + 0 => {Core::ScalarSquare}, + 1 => {Core::ScalarMultiply} + } + }, + 1 => { + 0 => { + 0 => {Core::ScalarMultiplyLambda}, + 1 => {Core::ScalarInvert} + }, + 1 => { + 0 => {Core::ScalarIsZero}, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => {Core::FeNormalize} + } + }, + 1 => { + 0 => { + 0 => {Core::FeNegate}, + 1 => {Core::FeAdd} + }, + 1 => { + 0 => {Core::FeSquare}, + 1 => {Core::FeMultiply} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Core::FeMultiplyBeta}, + 1 => {Core::FeInvert} + }, + 1 => { + 0 => {Core::FeSquareRoot}, + 1 => {Core::FeIsZero} + } + }, + 1 => { + 0 => { + 0 => {Core::FeIsOdd}, + 1 => {} + }, + 1 => { + 0 => {Core::HashToCurve}, + 1 => {Core::Swu} + } + } + } + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {Core::CheckSigVerify}, + 1 => { + 0 => { + 0 => {Core::Bip0340Verify}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {Core::ParseLock}, + 1 => { + 0 => { + 0 => {Core::ParseSequence}, + 1 => {Core::TapdataInit} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + } + }) } diff --git a/src/jet/init/elements.rs b/src/jet/init/elements.rs index 1e5a4917..150f02f9 100644 --- a/src/jet/init/elements.rs +++ b/src/jet/init/elements.rs @@ -10,7 +10,6 @@ use hashes::sha256::Midstate; use simplicity_sys::CFrameItem; use std::io::Write; use std::{fmt, str}; -use crate::jet::elements::ElementsEnv; use simplicity_sys::CElementsTxEnv; /// The Elements jet family. @@ -968,13 +967,6 @@ impl Elements { impl Jet for Elements { - type Environment = ElementsEnv>; - type CJetEnvironment = CElementsTxEnv; - - fn c_jet_env(env: &Self::Environment) -> &Self::CJetEnvironment { - env.c_tx_env() - } - fn cmr(&self) -> Cmr { let bytes = match self { Elements::Add16 => [ @@ -4293,7 +4285,7 @@ impl Jet for Elements { TypeName(name) } - fn encode(&self, w: &mut BitWriter) -> std::io::Result { + fn encode(&self, w: &mut BitWriter<&mut dyn Write>) -> std::io::Result { let (n, len) = match self { Elements::Verify => (0, 3), Elements::Low1 => (8, 6), @@ -4771,3138 +4763,6 @@ impl Jet for Elements { w.write_bits_be(n, len) } - fn decode>(bits: &mut BitIter) -> Result { - decode_bits!(bits, { - 0 => { - 0 => { - 0 => {Elements::Verify}, - 1 => { - 0 => { - 0 => { - 0 => {Elements::Low1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Low8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Low16}, - 1 => {Elements::Low32} - }, - 1 => { - 0 => {Elements::Low64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::High1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::High8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::High16}, - 1 => {Elements::High32} - }, - 1 => { - 0 => {Elements::High64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Complement1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Complement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Complement16}, - 1 => {Elements::Complement32} - }, - 1 => { - 0 => {Elements::Complement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::And1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::And8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::And16}, - 1 => {Elements::And32} - }, - 1 => { - 0 => {Elements::And64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Elements::Or1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Or8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Or16}, - 1 => {Elements::Or32} - }, - 1 => { - 0 => {Elements::Or64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Xor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Xor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Xor16}, - 1 => {Elements::Xor32} - }, - 1 => { - 0 => {Elements::Xor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Maj1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Maj8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Maj16}, - 1 => {Elements::Maj32} - }, - 1 => { - 0 => {Elements::Maj64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::XorXor1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::XorXor8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::XorXor16}, - 1 => {Elements::XorXor32} - }, - 1 => { - 0 => {Elements::XorXor64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Elements::Ch1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Ch8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Ch16}, - 1 => {Elements::Ch32} - }, - 1 => { - 0 => {Elements::Ch64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Some1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Some8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Some16}, - 1 => {Elements::Some32} - }, - 1 => { - 0 => {Elements::Some64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::All8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::All16}, - 1 => {Elements::All32} - }, - 1 => { - 0 => {Elements::All64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Eq1}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Eq8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Eq16}, - 1 => {Elements::Eq32} - }, - 1 => { - 0 => {Elements::Eq64}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::Eq256}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullLeftShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullLeftShift16_1}, - 1 => {Elements::FullLeftShift32_1} - }, - 1 => { - 0 => {Elements::FullLeftShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Elements::FullLeftShift8_2}, - 1 => {Elements::FullLeftShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullLeftShift32_2}, - 1 => {Elements::FullLeftShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::FullLeftShift8_4}, - 1 => { - 0 => { - 0 => {Elements::FullLeftShift16_4}, - 1 => {Elements::FullLeftShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullLeftShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullLeftShift16_8}, - 1 => { - 0 => { - 0 => {Elements::FullLeftShift32_8}, - 1 => {Elements::FullLeftShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::FullLeftShift32_16}, - 1 => { - 0 => { - 0 => {Elements::FullLeftShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::FullLeftShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullRightShift8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullRightShift16_1}, - 1 => {Elements::FullRightShift32_1} - }, - 1 => { - 0 => {Elements::FullRightShift64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Elements::FullRightShift8_2}, - 1 => {Elements::FullRightShift16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullRightShift32_2}, - 1 => {Elements::FullRightShift64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::FullRightShift8_4}, - 1 => { - 0 => { - 0 => {Elements::FullRightShift16_4}, - 1 => {Elements::FullRightShift32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullRightShift64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullRightShift16_8}, - 1 => { - 0 => { - 0 => {Elements::FullRightShift32_8}, - 1 => {Elements::FullRightShift64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::FullRightShift32_16}, - 1 => { - 0 => { - 0 => {Elements::FullRightShift64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::FullRightShift64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Leftmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Leftmost16_1}, - 1 => {Elements::Leftmost32_1} - }, - 1 => { - 0 => {Elements::Leftmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Elements::Leftmost8_2}, - 1 => {Elements::Leftmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Leftmost32_2}, - 1 => {Elements::Leftmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Leftmost8_4}, - 1 => { - 0 => { - 0 => {Elements::Leftmost16_4}, - 1 => {Elements::Leftmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Leftmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Leftmost16_8}, - 1 => { - 0 => { - 0 => {Elements::Leftmost32_8}, - 1 => {Elements::Leftmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::Leftmost32_16}, - 1 => { - 0 => { - 0 => {Elements::Leftmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::Leftmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Rightmost8_1} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Rightmost16_1}, - 1 => {Elements::Rightmost32_1} - }, - 1 => { - 0 => {Elements::Rightmost64_1}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {Elements::Rightmost8_2}, - 1 => {Elements::Rightmost16_2} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Rightmost32_2}, - 1 => {Elements::Rightmost64_2} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Rightmost8_4}, - 1 => { - 0 => { - 0 => {Elements::Rightmost16_4}, - 1 => {Elements::Rightmost32_4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Rightmost64_4}, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Rightmost16_8}, - 1 => { - 0 => { - 0 => {Elements::Rightmost32_8}, - 1 => {Elements::Rightmost64_8} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::Rightmost32_16}, - 1 => { - 0 => { - 0 => {Elements::Rightmost64_16}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::Rightmost64_32}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftPadLow1_16}, - 1 => {Elements::LeftPadLow1_32} - }, - 1 => { - 0 => {Elements::LeftPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftPadLow8_16}, - 1 => { - 0 => { - 0 => {Elements::LeftPadLow8_32}, - 1 => {Elements::LeftPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::LeftPadLow16_32}, - 1 => { - 0 => { - 0 => {Elements::LeftPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::LeftPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftPadHigh1_16}, - 1 => {Elements::LeftPadHigh1_32} - }, - 1 => { - 0 => {Elements::LeftPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftPadHigh8_16}, - 1 => { - 0 => { - 0 => {Elements::LeftPadHigh8_32}, - 1 => {Elements::LeftPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::LeftPadHigh16_32}, - 1 => { - 0 => { - 0 => {Elements::LeftPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::LeftPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftExtend1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftExtend1_16}, - 1 => {Elements::LeftExtend1_32} - }, - 1 => { - 0 => {Elements::LeftExtend1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftExtend8_16}, - 1 => { - 0 => { - 0 => {Elements::LeftExtend8_32}, - 1 => {Elements::LeftExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::LeftExtend16_32}, - 1 => { - 0 => { - 0 => {Elements::LeftExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::LeftExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::RightPadLow1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightPadLow1_16}, - 1 => {Elements::RightPadLow1_32} - }, - 1 => { - 0 => {Elements::RightPadLow1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightPadLow8_16}, - 1 => { - 0 => { - 0 => {Elements::RightPadLow8_32}, - 1 => {Elements::RightPadLow8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::RightPadLow16_32}, - 1 => { - 0 => { - 0 => {Elements::RightPadLow16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::RightPadLow32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::RightPadHigh1_8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightPadHigh1_16}, - 1 => {Elements::RightPadHigh1_32} - }, - 1 => { - 0 => {Elements::RightPadHigh1_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightPadHigh8_16}, - 1 => { - 0 => { - 0 => {Elements::RightPadHigh8_32}, - 1 => {Elements::RightPadHigh8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::RightPadHigh16_32}, - 1 => { - 0 => { - 0 => {Elements::RightPadHigh16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::RightPadHigh32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightExtend8_16}, - 1 => { - 0 => { - 0 => {Elements::RightExtend8_32}, - 1 => {Elements::RightExtend8_64} - }, - 1 => {} - } - }, - 1 => { - 0 => {Elements::RightExtend16_32}, - 1 => { - 0 => { - 0 => {Elements::RightExtend16_64}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::RightExtend32_64}, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftShiftWith16}, - 1 => {Elements::LeftShiftWith32} - }, - 1 => { - 0 => {Elements::LeftShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::RightShiftWith8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightShiftWith16}, - 1 => {Elements::RightShiftWith32} - }, - 1 => { - 0 => {Elements::RightShiftWith64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftShift16}, - 1 => {Elements::LeftShift32} - }, - 1 => { - 0 => {Elements::LeftShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::RightShift8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightShift16}, - 1 => {Elements::RightShift32} - }, - 1 => { - 0 => {Elements::RightShift64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::LeftRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LeftRotate16}, - 1 => {Elements::LeftRotate32} - }, - 1 => { - 0 => {Elements::LeftRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::RightRotate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::RightRotate16}, - 1 => {Elements::RightRotate32} - }, - 1 => { - 0 => {Elements::RightRotate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - } - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::One8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::One16}, - 1 => {Elements::One32} - }, - 1 => { - 0 => {Elements::One64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullAdd8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullAdd16}, - 1 => {Elements::FullAdd32} - }, - 1 => { - 0 => {Elements::FullAdd64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Add8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Add16}, - 1 => {Elements::Add32} - }, - 1 => { - 0 => {Elements::Add64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullIncrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullIncrement16}, - 1 => {Elements::FullIncrement32} - }, - 1 => { - 0 => {Elements::FullIncrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Increment8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Increment16}, - 1 => {Elements::Increment32} - }, - 1 => { - 0 => {Elements::Increment64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullSubtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullSubtract16}, - 1 => {Elements::FullSubtract32} - }, - 1 => { - 0 => {Elements::FullSubtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Subtract8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Subtract16}, - 1 => {Elements::Subtract32} - }, - 1 => { - 0 => {Elements::Subtract64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Negate8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Negate16}, - 1 => {Elements::Negate32} - }, - 1 => { - 0 => {Elements::Negate64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullDecrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullDecrement16}, - 1 => {Elements::FullDecrement32} - }, - 1 => { - 0 => {Elements::FullDecrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Decrement8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Decrement16}, - 1 => {Elements::Decrement32} - }, - 1 => { - 0 => {Elements::Decrement64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::FullMultiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::FullMultiply16}, - 1 => {Elements::FullMultiply32} - }, - 1 => { - 0 => {Elements::FullMultiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Multiply8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Multiply16}, - 1 => {Elements::Multiply32} - }, - 1 => { - 0 => {Elements::Multiply64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::IsZero8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::IsZero16}, - 1 => {Elements::IsZero32} - }, - 1 => { - 0 => {Elements::IsZero64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::IsOne8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::IsOne16}, - 1 => {Elements::IsOne32} - }, - 1 => { - 0 => {Elements::IsOne64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Le8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Le16}, - 1 => {Elements::Le32} - }, - 1 => { - 0 => {Elements::Le64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Lt8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Lt16}, - 1 => {Elements::Lt32} - }, - 1 => { - 0 => {Elements::Lt64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Min8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Min16}, - 1 => {Elements::Min32} - }, - 1 => { - 0 => {Elements::Min64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Max8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Max16}, - 1 => {Elements::Max32} - }, - 1 => { - 0 => {Elements::Max64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Median8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Median16}, - 1 => {Elements::Median32} - }, - 1 => { - 0 => {Elements::Median64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {Elements::DivMod128_64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::DivMod8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::DivMod16}, - 1 => {Elements::DivMod32} - }, - 1 => { - 0 => {Elements::DivMod64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Divide8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Divide16}, - 1 => {Elements::Divide32} - }, - 1 => { - 0 => {Elements::Divide64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Modulo8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Modulo16}, - 1 => {Elements::Modulo32} - }, - 1 => { - 0 => {Elements::Modulo64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => { - 0 => {}, - 1 => {Elements::Divides8} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Divides16}, - 1 => {Elements::Divides32} - }, - 1 => { - 0 => {Elements::Divides64}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => {Elements::Sha256Block}, - 1 => { - 0 => { - 0 => {Elements::Sha256Iv}, - 1 => { - 0 => {Elements::Sha256Ctx8Add1}, - 1 => { - 0 => { - 0 => {Elements::Sha256Ctx8Add2}, - 1 => {Elements::Sha256Ctx8Add4} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Sha256Ctx8Add8}, - 1 => {Elements::Sha256Ctx8Add16} - }, - 1 => { - 0 => {Elements::Sha256Ctx8Add32}, - 1 => {Elements::Sha256Ctx8Add64} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::Sha256Ctx8Add128}, - 1 => {Elements::Sha256Ctx8Add256} - }, - 1 => { - 0 => {Elements::Sha256Ctx8Add512}, - 1 => {} - } - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Sha256Ctx8AddBuffer511}, - 1 => {Elements::Sha256Ctx8Finalize} - }, - 1 => { - 0 => {Elements::Sha256Ctx8Init}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::PointVerify1}, - 1 => {} - }, - 1 => { - 0 => { - 0 => {Elements::Decompress}, - 1 => { - 0 => {Elements::LinearVerify1}, - 1 => {} - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::LinearCombination1}, - 1 => {} - }, - 1 => {Elements::Scale} - }, - 1 => { - 0 => {Elements::Generate}, - 1 => {Elements::GejInfinity} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::GejNormalize}, - 1 => {Elements::GejNegate} - }, - 1 => { - 0 => {Elements::GeNegate}, - 1 => {Elements::GejDouble} - } - }, - 1 => { - 0 => { - 0 => {Elements::GejAdd}, - 1 => {Elements::GejGeAddEx} - }, - 1 => { - 0 => {Elements::GejGeAdd}, - 1 => {Elements::GejRescale} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::GejIsInfinity}, - 1 => {Elements::GejEquiv} - }, - 1 => { - 0 => {Elements::GejGeEquiv}, - 1 => {Elements::GejXEquiv} - } - }, - 1 => { - 0 => { - 0 => {Elements::GejYIsOdd}, - 1 => {Elements::GejIsOnCurve} - }, - 1 => { - 0 => {Elements::GeIsOnCurve}, - 1 => {Elements::ScalarNormalize} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::ScalarNegate}, - 1 => {Elements::ScalarAdd} - }, - 1 => { - 0 => {Elements::ScalarSquare}, - 1 => {Elements::ScalarMultiply} - } - }, - 1 => { - 0 => { - 0 => {Elements::ScalarMultiplyLambda}, - 1 => {Elements::ScalarInvert} - }, - 1 => { - 0 => {Elements::ScalarIsZero}, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {}, - 1 => { - 0 => {}, - 1 => {Elements::FeNormalize} - } - }, - 1 => { - 0 => { - 0 => {Elements::FeNegate}, - 1 => {Elements::FeAdd} - }, - 1 => { - 0 => {Elements::FeSquare}, - 1 => {Elements::FeMultiply} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::FeMultiplyBeta}, - 1 => {Elements::FeInvert} - }, - 1 => { - 0 => {Elements::FeSquareRoot}, - 1 => {Elements::FeIsZero} - } - }, - 1 => { - 0 => { - 0 => {Elements::FeIsOdd}, - 1 => {} - }, - 1 => { - 0 => {Elements::HashToCurve}, - 1 => {Elements::Swu} - } - } - } - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => {Elements::CheckSigVerify}, - 1 => { - 0 => { - 0 => {Elements::Bip0340Verify}, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => {}, - 1 => { - 0 => {Elements::ParseLock}, - 1 => { - 0 => { - 0 => {Elements::ParseSequence}, - 1 => {Elements::TapdataInit} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => { - 0 => { - 0 => {Elements::SigAllHash}, - 1 => { - 0 => { - 0 => {Elements::TxHash}, - 1 => {Elements::TapEnvHash} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::OutputsHash}, - 1 => {Elements::InputsHash} - }, - 1 => { - 0 => {Elements::IssuancesHash}, - 1 => {Elements::InputUtxosHash} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::OutputHash}, - 1 => {Elements::OutputAmountsHash} - }, - 1 => { - 0 => {Elements::OutputScriptsHash}, - 1 => {Elements::OutputNoncesHash} - } - }, - 1 => { - 0 => { - 0 => {Elements::OutputRangeProofsHash}, - 1 => {Elements::OutputSurjectionProofsHash} - }, - 1 => { - 0 => {Elements::InputHash}, - 1 => {Elements::InputOutpointsHash} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::InputSequencesHash}, - 1 => {Elements::InputAnnexesHash} - }, - 1 => { - 0 => {Elements::InputScriptSigsHash}, - 1 => {Elements::IssuanceHash} - } - }, - 1 => { - 0 => { - 0 => {Elements::IssuanceAssetAmountsHash}, - 1 => {Elements::IssuanceTokenAmountsHash} - }, - 1 => { - 0 => {Elements::IssuanceRangeProofsHash}, - 1 => {Elements::IssuanceBlindingEntropyHash} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::InputUtxoHash}, - 1 => {Elements::InputAmountsHash} - }, - 1 => { - 0 => {Elements::InputScriptsHash}, - 1 => {Elements::TapleafHash} - } - }, - 1 => { - 0 => { - 0 => {Elements::TappathHash}, - 1 => {Elements::OutpointHash} - }, - 1 => { - 0 => {Elements::AssetAmountHash}, - 1 => {Elements::NonceHash} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::AnnexHash}, - 1 => {Elements::BuildTapleafSimplicity} - }, - 1 => { - 0 => {Elements::BuildTapbranch}, - 1 => {Elements::BuildTaptweak} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::CheckLockHeight}, - 1 => { - 0 => { - 0 => {Elements::CheckLockTime}, - 1 => {Elements::BrokenDoNotUseCheckLockDistance} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::BrokenDoNotUseCheckLockDuration}, - 1 => {Elements::TxLockHeight} - }, - 1 => { - 0 => {Elements::TxLockTime}, - 1 => {Elements::BrokenDoNotUseTxLockDistance} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::BrokenDoNotUseTxLockDuration}, - 1 => {Elements::TxIsFinal} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - }, - 1 => { - 0 => {Elements::Issuance}, - 1 => { - 0 => { - 0 => {Elements::IssuanceAsset}, - 1 => {Elements::IssuanceToken} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::IssuanceEntropy}, - 1 => {Elements::CalculateIssuanceEntropy} - }, - 1 => { - 0 => {Elements::CalculateAsset}, - 1 => {Elements::CalculateExplicitToken} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::CalculateConfidentialToken}, - 1 => {Elements::LbtcAsset} - }, - 1 => {} - }, - 1 => {} - } - }, - 1 => {} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::ScriptCMR}, - 1 => { - 0 => { - 0 => {Elements::InternalKey}, - 1 => {Elements::CurrentIndex} - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::NumInputs}, - 1 => {Elements::NumOutputs} - }, - 1 => { - 0 => {Elements::LockTime}, - 1 => {Elements::OutputAsset} - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::OutputAmount}, - 1 => {Elements::OutputNonce} - }, - 1 => { - 0 => {Elements::OutputScriptHash}, - 1 => {Elements::OutputNullDatum} - } - }, - 1 => { - 0 => { - 0 => {Elements::OutputIsFee}, - 1 => {Elements::OutputSurjectionProof} - }, - 1 => { - 0 => {Elements::OutputRangeProof}, - 1 => {Elements::TotalFee} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::CurrentPegin}, - 1 => {Elements::CurrentPrevOutpoint} - }, - 1 => { - 0 => {Elements::CurrentAsset}, - 1 => {Elements::CurrentAmount} - } - }, - 1 => { - 0 => { - 0 => {Elements::CurrentScriptHash}, - 1 => {Elements::CurrentSequence} - }, - 1 => { - 0 => {Elements::CurrentAnnexHash}, - 1 => {Elements::CurrentScriptSigHash} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::CurrentReissuanceBlinding}, - 1 => {Elements::CurrentNewIssuanceContract} - }, - 1 => { - 0 => {Elements::CurrentReissuanceEntropy}, - 1 => {Elements::CurrentIssuanceAssetAmount} - } - }, - 1 => { - 0 => { - 0 => {Elements::CurrentIssuanceTokenAmount}, - 1 => {Elements::CurrentIssuanceAssetProof} - }, - 1 => { - 0 => {Elements::CurrentIssuanceTokenProof}, - 1 => {Elements::InputPegin} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::InputPrevOutpoint}, - 1 => {Elements::InputAsset} - }, - 1 => { - 0 => {Elements::InputAmount}, - 1 => {Elements::InputScriptHash} - } - }, - 1 => { - 0 => { - 0 => {Elements::InputSequence}, - 1 => {Elements::InputAnnexHash} - }, - 1 => { - 0 => {Elements::InputScriptSigHash}, - 1 => {Elements::ReissuanceBlinding} - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => {Elements::NewIssuanceContract}, - 1 => {Elements::ReissuanceEntropy} - }, - 1 => { - 0 => {Elements::IssuanceAssetAmount}, - 1 => {Elements::IssuanceTokenAmount} - } - }, - 1 => { - 0 => { - 0 => {Elements::IssuanceAssetProof}, - 1 => {Elements::IssuanceTokenProof} - }, - 1 => { - 0 => {Elements::TapleafVersion}, - 1 => {Elements::Tappath} - } - } - } - }, - 1 => { - 0 => { - 0 => { - 0 => { - 0 => {Elements::Version}, - 1 => {Elements::GenesisBlockHash} - }, - 1 => { - 0 => {Elements::TransactionId}, - 1 => {} - } - }, - 1 => {} - }, - 1 => {} - } - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - }, - 1 => {} - } - } - } - }) - } - - fn c_jet_ptr(&self) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool { - match self { - Elements::Add16 => &simplicity_sys::c_jets::jets_wrapper::add_16, - Elements::Add32 => &simplicity_sys::c_jets::jets_wrapper::add_32, - Elements::Add64 => &simplicity_sys::c_jets::jets_wrapper::add_64, - Elements::Add8 => &simplicity_sys::c_jets::jets_wrapper::add_8, - Elements::All16 => &simplicity_sys::c_jets::jets_wrapper::all_16, - Elements::All32 => &simplicity_sys::c_jets::jets_wrapper::all_32, - Elements::All64 => &simplicity_sys::c_jets::jets_wrapper::all_64, - Elements::All8 => &simplicity_sys::c_jets::jets_wrapper::all_8, - Elements::And1 => &simplicity_sys::c_jets::jets_wrapper::and_1, - Elements::And16 => &simplicity_sys::c_jets::jets_wrapper::and_16, - Elements::And32 => &simplicity_sys::c_jets::jets_wrapper::and_32, - Elements::And64 => &simplicity_sys::c_jets::jets_wrapper::and_64, - Elements::And8 => &simplicity_sys::c_jets::jets_wrapper::and_8, - Elements::AnnexHash => &simplicity_sys::c_jets::jets_wrapper::annex_hash, - Elements::AssetAmountHash => &simplicity_sys::c_jets::jets_wrapper::asset_amount_hash, - Elements::Bip0340Verify => &simplicity_sys::c_jets::jets_wrapper::bip_0340_verify, - Elements::BrokenDoNotUseCheckLockDistance => &simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_check_lock_distance, - Elements::BrokenDoNotUseCheckLockDuration => &simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_check_lock_duration, - Elements::BrokenDoNotUseTxLockDistance => &simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_tx_lock_distance, - Elements::BrokenDoNotUseTxLockDuration => &simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_tx_lock_duration, - Elements::BuildTapbranch => &simplicity_sys::c_jets::jets_wrapper::build_tapbranch, - Elements::BuildTapleafSimplicity => &simplicity_sys::c_jets::jets_wrapper::build_tapleaf_simplicity, - Elements::BuildTaptweak => &simplicity_sys::c_jets::jets_wrapper::build_taptweak, - Elements::CalculateAsset => &simplicity_sys::c_jets::jets_wrapper::calculate_asset, - Elements::CalculateConfidentialToken => &simplicity_sys::c_jets::jets_wrapper::calculate_confidential_token, - Elements::CalculateExplicitToken => &simplicity_sys::c_jets::jets_wrapper::calculate_explicit_token, - Elements::CalculateIssuanceEntropy => &simplicity_sys::c_jets::jets_wrapper::calculate_issuance_entropy, - Elements::Ch1 => &simplicity_sys::c_jets::jets_wrapper::ch_1, - Elements::Ch16 => &simplicity_sys::c_jets::jets_wrapper::ch_16, - Elements::Ch32 => &simplicity_sys::c_jets::jets_wrapper::ch_32, - Elements::Ch64 => &simplicity_sys::c_jets::jets_wrapper::ch_64, - Elements::Ch8 => &simplicity_sys::c_jets::jets_wrapper::ch_8, - Elements::CheckLockHeight => &simplicity_sys::c_jets::jets_wrapper::check_lock_height, - Elements::CheckLockTime => &simplicity_sys::c_jets::jets_wrapper::check_lock_time, - Elements::CheckSigVerify => &simplicity_sys::c_jets::jets_wrapper::check_sig_verify, - Elements::Complement1 => &simplicity_sys::c_jets::jets_wrapper::complement_1, - Elements::Complement16 => &simplicity_sys::c_jets::jets_wrapper::complement_16, - Elements::Complement32 => &simplicity_sys::c_jets::jets_wrapper::complement_32, - Elements::Complement64 => &simplicity_sys::c_jets::jets_wrapper::complement_64, - Elements::Complement8 => &simplicity_sys::c_jets::jets_wrapper::complement_8, - Elements::CurrentAmount => &simplicity_sys::c_jets::jets_wrapper::current_amount, - Elements::CurrentAnnexHash => &simplicity_sys::c_jets::jets_wrapper::current_annex_hash, - Elements::CurrentAsset => &simplicity_sys::c_jets::jets_wrapper::current_asset, - Elements::CurrentIndex => &simplicity_sys::c_jets::jets_wrapper::current_index, - Elements::CurrentIssuanceAssetAmount => &simplicity_sys::c_jets::jets_wrapper::current_issuance_asset_amount, - Elements::CurrentIssuanceAssetProof => &simplicity_sys::c_jets::jets_wrapper::current_issuance_asset_proof, - Elements::CurrentIssuanceTokenAmount => &simplicity_sys::c_jets::jets_wrapper::current_issuance_token_amount, - Elements::CurrentIssuanceTokenProof => &simplicity_sys::c_jets::jets_wrapper::current_issuance_token_proof, - Elements::CurrentNewIssuanceContract => &simplicity_sys::c_jets::jets_wrapper::current_new_issuance_contract, - Elements::CurrentPegin => &simplicity_sys::c_jets::jets_wrapper::current_pegin, - Elements::CurrentPrevOutpoint => &simplicity_sys::c_jets::jets_wrapper::current_prev_outpoint, - Elements::CurrentReissuanceBlinding => &simplicity_sys::c_jets::jets_wrapper::current_reissuance_blinding, - Elements::CurrentReissuanceEntropy => &simplicity_sys::c_jets::jets_wrapper::current_reissuance_entropy, - Elements::CurrentScriptHash => &simplicity_sys::c_jets::jets_wrapper::current_script_hash, - Elements::CurrentScriptSigHash => &simplicity_sys::c_jets::jets_wrapper::current_script_sig_hash, - Elements::CurrentSequence => &simplicity_sys::c_jets::jets_wrapper::current_sequence, - Elements::Decompress => &simplicity_sys::c_jets::jets_wrapper::decompress, - Elements::Decrement16 => &simplicity_sys::c_jets::jets_wrapper::decrement_16, - Elements::Decrement32 => &simplicity_sys::c_jets::jets_wrapper::decrement_32, - Elements::Decrement64 => &simplicity_sys::c_jets::jets_wrapper::decrement_64, - Elements::Decrement8 => &simplicity_sys::c_jets::jets_wrapper::decrement_8, - Elements::DivMod128_64 => &simplicity_sys::c_jets::jets_wrapper::div_mod_128_64, - Elements::DivMod16 => &simplicity_sys::c_jets::jets_wrapper::div_mod_16, - Elements::DivMod32 => &simplicity_sys::c_jets::jets_wrapper::div_mod_32, - Elements::DivMod64 => &simplicity_sys::c_jets::jets_wrapper::div_mod_64, - Elements::DivMod8 => &simplicity_sys::c_jets::jets_wrapper::div_mod_8, - Elements::Divide16 => &simplicity_sys::c_jets::jets_wrapper::divide_16, - Elements::Divide32 => &simplicity_sys::c_jets::jets_wrapper::divide_32, - Elements::Divide64 => &simplicity_sys::c_jets::jets_wrapper::divide_64, - Elements::Divide8 => &simplicity_sys::c_jets::jets_wrapper::divide_8, - Elements::Divides16 => &simplicity_sys::c_jets::jets_wrapper::divides_16, - Elements::Divides32 => &simplicity_sys::c_jets::jets_wrapper::divides_32, - Elements::Divides64 => &simplicity_sys::c_jets::jets_wrapper::divides_64, - Elements::Divides8 => &simplicity_sys::c_jets::jets_wrapper::divides_8, - Elements::Eq1 => &simplicity_sys::c_jets::jets_wrapper::eq_1, - Elements::Eq16 => &simplicity_sys::c_jets::jets_wrapper::eq_16, - Elements::Eq256 => &simplicity_sys::c_jets::jets_wrapper::eq_256, - Elements::Eq32 => &simplicity_sys::c_jets::jets_wrapper::eq_32, - Elements::Eq64 => &simplicity_sys::c_jets::jets_wrapper::eq_64, - Elements::Eq8 => &simplicity_sys::c_jets::jets_wrapper::eq_8, - Elements::FeAdd => &simplicity_sys::c_jets::jets_wrapper::fe_add, - Elements::FeInvert => &simplicity_sys::c_jets::jets_wrapper::fe_invert, - Elements::FeIsOdd => &simplicity_sys::c_jets::jets_wrapper::fe_is_odd, - Elements::FeIsZero => &simplicity_sys::c_jets::jets_wrapper::fe_is_zero, - Elements::FeMultiply => &simplicity_sys::c_jets::jets_wrapper::fe_multiply, - Elements::FeMultiplyBeta => &simplicity_sys::c_jets::jets_wrapper::fe_multiply_beta, - Elements::FeNegate => &simplicity_sys::c_jets::jets_wrapper::fe_negate, - Elements::FeNormalize => &simplicity_sys::c_jets::jets_wrapper::fe_normalize, - Elements::FeSquare => &simplicity_sys::c_jets::jets_wrapper::fe_square, - Elements::FeSquareRoot => &simplicity_sys::c_jets::jets_wrapper::fe_square_root, - Elements::FullAdd16 => &simplicity_sys::c_jets::jets_wrapper::full_add_16, - Elements::FullAdd32 => &simplicity_sys::c_jets::jets_wrapper::full_add_32, - Elements::FullAdd64 => &simplicity_sys::c_jets::jets_wrapper::full_add_64, - Elements::FullAdd8 => &simplicity_sys::c_jets::jets_wrapper::full_add_8, - Elements::FullDecrement16 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_16, - Elements::FullDecrement32 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_32, - Elements::FullDecrement64 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_64, - Elements::FullDecrement8 => &simplicity_sys::c_jets::jets_wrapper::full_decrement_8, - Elements::FullIncrement16 => &simplicity_sys::c_jets::jets_wrapper::full_increment_16, - Elements::FullIncrement32 => &simplicity_sys::c_jets::jets_wrapper::full_increment_32, - Elements::FullIncrement64 => &simplicity_sys::c_jets::jets_wrapper::full_increment_64, - Elements::FullIncrement8 => &simplicity_sys::c_jets::jets_wrapper::full_increment_8, - Elements::FullLeftShift16_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_1, - Elements::FullLeftShift16_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_2, - Elements::FullLeftShift16_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_4, - Elements::FullLeftShift16_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_8, - Elements::FullLeftShift32_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_1, - Elements::FullLeftShift32_16 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_16, - Elements::FullLeftShift32_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_2, - Elements::FullLeftShift32_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_4, - Elements::FullLeftShift32_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_8, - Elements::FullLeftShift64_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_1, - Elements::FullLeftShift64_16 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_16, - Elements::FullLeftShift64_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_2, - Elements::FullLeftShift64_32 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_32, - Elements::FullLeftShift64_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_4, - Elements::FullLeftShift64_8 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_8, - Elements::FullLeftShift8_1 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_1, - Elements::FullLeftShift8_2 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_2, - Elements::FullLeftShift8_4 => &simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_4, - Elements::FullMultiply16 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_16, - Elements::FullMultiply32 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_32, - Elements::FullMultiply64 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_64, - Elements::FullMultiply8 => &simplicity_sys::c_jets::jets_wrapper::full_multiply_8, - Elements::FullRightShift16_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_1, - Elements::FullRightShift16_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_2, - Elements::FullRightShift16_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_4, - Elements::FullRightShift16_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_8, - Elements::FullRightShift32_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_1, - Elements::FullRightShift32_16 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_16, - Elements::FullRightShift32_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_2, - Elements::FullRightShift32_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_4, - Elements::FullRightShift32_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_8, - Elements::FullRightShift64_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_1, - Elements::FullRightShift64_16 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_16, - Elements::FullRightShift64_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_2, - Elements::FullRightShift64_32 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_32, - Elements::FullRightShift64_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_4, - Elements::FullRightShift64_8 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_8, - Elements::FullRightShift8_1 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_1, - Elements::FullRightShift8_2 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_2, - Elements::FullRightShift8_4 => &simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_4, - Elements::FullSubtract16 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_16, - Elements::FullSubtract32 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_32, - Elements::FullSubtract64 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_64, - Elements::FullSubtract8 => &simplicity_sys::c_jets::jets_wrapper::full_subtract_8, - Elements::GeIsOnCurve => &simplicity_sys::c_jets::jets_wrapper::ge_is_on_curve, - Elements::GeNegate => &simplicity_sys::c_jets::jets_wrapper::ge_negate, - Elements::GejAdd => &simplicity_sys::c_jets::jets_wrapper::gej_add, - Elements::GejDouble => &simplicity_sys::c_jets::jets_wrapper::gej_double, - Elements::GejEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_equiv, - Elements::GejGeAdd => &simplicity_sys::c_jets::jets_wrapper::gej_ge_add, - Elements::GejGeAddEx => &simplicity_sys::c_jets::jets_wrapper::gej_ge_add_ex, - Elements::GejGeEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_ge_equiv, - Elements::GejInfinity => &simplicity_sys::c_jets::jets_wrapper::gej_infinity, - Elements::GejIsInfinity => &simplicity_sys::c_jets::jets_wrapper::gej_is_infinity, - Elements::GejIsOnCurve => &simplicity_sys::c_jets::jets_wrapper::gej_is_on_curve, - Elements::GejNegate => &simplicity_sys::c_jets::jets_wrapper::gej_negate, - Elements::GejNormalize => &simplicity_sys::c_jets::jets_wrapper::gej_normalize, - Elements::GejRescale => &simplicity_sys::c_jets::jets_wrapper::gej_rescale, - Elements::GejXEquiv => &simplicity_sys::c_jets::jets_wrapper::gej_x_equiv, - Elements::GejYIsOdd => &simplicity_sys::c_jets::jets_wrapper::gej_y_is_odd, - Elements::Generate => &simplicity_sys::c_jets::jets_wrapper::generate, - Elements::GenesisBlockHash => &simplicity_sys::c_jets::jets_wrapper::genesis_block_hash, - Elements::HashToCurve => &simplicity_sys::c_jets::jets_wrapper::hash_to_curve, - Elements::High1 => &simplicity_sys::c_jets::jets_wrapper::high_1, - Elements::High16 => &simplicity_sys::c_jets::jets_wrapper::high_16, - Elements::High32 => &simplicity_sys::c_jets::jets_wrapper::high_32, - Elements::High64 => &simplicity_sys::c_jets::jets_wrapper::high_64, - Elements::High8 => &simplicity_sys::c_jets::jets_wrapper::high_8, - Elements::Increment16 => &simplicity_sys::c_jets::jets_wrapper::increment_16, - Elements::Increment32 => &simplicity_sys::c_jets::jets_wrapper::increment_32, - Elements::Increment64 => &simplicity_sys::c_jets::jets_wrapper::increment_64, - Elements::Increment8 => &simplicity_sys::c_jets::jets_wrapper::increment_8, - Elements::InputAmount => &simplicity_sys::c_jets::jets_wrapper::input_amount, - Elements::InputAmountsHash => &simplicity_sys::c_jets::jets_wrapper::input_amounts_hash, - Elements::InputAnnexHash => &simplicity_sys::c_jets::jets_wrapper::input_annex_hash, - Elements::InputAnnexesHash => &simplicity_sys::c_jets::jets_wrapper::input_annexes_hash, - Elements::InputAsset => &simplicity_sys::c_jets::jets_wrapper::input_asset, - Elements::InputHash => &simplicity_sys::c_jets::jets_wrapper::input_hash, - Elements::InputOutpointsHash => &simplicity_sys::c_jets::jets_wrapper::input_outpoints_hash, - Elements::InputPegin => &simplicity_sys::c_jets::jets_wrapper::input_pegin, - Elements::InputPrevOutpoint => &simplicity_sys::c_jets::jets_wrapper::input_prev_outpoint, - Elements::InputScriptHash => &simplicity_sys::c_jets::jets_wrapper::input_script_hash, - Elements::InputScriptSigHash => &simplicity_sys::c_jets::jets_wrapper::input_script_sig_hash, - Elements::InputScriptSigsHash => &simplicity_sys::c_jets::jets_wrapper::input_script_sigs_hash, - Elements::InputScriptsHash => &simplicity_sys::c_jets::jets_wrapper::input_scripts_hash, - Elements::InputSequence => &simplicity_sys::c_jets::jets_wrapper::input_sequence, - Elements::InputSequencesHash => &simplicity_sys::c_jets::jets_wrapper::input_sequences_hash, - Elements::InputUtxoHash => &simplicity_sys::c_jets::jets_wrapper::input_utxo_hash, - Elements::InputUtxosHash => &simplicity_sys::c_jets::jets_wrapper::input_utxos_hash, - Elements::InputsHash => &simplicity_sys::c_jets::jets_wrapper::inputs_hash, - Elements::InternalKey => &simplicity_sys::c_jets::jets_wrapper::internal_key, - Elements::IsOne16 => &simplicity_sys::c_jets::jets_wrapper::is_one_16, - Elements::IsOne32 => &simplicity_sys::c_jets::jets_wrapper::is_one_32, - Elements::IsOne64 => &simplicity_sys::c_jets::jets_wrapper::is_one_64, - Elements::IsOne8 => &simplicity_sys::c_jets::jets_wrapper::is_one_8, - Elements::IsZero16 => &simplicity_sys::c_jets::jets_wrapper::is_zero_16, - Elements::IsZero32 => &simplicity_sys::c_jets::jets_wrapper::is_zero_32, - Elements::IsZero64 => &simplicity_sys::c_jets::jets_wrapper::is_zero_64, - Elements::IsZero8 => &simplicity_sys::c_jets::jets_wrapper::is_zero_8, - Elements::Issuance => &simplicity_sys::c_jets::jets_wrapper::issuance, - Elements::IssuanceAsset => &simplicity_sys::c_jets::jets_wrapper::issuance_asset, - Elements::IssuanceAssetAmount => &simplicity_sys::c_jets::jets_wrapper::issuance_asset_amount, - Elements::IssuanceAssetAmountsHash => &simplicity_sys::c_jets::jets_wrapper::issuance_asset_amounts_hash, - Elements::IssuanceAssetProof => &simplicity_sys::c_jets::jets_wrapper::issuance_asset_proof, - Elements::IssuanceBlindingEntropyHash => &simplicity_sys::c_jets::jets_wrapper::issuance_blinding_entropy_hash, - Elements::IssuanceEntropy => &simplicity_sys::c_jets::jets_wrapper::issuance_entropy, - Elements::IssuanceHash => &simplicity_sys::c_jets::jets_wrapper::issuance_hash, - Elements::IssuanceRangeProofsHash => &simplicity_sys::c_jets::jets_wrapper::issuance_range_proofs_hash, - Elements::IssuanceToken => &simplicity_sys::c_jets::jets_wrapper::issuance_token, - Elements::IssuanceTokenAmount => &simplicity_sys::c_jets::jets_wrapper::issuance_token_amount, - Elements::IssuanceTokenAmountsHash => &simplicity_sys::c_jets::jets_wrapper::issuance_token_amounts_hash, - Elements::IssuanceTokenProof => &simplicity_sys::c_jets::jets_wrapper::issuance_token_proof, - Elements::IssuancesHash => &simplicity_sys::c_jets::jets_wrapper::issuances_hash, - Elements::LbtcAsset => &simplicity_sys::c_jets::jets_wrapper::lbtc_asset, - Elements::Le16 => &simplicity_sys::c_jets::jets_wrapper::le_16, - Elements::Le32 => &simplicity_sys::c_jets::jets_wrapper::le_32, - Elements::Le64 => &simplicity_sys::c_jets::jets_wrapper::le_64, - Elements::Le8 => &simplicity_sys::c_jets::jets_wrapper::le_8, - Elements::LeftExtend16_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_16_32, - Elements::LeftExtend16_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_16_64, - Elements::LeftExtend1_16 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_16, - Elements::LeftExtend1_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_32, - Elements::LeftExtend1_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_64, - Elements::LeftExtend1_8 => &simplicity_sys::c_jets::jets_wrapper::left_extend_1_8, - Elements::LeftExtend32_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_32_64, - Elements::LeftExtend8_16 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_16, - Elements::LeftExtend8_32 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_32, - Elements::LeftExtend8_64 => &simplicity_sys::c_jets::jets_wrapper::left_extend_8_64, - Elements::LeftPadHigh16_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_32, - Elements::LeftPadHigh16_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_64, - Elements::LeftPadHigh1_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_16, - Elements::LeftPadHigh1_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_32, - Elements::LeftPadHigh1_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_64, - Elements::LeftPadHigh1_8 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_8, - Elements::LeftPadHigh32_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_32_64, - Elements::LeftPadHigh8_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_16, - Elements::LeftPadHigh8_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_32, - Elements::LeftPadHigh8_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_64, - Elements::LeftPadLow16_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_32, - Elements::LeftPadLow16_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_64, - Elements::LeftPadLow1_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_16, - Elements::LeftPadLow1_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_32, - Elements::LeftPadLow1_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_64, - Elements::LeftPadLow1_8 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_8, - Elements::LeftPadLow32_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_32_64, - Elements::LeftPadLow8_16 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_16, - Elements::LeftPadLow8_32 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_32, - Elements::LeftPadLow8_64 => &simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_64, - Elements::LeftRotate16 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_16, - Elements::LeftRotate32 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_32, - Elements::LeftRotate64 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_64, - Elements::LeftRotate8 => &simplicity_sys::c_jets::jets_wrapper::left_rotate_8, - Elements::LeftShift16 => &simplicity_sys::c_jets::jets_wrapper::left_shift_16, - Elements::LeftShift32 => &simplicity_sys::c_jets::jets_wrapper::left_shift_32, - Elements::LeftShift64 => &simplicity_sys::c_jets::jets_wrapper::left_shift_64, - Elements::LeftShift8 => &simplicity_sys::c_jets::jets_wrapper::left_shift_8, - Elements::LeftShiftWith16 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_16, - Elements::LeftShiftWith32 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_32, - Elements::LeftShiftWith64 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_64, - Elements::LeftShiftWith8 => &simplicity_sys::c_jets::jets_wrapper::left_shift_with_8, - Elements::Leftmost16_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_1, - Elements::Leftmost16_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_2, - Elements::Leftmost16_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_4, - Elements::Leftmost16_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_16_8, - Elements::Leftmost32_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_1, - Elements::Leftmost32_16 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_16, - Elements::Leftmost32_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_2, - Elements::Leftmost32_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_4, - Elements::Leftmost32_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_32_8, - Elements::Leftmost64_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_1, - Elements::Leftmost64_16 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_16, - Elements::Leftmost64_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_2, - Elements::Leftmost64_32 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_32, - Elements::Leftmost64_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_4, - Elements::Leftmost64_8 => &simplicity_sys::c_jets::jets_wrapper::leftmost_64_8, - Elements::Leftmost8_1 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_1, - Elements::Leftmost8_2 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_2, - Elements::Leftmost8_4 => &simplicity_sys::c_jets::jets_wrapper::leftmost_8_4, - Elements::LinearCombination1 => &simplicity_sys::c_jets::jets_wrapper::linear_combination_1, - Elements::LinearVerify1 => &simplicity_sys::c_jets::jets_wrapper::linear_verify_1, - Elements::LockTime => &simplicity_sys::c_jets::jets_wrapper::lock_time, - Elements::Low1 => &simplicity_sys::c_jets::jets_wrapper::low_1, - Elements::Low16 => &simplicity_sys::c_jets::jets_wrapper::low_16, - Elements::Low32 => &simplicity_sys::c_jets::jets_wrapper::low_32, - Elements::Low64 => &simplicity_sys::c_jets::jets_wrapper::low_64, - Elements::Low8 => &simplicity_sys::c_jets::jets_wrapper::low_8, - Elements::Lt16 => &simplicity_sys::c_jets::jets_wrapper::lt_16, - Elements::Lt32 => &simplicity_sys::c_jets::jets_wrapper::lt_32, - Elements::Lt64 => &simplicity_sys::c_jets::jets_wrapper::lt_64, - Elements::Lt8 => &simplicity_sys::c_jets::jets_wrapper::lt_8, - Elements::Maj1 => &simplicity_sys::c_jets::jets_wrapper::maj_1, - Elements::Maj16 => &simplicity_sys::c_jets::jets_wrapper::maj_16, - Elements::Maj32 => &simplicity_sys::c_jets::jets_wrapper::maj_32, - Elements::Maj64 => &simplicity_sys::c_jets::jets_wrapper::maj_64, - Elements::Maj8 => &simplicity_sys::c_jets::jets_wrapper::maj_8, - Elements::Max16 => &simplicity_sys::c_jets::jets_wrapper::max_16, - Elements::Max32 => &simplicity_sys::c_jets::jets_wrapper::max_32, - Elements::Max64 => &simplicity_sys::c_jets::jets_wrapper::max_64, - Elements::Max8 => &simplicity_sys::c_jets::jets_wrapper::max_8, - Elements::Median16 => &simplicity_sys::c_jets::jets_wrapper::median_16, - Elements::Median32 => &simplicity_sys::c_jets::jets_wrapper::median_32, - Elements::Median64 => &simplicity_sys::c_jets::jets_wrapper::median_64, - Elements::Median8 => &simplicity_sys::c_jets::jets_wrapper::median_8, - Elements::Min16 => &simplicity_sys::c_jets::jets_wrapper::min_16, - Elements::Min32 => &simplicity_sys::c_jets::jets_wrapper::min_32, - Elements::Min64 => &simplicity_sys::c_jets::jets_wrapper::min_64, - Elements::Min8 => &simplicity_sys::c_jets::jets_wrapper::min_8, - Elements::Modulo16 => &simplicity_sys::c_jets::jets_wrapper::modulo_16, - Elements::Modulo32 => &simplicity_sys::c_jets::jets_wrapper::modulo_32, - Elements::Modulo64 => &simplicity_sys::c_jets::jets_wrapper::modulo_64, - Elements::Modulo8 => &simplicity_sys::c_jets::jets_wrapper::modulo_8, - Elements::Multiply16 => &simplicity_sys::c_jets::jets_wrapper::multiply_16, - Elements::Multiply32 => &simplicity_sys::c_jets::jets_wrapper::multiply_32, - Elements::Multiply64 => &simplicity_sys::c_jets::jets_wrapper::multiply_64, - Elements::Multiply8 => &simplicity_sys::c_jets::jets_wrapper::multiply_8, - Elements::Negate16 => &simplicity_sys::c_jets::jets_wrapper::negate_16, - Elements::Negate32 => &simplicity_sys::c_jets::jets_wrapper::negate_32, - Elements::Negate64 => &simplicity_sys::c_jets::jets_wrapper::negate_64, - Elements::Negate8 => &simplicity_sys::c_jets::jets_wrapper::negate_8, - Elements::NewIssuanceContract => &simplicity_sys::c_jets::jets_wrapper::new_issuance_contract, - Elements::NonceHash => &simplicity_sys::c_jets::jets_wrapper::nonce_hash, - Elements::NumInputs => &simplicity_sys::c_jets::jets_wrapper::num_inputs, - Elements::NumOutputs => &simplicity_sys::c_jets::jets_wrapper::num_outputs, - Elements::One16 => &simplicity_sys::c_jets::jets_wrapper::one_16, - Elements::One32 => &simplicity_sys::c_jets::jets_wrapper::one_32, - Elements::One64 => &simplicity_sys::c_jets::jets_wrapper::one_64, - Elements::One8 => &simplicity_sys::c_jets::jets_wrapper::one_8, - Elements::Or1 => &simplicity_sys::c_jets::jets_wrapper::or_1, - Elements::Or16 => &simplicity_sys::c_jets::jets_wrapper::or_16, - Elements::Or32 => &simplicity_sys::c_jets::jets_wrapper::or_32, - Elements::Or64 => &simplicity_sys::c_jets::jets_wrapper::or_64, - Elements::Or8 => &simplicity_sys::c_jets::jets_wrapper::or_8, - Elements::OutpointHash => &simplicity_sys::c_jets::jets_wrapper::outpoint_hash, - Elements::OutputAmount => &simplicity_sys::c_jets::jets_wrapper::output_amount, - Elements::OutputAmountsHash => &simplicity_sys::c_jets::jets_wrapper::output_amounts_hash, - Elements::OutputAsset => &simplicity_sys::c_jets::jets_wrapper::output_asset, - Elements::OutputHash => &simplicity_sys::c_jets::jets_wrapper::output_hash, - Elements::OutputIsFee => &simplicity_sys::c_jets::jets_wrapper::output_is_fee, - Elements::OutputNonce => &simplicity_sys::c_jets::jets_wrapper::output_nonce, - Elements::OutputNoncesHash => &simplicity_sys::c_jets::jets_wrapper::output_nonces_hash, - Elements::OutputNullDatum => &simplicity_sys::c_jets::jets_wrapper::output_null_datum, - Elements::OutputRangeProof => &simplicity_sys::c_jets::jets_wrapper::output_range_proof, - Elements::OutputRangeProofsHash => &simplicity_sys::c_jets::jets_wrapper::output_range_proofs_hash, - Elements::OutputScriptHash => &simplicity_sys::c_jets::jets_wrapper::output_script_hash, - Elements::OutputScriptsHash => &simplicity_sys::c_jets::jets_wrapper::output_scripts_hash, - Elements::OutputSurjectionProof => &simplicity_sys::c_jets::jets_wrapper::output_surjection_proof, - Elements::OutputSurjectionProofsHash => &simplicity_sys::c_jets::jets_wrapper::output_surjection_proofs_hash, - Elements::OutputsHash => &simplicity_sys::c_jets::jets_wrapper::outputs_hash, - Elements::ParseLock => &simplicity_sys::c_jets::jets_wrapper::parse_lock, - Elements::ParseSequence => &simplicity_sys::c_jets::jets_wrapper::parse_sequence, - Elements::PointVerify1 => &simplicity_sys::c_jets::jets_wrapper::point_verify_1, - Elements::ReissuanceBlinding => &simplicity_sys::c_jets::jets_wrapper::reissuance_blinding, - Elements::ReissuanceEntropy => &simplicity_sys::c_jets::jets_wrapper::reissuance_entropy, - Elements::RightExtend16_32 => &simplicity_sys::c_jets::jets_wrapper::right_extend_16_32, - Elements::RightExtend16_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_16_64, - Elements::RightExtend32_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_32_64, - Elements::RightExtend8_16 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_16, - Elements::RightExtend8_32 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_32, - Elements::RightExtend8_64 => &simplicity_sys::c_jets::jets_wrapper::right_extend_8_64, - Elements::RightPadHigh16_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_32, - Elements::RightPadHigh16_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_64, - Elements::RightPadHigh1_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_16, - Elements::RightPadHigh1_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_32, - Elements::RightPadHigh1_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_64, - Elements::RightPadHigh1_8 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_8, - Elements::RightPadHigh32_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_32_64, - Elements::RightPadHigh8_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_16, - Elements::RightPadHigh8_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_32, - Elements::RightPadHigh8_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_64, - Elements::RightPadLow16_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_32, - Elements::RightPadLow16_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_64, - Elements::RightPadLow1_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_16, - Elements::RightPadLow1_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_32, - Elements::RightPadLow1_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_64, - Elements::RightPadLow1_8 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_8, - Elements::RightPadLow32_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_32_64, - Elements::RightPadLow8_16 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_16, - Elements::RightPadLow8_32 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_32, - Elements::RightPadLow8_64 => &simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_64, - Elements::RightRotate16 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_16, - Elements::RightRotate32 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_32, - Elements::RightRotate64 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_64, - Elements::RightRotate8 => &simplicity_sys::c_jets::jets_wrapper::right_rotate_8, - Elements::RightShift16 => &simplicity_sys::c_jets::jets_wrapper::right_shift_16, - Elements::RightShift32 => &simplicity_sys::c_jets::jets_wrapper::right_shift_32, - Elements::RightShift64 => &simplicity_sys::c_jets::jets_wrapper::right_shift_64, - Elements::RightShift8 => &simplicity_sys::c_jets::jets_wrapper::right_shift_8, - Elements::RightShiftWith16 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_16, - Elements::RightShiftWith32 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_32, - Elements::RightShiftWith64 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_64, - Elements::RightShiftWith8 => &simplicity_sys::c_jets::jets_wrapper::right_shift_with_8, - Elements::Rightmost16_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_1, - Elements::Rightmost16_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_2, - Elements::Rightmost16_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_4, - Elements::Rightmost16_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_16_8, - Elements::Rightmost32_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_1, - Elements::Rightmost32_16 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_16, - Elements::Rightmost32_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_2, - Elements::Rightmost32_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_4, - Elements::Rightmost32_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_32_8, - Elements::Rightmost64_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_1, - Elements::Rightmost64_16 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_16, - Elements::Rightmost64_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_2, - Elements::Rightmost64_32 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_32, - Elements::Rightmost64_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_4, - Elements::Rightmost64_8 => &simplicity_sys::c_jets::jets_wrapper::rightmost_64_8, - Elements::Rightmost8_1 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_1, - Elements::Rightmost8_2 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_2, - Elements::Rightmost8_4 => &simplicity_sys::c_jets::jets_wrapper::rightmost_8_4, - Elements::ScalarAdd => &simplicity_sys::c_jets::jets_wrapper::scalar_add, - Elements::ScalarInvert => &simplicity_sys::c_jets::jets_wrapper::scalar_invert, - Elements::ScalarIsZero => &simplicity_sys::c_jets::jets_wrapper::scalar_is_zero, - Elements::ScalarMultiply => &simplicity_sys::c_jets::jets_wrapper::scalar_multiply, - Elements::ScalarMultiplyLambda => &simplicity_sys::c_jets::jets_wrapper::scalar_multiply_lambda, - Elements::ScalarNegate => &simplicity_sys::c_jets::jets_wrapper::scalar_negate, - Elements::ScalarNormalize => &simplicity_sys::c_jets::jets_wrapper::scalar_normalize, - Elements::ScalarSquare => &simplicity_sys::c_jets::jets_wrapper::scalar_square, - Elements::Scale => &simplicity_sys::c_jets::jets_wrapper::scale, - Elements::ScriptCMR => &simplicity_sys::c_jets::jets_wrapper::script_cmr, - Elements::Sha256Block => &simplicity_sys::c_jets::jets_wrapper::sha_256_block, - Elements::Sha256Ctx8Add1 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_1, - Elements::Sha256Ctx8Add128 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_128, - Elements::Sha256Ctx8Add16 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_16, - Elements::Sha256Ctx8Add2 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_2, - Elements::Sha256Ctx8Add256 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_256, - Elements::Sha256Ctx8Add32 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_32, - Elements::Sha256Ctx8Add4 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_4, - Elements::Sha256Ctx8Add512 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_512, - Elements::Sha256Ctx8Add64 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_64, - Elements::Sha256Ctx8Add8 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_8, - Elements::Sha256Ctx8AddBuffer511 => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_buffer_511, - Elements::Sha256Ctx8Finalize => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_finalize, - Elements::Sha256Ctx8Init => &simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_init, - Elements::Sha256Iv => &simplicity_sys::c_jets::jets_wrapper::sha_256_iv, - Elements::SigAllHash => &simplicity_sys::c_jets::jets_wrapper::sig_all_hash, - Elements::Some1 => &simplicity_sys::c_jets::jets_wrapper::some_1, - Elements::Some16 => &simplicity_sys::c_jets::jets_wrapper::some_16, - Elements::Some32 => &simplicity_sys::c_jets::jets_wrapper::some_32, - Elements::Some64 => &simplicity_sys::c_jets::jets_wrapper::some_64, - Elements::Some8 => &simplicity_sys::c_jets::jets_wrapper::some_8, - Elements::Subtract16 => &simplicity_sys::c_jets::jets_wrapper::subtract_16, - Elements::Subtract32 => &simplicity_sys::c_jets::jets_wrapper::subtract_32, - Elements::Subtract64 => &simplicity_sys::c_jets::jets_wrapper::subtract_64, - Elements::Subtract8 => &simplicity_sys::c_jets::jets_wrapper::subtract_8, - Elements::Swu => &simplicity_sys::c_jets::jets_wrapper::swu, - Elements::TapEnvHash => &simplicity_sys::c_jets::jets_wrapper::tap_env_hash, - Elements::TapdataInit => &simplicity_sys::c_jets::jets_wrapper::tapdata_init, - Elements::TapleafHash => &simplicity_sys::c_jets::jets_wrapper::tapleaf_hash, - Elements::TapleafVersion => &simplicity_sys::c_jets::jets_wrapper::tapleaf_version, - Elements::Tappath => &simplicity_sys::c_jets::jets_wrapper::tappath, - Elements::TappathHash => &simplicity_sys::c_jets::jets_wrapper::tappath_hash, - Elements::TotalFee => &simplicity_sys::c_jets::jets_wrapper::total_fee, - Elements::TransactionId => &simplicity_sys::c_jets::jets_wrapper::transaction_id, - Elements::TxHash => &simplicity_sys::c_jets::jets_wrapper::tx_hash, - Elements::TxIsFinal => &simplicity_sys::c_jets::jets_wrapper::tx_is_final, - Elements::TxLockHeight => &simplicity_sys::c_jets::jets_wrapper::tx_lock_height, - Elements::TxLockTime => &simplicity_sys::c_jets::jets_wrapper::tx_lock_time, - Elements::Verify => &simplicity_sys::c_jets::jets_wrapper::verify, - Elements::Version => &simplicity_sys::c_jets::jets_wrapper::version, - Elements::Xor1 => &simplicity_sys::c_jets::jets_wrapper::xor_1, - Elements::Xor16 => &simplicity_sys::c_jets::jets_wrapper::xor_16, - Elements::Xor32 => &simplicity_sys::c_jets::jets_wrapper::xor_32, - Elements::Xor64 => &simplicity_sys::c_jets::jets_wrapper::xor_64, - Elements::Xor8 => &simplicity_sys::c_jets::jets_wrapper::xor_8, - Elements::XorXor1 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_1, - Elements::XorXor16 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_16, - Elements::XorXor32 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_32, - Elements::XorXor64 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_64, - Elements::XorXor8 => &simplicity_sys::c_jets::jets_wrapper::xor_xor_8, - } - } - fn cost(&self) -> Cost { match self { Elements::Add16 => Cost::from_milliweight(108), @@ -9336,5 +6196,3137 @@ impl str::FromStr for Elements { "xor_xor_8" => Ok(Elements::XorXor8), x => Err(crate::Error::InvalidJetName(x.to_owned())), } - } + } +} + +pub(crate) fn c_jet_ptr(jet: &Elements) -> fn(&mut CFrameItem, CFrameItem, &CElementsTxEnv) -> bool { + match jet { + Elements::Add16 => simplicity_sys::c_jets::jets_wrapper::add_16, + Elements::Add32 => simplicity_sys::c_jets::jets_wrapper::add_32, + Elements::Add64 => simplicity_sys::c_jets::jets_wrapper::add_64, + Elements::Add8 => simplicity_sys::c_jets::jets_wrapper::add_8, + Elements::All16 => simplicity_sys::c_jets::jets_wrapper::all_16, + Elements::All32 => simplicity_sys::c_jets::jets_wrapper::all_32, + Elements::All64 => simplicity_sys::c_jets::jets_wrapper::all_64, + Elements::All8 => simplicity_sys::c_jets::jets_wrapper::all_8, + Elements::And1 => simplicity_sys::c_jets::jets_wrapper::and_1, + Elements::And16 => simplicity_sys::c_jets::jets_wrapper::and_16, + Elements::And32 => simplicity_sys::c_jets::jets_wrapper::and_32, + Elements::And64 => simplicity_sys::c_jets::jets_wrapper::and_64, + Elements::And8 => simplicity_sys::c_jets::jets_wrapper::and_8, + Elements::AnnexHash => simplicity_sys::c_jets::jets_wrapper::annex_hash, + Elements::AssetAmountHash => simplicity_sys::c_jets::jets_wrapper::asset_amount_hash, + Elements::Bip0340Verify => simplicity_sys::c_jets::jets_wrapper::bip_0340_verify, + Elements::BrokenDoNotUseCheckLockDistance => simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_check_lock_distance, + Elements::BrokenDoNotUseCheckLockDuration => simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_check_lock_duration, + Elements::BrokenDoNotUseTxLockDistance => simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_tx_lock_distance, + Elements::BrokenDoNotUseTxLockDuration => simplicity_sys::c_jets::jets_wrapper::broken_do_not_use_tx_lock_duration, + Elements::BuildTapbranch => simplicity_sys::c_jets::jets_wrapper::build_tapbranch, + Elements::BuildTapleafSimplicity => simplicity_sys::c_jets::jets_wrapper::build_tapleaf_simplicity, + Elements::BuildTaptweak => simplicity_sys::c_jets::jets_wrapper::build_taptweak, + Elements::CalculateAsset => simplicity_sys::c_jets::jets_wrapper::calculate_asset, + Elements::CalculateConfidentialToken => simplicity_sys::c_jets::jets_wrapper::calculate_confidential_token, + Elements::CalculateExplicitToken => simplicity_sys::c_jets::jets_wrapper::calculate_explicit_token, + Elements::CalculateIssuanceEntropy => simplicity_sys::c_jets::jets_wrapper::calculate_issuance_entropy, + Elements::Ch1 => simplicity_sys::c_jets::jets_wrapper::ch_1, + Elements::Ch16 => simplicity_sys::c_jets::jets_wrapper::ch_16, + Elements::Ch32 => simplicity_sys::c_jets::jets_wrapper::ch_32, + Elements::Ch64 => simplicity_sys::c_jets::jets_wrapper::ch_64, + Elements::Ch8 => simplicity_sys::c_jets::jets_wrapper::ch_8, + Elements::CheckLockHeight => simplicity_sys::c_jets::jets_wrapper::check_lock_height, + Elements::CheckLockTime => simplicity_sys::c_jets::jets_wrapper::check_lock_time, + Elements::CheckSigVerify => simplicity_sys::c_jets::jets_wrapper::check_sig_verify, + Elements::Complement1 => simplicity_sys::c_jets::jets_wrapper::complement_1, + Elements::Complement16 => simplicity_sys::c_jets::jets_wrapper::complement_16, + Elements::Complement32 => simplicity_sys::c_jets::jets_wrapper::complement_32, + Elements::Complement64 => simplicity_sys::c_jets::jets_wrapper::complement_64, + Elements::Complement8 => simplicity_sys::c_jets::jets_wrapper::complement_8, + Elements::CurrentAmount => simplicity_sys::c_jets::jets_wrapper::current_amount, + Elements::CurrentAnnexHash => simplicity_sys::c_jets::jets_wrapper::current_annex_hash, + Elements::CurrentAsset => simplicity_sys::c_jets::jets_wrapper::current_asset, + Elements::CurrentIndex => simplicity_sys::c_jets::jets_wrapper::current_index, + Elements::CurrentIssuanceAssetAmount => simplicity_sys::c_jets::jets_wrapper::current_issuance_asset_amount, + Elements::CurrentIssuanceAssetProof => simplicity_sys::c_jets::jets_wrapper::current_issuance_asset_proof, + Elements::CurrentIssuanceTokenAmount => simplicity_sys::c_jets::jets_wrapper::current_issuance_token_amount, + Elements::CurrentIssuanceTokenProof => simplicity_sys::c_jets::jets_wrapper::current_issuance_token_proof, + Elements::CurrentNewIssuanceContract => simplicity_sys::c_jets::jets_wrapper::current_new_issuance_contract, + Elements::CurrentPegin => simplicity_sys::c_jets::jets_wrapper::current_pegin, + Elements::CurrentPrevOutpoint => simplicity_sys::c_jets::jets_wrapper::current_prev_outpoint, + Elements::CurrentReissuanceBlinding => simplicity_sys::c_jets::jets_wrapper::current_reissuance_blinding, + Elements::CurrentReissuanceEntropy => simplicity_sys::c_jets::jets_wrapper::current_reissuance_entropy, + Elements::CurrentScriptHash => simplicity_sys::c_jets::jets_wrapper::current_script_hash, + Elements::CurrentScriptSigHash => simplicity_sys::c_jets::jets_wrapper::current_script_sig_hash, + Elements::CurrentSequence => simplicity_sys::c_jets::jets_wrapper::current_sequence, + Elements::Decompress => simplicity_sys::c_jets::jets_wrapper::decompress, + Elements::Decrement16 => simplicity_sys::c_jets::jets_wrapper::decrement_16, + Elements::Decrement32 => simplicity_sys::c_jets::jets_wrapper::decrement_32, + Elements::Decrement64 => simplicity_sys::c_jets::jets_wrapper::decrement_64, + Elements::Decrement8 => simplicity_sys::c_jets::jets_wrapper::decrement_8, + Elements::DivMod128_64 => simplicity_sys::c_jets::jets_wrapper::div_mod_128_64, + Elements::DivMod16 => simplicity_sys::c_jets::jets_wrapper::div_mod_16, + Elements::DivMod32 => simplicity_sys::c_jets::jets_wrapper::div_mod_32, + Elements::DivMod64 => simplicity_sys::c_jets::jets_wrapper::div_mod_64, + Elements::DivMod8 => simplicity_sys::c_jets::jets_wrapper::div_mod_8, + Elements::Divide16 => simplicity_sys::c_jets::jets_wrapper::divide_16, + Elements::Divide32 => simplicity_sys::c_jets::jets_wrapper::divide_32, + Elements::Divide64 => simplicity_sys::c_jets::jets_wrapper::divide_64, + Elements::Divide8 => simplicity_sys::c_jets::jets_wrapper::divide_8, + Elements::Divides16 => simplicity_sys::c_jets::jets_wrapper::divides_16, + Elements::Divides32 => simplicity_sys::c_jets::jets_wrapper::divides_32, + Elements::Divides64 => simplicity_sys::c_jets::jets_wrapper::divides_64, + Elements::Divides8 => simplicity_sys::c_jets::jets_wrapper::divides_8, + Elements::Eq1 => simplicity_sys::c_jets::jets_wrapper::eq_1, + Elements::Eq16 => simplicity_sys::c_jets::jets_wrapper::eq_16, + Elements::Eq256 => simplicity_sys::c_jets::jets_wrapper::eq_256, + Elements::Eq32 => simplicity_sys::c_jets::jets_wrapper::eq_32, + Elements::Eq64 => simplicity_sys::c_jets::jets_wrapper::eq_64, + Elements::Eq8 => simplicity_sys::c_jets::jets_wrapper::eq_8, + Elements::FeAdd => simplicity_sys::c_jets::jets_wrapper::fe_add, + Elements::FeInvert => simplicity_sys::c_jets::jets_wrapper::fe_invert, + Elements::FeIsOdd => simplicity_sys::c_jets::jets_wrapper::fe_is_odd, + Elements::FeIsZero => simplicity_sys::c_jets::jets_wrapper::fe_is_zero, + Elements::FeMultiply => simplicity_sys::c_jets::jets_wrapper::fe_multiply, + Elements::FeMultiplyBeta => simplicity_sys::c_jets::jets_wrapper::fe_multiply_beta, + Elements::FeNegate => simplicity_sys::c_jets::jets_wrapper::fe_negate, + Elements::FeNormalize => simplicity_sys::c_jets::jets_wrapper::fe_normalize, + Elements::FeSquare => simplicity_sys::c_jets::jets_wrapper::fe_square, + Elements::FeSquareRoot => simplicity_sys::c_jets::jets_wrapper::fe_square_root, + Elements::FullAdd16 => simplicity_sys::c_jets::jets_wrapper::full_add_16, + Elements::FullAdd32 => simplicity_sys::c_jets::jets_wrapper::full_add_32, + Elements::FullAdd64 => simplicity_sys::c_jets::jets_wrapper::full_add_64, + Elements::FullAdd8 => simplicity_sys::c_jets::jets_wrapper::full_add_8, + Elements::FullDecrement16 => simplicity_sys::c_jets::jets_wrapper::full_decrement_16, + Elements::FullDecrement32 => simplicity_sys::c_jets::jets_wrapper::full_decrement_32, + Elements::FullDecrement64 => simplicity_sys::c_jets::jets_wrapper::full_decrement_64, + Elements::FullDecrement8 => simplicity_sys::c_jets::jets_wrapper::full_decrement_8, + Elements::FullIncrement16 => simplicity_sys::c_jets::jets_wrapper::full_increment_16, + Elements::FullIncrement32 => simplicity_sys::c_jets::jets_wrapper::full_increment_32, + Elements::FullIncrement64 => simplicity_sys::c_jets::jets_wrapper::full_increment_64, + Elements::FullIncrement8 => simplicity_sys::c_jets::jets_wrapper::full_increment_8, + Elements::FullLeftShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_1, + Elements::FullLeftShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_2, + Elements::FullLeftShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_4, + Elements::FullLeftShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_16_8, + Elements::FullLeftShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_1, + Elements::FullLeftShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_16, + Elements::FullLeftShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_2, + Elements::FullLeftShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_4, + Elements::FullLeftShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_32_8, + Elements::FullLeftShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_1, + Elements::FullLeftShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_16, + Elements::FullLeftShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_2, + Elements::FullLeftShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_32, + Elements::FullLeftShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_4, + Elements::FullLeftShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_64_8, + Elements::FullLeftShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_1, + Elements::FullLeftShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_2, + Elements::FullLeftShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_left_shift_8_4, + Elements::FullMultiply16 => simplicity_sys::c_jets::jets_wrapper::full_multiply_16, + Elements::FullMultiply32 => simplicity_sys::c_jets::jets_wrapper::full_multiply_32, + Elements::FullMultiply64 => simplicity_sys::c_jets::jets_wrapper::full_multiply_64, + Elements::FullMultiply8 => simplicity_sys::c_jets::jets_wrapper::full_multiply_8, + Elements::FullRightShift16_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_1, + Elements::FullRightShift16_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_2, + Elements::FullRightShift16_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_4, + Elements::FullRightShift16_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_16_8, + Elements::FullRightShift32_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_1, + Elements::FullRightShift32_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_16, + Elements::FullRightShift32_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_2, + Elements::FullRightShift32_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_4, + Elements::FullRightShift32_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_32_8, + Elements::FullRightShift64_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_1, + Elements::FullRightShift64_16 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_16, + Elements::FullRightShift64_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_2, + Elements::FullRightShift64_32 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_32, + Elements::FullRightShift64_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_4, + Elements::FullRightShift64_8 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_64_8, + Elements::FullRightShift8_1 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_1, + Elements::FullRightShift8_2 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_2, + Elements::FullRightShift8_4 => simplicity_sys::c_jets::jets_wrapper::full_right_shift_8_4, + Elements::FullSubtract16 => simplicity_sys::c_jets::jets_wrapper::full_subtract_16, + Elements::FullSubtract32 => simplicity_sys::c_jets::jets_wrapper::full_subtract_32, + Elements::FullSubtract64 => simplicity_sys::c_jets::jets_wrapper::full_subtract_64, + Elements::FullSubtract8 => simplicity_sys::c_jets::jets_wrapper::full_subtract_8, + Elements::GeIsOnCurve => simplicity_sys::c_jets::jets_wrapper::ge_is_on_curve, + Elements::GeNegate => simplicity_sys::c_jets::jets_wrapper::ge_negate, + Elements::GejAdd => simplicity_sys::c_jets::jets_wrapper::gej_add, + Elements::GejDouble => simplicity_sys::c_jets::jets_wrapper::gej_double, + Elements::GejEquiv => simplicity_sys::c_jets::jets_wrapper::gej_equiv, + Elements::GejGeAdd => simplicity_sys::c_jets::jets_wrapper::gej_ge_add, + Elements::GejGeAddEx => simplicity_sys::c_jets::jets_wrapper::gej_ge_add_ex, + Elements::GejGeEquiv => simplicity_sys::c_jets::jets_wrapper::gej_ge_equiv, + Elements::GejInfinity => simplicity_sys::c_jets::jets_wrapper::gej_infinity, + Elements::GejIsInfinity => simplicity_sys::c_jets::jets_wrapper::gej_is_infinity, + Elements::GejIsOnCurve => simplicity_sys::c_jets::jets_wrapper::gej_is_on_curve, + Elements::GejNegate => simplicity_sys::c_jets::jets_wrapper::gej_negate, + Elements::GejNormalize => simplicity_sys::c_jets::jets_wrapper::gej_normalize, + Elements::GejRescale => simplicity_sys::c_jets::jets_wrapper::gej_rescale, + Elements::GejXEquiv => simplicity_sys::c_jets::jets_wrapper::gej_x_equiv, + Elements::GejYIsOdd => simplicity_sys::c_jets::jets_wrapper::gej_y_is_odd, + Elements::Generate => simplicity_sys::c_jets::jets_wrapper::generate, + Elements::GenesisBlockHash => simplicity_sys::c_jets::jets_wrapper::genesis_block_hash, + Elements::HashToCurve => simplicity_sys::c_jets::jets_wrapper::hash_to_curve, + Elements::High1 => simplicity_sys::c_jets::jets_wrapper::high_1, + Elements::High16 => simplicity_sys::c_jets::jets_wrapper::high_16, + Elements::High32 => simplicity_sys::c_jets::jets_wrapper::high_32, + Elements::High64 => simplicity_sys::c_jets::jets_wrapper::high_64, + Elements::High8 => simplicity_sys::c_jets::jets_wrapper::high_8, + Elements::Increment16 => simplicity_sys::c_jets::jets_wrapper::increment_16, + Elements::Increment32 => simplicity_sys::c_jets::jets_wrapper::increment_32, + Elements::Increment64 => simplicity_sys::c_jets::jets_wrapper::increment_64, + Elements::Increment8 => simplicity_sys::c_jets::jets_wrapper::increment_8, + Elements::InputAmount => simplicity_sys::c_jets::jets_wrapper::input_amount, + Elements::InputAmountsHash => simplicity_sys::c_jets::jets_wrapper::input_amounts_hash, + Elements::InputAnnexHash => simplicity_sys::c_jets::jets_wrapper::input_annex_hash, + Elements::InputAnnexesHash => simplicity_sys::c_jets::jets_wrapper::input_annexes_hash, + Elements::InputAsset => simplicity_sys::c_jets::jets_wrapper::input_asset, + Elements::InputHash => simplicity_sys::c_jets::jets_wrapper::input_hash, + Elements::InputOutpointsHash => simplicity_sys::c_jets::jets_wrapper::input_outpoints_hash, + Elements::InputPegin => simplicity_sys::c_jets::jets_wrapper::input_pegin, + Elements::InputPrevOutpoint => simplicity_sys::c_jets::jets_wrapper::input_prev_outpoint, + Elements::InputScriptHash => simplicity_sys::c_jets::jets_wrapper::input_script_hash, + Elements::InputScriptSigHash => simplicity_sys::c_jets::jets_wrapper::input_script_sig_hash, + Elements::InputScriptSigsHash => simplicity_sys::c_jets::jets_wrapper::input_script_sigs_hash, + Elements::InputScriptsHash => simplicity_sys::c_jets::jets_wrapper::input_scripts_hash, + Elements::InputSequence => simplicity_sys::c_jets::jets_wrapper::input_sequence, + Elements::InputSequencesHash => simplicity_sys::c_jets::jets_wrapper::input_sequences_hash, + Elements::InputUtxoHash => simplicity_sys::c_jets::jets_wrapper::input_utxo_hash, + Elements::InputUtxosHash => simplicity_sys::c_jets::jets_wrapper::input_utxos_hash, + Elements::InputsHash => simplicity_sys::c_jets::jets_wrapper::inputs_hash, + Elements::InternalKey => simplicity_sys::c_jets::jets_wrapper::internal_key, + Elements::IsOne16 => simplicity_sys::c_jets::jets_wrapper::is_one_16, + Elements::IsOne32 => simplicity_sys::c_jets::jets_wrapper::is_one_32, + Elements::IsOne64 => simplicity_sys::c_jets::jets_wrapper::is_one_64, + Elements::IsOne8 => simplicity_sys::c_jets::jets_wrapper::is_one_8, + Elements::IsZero16 => simplicity_sys::c_jets::jets_wrapper::is_zero_16, + Elements::IsZero32 => simplicity_sys::c_jets::jets_wrapper::is_zero_32, + Elements::IsZero64 => simplicity_sys::c_jets::jets_wrapper::is_zero_64, + Elements::IsZero8 => simplicity_sys::c_jets::jets_wrapper::is_zero_8, + Elements::Issuance => simplicity_sys::c_jets::jets_wrapper::issuance, + Elements::IssuanceAsset => simplicity_sys::c_jets::jets_wrapper::issuance_asset, + Elements::IssuanceAssetAmount => simplicity_sys::c_jets::jets_wrapper::issuance_asset_amount, + Elements::IssuanceAssetAmountsHash => simplicity_sys::c_jets::jets_wrapper::issuance_asset_amounts_hash, + Elements::IssuanceAssetProof => simplicity_sys::c_jets::jets_wrapper::issuance_asset_proof, + Elements::IssuanceBlindingEntropyHash => simplicity_sys::c_jets::jets_wrapper::issuance_blinding_entropy_hash, + Elements::IssuanceEntropy => simplicity_sys::c_jets::jets_wrapper::issuance_entropy, + Elements::IssuanceHash => simplicity_sys::c_jets::jets_wrapper::issuance_hash, + Elements::IssuanceRangeProofsHash => simplicity_sys::c_jets::jets_wrapper::issuance_range_proofs_hash, + Elements::IssuanceToken => simplicity_sys::c_jets::jets_wrapper::issuance_token, + Elements::IssuanceTokenAmount => simplicity_sys::c_jets::jets_wrapper::issuance_token_amount, + Elements::IssuanceTokenAmountsHash => simplicity_sys::c_jets::jets_wrapper::issuance_token_amounts_hash, + Elements::IssuanceTokenProof => simplicity_sys::c_jets::jets_wrapper::issuance_token_proof, + Elements::IssuancesHash => simplicity_sys::c_jets::jets_wrapper::issuances_hash, + Elements::LbtcAsset => simplicity_sys::c_jets::jets_wrapper::lbtc_asset, + Elements::Le16 => simplicity_sys::c_jets::jets_wrapper::le_16, + Elements::Le32 => simplicity_sys::c_jets::jets_wrapper::le_32, + Elements::Le64 => simplicity_sys::c_jets::jets_wrapper::le_64, + Elements::Le8 => simplicity_sys::c_jets::jets_wrapper::le_8, + Elements::LeftExtend16_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_32, + Elements::LeftExtend16_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_16_64, + Elements::LeftExtend1_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_16, + Elements::LeftExtend1_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_32, + Elements::LeftExtend1_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_64, + Elements::LeftExtend1_8 => simplicity_sys::c_jets::jets_wrapper::left_extend_1_8, + Elements::LeftExtend32_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_32_64, + Elements::LeftExtend8_16 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_16, + Elements::LeftExtend8_32 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_32, + Elements::LeftExtend8_64 => simplicity_sys::c_jets::jets_wrapper::left_extend_8_64, + Elements::LeftPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_32, + Elements::LeftPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_16_64, + Elements::LeftPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_16, + Elements::LeftPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_32, + Elements::LeftPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_64, + Elements::LeftPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_1_8, + Elements::LeftPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_32_64, + Elements::LeftPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_16, + Elements::LeftPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_32, + Elements::LeftPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_high_8_64, + Elements::LeftPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_32, + Elements::LeftPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_16_64, + Elements::LeftPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_16, + Elements::LeftPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_32, + Elements::LeftPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_64, + Elements::LeftPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_1_8, + Elements::LeftPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_32_64, + Elements::LeftPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_16, + Elements::LeftPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_32, + Elements::LeftPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::left_pad_low_8_64, + Elements::LeftRotate16 => simplicity_sys::c_jets::jets_wrapper::left_rotate_16, + Elements::LeftRotate32 => simplicity_sys::c_jets::jets_wrapper::left_rotate_32, + Elements::LeftRotate64 => simplicity_sys::c_jets::jets_wrapper::left_rotate_64, + Elements::LeftRotate8 => simplicity_sys::c_jets::jets_wrapper::left_rotate_8, + Elements::LeftShift16 => simplicity_sys::c_jets::jets_wrapper::left_shift_16, + Elements::LeftShift32 => simplicity_sys::c_jets::jets_wrapper::left_shift_32, + Elements::LeftShift64 => simplicity_sys::c_jets::jets_wrapper::left_shift_64, + Elements::LeftShift8 => simplicity_sys::c_jets::jets_wrapper::left_shift_8, + Elements::LeftShiftWith16 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_16, + Elements::LeftShiftWith32 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_32, + Elements::LeftShiftWith64 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_64, + Elements::LeftShiftWith8 => simplicity_sys::c_jets::jets_wrapper::left_shift_with_8, + Elements::Leftmost16_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_1, + Elements::Leftmost16_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_2, + Elements::Leftmost16_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_4, + Elements::Leftmost16_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_16_8, + Elements::Leftmost32_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_1, + Elements::Leftmost32_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_16, + Elements::Leftmost32_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_2, + Elements::Leftmost32_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_4, + Elements::Leftmost32_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_32_8, + Elements::Leftmost64_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_1, + Elements::Leftmost64_16 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_16, + Elements::Leftmost64_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_2, + Elements::Leftmost64_32 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_32, + Elements::Leftmost64_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_4, + Elements::Leftmost64_8 => simplicity_sys::c_jets::jets_wrapper::leftmost_64_8, + Elements::Leftmost8_1 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_1, + Elements::Leftmost8_2 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_2, + Elements::Leftmost8_4 => simplicity_sys::c_jets::jets_wrapper::leftmost_8_4, + Elements::LinearCombination1 => simplicity_sys::c_jets::jets_wrapper::linear_combination_1, + Elements::LinearVerify1 => simplicity_sys::c_jets::jets_wrapper::linear_verify_1, + Elements::LockTime => simplicity_sys::c_jets::jets_wrapper::lock_time, + Elements::Low1 => simplicity_sys::c_jets::jets_wrapper::low_1, + Elements::Low16 => simplicity_sys::c_jets::jets_wrapper::low_16, + Elements::Low32 => simplicity_sys::c_jets::jets_wrapper::low_32, + Elements::Low64 => simplicity_sys::c_jets::jets_wrapper::low_64, + Elements::Low8 => simplicity_sys::c_jets::jets_wrapper::low_8, + Elements::Lt16 => simplicity_sys::c_jets::jets_wrapper::lt_16, + Elements::Lt32 => simplicity_sys::c_jets::jets_wrapper::lt_32, + Elements::Lt64 => simplicity_sys::c_jets::jets_wrapper::lt_64, + Elements::Lt8 => simplicity_sys::c_jets::jets_wrapper::lt_8, + Elements::Maj1 => simplicity_sys::c_jets::jets_wrapper::maj_1, + Elements::Maj16 => simplicity_sys::c_jets::jets_wrapper::maj_16, + Elements::Maj32 => simplicity_sys::c_jets::jets_wrapper::maj_32, + Elements::Maj64 => simplicity_sys::c_jets::jets_wrapper::maj_64, + Elements::Maj8 => simplicity_sys::c_jets::jets_wrapper::maj_8, + Elements::Max16 => simplicity_sys::c_jets::jets_wrapper::max_16, + Elements::Max32 => simplicity_sys::c_jets::jets_wrapper::max_32, + Elements::Max64 => simplicity_sys::c_jets::jets_wrapper::max_64, + Elements::Max8 => simplicity_sys::c_jets::jets_wrapper::max_8, + Elements::Median16 => simplicity_sys::c_jets::jets_wrapper::median_16, + Elements::Median32 => simplicity_sys::c_jets::jets_wrapper::median_32, + Elements::Median64 => simplicity_sys::c_jets::jets_wrapper::median_64, + Elements::Median8 => simplicity_sys::c_jets::jets_wrapper::median_8, + Elements::Min16 => simplicity_sys::c_jets::jets_wrapper::min_16, + Elements::Min32 => simplicity_sys::c_jets::jets_wrapper::min_32, + Elements::Min64 => simplicity_sys::c_jets::jets_wrapper::min_64, + Elements::Min8 => simplicity_sys::c_jets::jets_wrapper::min_8, + Elements::Modulo16 => simplicity_sys::c_jets::jets_wrapper::modulo_16, + Elements::Modulo32 => simplicity_sys::c_jets::jets_wrapper::modulo_32, + Elements::Modulo64 => simplicity_sys::c_jets::jets_wrapper::modulo_64, + Elements::Modulo8 => simplicity_sys::c_jets::jets_wrapper::modulo_8, + Elements::Multiply16 => simplicity_sys::c_jets::jets_wrapper::multiply_16, + Elements::Multiply32 => simplicity_sys::c_jets::jets_wrapper::multiply_32, + Elements::Multiply64 => simplicity_sys::c_jets::jets_wrapper::multiply_64, + Elements::Multiply8 => simplicity_sys::c_jets::jets_wrapper::multiply_8, + Elements::Negate16 => simplicity_sys::c_jets::jets_wrapper::negate_16, + Elements::Negate32 => simplicity_sys::c_jets::jets_wrapper::negate_32, + Elements::Negate64 => simplicity_sys::c_jets::jets_wrapper::negate_64, + Elements::Negate8 => simplicity_sys::c_jets::jets_wrapper::negate_8, + Elements::NewIssuanceContract => simplicity_sys::c_jets::jets_wrapper::new_issuance_contract, + Elements::NonceHash => simplicity_sys::c_jets::jets_wrapper::nonce_hash, + Elements::NumInputs => simplicity_sys::c_jets::jets_wrapper::num_inputs, + Elements::NumOutputs => simplicity_sys::c_jets::jets_wrapper::num_outputs, + Elements::One16 => simplicity_sys::c_jets::jets_wrapper::one_16, + Elements::One32 => simplicity_sys::c_jets::jets_wrapper::one_32, + Elements::One64 => simplicity_sys::c_jets::jets_wrapper::one_64, + Elements::One8 => simplicity_sys::c_jets::jets_wrapper::one_8, + Elements::Or1 => simplicity_sys::c_jets::jets_wrapper::or_1, + Elements::Or16 => simplicity_sys::c_jets::jets_wrapper::or_16, + Elements::Or32 => simplicity_sys::c_jets::jets_wrapper::or_32, + Elements::Or64 => simplicity_sys::c_jets::jets_wrapper::or_64, + Elements::Or8 => simplicity_sys::c_jets::jets_wrapper::or_8, + Elements::OutpointHash => simplicity_sys::c_jets::jets_wrapper::outpoint_hash, + Elements::OutputAmount => simplicity_sys::c_jets::jets_wrapper::output_amount, + Elements::OutputAmountsHash => simplicity_sys::c_jets::jets_wrapper::output_amounts_hash, + Elements::OutputAsset => simplicity_sys::c_jets::jets_wrapper::output_asset, + Elements::OutputHash => simplicity_sys::c_jets::jets_wrapper::output_hash, + Elements::OutputIsFee => simplicity_sys::c_jets::jets_wrapper::output_is_fee, + Elements::OutputNonce => simplicity_sys::c_jets::jets_wrapper::output_nonce, + Elements::OutputNoncesHash => simplicity_sys::c_jets::jets_wrapper::output_nonces_hash, + Elements::OutputNullDatum => simplicity_sys::c_jets::jets_wrapper::output_null_datum, + Elements::OutputRangeProof => simplicity_sys::c_jets::jets_wrapper::output_range_proof, + Elements::OutputRangeProofsHash => simplicity_sys::c_jets::jets_wrapper::output_range_proofs_hash, + Elements::OutputScriptHash => simplicity_sys::c_jets::jets_wrapper::output_script_hash, + Elements::OutputScriptsHash => simplicity_sys::c_jets::jets_wrapper::output_scripts_hash, + Elements::OutputSurjectionProof => simplicity_sys::c_jets::jets_wrapper::output_surjection_proof, + Elements::OutputSurjectionProofsHash => simplicity_sys::c_jets::jets_wrapper::output_surjection_proofs_hash, + Elements::OutputsHash => simplicity_sys::c_jets::jets_wrapper::outputs_hash, + Elements::ParseLock => simplicity_sys::c_jets::jets_wrapper::parse_lock, + Elements::ParseSequence => simplicity_sys::c_jets::jets_wrapper::parse_sequence, + Elements::PointVerify1 => simplicity_sys::c_jets::jets_wrapper::point_verify_1, + Elements::ReissuanceBlinding => simplicity_sys::c_jets::jets_wrapper::reissuance_blinding, + Elements::ReissuanceEntropy => simplicity_sys::c_jets::jets_wrapper::reissuance_entropy, + Elements::RightExtend16_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_32, + Elements::RightExtend16_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_16_64, + Elements::RightExtend32_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_32_64, + Elements::RightExtend8_16 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_16, + Elements::RightExtend8_32 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_32, + Elements::RightExtend8_64 => simplicity_sys::c_jets::jets_wrapper::right_extend_8_64, + Elements::RightPadHigh16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_32, + Elements::RightPadHigh16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_16_64, + Elements::RightPadHigh1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_16, + Elements::RightPadHigh1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_32, + Elements::RightPadHigh1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_64, + Elements::RightPadHigh1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_1_8, + Elements::RightPadHigh32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_32_64, + Elements::RightPadHigh8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_16, + Elements::RightPadHigh8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_32, + Elements::RightPadHigh8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_high_8_64, + Elements::RightPadLow16_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_32, + Elements::RightPadLow16_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_16_64, + Elements::RightPadLow1_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_16, + Elements::RightPadLow1_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_32, + Elements::RightPadLow1_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_64, + Elements::RightPadLow1_8 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_1_8, + Elements::RightPadLow32_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_32_64, + Elements::RightPadLow8_16 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_16, + Elements::RightPadLow8_32 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_32, + Elements::RightPadLow8_64 => simplicity_sys::c_jets::jets_wrapper::right_pad_low_8_64, + Elements::RightRotate16 => simplicity_sys::c_jets::jets_wrapper::right_rotate_16, + Elements::RightRotate32 => simplicity_sys::c_jets::jets_wrapper::right_rotate_32, + Elements::RightRotate64 => simplicity_sys::c_jets::jets_wrapper::right_rotate_64, + Elements::RightRotate8 => simplicity_sys::c_jets::jets_wrapper::right_rotate_8, + Elements::RightShift16 => simplicity_sys::c_jets::jets_wrapper::right_shift_16, + Elements::RightShift32 => simplicity_sys::c_jets::jets_wrapper::right_shift_32, + Elements::RightShift64 => simplicity_sys::c_jets::jets_wrapper::right_shift_64, + Elements::RightShift8 => simplicity_sys::c_jets::jets_wrapper::right_shift_8, + Elements::RightShiftWith16 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_16, + Elements::RightShiftWith32 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_32, + Elements::RightShiftWith64 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_64, + Elements::RightShiftWith8 => simplicity_sys::c_jets::jets_wrapper::right_shift_with_8, + Elements::Rightmost16_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_1, + Elements::Rightmost16_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_2, + Elements::Rightmost16_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_4, + Elements::Rightmost16_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_16_8, + Elements::Rightmost32_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_1, + Elements::Rightmost32_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_16, + Elements::Rightmost32_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_2, + Elements::Rightmost32_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_4, + Elements::Rightmost32_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_32_8, + Elements::Rightmost64_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_1, + Elements::Rightmost64_16 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_16, + Elements::Rightmost64_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_2, + Elements::Rightmost64_32 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_32, + Elements::Rightmost64_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_4, + Elements::Rightmost64_8 => simplicity_sys::c_jets::jets_wrapper::rightmost_64_8, + Elements::Rightmost8_1 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_1, + Elements::Rightmost8_2 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_2, + Elements::Rightmost8_4 => simplicity_sys::c_jets::jets_wrapper::rightmost_8_4, + Elements::ScalarAdd => simplicity_sys::c_jets::jets_wrapper::scalar_add, + Elements::ScalarInvert => simplicity_sys::c_jets::jets_wrapper::scalar_invert, + Elements::ScalarIsZero => simplicity_sys::c_jets::jets_wrapper::scalar_is_zero, + Elements::ScalarMultiply => simplicity_sys::c_jets::jets_wrapper::scalar_multiply, + Elements::ScalarMultiplyLambda => simplicity_sys::c_jets::jets_wrapper::scalar_multiply_lambda, + Elements::ScalarNegate => simplicity_sys::c_jets::jets_wrapper::scalar_negate, + Elements::ScalarNormalize => simplicity_sys::c_jets::jets_wrapper::scalar_normalize, + Elements::ScalarSquare => simplicity_sys::c_jets::jets_wrapper::scalar_square, + Elements::Scale => simplicity_sys::c_jets::jets_wrapper::scale, + Elements::ScriptCMR => simplicity_sys::c_jets::jets_wrapper::script_cmr, + Elements::Sha256Block => simplicity_sys::c_jets::jets_wrapper::sha_256_block, + Elements::Sha256Ctx8Add1 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_1, + Elements::Sha256Ctx8Add128 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_128, + Elements::Sha256Ctx8Add16 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_16, + Elements::Sha256Ctx8Add2 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_2, + Elements::Sha256Ctx8Add256 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_256, + Elements::Sha256Ctx8Add32 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_32, + Elements::Sha256Ctx8Add4 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_4, + Elements::Sha256Ctx8Add512 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_512, + Elements::Sha256Ctx8Add64 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_64, + Elements::Sha256Ctx8Add8 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_8, + Elements::Sha256Ctx8AddBuffer511 => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_add_buffer_511, + Elements::Sha256Ctx8Finalize => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_finalize, + Elements::Sha256Ctx8Init => simplicity_sys::c_jets::jets_wrapper::sha_256_ctx_8_init, + Elements::Sha256Iv => simplicity_sys::c_jets::jets_wrapper::sha_256_iv, + Elements::SigAllHash => simplicity_sys::c_jets::jets_wrapper::sig_all_hash, + Elements::Some1 => simplicity_sys::c_jets::jets_wrapper::some_1, + Elements::Some16 => simplicity_sys::c_jets::jets_wrapper::some_16, + Elements::Some32 => simplicity_sys::c_jets::jets_wrapper::some_32, + Elements::Some64 => simplicity_sys::c_jets::jets_wrapper::some_64, + Elements::Some8 => simplicity_sys::c_jets::jets_wrapper::some_8, + Elements::Subtract16 => simplicity_sys::c_jets::jets_wrapper::subtract_16, + Elements::Subtract32 => simplicity_sys::c_jets::jets_wrapper::subtract_32, + Elements::Subtract64 => simplicity_sys::c_jets::jets_wrapper::subtract_64, + Elements::Subtract8 => simplicity_sys::c_jets::jets_wrapper::subtract_8, + Elements::Swu => simplicity_sys::c_jets::jets_wrapper::swu, + Elements::TapEnvHash => simplicity_sys::c_jets::jets_wrapper::tap_env_hash, + Elements::TapdataInit => simplicity_sys::c_jets::jets_wrapper::tapdata_init, + Elements::TapleafHash => simplicity_sys::c_jets::jets_wrapper::tapleaf_hash, + Elements::TapleafVersion => simplicity_sys::c_jets::jets_wrapper::tapleaf_version, + Elements::Tappath => simplicity_sys::c_jets::jets_wrapper::tappath, + Elements::TappathHash => simplicity_sys::c_jets::jets_wrapper::tappath_hash, + Elements::TotalFee => simplicity_sys::c_jets::jets_wrapper::total_fee, + Elements::TransactionId => simplicity_sys::c_jets::jets_wrapper::transaction_id, + Elements::TxHash => simplicity_sys::c_jets::jets_wrapper::tx_hash, + Elements::TxIsFinal => simplicity_sys::c_jets::jets_wrapper::tx_is_final, + Elements::TxLockHeight => simplicity_sys::c_jets::jets_wrapper::tx_lock_height, + Elements::TxLockTime => simplicity_sys::c_jets::jets_wrapper::tx_lock_time, + Elements::Verify => simplicity_sys::c_jets::jets_wrapper::verify, + Elements::Version => simplicity_sys::c_jets::jets_wrapper::version, + Elements::Xor1 => simplicity_sys::c_jets::jets_wrapper::xor_1, + Elements::Xor16 => simplicity_sys::c_jets::jets_wrapper::xor_16, + Elements::Xor32 => simplicity_sys::c_jets::jets_wrapper::xor_32, + Elements::Xor64 => simplicity_sys::c_jets::jets_wrapper::xor_64, + Elements::Xor8 => simplicity_sys::c_jets::jets_wrapper::xor_8, + Elements::XorXor1 => simplicity_sys::c_jets::jets_wrapper::xor_xor_1, + Elements::XorXor16 => simplicity_sys::c_jets::jets_wrapper::xor_xor_16, + Elements::XorXor32 => simplicity_sys::c_jets::jets_wrapper::xor_xor_32, + Elements::XorXor64 => simplicity_sys::c_jets::jets_wrapper::xor_xor_64, + Elements::XorXor8 => simplicity_sys::c_jets::jets_wrapper::xor_xor_8, + } +} + +pub(crate) fn decode>(bits: &mut BitIter) -> Result { + decode_bits!(bits, { + 0 => { + 0 => { + 0 => {Elements::Verify}, + 1 => { + 0 => { + 0 => { + 0 => {Elements::Low1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Low8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Low16}, + 1 => {Elements::Low32} + }, + 1 => { + 0 => {Elements::Low64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::High1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::High8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::High16}, + 1 => {Elements::High32} + }, + 1 => { + 0 => {Elements::High64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Complement1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Complement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Complement16}, + 1 => {Elements::Complement32} + }, + 1 => { + 0 => {Elements::Complement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::And1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::And8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::And16}, + 1 => {Elements::And32} + }, + 1 => { + 0 => {Elements::And64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Elements::Or1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Or8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Or16}, + 1 => {Elements::Or32} + }, + 1 => { + 0 => {Elements::Or64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Xor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Xor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Xor16}, + 1 => {Elements::Xor32} + }, + 1 => { + 0 => {Elements::Xor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Maj1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Maj8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Maj16}, + 1 => {Elements::Maj32} + }, + 1 => { + 0 => {Elements::Maj64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::XorXor1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::XorXor8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::XorXor16}, + 1 => {Elements::XorXor32} + }, + 1 => { + 0 => {Elements::XorXor64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Elements::Ch1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Ch8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Ch16}, + 1 => {Elements::Ch32} + }, + 1 => { + 0 => {Elements::Ch64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Some1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Some8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Some16}, + 1 => {Elements::Some32} + }, + 1 => { + 0 => {Elements::Some64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::All8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::All16}, + 1 => {Elements::All32} + }, + 1 => { + 0 => {Elements::All64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Eq1}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Eq8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Eq16}, + 1 => {Elements::Eq32} + }, + 1 => { + 0 => {Elements::Eq64}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::Eq256}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullLeftShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullLeftShift16_1}, + 1 => {Elements::FullLeftShift32_1} + }, + 1 => { + 0 => {Elements::FullLeftShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Elements::FullLeftShift8_2}, + 1 => {Elements::FullLeftShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullLeftShift32_2}, + 1 => {Elements::FullLeftShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::FullLeftShift8_4}, + 1 => { + 0 => { + 0 => {Elements::FullLeftShift16_4}, + 1 => {Elements::FullLeftShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullLeftShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullLeftShift16_8}, + 1 => { + 0 => { + 0 => {Elements::FullLeftShift32_8}, + 1 => {Elements::FullLeftShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::FullLeftShift32_16}, + 1 => { + 0 => { + 0 => {Elements::FullLeftShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::FullLeftShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullRightShift8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullRightShift16_1}, + 1 => {Elements::FullRightShift32_1} + }, + 1 => { + 0 => {Elements::FullRightShift64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Elements::FullRightShift8_2}, + 1 => {Elements::FullRightShift16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullRightShift32_2}, + 1 => {Elements::FullRightShift64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::FullRightShift8_4}, + 1 => { + 0 => { + 0 => {Elements::FullRightShift16_4}, + 1 => {Elements::FullRightShift32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullRightShift64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullRightShift16_8}, + 1 => { + 0 => { + 0 => {Elements::FullRightShift32_8}, + 1 => {Elements::FullRightShift64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::FullRightShift32_16}, + 1 => { + 0 => { + 0 => {Elements::FullRightShift64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::FullRightShift64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Leftmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Leftmost16_1}, + 1 => {Elements::Leftmost32_1} + }, + 1 => { + 0 => {Elements::Leftmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Elements::Leftmost8_2}, + 1 => {Elements::Leftmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Leftmost32_2}, + 1 => {Elements::Leftmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Leftmost8_4}, + 1 => { + 0 => { + 0 => {Elements::Leftmost16_4}, + 1 => {Elements::Leftmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Leftmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Leftmost16_8}, + 1 => { + 0 => { + 0 => {Elements::Leftmost32_8}, + 1 => {Elements::Leftmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::Leftmost32_16}, + 1 => { + 0 => { + 0 => {Elements::Leftmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::Leftmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Rightmost8_1} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Rightmost16_1}, + 1 => {Elements::Rightmost32_1} + }, + 1 => { + 0 => {Elements::Rightmost64_1}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {Elements::Rightmost8_2}, + 1 => {Elements::Rightmost16_2} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Rightmost32_2}, + 1 => {Elements::Rightmost64_2} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Rightmost8_4}, + 1 => { + 0 => { + 0 => {Elements::Rightmost16_4}, + 1 => {Elements::Rightmost32_4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Rightmost64_4}, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Rightmost16_8}, + 1 => { + 0 => { + 0 => {Elements::Rightmost32_8}, + 1 => {Elements::Rightmost64_8} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::Rightmost32_16}, + 1 => { + 0 => { + 0 => {Elements::Rightmost64_16}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::Rightmost64_32}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftPadLow1_16}, + 1 => {Elements::LeftPadLow1_32} + }, + 1 => { + 0 => {Elements::LeftPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftPadLow8_16}, + 1 => { + 0 => { + 0 => {Elements::LeftPadLow8_32}, + 1 => {Elements::LeftPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::LeftPadLow16_32}, + 1 => { + 0 => { + 0 => {Elements::LeftPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::LeftPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftPadHigh1_16}, + 1 => {Elements::LeftPadHigh1_32} + }, + 1 => { + 0 => {Elements::LeftPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftPadHigh8_16}, + 1 => { + 0 => { + 0 => {Elements::LeftPadHigh8_32}, + 1 => {Elements::LeftPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::LeftPadHigh16_32}, + 1 => { + 0 => { + 0 => {Elements::LeftPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::LeftPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftExtend1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftExtend1_16}, + 1 => {Elements::LeftExtend1_32} + }, + 1 => { + 0 => {Elements::LeftExtend1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftExtend8_16}, + 1 => { + 0 => { + 0 => {Elements::LeftExtend8_32}, + 1 => {Elements::LeftExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::LeftExtend16_32}, + 1 => { + 0 => { + 0 => {Elements::LeftExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::LeftExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::RightPadLow1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightPadLow1_16}, + 1 => {Elements::RightPadLow1_32} + }, + 1 => { + 0 => {Elements::RightPadLow1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightPadLow8_16}, + 1 => { + 0 => { + 0 => {Elements::RightPadLow8_32}, + 1 => {Elements::RightPadLow8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::RightPadLow16_32}, + 1 => { + 0 => { + 0 => {Elements::RightPadLow16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::RightPadLow32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::RightPadHigh1_8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightPadHigh1_16}, + 1 => {Elements::RightPadHigh1_32} + }, + 1 => { + 0 => {Elements::RightPadHigh1_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightPadHigh8_16}, + 1 => { + 0 => { + 0 => {Elements::RightPadHigh8_32}, + 1 => {Elements::RightPadHigh8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::RightPadHigh16_32}, + 1 => { + 0 => { + 0 => {Elements::RightPadHigh16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::RightPadHigh32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightExtend8_16}, + 1 => { + 0 => { + 0 => {Elements::RightExtend8_32}, + 1 => {Elements::RightExtend8_64} + }, + 1 => {} + } + }, + 1 => { + 0 => {Elements::RightExtend16_32}, + 1 => { + 0 => { + 0 => {Elements::RightExtend16_64}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::RightExtend32_64}, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftShiftWith16}, + 1 => {Elements::LeftShiftWith32} + }, + 1 => { + 0 => {Elements::LeftShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::RightShiftWith8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightShiftWith16}, + 1 => {Elements::RightShiftWith32} + }, + 1 => { + 0 => {Elements::RightShiftWith64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftShift16}, + 1 => {Elements::LeftShift32} + }, + 1 => { + 0 => {Elements::LeftShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::RightShift8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightShift16}, + 1 => {Elements::RightShift32} + }, + 1 => { + 0 => {Elements::RightShift64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::LeftRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LeftRotate16}, + 1 => {Elements::LeftRotate32} + }, + 1 => { + 0 => {Elements::LeftRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::RightRotate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::RightRotate16}, + 1 => {Elements::RightRotate32} + }, + 1 => { + 0 => {Elements::RightRotate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + } + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::One8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::One16}, + 1 => {Elements::One32} + }, + 1 => { + 0 => {Elements::One64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullAdd8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullAdd16}, + 1 => {Elements::FullAdd32} + }, + 1 => { + 0 => {Elements::FullAdd64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Add8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Add16}, + 1 => {Elements::Add32} + }, + 1 => { + 0 => {Elements::Add64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullIncrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullIncrement16}, + 1 => {Elements::FullIncrement32} + }, + 1 => { + 0 => {Elements::FullIncrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Increment8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Increment16}, + 1 => {Elements::Increment32} + }, + 1 => { + 0 => {Elements::Increment64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullSubtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullSubtract16}, + 1 => {Elements::FullSubtract32} + }, + 1 => { + 0 => {Elements::FullSubtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Subtract8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Subtract16}, + 1 => {Elements::Subtract32} + }, + 1 => { + 0 => {Elements::Subtract64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Negate8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Negate16}, + 1 => {Elements::Negate32} + }, + 1 => { + 0 => {Elements::Negate64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullDecrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullDecrement16}, + 1 => {Elements::FullDecrement32} + }, + 1 => { + 0 => {Elements::FullDecrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Decrement8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Decrement16}, + 1 => {Elements::Decrement32} + }, + 1 => { + 0 => {Elements::Decrement64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::FullMultiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::FullMultiply16}, + 1 => {Elements::FullMultiply32} + }, + 1 => { + 0 => {Elements::FullMultiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Multiply8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Multiply16}, + 1 => {Elements::Multiply32} + }, + 1 => { + 0 => {Elements::Multiply64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::IsZero8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::IsZero16}, + 1 => {Elements::IsZero32} + }, + 1 => { + 0 => {Elements::IsZero64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::IsOne8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::IsOne16}, + 1 => {Elements::IsOne32} + }, + 1 => { + 0 => {Elements::IsOne64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Le8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Le16}, + 1 => {Elements::Le32} + }, + 1 => { + 0 => {Elements::Le64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Lt8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Lt16}, + 1 => {Elements::Lt32} + }, + 1 => { + 0 => {Elements::Lt64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Min8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Min16}, + 1 => {Elements::Min32} + }, + 1 => { + 0 => {Elements::Min64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Max8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Max16}, + 1 => {Elements::Max32} + }, + 1 => { + 0 => {Elements::Max64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Median8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Median16}, + 1 => {Elements::Median32} + }, + 1 => { + 0 => {Elements::Median64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {Elements::DivMod128_64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::DivMod8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::DivMod16}, + 1 => {Elements::DivMod32} + }, + 1 => { + 0 => {Elements::DivMod64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Divide8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Divide16}, + 1 => {Elements::Divide32} + }, + 1 => { + 0 => {Elements::Divide64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Modulo8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Modulo16}, + 1 => {Elements::Modulo32} + }, + 1 => { + 0 => {Elements::Modulo64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => { + 0 => {}, + 1 => {Elements::Divides8} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Divides16}, + 1 => {Elements::Divides32} + }, + 1 => { + 0 => {Elements::Divides64}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => {Elements::Sha256Block}, + 1 => { + 0 => { + 0 => {Elements::Sha256Iv}, + 1 => { + 0 => {Elements::Sha256Ctx8Add1}, + 1 => { + 0 => { + 0 => {Elements::Sha256Ctx8Add2}, + 1 => {Elements::Sha256Ctx8Add4} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Sha256Ctx8Add8}, + 1 => {Elements::Sha256Ctx8Add16} + }, + 1 => { + 0 => {Elements::Sha256Ctx8Add32}, + 1 => {Elements::Sha256Ctx8Add64} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::Sha256Ctx8Add128}, + 1 => {Elements::Sha256Ctx8Add256} + }, + 1 => { + 0 => {Elements::Sha256Ctx8Add512}, + 1 => {} + } + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Sha256Ctx8AddBuffer511}, + 1 => {Elements::Sha256Ctx8Finalize} + }, + 1 => { + 0 => {Elements::Sha256Ctx8Init}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::PointVerify1}, + 1 => {} + }, + 1 => { + 0 => { + 0 => {Elements::Decompress}, + 1 => { + 0 => {Elements::LinearVerify1}, + 1 => {} + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::LinearCombination1}, + 1 => {} + }, + 1 => {Elements::Scale} + }, + 1 => { + 0 => {Elements::Generate}, + 1 => {Elements::GejInfinity} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::GejNormalize}, + 1 => {Elements::GejNegate} + }, + 1 => { + 0 => {Elements::GeNegate}, + 1 => {Elements::GejDouble} + } + }, + 1 => { + 0 => { + 0 => {Elements::GejAdd}, + 1 => {Elements::GejGeAddEx} + }, + 1 => { + 0 => {Elements::GejGeAdd}, + 1 => {Elements::GejRescale} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::GejIsInfinity}, + 1 => {Elements::GejEquiv} + }, + 1 => { + 0 => {Elements::GejGeEquiv}, + 1 => {Elements::GejXEquiv} + } + }, + 1 => { + 0 => { + 0 => {Elements::GejYIsOdd}, + 1 => {Elements::GejIsOnCurve} + }, + 1 => { + 0 => {Elements::GeIsOnCurve}, + 1 => {Elements::ScalarNormalize} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::ScalarNegate}, + 1 => {Elements::ScalarAdd} + }, + 1 => { + 0 => {Elements::ScalarSquare}, + 1 => {Elements::ScalarMultiply} + } + }, + 1 => { + 0 => { + 0 => {Elements::ScalarMultiplyLambda}, + 1 => {Elements::ScalarInvert} + }, + 1 => { + 0 => {Elements::ScalarIsZero}, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {}, + 1 => { + 0 => {}, + 1 => {Elements::FeNormalize} + } + }, + 1 => { + 0 => { + 0 => {Elements::FeNegate}, + 1 => {Elements::FeAdd} + }, + 1 => { + 0 => {Elements::FeSquare}, + 1 => {Elements::FeMultiply} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::FeMultiplyBeta}, + 1 => {Elements::FeInvert} + }, + 1 => { + 0 => {Elements::FeSquareRoot}, + 1 => {Elements::FeIsZero} + } + }, + 1 => { + 0 => { + 0 => {Elements::FeIsOdd}, + 1 => {} + }, + 1 => { + 0 => {Elements::HashToCurve}, + 1 => {Elements::Swu} + } + } + } + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => {Elements::CheckSigVerify}, + 1 => { + 0 => { + 0 => {Elements::Bip0340Verify}, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => {}, + 1 => { + 0 => {Elements::ParseLock}, + 1 => { + 0 => { + 0 => {Elements::ParseSequence}, + 1 => {Elements::TapdataInit} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => { + 0 => { + 0 => {Elements::SigAllHash}, + 1 => { + 0 => { + 0 => {Elements::TxHash}, + 1 => {Elements::TapEnvHash} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::OutputsHash}, + 1 => {Elements::InputsHash} + }, + 1 => { + 0 => {Elements::IssuancesHash}, + 1 => {Elements::InputUtxosHash} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::OutputHash}, + 1 => {Elements::OutputAmountsHash} + }, + 1 => { + 0 => {Elements::OutputScriptsHash}, + 1 => {Elements::OutputNoncesHash} + } + }, + 1 => { + 0 => { + 0 => {Elements::OutputRangeProofsHash}, + 1 => {Elements::OutputSurjectionProofsHash} + }, + 1 => { + 0 => {Elements::InputHash}, + 1 => {Elements::InputOutpointsHash} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::InputSequencesHash}, + 1 => {Elements::InputAnnexesHash} + }, + 1 => { + 0 => {Elements::InputScriptSigsHash}, + 1 => {Elements::IssuanceHash} + } + }, + 1 => { + 0 => { + 0 => {Elements::IssuanceAssetAmountsHash}, + 1 => {Elements::IssuanceTokenAmountsHash} + }, + 1 => { + 0 => {Elements::IssuanceRangeProofsHash}, + 1 => {Elements::IssuanceBlindingEntropyHash} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::InputUtxoHash}, + 1 => {Elements::InputAmountsHash} + }, + 1 => { + 0 => {Elements::InputScriptsHash}, + 1 => {Elements::TapleafHash} + } + }, + 1 => { + 0 => { + 0 => {Elements::TappathHash}, + 1 => {Elements::OutpointHash} + }, + 1 => { + 0 => {Elements::AssetAmountHash}, + 1 => {Elements::NonceHash} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::AnnexHash}, + 1 => {Elements::BuildTapleafSimplicity} + }, + 1 => { + 0 => {Elements::BuildTapbranch}, + 1 => {Elements::BuildTaptweak} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::CheckLockHeight}, + 1 => { + 0 => { + 0 => {Elements::CheckLockTime}, + 1 => {Elements::BrokenDoNotUseCheckLockDistance} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::BrokenDoNotUseCheckLockDuration}, + 1 => {Elements::TxLockHeight} + }, + 1 => { + 0 => {Elements::TxLockTime}, + 1 => {Elements::BrokenDoNotUseTxLockDistance} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::BrokenDoNotUseTxLockDuration}, + 1 => {Elements::TxIsFinal} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + }, + 1 => { + 0 => {Elements::Issuance}, + 1 => { + 0 => { + 0 => {Elements::IssuanceAsset}, + 1 => {Elements::IssuanceToken} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::IssuanceEntropy}, + 1 => {Elements::CalculateIssuanceEntropy} + }, + 1 => { + 0 => {Elements::CalculateAsset}, + 1 => {Elements::CalculateExplicitToken} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::CalculateConfidentialToken}, + 1 => {Elements::LbtcAsset} + }, + 1 => {} + }, + 1 => {} + } + }, + 1 => {} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::ScriptCMR}, + 1 => { + 0 => { + 0 => {Elements::InternalKey}, + 1 => {Elements::CurrentIndex} + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::NumInputs}, + 1 => {Elements::NumOutputs} + }, + 1 => { + 0 => {Elements::LockTime}, + 1 => {Elements::OutputAsset} + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::OutputAmount}, + 1 => {Elements::OutputNonce} + }, + 1 => { + 0 => {Elements::OutputScriptHash}, + 1 => {Elements::OutputNullDatum} + } + }, + 1 => { + 0 => { + 0 => {Elements::OutputIsFee}, + 1 => {Elements::OutputSurjectionProof} + }, + 1 => { + 0 => {Elements::OutputRangeProof}, + 1 => {Elements::TotalFee} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::CurrentPegin}, + 1 => {Elements::CurrentPrevOutpoint} + }, + 1 => { + 0 => {Elements::CurrentAsset}, + 1 => {Elements::CurrentAmount} + } + }, + 1 => { + 0 => { + 0 => {Elements::CurrentScriptHash}, + 1 => {Elements::CurrentSequence} + }, + 1 => { + 0 => {Elements::CurrentAnnexHash}, + 1 => {Elements::CurrentScriptSigHash} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::CurrentReissuanceBlinding}, + 1 => {Elements::CurrentNewIssuanceContract} + }, + 1 => { + 0 => {Elements::CurrentReissuanceEntropy}, + 1 => {Elements::CurrentIssuanceAssetAmount} + } + }, + 1 => { + 0 => { + 0 => {Elements::CurrentIssuanceTokenAmount}, + 1 => {Elements::CurrentIssuanceAssetProof} + }, + 1 => { + 0 => {Elements::CurrentIssuanceTokenProof}, + 1 => {Elements::InputPegin} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::InputPrevOutpoint}, + 1 => {Elements::InputAsset} + }, + 1 => { + 0 => {Elements::InputAmount}, + 1 => {Elements::InputScriptHash} + } + }, + 1 => { + 0 => { + 0 => {Elements::InputSequence}, + 1 => {Elements::InputAnnexHash} + }, + 1 => { + 0 => {Elements::InputScriptSigHash}, + 1 => {Elements::ReissuanceBlinding} + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => {Elements::NewIssuanceContract}, + 1 => {Elements::ReissuanceEntropy} + }, + 1 => { + 0 => {Elements::IssuanceAssetAmount}, + 1 => {Elements::IssuanceTokenAmount} + } + }, + 1 => { + 0 => { + 0 => {Elements::IssuanceAssetProof}, + 1 => {Elements::IssuanceTokenProof} + }, + 1 => { + 0 => {Elements::TapleafVersion}, + 1 => {Elements::Tappath} + } + } + } + }, + 1 => { + 0 => { + 0 => { + 0 => { + 0 => {Elements::Version}, + 1 => {Elements::GenesisBlockHash} + }, + 1 => { + 0 => {Elements::TransactionId}, + 1 => {} + } + }, + 1 => {} + }, + 1 => {} + } + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + }, + 1 => {} + } + } + } + }) } diff --git a/src/jet/mod.rs b/src/jet/mod.rs index 52ffd3fe..9e832982 100644 --- a/src/jet/mod.rs +++ b/src/jet/mod.rs @@ -55,8 +55,12 @@ impl std::fmt::Display for JetFailed { impl std::error::Error for JetFailed {} +// pub fn test_object_safety() -> Box { +// Box::new(Core::Verify) +// } + /// An environment for jets to read. -pub trait JetEnvironment { +pub trait JetEnvironment: 'static { /// The type of jet that this environment supports. type Jet: Jet; @@ -69,7 +73,15 @@ pub trait JetEnvironment { /// Obtain the FFI C pointer for the jet. fn c_jet_ptr( jet: &Self::Jet, - ) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool; + ) -> fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool; + + /// Decode a jet from bits. + fn decode_jet>( + bits: &mut BitIter, + ) -> Result; + + /// Parse a jet from a string. + fn parse(s: &str) -> Result; } /// Family of jets that share an encoding scheme and execution environment. @@ -80,14 +92,7 @@ pub trait JetEnvironment { /// Jets may read values from their _environment_. /// /// Jets are **always** leaves in a Simplicity DAG. -pub trait Jet: - Copy + Eq + Ord + Hash + std::fmt::Debug + std::fmt::Display + std::str::FromStr + 'static -{ - /// Environment for jet to read from - type Environment; - /// CJetEnvironment to interact with C FFI. - type CJetEnvironment; - +pub trait Jet: Copy + Eq + Ord + Hash + std::fmt::Debug + std::fmt::Display + 'static { /// Return the CMR of the jet. fn cmr(&self) -> Cmr; @@ -98,16 +103,7 @@ pub trait Jet: fn target_ty(&self) -> TypeName; /// Encode the jet to bits. - fn encode(&self, w: &mut BitWriter) -> std::io::Result; - - /// Decode a jet from bits. - fn decode>(bits: &mut BitIter) -> Result; - - /// Obtains a C FFI compatible environment for the jet. - fn c_jet_env(env: &Self::Environment) -> &Self::CJetEnvironment; - - /// Obtain the FFI C pointer for the jet. - fn c_jet_ptr(&self) -> &dyn Fn(&mut CFrameItem, CFrameItem, &Self::CJetEnvironment) -> bool; + fn encode(&self, w: &mut BitWriter<&mut dyn Write>) -> std::io::Result; /// Return the cost of the jet. fn cost(&self) -> Cost; diff --git a/src/node/commit.rs b/src/node/commit.rs index dbd272ee..49cb2439 100644 --- a/src/node/commit.rs +++ b/src/node/commit.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: CC0-1.0 use crate::dag::{DagLike, MaxSharing, NoSharing, PostOrderIterItem}; -use crate::jet::Jet; +use crate::jet::{Jet, JetEnvironment}; use crate::types::arrow::{Arrow, FinalArrow}; use crate::{encode, types, Value}; use crate::{Amr, BitIter, BitWriter, Cmr, DecodeError, Ihr, Imr}; @@ -251,13 +251,15 @@ impl CommitNode { /// or the witness is provided by other means. /// /// If the serialization contains the witness data, then use [`RedeemNode::decode()`]. - pub fn decode>(bits: BitIter) -> Result, DecodeError> { + pub fn decode, JE: JetEnvironment>( + bits: BitIter, + ) -> Result, DecodeError> { use crate::decode; // 1. Decode program with out witnesses. let program = types::Context::with_context(|ctx| { let construct = - crate::ConstructNode::decode(&ctx, bits).map_err(DecodeError::Decode)?; + crate::ConstructNode::decode::<_, JE>(&ctx, bits).map_err(DecodeError::Decode)?; construct.finalize_types().map_err(DecodeError::Type) })?; // 2. Do sharing check, using incomplete IHRs @@ -270,7 +272,7 @@ impl CommitNode { #[cfg(feature = "base64")] #[allow(clippy::should_implement_trait)] // returns Arc - pub fn from_str(s: &str) -> Result, crate::ParseError> { + pub fn from_str>(s: &str) -> Result, crate::ParseError> { use crate::base64::engine::general_purpose; use crate::base64::Engine as _; @@ -278,12 +280,12 @@ impl CommitNode { .decode(s) .map_err(crate::ParseError::Base64)?; let iter = crate::BitIter::new(v.into_iter()); - Self::decode(iter).map_err(crate::ParseError::Decode) + Self::decode::<_, JE>(iter).map_err(crate::ParseError::Decode) } /// Encode a Simplicity expression to bits without any witness data #[deprecated(since = "0.5.0", note = "use Self::encode_without_witness instead")] - pub fn encode(&self, w: &mut BitWriter) -> io::Result { + pub fn encode(&self, w: &mut BitWriter<&mut dyn io::Write>) -> io::Result { let program_bits = encode::encode_program(self, w)?; w.flush_all()?; Ok(program_bits) @@ -309,20 +311,20 @@ mod tests { use std::fmt; use crate::decode::Error; - use crate::jet::Core; + use crate::jet::CoreEnv; #[cfg(feature = "human_encoding")] - use crate::{human_encoding::Forest, jet::CoreEnv, node::SimpleFinalizer, BitMachine, Value}; + use crate::{human_encoding::Forest, node::SimpleFinalizer, BitMachine, Value}; #[cfg(feature = "human_encoding")] #[cfg_attr(not(feature = "base64"), allow(unused_variables))] #[track_caller] - fn assert_program_deserializable( + fn assert_program_deserializable( prog_str: &str, prog_bytes: &[u8], cmr_str: &str, b64_str: &str, - ) -> Arc> { - let forest = match Forest::::parse(prog_str) { + ) -> Arc> { + let forest = match Forest::parse::(prog_str) { Ok(forest) => forest, Err(e) => panic!("Failed to parse program `{}`: {}", prog_str, e), }; @@ -349,7 +351,7 @@ mod tests { ); let iter = BitIter::from(prog_bytes); - let prog = match CommitNode::::decode(iter) { + let prog = match CommitNode::decode::<_, JE>(iter) { Ok(prog) => prog, Err(e) => panic!("program {} failed: {}", prog_hex, e), }; @@ -376,19 +378,19 @@ mod tests { { assert_eq!(prog.to_string(), b64_str); assert_eq!(prog.display().program().to_string(), b64_str); - assert_eq!(prog, CommitNode::from_str(b64_str).unwrap()); + assert_eq!(prog, CommitNode::from_str::(b64_str).unwrap()); } prog } #[track_caller] - fn assert_program_not_deserializable(prog: &[u8], err: &dyn fmt::Display) { + fn assert_program_not_deserializable(prog: &[u8], err: &dyn fmt::Display) { let prog_hex = prog.as_hex(); let err_str = err.to_string(); let iter = BitIter::from(prog); - match CommitNode::::decode(iter) { + match CommitNode::decode::<_, JE>(iter) { Ok(prog) => panic!( "Program {} succeded (expected error {}). Program parsed as:\n{:?}", prog_hex, err, prog @@ -406,10 +408,13 @@ mod tests { // "main = comp unit iden", but with the iden serialized before the unit // To obtain this test vector I temporarily swapped `get_left` and `get_right` // in the implementation of `PostOrderIter` - assert_program_not_deserializable::(&[0xa8, 0x48, 0x10], &Error::NotInCanonicalOrder); + assert_program_not_deserializable::( + &[0xa8, 0x48, 0x10], + &Error::NotInCanonicalOrder, + ); // "main = iden", but prefixed by some unused nodes, the first of which is also iden. - assert_program_not_deserializable::( + assert_program_not_deserializable::( &[0xc1, 0x00, 0x06, 0x20], &Error::NotInCanonicalOrder, ); @@ -426,7 +431,7 @@ mod tests { 0x7e, 0xf5, 0x6d, 0xf7, 0x7e, 0xf5, 0x6d, 0xf7, 78, ]; - assert_program_not_deserializable::(&hidden, &Error::HiddenNode); + assert_program_not_deserializable::(&hidden, &Error::HiddenNode); // main = comp witness hidden deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef let hidden = [ @@ -434,7 +439,7 @@ mod tests { 0xd5, 0xb7, 0xdd, 0xfb, 0xd5, 0xb7, 0xdd, 0xfb, 0xd5, 0xb7, 0xdd, 0xfb, 0xd5, 0xb7, 0xdd, 0xfb, 0xd5, 0xb7, 0xdd, 0xe0, 0x80, ]; - assert_program_not_deserializable::(&hidden, &Error::HiddenNode); + assert_program_not_deserializable::(&hidden, &Error::HiddenNode); } #[test] @@ -449,7 +454,7 @@ mod tests { 0xdf, 0xbd, 0x5b, 0x7d, 0xdf, 0xbd, 0x5b, 0x7d, 0xde, 0x10, ]; - assert_program_not_deserializable::(&hidden, &Error::BothChildrenHidden); + assert_program_not_deserializable::(&hidden, &Error::BothChildrenHidden); } #[test] @@ -469,13 +474,13 @@ mod tests { 0x29, 0xdb, 0xa3, 0x3e, 0x60, 0x30, 0x2c, 0x00, 0xd0, 0x48, 0x20, ]; - assert_program_not_deserializable::(&hidden, &Error::SharingNotMaximal); + assert_program_not_deserializable::(&hidden, &Error::SharingNotMaximal); } #[test] #[cfg(feature = "human_encoding")] fn shared_witnesses() { - assert_program_deserializable::( + assert_program_deserializable::( "main := witness", &[0x38], "a0fc8debd6796917c86b77aded82e6c61649889ae8f2ed65b57b41aa9d90e375", @@ -500,7 +505,7 @@ mod tests { ], ]; for bad_diff1 in bad_diff1s { - assert_program_not_deserializable::(&bad_diff1, &Error::SharingNotMaximal); + assert_program_not_deserializable::(&bad_diff1, &Error::SharingNotMaximal); } #[rustfmt::skip] @@ -550,7 +555,7 @@ mod tests { ]; for (prog_str, diff1, cmr, b64) in diff1s { - let diff1_prog = crate::node::commit::tests::assert_program_deserializable::( + let diff1_prog = crate::node::commit::tests::assert_program_deserializable::( prog_str, &diff1, cmr, b64, ); @@ -574,7 +579,10 @@ mod tests { fn extra_nodes() { // main = comp unit unit # but with an extra unconnected `unit` stuck on the beginning // I created this unit test by hand - assert_program_not_deserializable::(&[0xa9, 0x48, 0x00], &Error::NotInCanonicalOrder); + assert_program_not_deserializable::( + &[0xa9, 0x48, 0x00], + &Error::NotInCanonicalOrder, + ); } #[test] @@ -591,7 +599,7 @@ mod tests { id := iden main := case (drop id) id "; - match Forest::::parse(bad_prog) { + match Forest::parse::(bad_prog) { Ok(_) => panic!("program should have failed"), Err(set) => { let mut errs_happened = (false, false); diff --git a/src/node/construct.rs b/src/node/construct.rs index 4e7668ef..24c8983d 100644 --- a/src/node/construct.rs +++ b/src/node/construct.rs @@ -229,18 +229,18 @@ impl<'brand, J: Jet> ConstructNode<'brand, J> { /// or the witness is provided by other means. /// /// If the serialization contains the witness data, then use [`crate::RedeemNode::decode()`]. - pub fn decode>( + pub fn decode, JE: JetEnvironment>( context: &types::Context<'brand>, mut bits: BitIter, ) -> Result, crate::decode::Error> { - let res = crate::decode::decode_expression(context, &mut bits)?; + let res = crate::decode::decode_expression::<_, JE>(context, &mut bits)?; bits.close()?; Ok(res) } #[cfg(feature = "base64")] #[allow(clippy::should_implement_trait)] // returns Arc, needs tyctx - pub fn from_str( + pub fn from_str>( context: &types::Context<'brand>, s: &str, ) -> Result, crate::ParseError> { @@ -251,14 +251,14 @@ impl<'brand, J: Jet> ConstructNode<'brand, J> { .decode(s) .map_err(crate::ParseError::Base64)?; let iter = crate::BitIter::new(v.into_iter()); - Self::decode(context, iter) + Self::decode::<_, JE>(context, iter) .map_err(crate::DecodeError::Decode) .map_err(crate::ParseError::Decode) } /// Encode a Simplicity expression to bits, with no witness data #[deprecated(since = "0.5.0", note = "use Self::encode_without_witness instead")] - pub fn encode(&self, w: &mut BitWriter) -> io::Result { + pub fn encode(&self, w: &mut BitWriter<&mut dyn io::Write>) -> io::Result { let program_bits = encode::encode_program(self, w)?; w.flush_all()?; Ok(program_bits) @@ -422,7 +422,7 @@ impl<'brand, J: Jet> JetConstructible<'brand, J> for ConstructData<'brand, J> { #[cfg(test)] mod tests { use super::*; - use crate::jet::Core; + use crate::jet::{Core, CoreEnv}; use crate::types::Final; use crate::Value; @@ -589,7 +589,7 @@ mod tests { ); let prog = BitIter::from(prog); - let decode = CommitNode::::decode(prog).unwrap(); + let decode = CommitNode::decode::<_, CoreEnv>(prog).unwrap(); // ...but then during decoding we read the program incorrectly and this assertion fails. assert_eq!(finalized, decode); diff --git a/src/node/display.rs b/src/node/display.rs index 92c1b1c6..9548356e 100644 --- a/src/node/display.rs +++ b/src/node/display.rs @@ -363,6 +363,7 @@ fn shorten>(s: S, max_len: usize) -> String { mod tests { use crate::human_encoding::Forest; use crate::jet::Core; + use crate::jet::CoreEnv; use crate::types; use crate::RedeemNode; use std::collections::HashMap; @@ -371,7 +372,7 @@ mod tests { fn parse_program(s: &str) -> Arc> { types::Context::with_context(|ctx| { let empty_witness = HashMap::new(); - Forest::::parse(s) + Forest::parse::(s) .unwrap() .to_witness_node(&ctx, &empty_witness) .unwrap() diff --git a/src/node/mod.rs b/src/node/mod.rs index 0e7f37fa..8ee58ea8 100644 --- a/src/node/mod.rs +++ b/src/node/mod.rs @@ -758,7 +758,7 @@ impl Node { } /// Encode a Simplicity expression to bits without any witness data. - pub fn encode_without_witness(&self, prog: W) -> io::Result { + pub fn encode_without_witness(&self, prog: &mut dyn io::Write) -> io::Result { let mut w = BitWriter::new(prog); let program_bits = encode::encode_program(self, &mut w)?; w.flush_all()?; @@ -779,10 +779,10 @@ impl> Node { /// Encode the program and witness data to bits. /// /// Returns the number of written bits for the program and witness, respectively. - pub fn encode_with_witness( + pub fn encode_with_witness( &self, - prog: W1, - witness: W2, + prog: &mut dyn io::Write, + witness: &mut dyn io::Write, ) -> io::Result<(usize, usize)> { let mut prog = BitWriter::new(prog); let mut witness = BitWriter::new(witness); @@ -812,7 +812,7 @@ mod tests { use crate::analysis::Cost; use crate::ffi; - use crate::jet::Elements; + use crate::jet::ElementsTxEnv; use crate::BitIter; use crate::RedeemNode; @@ -827,7 +827,7 @@ mod tests { None, ) .unwrap(); - let prog = RedeemNode::::decode(prog, witness).unwrap(); + let prog = RedeemNode::decode::<_, _, ElementsTxEnv>(prog, witness).unwrap(); assert_eq!(prog.cmr().to_byte_array(), test.cmr); assert_eq!(prog.amr().to_byte_array(), test.amr); assert_eq!(prog.ihr().to_byte_array(), test.ihr); diff --git a/src/node/redeem.rs b/src/node/redeem.rs index fe73d0a2..efa71ff8 100644 --- a/src/node/redeem.rs +++ b/src/node/redeem.rs @@ -462,7 +462,7 @@ impl RedeemNode { } /// Decode a Simplicity program from bits, including the witness data. - pub fn decode( + pub fn decode>( program: BitIter, mut witness: BitIter, ) -> Result, DecodeError> @@ -526,8 +526,8 @@ impl RedeemNode { // 1. Decode program without witnesses as ConstructNode let program: Arc = types::Context::with_context(|ctx| { - let construct = - crate::ConstructNode::decode(&ctx, program).map_err(DecodeError::Decode)?; + let construct = crate::ConstructNode::decode::<_, JE>(&ctx, program) + .map_err(DecodeError::Decode)?; construct .set_arrow_to_program() .map_err(DecodeError::Type)?; @@ -561,7 +561,10 @@ impl RedeemNode { #[cfg(feature = "base64")] #[allow(clippy::should_implement_trait)] // returns Arc - pub fn from_str(prog: &str, wit: &str) -> Result, crate::ParseError> { + pub fn from_str>( + prog: &str, + wit: &str, + ) -> Result, crate::ParseError> { use crate::base64::engine::general_purpose; use crate::base64::Engine as _; use crate::hex::FromHex as _; @@ -573,22 +576,18 @@ impl RedeemNode { let v = Vec::from_hex(wit).map_err(crate::ParseError::Hex)?; let wit_iter = crate::BitIter::new(v.into_iter()); - Self::decode(prog_iter, wit_iter).map_err(crate::ParseError::Decode) + Self::decode::<_, _, JE>(prog_iter, wit_iter).map_err(crate::ParseError::Decode) } /// Encode the program to bits. /// /// Includes witness data. Returns the number of written bits. #[deprecated(since = "0.5.0", note = "use Self::encode_with_witness instead")] - pub fn encode( + pub fn encode( &self, - prog: &mut BitWriter, - witness: &mut BitWriter, - ) -> io::Result - where - W1: io::Write, - W2: io::Write, - { + prog: &mut BitWriter<&mut dyn io::Write>, + witness: &mut BitWriter<&mut dyn io::Write>, + ) -> io::Result { let sharing_iter = self.post_order_iter::>>(); let program_bits = encode::encode_program(self, prog)?; prog.flush_all()?; @@ -612,7 +611,7 @@ mod tests { use super::*; #[cfg(feature = "human_encoding")] use crate::human_encoding::Forest; - use crate::jet::Core; + use crate::jet::CoreEnv; use crate::node::SimpleFinalizer; use hex::DisplayHex; use std::fmt; @@ -621,20 +620,20 @@ mod tests { #[cfg_attr(not(feature = "base64"), allow(unused_variables))] #[track_caller] - fn assert_program_deserializable( + fn assert_program_deserializable( prog_bytes: &[u8], witness_bytes: &[u8], cmr_str: &str, amr_str: &str, ihr_str: &str, b64_str: &str, - ) -> Arc> { + ) -> Arc> { let prog_hex = prog_bytes.as_hex(); let witness_hex = witness_bytes.as_hex(); let prog = BitIter::from(prog_bytes); let witness = BitIter::from(witness_bytes); - let prog = match RedeemNode::::decode(prog, witness) { + let prog = match RedeemNode::decode::<_, _, JE>(prog, witness) { Ok(prog) => prog, Err(e) => panic!("program {} failed: {}", prog_hex, e), }; @@ -696,7 +695,7 @@ mod tests { } #[track_caller] - fn assert_program_not_deserializable( + fn assert_program_not_deserializable( prog_bytes: &[u8], witness_bytes: &[u8], err: &dyn fmt::Display, @@ -707,7 +706,7 @@ mod tests { let prog = BitIter::from(prog_bytes); let witness = BitIter::from(witness_bytes); - match RedeemNode::::decode(prog, witness) { + match RedeemNode::decode::<_, _, JE>(prog, witness) { Ok(prog) => panic!( "Program {} wit {} succeded (expected error {}). Program parsed as:\n{:?}", prog_hex, witness_hex, err, prog @@ -730,7 +729,7 @@ mod tests { // main = comp wits_are_equal jet_verify :: 1 -> 1 let eqwits = [0xcd, 0xdc, 0x51, 0xb6, 0xe2, 0x08, 0xc0, 0x40]; let iter = BitIter::from(&eqwits[..]); - let eqwits_prog = CommitNode::::decode(iter).unwrap(); + let eqwits_prog = CommitNode::decode::<_, CoreEnv>(iter).unwrap(); let eqwits_final = eqwits_prog .finalize(&mut SimpleFinalizer::new(std::iter::repeat(Value::u32( @@ -756,7 +755,7 @@ mod tests { // This program is exactly the output from the `encode_shared_witnesses` test. // The point of this is to make sure that our witness-unsharing logic doesn't // get confused here and try to read two witnesses when there are only one. - assert_program_deserializable::( + assert_program_deserializable::( &[0xc9, 0xc4, 0x6d, 0xb8, 0x82, 0x30, 0x10], &[0xde, 0xad, 0xbe, 0xef], "ee2d966aeccfba7f1f1e54bc130237a6ae575db9c1132193d513aeb14b18151a", @@ -773,7 +772,7 @@ mod tests { // id2 = iden :: A -> A # cmr dbfefcfc... // cp3 = comp id1 id2 :: A -> A # cmr c1ae55b5... // main = comp cp3 cp3 :: A -> A # cmr 314e2879... - assert_program_not_deserializable::( + assert_program_not_deserializable::( &[0xc1, 0x08, 0x04, 0x00], &[], &DecodeError::Decode(crate::decode::Error::SharingNotMaximal), @@ -785,7 +784,7 @@ mod tests { // "main = unit", but with a witness attached. Found by fuzzer. let prog = BitIter::from(&[0x24][..]); let wit = BitIter::from(&[0x00][..]); - match RedeemNode::::decode(prog, wit) { + match RedeemNode::decode::<_, _, CoreEnv>(prog, wit) { Err(DecodeError::Decode(crate::decode::Error::BitIter( crate::BitIterCloseError::TrailingBytes { first_byte: 0 }, ))) => {} // ok, @@ -804,7 +803,7 @@ mod tests { // cp2 = comp id1 id1 // cp3 = comp cp2 cp2 // main = comp cp3 cp2 - assert_program_deserializable::( + assert_program_deserializable::( &[0xc1, 0x00, 0x00, 0x01, 0x00], &[], "8a54101335ca2cf7e933d74cdb15f99becc4e540799ba5e2d19c00c9d7219e71", @@ -820,7 +819,7 @@ mod tests { // asst = assertl unit deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef // input0 = pair (injl unit) unit // main = comp input0 asst - assert_program_deserializable::( + assert_program_deserializable::( &[ 0xcd, 0x24, 0x08, 0x4b, 0x6f, 0x56, 0xdf, 0x77, 0xef, 0x56, 0xdf, 0x77, 0xef, 0x56, 0xdf, 0x77, @@ -839,7 +838,7 @@ mod tests { // asst = assertr deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef unit // input1 = pair (injr unit) unit // main = comp input1 asst - assert_program_deserializable::( + assert_program_deserializable::( &[ 0xcd, 0x25, 0x08, 0x6d, 0xea, 0xdb, 0xee, 0xfd, 0xea, 0xdb, 0xee, 0xfd, 0xea, 0xdb, 0xee, 0xfd, @@ -863,7 +862,7 @@ mod tests { // disc3 = disconnect pr2 pr2 :: B -> ((2^256 * B) * ((2^256 * B) * (2^256 * B))) # cmr d81d6f28... // ut4 = unit :: ((2^256 * B) * ((2^256 * B) * (2^256 * B))) -> 1 # cmr 62274a89... // main = comp disc3 ut4 :: B -> 1 # cmr a453360c... - assert_program_deserializable::( + assert_program_deserializable::( &[0xc5, 0x02, 0x06, 0x24, 0x10], &[], "afe8f5f8bd3f64bfa51d2f29ffa22523604d9654c0d9862dbf2dc67ba097cbb2", @@ -896,7 +895,7 @@ mod tests { // jt6 = jet_check_sig_verify :: ((2^256 * 2^512) * 2^512) -> 1 # cmr 297459d8... // // main = comp pr5 jt6 :: 1 -> 1 # cmr 14a5e0cc... - assert_program_deserializable::( + assert_program_deserializable::( &[ 0xd3, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x78, 0xce, 0x56, 0x3f, 0x89, 0xa0, 0xed, 0x94, 0x14, 0xf5, 0xaa, 0x28, 0xad, 0x0d, 0x96, 0xd6, 0x79, 0x5f, @@ -928,7 +927,7 @@ mod tests { // disc4 = disconnect id1 jl3 :: 1 -> (2^256 * 2) # cmr 6968f10e... // ut5 = unit :: (2^256 * 2) -> 1 # cmr 62274a89... // main = comp disc4 ut5 :: 1 -> 1 # cmr a8c9cc7a... - assert_program_deserializable::( + assert_program_deserializable::( &[0xc9, 0x09, 0x20, 0x74, 0x90, 0x40], &[], "b689bdee289c8dd4e2e283358d187813363d441776cf826dafc27cc8a81ec441", @@ -956,7 +955,7 @@ mod tests { 0x25, 0xf6, 0x6a, 0x4a, 0x85, 0xea, 0x8b, 0x71, 0xe4, 0x82, 0xa7, 0x4f, 0x38, 0x2d, 0x2c, 0xe5, 0xeb, 0xee, 0xe8, 0xfd, 0xb2, 0x17, 0x2f, 0x47, 0x7d, 0xf4, 0x90, 0x0d, 0x31, 0x05, 0x36, 0xc0, ]; - assert_program_deserializable::( + assert_program_deserializable::( &schnorr0, &schnorr0_wit, "8a9e97676b24be7797d9ee0bf32dd76bcd78028e973025f785eae8dc91c8a0da", @@ -975,7 +974,7 @@ mod tests { env: &JE, ) { let unpruned_program = types::Context::with_context(|ctx| { - Forest::::parse(unpruned_prog) + Forest::parse::(unpruned_prog) .expect("unpruned program should parse") .to_witness_node(&ctx, unpruned_wit) .expect("unpruned program should have main") @@ -983,7 +982,7 @@ mod tests { .expect("unpruned program should finalize") }); let expected_unpruned_program = types::Context::with_context(|ctx| { - Forest::::parse(expected_pruned_prog) + Forest::parse::(expected_pruned_prog) .expect("expected pruned program should parse") .to_witness_node(&ctx, expected_pruned_wit) .expect("expected pruned program should have main")