/ compiler / ast / src / functions / intrinsic.rs
intrinsic.rs
   1  // Copyright (C) 2019-2025 ADnet Contributors
   2  // This file is part of the ADL library.
   3  
   4  // The ADL library is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  
   9  // The ADL library is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12  // GNU General Public License for more details.
  13  
  14  // You should have received a copy of the GNU General Public License
  15  // along with the ADL library. If not, see <https://www.gnu.org/licenses/>.
  16  
  17  use crate::{ArrayType, IntegerType, Type};
  18  
  19  use adl_span::{Span, Symbol, sym};
  20  
  21  use snarkvm::{
  22      prelude::LiteralType,
  23      synthesizer::program::{CommitVariant, DeserializeVariant, ECDSAVerifyVariant, HashVariant, SerializeVariant},
  24  };
  25  
  26  /// An instrinsic operation directly implemented by the compiler.
  27  #[derive(Clone, Debug, PartialEq, Eq)]
  28  pub enum Intrinsic {
  29      // ChaCha random value of type (LiteralType).
  30      ChaChaRand(LiteralType),
  31      // Commitment to a value using hash (HashVariant) returning value of type (LiteralType).
  32      Commit(CommitVariant, LiteralType),
  33      // ECDSA verify with hash (HashVariant) and the ETH variant (bool).
  34      ECDSAVerify(ECDSAVerifyVariant),
  35      // Hash function with variant (HashVariant) returning value of type (LiteralType).
  36      Hash(HashVariant, Type),
  37  
  38      MappingGet,
  39      MappingGetOrUse,
  40      MappingSet,
  41      MappingRemove,
  42      MappingContains,
  43  
  44      OptionalUnwrap,
  45      OptionalUnwrapOr,
  46  
  47      VectorGet,
  48      VectorSet,
  49      VectorPush,
  50      VectorLen,
  51      VectorClear,
  52      VectorPop,
  53      VectorSwapRemove,
  54  
  55      GroupToXCoordinate,
  56      GroupToYCoordinate,
  57      GroupGen,
  58  
  59      // Schnorr signature verification.
  60      SignatureVerify,
  61  
  62      FutureAwait,
  63  
  64      ProgramChecksum,
  65      ProgramEdition,
  66      ProgramOwner,
  67  
  68      Serialize(SerializeVariant),
  69  
  70      // Note. `Deserialize` cannot be instantiated via `from_symbols` as it requires a type argument.
  71      Deserialize(DeserializeVariant, Type),
  72  
  73      SelfAddress,
  74      SelfCaller,
  75      SelfChecksum,
  76      SelfEdition,
  77      SelfId,
  78      SelfProgramOwner,
  79      SelfSigner,
  80      BlockHeight,
  81      BlockTimestamp,
  82      NetworkId,
  83  
  84      CheatCodePrintMapping,
  85      CheatCodeSetBlockHeight,
  86      CheatCodeSetBlockTimestamp,
  87      CheatCodeSetSigner,
  88  }
  89  
  90  impl Intrinsic {
  91      /// Returns a `Intrinsic` from a single symbol.
  92      // TODO: turn into From implementation when old syntax is deprecated
  93      #[rustfmt::skip]
  94      pub fn from_symbol(name: Symbol, type_parameters: &[(Type, Span)]) -> Option<Self> {
  95          Some(match name {
  96              sym::_self_address => Self::SelfAddress,
  97              sym::_self_caller => Self::SelfCaller,
  98              sym::_self_checksum => Self::SelfChecksum,
  99              sym::_self_edition => Self::SelfEdition,
 100              sym::_self_id => Self::SelfId,
 101              sym::_self_program_owner => Self::SelfProgramOwner,
 102              sym::_self_signer => Self::SelfSigner,
 103              sym::_block_height => Self::BlockHeight,
 104              sym::_block_timestamp => Self::BlockTimestamp,
 105              sym::_network_id => Self::NetworkId,
 106              sym::_deserialize_from_bits => Self::Deserialize(DeserializeVariant::FromBits, type_parameters[0].0.clone()),
 107              sym::_deserialize_from_bits_raw => Self::Deserialize(DeserializeVariant::FromBitsRaw, type_parameters[0].0.clone()),
 108              sym::_group_gen => Self::GroupGen,
 109              sym::_chacha_rand_address => Self::ChaChaRand(LiteralType::Address),
 110              sym::_chacha_rand_bool    => Self::ChaChaRand(LiteralType::Boolean),
 111              sym::_chacha_rand_field   => Self::ChaChaRand(LiteralType::Field),
 112              sym::_chacha_rand_group   => Self::ChaChaRand(LiteralType::Group),
 113              sym::_chacha_rand_i8      => Self::ChaChaRand(LiteralType::I8),
 114              sym::_chacha_rand_i16     => Self::ChaChaRand(LiteralType::I16),
 115              sym::_chacha_rand_i32     => Self::ChaChaRand(LiteralType::I32),
 116              sym::_chacha_rand_i64     => Self::ChaChaRand(LiteralType::I64),
 117              sym::_chacha_rand_i128    => Self::ChaChaRand(LiteralType::I128),
 118              sym::_chacha_rand_u8      => Self::ChaChaRand(LiteralType::U8),
 119              sym::_chacha_rand_u16     => Self::ChaChaRand(LiteralType::U16),
 120              sym::_chacha_rand_u32     => Self::ChaChaRand(LiteralType::U32),
 121              sym::_chacha_rand_u64     => Self::ChaChaRand(LiteralType::U64),
 122              sym::_chacha_rand_u128    => Self::ChaChaRand(LiteralType::U128),
 123              sym::_chacha_rand_scalar  => Self::ChaChaRand(LiteralType::Scalar),
 124              sym::_bhp256_commit_to_address => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Address),
 125              sym::_bhp256_commit_to_field   => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Field),
 126              sym::_bhp256_commit_to_group   => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Group),
 127              sym::_bhp512_commit_to_address => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Address),
 128              sym::_bhp512_commit_to_field   => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Field),
 129              sym::_bhp512_commit_to_group   => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Group),
 130              sym::_bhp768_commit_to_address => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Address),
 131              sym::_bhp768_commit_to_field   => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Field),
 132              sym::_bhp768_commit_to_group   => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Group),
 133              sym::_bhp1024_commit_to_address => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Address),
 134              sym::_bhp1024_commit_to_field   => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Field),
 135              sym::_bhp1024_commit_to_group   => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Group),
 136              sym::_pedersen64_commit_to_address => Self::Commit(CommitVariant::CommitPED64, LiteralType::Address),
 137              sym::_pedersen64_commit_to_field   => Self::Commit(CommitVariant::CommitPED64, LiteralType::Field),
 138              sym::_pedersen64_commit_to_group   => Self::Commit(CommitVariant::CommitPED64, LiteralType::Group),
 139              sym::_pedersen128_commit_to_address => Self::Commit(CommitVariant::CommitPED128, LiteralType::Address),
 140              sym::_pedersen128_commit_to_field   => Self::Commit(CommitVariant::CommitPED128, LiteralType::Field),
 141              sym::_pedersen128_commit_to_group   => Self::Commit(CommitVariant::CommitPED128, LiteralType::Group),
 142              sym::_bhp256_hash_to_address     => Self::Hash(HashVariant::HashBHP256, Type::Address),
 143              sym::_bhp256_hash_to_field       => Self::Hash(HashVariant::HashBHP256, Type::Field),
 144              sym::_bhp256_hash_to_group       => Self::Hash(HashVariant::HashBHP256, Type::Group),
 145              sym::_bhp256_hash_to_i8          => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I8)),
 146              sym::_bhp256_hash_to_i16         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I16)),
 147              sym::_bhp256_hash_to_i32         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I32)),
 148              sym::_bhp256_hash_to_i64         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I64)),
 149              sym::_bhp256_hash_to_i128        => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I128)),
 150              sym::_bhp256_hash_to_u8          => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U8)),
 151              sym::_bhp256_hash_to_u16         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U16)),
 152              sym::_bhp256_hash_to_u32         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U32)),
 153              sym::_bhp256_hash_to_u64         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U64)),
 154              sym::_bhp256_hash_to_u128        => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U128)),
 155              sym::_bhp256_hash_to_scalar      => Self::Hash(HashVariant::HashBHP256, Type::Scalar),
 156              sym::_bhp256_hash_to_address_raw => Self::Hash(HashVariant::HashBHP256Raw, Type::Address),
 157              sym::_bhp256_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP256Raw, Type::Field),
 158              sym::_bhp256_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP256Raw, Type::Group),
 159              sym::_bhp256_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I8)),
 160              sym::_bhp256_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I16)),
 161              sym::_bhp256_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I32)),
 162              sym::_bhp256_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I64)),
 163              sym::_bhp256_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I128)),
 164              sym::_bhp256_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U8)),
 165              sym::_bhp256_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U16)),
 166              sym::_bhp256_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U32)),
 167              sym::_bhp256_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U64)),
 168              sym::_bhp256_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U128)),
 169              sym::_bhp256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP256Raw, Type::Scalar),
 170  
 171              sym::_bhp512_hash_to_address     => Self::Hash(HashVariant::HashBHP512, Type::Address),
 172              sym::_bhp512_hash_to_field       => Self::Hash(HashVariant::HashBHP512, Type::Field),
 173              sym::_bhp512_hash_to_group       => Self::Hash(HashVariant::HashBHP512, Type::Group),
 174              sym::_bhp512_hash_to_i8          => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I8)),
 175              sym::_bhp512_hash_to_i16         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I16)),
 176              sym::_bhp512_hash_to_i32         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I32)),
 177              sym::_bhp512_hash_to_i64         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I64)),
 178              sym::_bhp512_hash_to_i128        => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I128)),
 179              sym::_bhp512_hash_to_u8          => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U8)),
 180              sym::_bhp512_hash_to_u16         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U16)),
 181              sym::_bhp512_hash_to_u32         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U32)),
 182              sym::_bhp512_hash_to_u64         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U64)),
 183              sym::_bhp512_hash_to_u128        => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U128)),
 184              sym::_bhp512_hash_to_scalar      => Self::Hash(HashVariant::HashBHP512, Type::Scalar),
 185              sym::_bhp512_hash_to_address_raw => Self::Hash(HashVariant::HashBHP512Raw, Type::Address),
 186              sym::_bhp512_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP512Raw, Type::Field),
 187              sym::_bhp512_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP512Raw, Type::Group),
 188              sym::_bhp512_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I8)),
 189              sym::_bhp512_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I16)),
 190              sym::_bhp512_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I32)),
 191              sym::_bhp512_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I64)),
 192              sym::_bhp512_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I128)),
 193              sym::_bhp512_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U8)),
 194              sym::_bhp512_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U16)),
 195              sym::_bhp512_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U32)),
 196              sym::_bhp512_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U64)),
 197              sym::_bhp512_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U128)),
 198              sym::_bhp512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP512Raw, Type::Scalar),
 199  
 200              sym::_bhp768_hash_to_address     => Self::Hash(HashVariant::HashBHP768, Type::Address),
 201              sym::_bhp768_hash_to_field       => Self::Hash(HashVariant::HashBHP768, Type::Field),
 202              sym::_bhp768_hash_to_group       => Self::Hash(HashVariant::HashBHP768, Type::Group),
 203              sym::_bhp768_hash_to_i8          => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I8)),
 204              sym::_bhp768_hash_to_i16         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I16)),
 205              sym::_bhp768_hash_to_i32         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I32)),
 206              sym::_bhp768_hash_to_i64         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I64)),
 207              sym::_bhp768_hash_to_i128        => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I128)),
 208              sym::_bhp768_hash_to_u8          => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U8)),
 209              sym::_bhp768_hash_to_u16         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U16)),
 210              sym::_bhp768_hash_to_u32         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U32)),
 211              sym::_bhp768_hash_to_u64         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U64)),
 212              sym::_bhp768_hash_to_u128        => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U128)),
 213              sym::_bhp768_hash_to_scalar      => Self::Hash(HashVariant::HashBHP768, Type::Scalar),
 214              sym::_bhp768_hash_to_address_raw => Self::Hash(HashVariant::HashBHP768Raw, Type::Address),
 215              sym::_bhp768_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP768Raw, Type::Field),
 216              sym::_bhp768_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP768Raw, Type::Group),
 217              sym::_bhp768_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I8)),
 218              sym::_bhp768_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I16)),
 219              sym::_bhp768_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I32)),
 220              sym::_bhp768_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I64)),
 221              sym::_bhp768_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I128)),
 222              sym::_bhp768_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U8)),
 223              sym::_bhp768_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U16)),
 224              sym::_bhp768_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U32)),
 225              sym::_bhp768_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U64)),
 226              sym::_bhp768_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U128)),
 227              sym::_bhp768_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP768Raw, Type::Scalar),
 228  
 229              sym::_bhp1024_hash_to_address     => Self::Hash(HashVariant::HashBHP1024, Type::Address),
 230              sym::_bhp1024_hash_to_field       => Self::Hash(HashVariant::HashBHP1024, Type::Field),
 231              sym::_bhp1024_hash_to_group       => Self::Hash(HashVariant::HashBHP1024, Type::Group),
 232              sym::_bhp1024_hash_to_i8          => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I8)),
 233              sym::_bhp1024_hash_to_i16         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I16)),
 234              sym::_bhp1024_hash_to_i32         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I32)),
 235              sym::_bhp1024_hash_to_i64         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I64)),
 236              sym::_bhp1024_hash_to_i128        => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I128)),
 237              sym::_bhp1024_hash_to_u8          => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U8)),
 238              sym::_bhp1024_hash_to_u16         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U16)),
 239              sym::_bhp1024_hash_to_u32         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U32)),
 240              sym::_bhp1024_hash_to_u64         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U64)),
 241              sym::_bhp1024_hash_to_u128        => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U128)),
 242              sym::_bhp1024_hash_to_scalar      => Self::Hash(HashVariant::HashBHP1024, Type::Scalar),
 243              sym::_bhp1024_hash_to_address_raw => Self::Hash(HashVariant::HashBHP1024Raw, Type::Address),
 244              sym::_bhp1024_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP1024Raw, Type::Field),
 245              sym::_bhp1024_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP1024Raw, Type::Group),
 246              sym::_bhp1024_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I8)),
 247              sym::_bhp1024_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I16)),
 248              sym::_bhp1024_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I32)),
 249              sym::_bhp1024_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I64)),
 250              sym::_bhp1024_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I128)),
 251              sym::_bhp1024_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U8)),
 252              sym::_bhp1024_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U16)),
 253              sym::_bhp1024_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U32)),
 254              sym::_bhp1024_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U64)),
 255              sym::_bhp1024_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U128)),
 256              sym::_bhp1024_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP1024Raw, Type::Scalar),
 257  
 258              sym::_keccak256_hash_to_address     => Self::Hash(HashVariant::HashKeccak256, Type::Address),
 259              sym::_keccak256_hash_to_field       => Self::Hash(HashVariant::HashKeccak256, Type::Field),
 260              sym::_keccak256_hash_to_group       => Self::Hash(HashVariant::HashKeccak256, Type::Group),
 261              sym::_keccak256_hash_to_i8          => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I8)),
 262              sym::_keccak256_hash_to_i16         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I16)),
 263              sym::_keccak256_hash_to_i32         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I32)),
 264              sym::_keccak256_hash_to_i64         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I64)),
 265              sym::_keccak256_hash_to_i128        => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I128)),
 266              sym::_keccak256_hash_to_u8          => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U8)),
 267              sym::_keccak256_hash_to_u16         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U16)),
 268              sym::_keccak256_hash_to_u32         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U32)),
 269              sym::_keccak256_hash_to_u64         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U64)),
 270              sym::_keccak256_hash_to_u128        => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U128)),
 271              sym::_keccak256_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak256, Type::Scalar),
 272              sym::_keccak256_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak256Raw, Type::Address),
 273              sym::_keccak256_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak256Raw, Type::Field),
 274              sym::_keccak256_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak256Raw, Type::Group),
 275              sym::_keccak256_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I8)),
 276              sym::_keccak256_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I16)),
 277              sym::_keccak256_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I32)),
 278              sym::_keccak256_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I64)),
 279              sym::_keccak256_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I128)),
 280              sym::_keccak256_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U8)),
 281              sym::_keccak256_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U16)),
 282              sym::_keccak256_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U32)),
 283              sym::_keccak256_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U64)),
 284              sym::_keccak256_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U128)),
 285              sym::_keccak256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak256Raw, Type::Scalar),
 286              sym::_keccak256_hash_to_bits         => Self::Hash(HashVariant::HashKeccak256Native, Type::Array(ArrayType::bit_array(256))),
 287              sym::_keccak256_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak256NativeRaw, Type::Array(ArrayType::bit_array(256))),
 288  
 289              sym::_keccak384_hash_to_address     => Self::Hash(HashVariant::HashKeccak384, Type::Address),
 290              sym::_keccak384_hash_to_field       => Self::Hash(HashVariant::HashKeccak384, Type::Field),
 291              sym::_keccak384_hash_to_group       => Self::Hash(HashVariant::HashKeccak384, Type::Group),
 292              sym::_keccak384_hash_to_i8          => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I8)),
 293              sym::_keccak384_hash_to_i16         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I16)),
 294              sym::_keccak384_hash_to_i32         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I32)),
 295              sym::_keccak384_hash_to_i64         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I64)),
 296              sym::_keccak384_hash_to_i128        => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I128)),
 297              sym::_keccak384_hash_to_u8          => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U8)),
 298              sym::_keccak384_hash_to_u16         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U16)),
 299              sym::_keccak384_hash_to_u32         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U32)),
 300              sym::_keccak384_hash_to_u64         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U64)),
 301              sym::_keccak384_hash_to_u128        => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U128)),
 302              sym::_keccak384_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak384, Type::Scalar),
 303              sym::_keccak384_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak384Raw, Type::Address),
 304              sym::_keccak384_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak384Raw, Type::Field),
 305              sym::_keccak384_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak384Raw, Type::Group),
 306              sym::_keccak384_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I8)),
 307              sym::_keccak384_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I16)),
 308              sym::_keccak384_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I32)),
 309              sym::_keccak384_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I64)),
 310              sym::_keccak384_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I128)),
 311              sym::_keccak384_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U8)),
 312              sym::_keccak384_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U16)),
 313              sym::_keccak384_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U32)),
 314              sym::_keccak384_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U64)),
 315              sym::_keccak384_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U128)),
 316              sym::_keccak384_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak384Raw, Type::Scalar),
 317              sym::_keccak384_hash_to_bits         => Self::Hash(HashVariant::HashKeccak384Native, Type::Array(ArrayType::bit_array(384))),
 318              sym::_keccak384_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak384NativeRaw, Type::Array(ArrayType::bit_array(384))),
 319  
 320              sym::_keccak512_hash_to_address     => Self::Hash(HashVariant::HashKeccak512, Type::Address),
 321              sym::_keccak512_hash_to_field       => Self::Hash(HashVariant::HashKeccak512, Type::Field),
 322              sym::_keccak512_hash_to_group       => Self::Hash(HashVariant::HashKeccak512, Type::Group),
 323              sym::_keccak512_hash_to_i8          => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I8)),
 324              sym::_keccak512_hash_to_i16         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I16)),
 325              sym::_keccak512_hash_to_i32         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I32)),
 326              sym::_keccak512_hash_to_i64         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I64)),
 327              sym::_keccak512_hash_to_i128        => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I128)),
 328              sym::_keccak512_hash_to_u8          => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U8)),
 329              sym::_keccak512_hash_to_u16         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U16)),
 330              sym::_keccak512_hash_to_u32         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U32)),
 331              sym::_keccak512_hash_to_u64         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U64)),
 332              sym::_keccak512_hash_to_u128        => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U128)),
 333              sym::_keccak512_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak512, Type::Scalar),
 334              sym::_keccak512_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak512Raw, Type::Address),
 335              sym::_keccak512_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak512Raw, Type::Field),
 336              sym::_keccak512_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak512Raw, Type::Group),
 337              sym::_keccak512_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I8)),
 338              sym::_keccak512_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I16)),
 339              sym::_keccak512_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I32)),
 340              sym::_keccak512_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I64)),
 341              sym::_keccak512_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I128)),
 342              sym::_keccak512_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U8)),
 343              sym::_keccak512_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U16)),
 344              sym::_keccak512_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U32)),
 345              sym::_keccak512_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U64)),
 346              sym::_keccak512_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U128)),
 347              sym::_keccak512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak512Raw, Type::Scalar),
 348              sym::_keccak512_hash_to_bits         => Self::Hash(HashVariant::HashKeccak512Native, Type::Array(ArrayType::bit_array(512))),
 349              sym::_keccak512_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak512NativeRaw, Type::Array(ArrayType::bit_array(512))),
 350  
 351              sym::_pedersen64_hash_to_address     => Self::Hash(HashVariant::HashPED64, Type::Address),
 352              sym::_pedersen64_hash_to_field       => Self::Hash(HashVariant::HashPED64, Type::Field),
 353              sym::_pedersen64_hash_to_group       => Self::Hash(HashVariant::HashPED64, Type::Group),
 354              sym::_pedersen64_hash_to_i8          => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I8)),
 355              sym::_pedersen64_hash_to_i16         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I16)),
 356              sym::_pedersen64_hash_to_i32         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I32)),
 357              sym::_pedersen64_hash_to_i64         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I64)),
 358              sym::_pedersen64_hash_to_i128        => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I128)),
 359              sym::_pedersen64_hash_to_u8          => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U8)),
 360              sym::_pedersen64_hash_to_u16         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U16)),
 361              sym::_pedersen64_hash_to_u32         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U32)),
 362              sym::_pedersen64_hash_to_u64         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U64)),
 363              sym::_pedersen64_hash_to_u128        => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U128)),
 364              sym::_pedersen64_hash_to_scalar      => Self::Hash(HashVariant::HashPED64, Type::Scalar),
 365              sym::_pedersen64_hash_to_address_raw => Self::Hash(HashVariant::HashPED64Raw, Type::Address),
 366              sym::_pedersen64_hash_to_field_raw   => Self::Hash(HashVariant::HashPED64Raw, Type::Field),
 367              sym::_pedersen64_hash_to_group_raw   => Self::Hash(HashVariant::HashPED64Raw, Type::Group),
 368              sym::_pedersen64_hash_to_i8_raw      => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I8)),
 369              sym::_pedersen64_hash_to_i16_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I16)),
 370              sym::_pedersen64_hash_to_i32_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I32)),
 371              sym::_pedersen64_hash_to_i64_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I64)),
 372              sym::_pedersen64_hash_to_i128_raw    => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I128)),
 373              sym::_pedersen64_hash_to_u8_raw      => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U8)),
 374              sym::_pedersen64_hash_to_u16_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U16)),
 375              sym::_pedersen64_hash_to_u32_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U32)),
 376              sym::_pedersen64_hash_to_u64_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U64)),
 377              sym::_pedersen64_hash_to_u128_raw    => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U128)),
 378              sym::_pedersen64_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPED64Raw, Type::Scalar),
 379  
 380              sym::_pedersen128_hash_to_address     => Self::Hash(HashVariant::HashPED128, Type::Address),
 381              sym::_pedersen128_hash_to_field       => Self::Hash(HashVariant::HashPED128, Type::Field),
 382              sym::_pedersen128_hash_to_group       => Self::Hash(HashVariant::HashPED128, Type::Group),
 383              sym::_pedersen128_hash_to_i8          => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I8)),
 384              sym::_pedersen128_hash_to_i16         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I16)),
 385              sym::_pedersen128_hash_to_i32         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I32)),
 386              sym::_pedersen128_hash_to_i64         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I64)),
 387              sym::_pedersen128_hash_to_i128        => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I128)),
 388              sym::_pedersen128_hash_to_u8          => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U8)),
 389              sym::_pedersen128_hash_to_u16         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U16)),
 390              sym::_pedersen128_hash_to_u32         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U32)),
 391              sym::_pedersen128_hash_to_u64         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U64)),
 392              sym::_pedersen128_hash_to_u128        => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U128)),
 393              sym::_pedersen128_hash_to_scalar      => Self::Hash(HashVariant::HashPED128, Type::Scalar),
 394              sym::_pedersen128_hash_to_address_raw => Self::Hash(HashVariant::HashPED128Raw, Type::Address),
 395              sym::_pedersen128_hash_to_field_raw   => Self::Hash(HashVariant::HashPED128Raw, Type::Field),
 396              sym::_pedersen128_hash_to_group_raw   => Self::Hash(HashVariant::HashPED128Raw, Type::Group),
 397              sym::_pedersen128_hash_to_i8_raw      => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I8)),
 398              sym::_pedersen128_hash_to_i16_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I16)),
 399              sym::_pedersen128_hash_to_i32_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I32)),
 400              sym::_pedersen128_hash_to_i64_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I64)),
 401              sym::_pedersen128_hash_to_i128_raw    => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I128)),
 402              sym::_pedersen128_hash_to_u8_raw      => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U8)),
 403              sym::_pedersen128_hash_to_u16_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U16)),
 404              sym::_pedersen128_hash_to_u32_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U32)),
 405              sym::_pedersen128_hash_to_u64_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U64)),
 406              sym::_pedersen128_hash_to_u128_raw    => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U128)),
 407              sym::_pedersen128_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPED128Raw, Type::Scalar),
 408  
 409              sym::_poseidon2_hash_to_address     => Self::Hash(HashVariant::HashPSD2, Type::Address),
 410              sym::_poseidon2_hash_to_field       => Self::Hash(HashVariant::HashPSD2, Type::Field),
 411              sym::_poseidon2_hash_to_group       => Self::Hash(HashVariant::HashPSD2, Type::Group),
 412              sym::_poseidon2_hash_to_i8          => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I8)),
 413              sym::_poseidon2_hash_to_i16         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I16)),
 414              sym::_poseidon2_hash_to_i32         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I32)),
 415              sym::_poseidon2_hash_to_i64         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I64)),
 416              sym::_poseidon2_hash_to_i128        => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I128)),
 417              sym::_poseidon2_hash_to_u8          => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U8)),
 418              sym::_poseidon2_hash_to_u16         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U16)),
 419              sym::_poseidon2_hash_to_u32         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U32)),
 420              sym::_poseidon2_hash_to_u64         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U64)),
 421              sym::_poseidon2_hash_to_u128        => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U128)),
 422              sym::_poseidon2_hash_to_scalar      => Self::Hash(HashVariant::HashPSD2, Type::Scalar),
 423              sym::_poseidon2_hash_to_address_raw => Self::Hash(HashVariant::HashPSD2Raw, Type::Address),
 424              sym::_poseidon2_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD2Raw, Type::Field),
 425              sym::_poseidon2_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD2Raw, Type::Group),
 426              sym::_poseidon2_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I8)),
 427              sym::_poseidon2_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I16)),
 428              sym::_poseidon2_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I32)),
 429              sym::_poseidon2_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I64)),
 430              sym::_poseidon2_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I128)),
 431              sym::_poseidon2_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U8)),
 432              sym::_poseidon2_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U16)),
 433              sym::_poseidon2_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U32)),
 434              sym::_poseidon2_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U64)),
 435              sym::_poseidon2_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U128)),
 436              sym::_poseidon2_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD2Raw, Type::Scalar),
 437  
 438              sym::_poseidon4_hash_to_address     => Self::Hash(HashVariant::HashPSD4, Type::Address),
 439              sym::_poseidon4_hash_to_field       => Self::Hash(HashVariant::HashPSD4, Type::Field),
 440              sym::_poseidon4_hash_to_group       => Self::Hash(HashVariant::HashPSD4, Type::Group),
 441              sym::_poseidon4_hash_to_i8          => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I8)),
 442              sym::_poseidon4_hash_to_i16         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I16)),
 443              sym::_poseidon4_hash_to_i32         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I32)),
 444              sym::_poseidon4_hash_to_i64         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I64)),
 445              sym::_poseidon4_hash_to_i128        => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I128)),
 446              sym::_poseidon4_hash_to_u8          => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U8)),
 447              sym::_poseidon4_hash_to_u16         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U16)),
 448              sym::_poseidon4_hash_to_u32         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U32)),
 449              sym::_poseidon4_hash_to_u64         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U64)),
 450              sym::_poseidon4_hash_to_u128        => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U128)),
 451              sym::_poseidon4_hash_to_scalar      => Self::Hash(HashVariant::HashPSD4, Type::Scalar),
 452              sym::_poseidon4_hash_to_address_raw => Self::Hash(HashVariant::HashPSD4Raw, Type::Address),
 453              sym::_poseidon4_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD4Raw, Type::Field),
 454              sym::_poseidon4_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD4Raw, Type::Group),
 455              sym::_poseidon4_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I8)),
 456              sym::_poseidon4_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I16)),
 457              sym::_poseidon4_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I32)),
 458              sym::_poseidon4_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I64)),
 459              sym::_poseidon4_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I128)),
 460              sym::_poseidon4_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U8)),
 461              sym::_poseidon4_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U16)),
 462              sym::_poseidon4_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U32)),
 463              sym::_poseidon4_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U64)),
 464              sym::_poseidon4_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U128)),
 465              sym::_poseidon4_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD4Raw, Type::Scalar),
 466  
 467              sym::_poseidon8_hash_to_address     => Self::Hash(HashVariant::HashPSD8, Type::Address),
 468              sym::_poseidon8_hash_to_field       => Self::Hash(HashVariant::HashPSD8, Type::Field),
 469              sym::_poseidon8_hash_to_group       => Self::Hash(HashVariant::HashPSD8, Type::Group),
 470              sym::_poseidon8_hash_to_i8          => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I8)),
 471              sym::_poseidon8_hash_to_i16         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I16)),
 472              sym::_poseidon8_hash_to_i32         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I32)),
 473              sym::_poseidon8_hash_to_i64         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I64)),
 474              sym::_poseidon8_hash_to_i128        => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I128)),
 475              sym::_poseidon8_hash_to_u8          => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U8)),
 476              sym::_poseidon8_hash_to_u16         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U16)),
 477              sym::_poseidon8_hash_to_u32         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U32)),
 478              sym::_poseidon8_hash_to_u64         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U64)),
 479              sym::_poseidon8_hash_to_u128        => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U128)),
 480              sym::_poseidon8_hash_to_scalar      => Self::Hash(HashVariant::HashPSD8, Type::Scalar),
 481              sym::_poseidon8_hash_to_address_raw => Self::Hash(HashVariant::HashPSD8Raw, Type::Address),
 482              sym::_poseidon8_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD8Raw, Type::Field),
 483              sym::_poseidon8_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD8Raw, Type::Group),
 484              sym::_poseidon8_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I8)),
 485              sym::_poseidon8_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I16)),
 486              sym::_poseidon8_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I32)),
 487              sym::_poseidon8_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I64)),
 488              sym::_poseidon8_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I128)),
 489              sym::_poseidon8_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U8)),
 490              sym::_poseidon8_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U16)),
 491              sym::_poseidon8_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U32)),
 492              sym::_poseidon8_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U64)),
 493              sym::_poseidon8_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U128)),
 494              sym::_poseidon8_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD8Raw, Type::Scalar),
 495  
 496              sym::_sha3_256_hash_to_address     => Self::Hash(HashVariant::HashSha3_256, Type::Address),
 497              sym::_sha3_256_hash_to_field       => Self::Hash(HashVariant::HashSha3_256, Type::Field),
 498              sym::_sha3_256_hash_to_group       => Self::Hash(HashVariant::HashSha3_256, Type::Group),
 499              sym::_sha3_256_hash_to_i8          => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I8)),
 500              sym::_sha3_256_hash_to_i16         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I16)),
 501              sym::_sha3_256_hash_to_i32         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I32)),
 502              sym::_sha3_256_hash_to_i64         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I64)),
 503              sym::_sha3_256_hash_to_i128        => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I128)),
 504              sym::_sha3_256_hash_to_u8          => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U8)),
 505              sym::_sha3_256_hash_to_u16         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U16)),
 506              sym::_sha3_256_hash_to_u32         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U32)),
 507              sym::_sha3_256_hash_to_u64         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U64)),
 508              sym::_sha3_256_hash_to_u128        => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U128)),
 509              sym::_sha3_256_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_256, Type::Scalar),
 510              sym::_sha3_256_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_256Raw, Type::Address),
 511              sym::_sha3_256_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_256Raw, Type::Field),
 512              sym::_sha3_256_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_256Raw, Type::Group),
 513              sym::_sha3_256_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I8)),
 514              sym::_sha3_256_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I16)),
 515              sym::_sha3_256_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I32)),
 516              sym::_sha3_256_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I64)),
 517              sym::_sha3_256_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I128)),
 518              sym::_sha3_256_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U8)),
 519              sym::_sha3_256_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U16)),
 520              sym::_sha3_256_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U32)),
 521              sym::_sha3_256_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U64)),
 522              sym::_sha3_256_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U128)),
 523              sym::_sha3_256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_256Raw, Type::Scalar),
 524              sym::_sha3_256_hash_to_bits         => Self::Hash(HashVariant::HashSha3_256Native, Type::Array(ArrayType::bit_array(256))),
 525              sym::_sha3_256_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_256NativeRaw, Type::Array(ArrayType::bit_array(256))),
 526  
 527              sym::_sha3_384_hash_to_address     => Self::Hash(HashVariant::HashSha3_384, Type::Address),
 528              sym::_sha3_384_hash_to_field       => Self::Hash(HashVariant::HashSha3_384, Type::Field),
 529              sym::_sha3_384_hash_to_group       => Self::Hash(HashVariant::HashSha3_384, Type::Group),
 530              sym::_sha3_384_hash_to_i8          => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I8)),
 531              sym::_sha3_384_hash_to_i16         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I16)),
 532              sym::_sha3_384_hash_to_i32         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I32)),
 533              sym::_sha3_384_hash_to_i64         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I64)),
 534              sym::_sha3_384_hash_to_i128        => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I128)),
 535              sym::_sha3_384_hash_to_u8          => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U8)),
 536              sym::_sha3_384_hash_to_u16         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U16)),
 537              sym::_sha3_384_hash_to_u32         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U32)),
 538              sym::_sha3_384_hash_to_u64         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U64)),
 539              sym::_sha3_384_hash_to_u128        => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U128)),
 540              sym::_sha3_384_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_384, Type::Scalar),
 541              sym::_sha3_384_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_384Raw, Type::Address),
 542              sym::_sha3_384_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_384Raw, Type::Field),
 543              sym::_sha3_384_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_384Raw, Type::Group),
 544              sym::_sha3_384_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I8)),
 545              sym::_sha3_384_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I16)),
 546              sym::_sha3_384_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I32)),
 547              sym::_sha3_384_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I64)),
 548              sym::_sha3_384_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I128)),
 549              sym::_sha3_384_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U8)),
 550              sym::_sha3_384_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U16)),
 551              sym::_sha3_384_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U32)),
 552              sym::_sha3_384_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U64)),
 553              sym::_sha3_384_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U128)),
 554              sym::_sha3_384_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_384Raw, Type::Scalar),
 555              sym::_sha3_384_hash_to_bits         => Self::Hash(HashVariant::HashSha3_384Native, Type::Array(ArrayType::bit_array(384))),
 556              sym::_sha3_384_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_384NativeRaw, Type::Array(ArrayType::bit_array(384))),
 557  
 558              sym::_sha3_512_hash_to_address     => Self::Hash(HashVariant::HashSha3_512, Type::Address),
 559              sym::_sha3_512_hash_to_field       => Self::Hash(HashVariant::HashSha3_512, Type::Field),
 560              sym::_sha3_512_hash_to_group       => Self::Hash(HashVariant::HashSha3_512, Type::Group),
 561              sym::_sha3_512_hash_to_i8          => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I8)),
 562              sym::_sha3_512_hash_to_i16         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I16)),
 563              sym::_sha3_512_hash_to_i32         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I32)),
 564              sym::_sha3_512_hash_to_i64         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I64)),
 565              sym::_sha3_512_hash_to_i128        => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I128)),
 566              sym::_sha3_512_hash_to_u8          => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U8)),
 567              sym::_sha3_512_hash_to_u16         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U16)),
 568              sym::_sha3_512_hash_to_u32         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U32)),
 569              sym::_sha3_512_hash_to_u64         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U64)),
 570              sym::_sha3_512_hash_to_u128        => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U128)),
 571              sym::_sha3_512_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_512, Type::Scalar),
 572              sym::_sha3_512_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_512Raw, Type::Address),
 573              sym::_sha3_512_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_512Raw, Type::Field),
 574              sym::_sha3_512_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_512Raw, Type::Group),
 575              sym::_sha3_512_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I8)),
 576              sym::_sha3_512_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I16)),
 577              sym::_sha3_512_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I32)),
 578              sym::_sha3_512_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I64)),
 579              sym::_sha3_512_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I128)),
 580              sym::_sha3_512_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U8)),
 581              sym::_sha3_512_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U16)),
 582              sym::_sha3_512_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U32)),
 583              sym::_sha3_512_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U64)),
 584              sym::_sha3_512_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U128)),
 585              sym::_sha3_512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_512Raw, Type::Scalar),
 586              sym::_sha3_512_hash_to_bits         => Self::Hash(HashVariant::HashSha3_512Native, Type::Array(ArrayType::bit_array(512))),
 587              sym::_sha3_512_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_512NativeRaw, Type::Array(ArrayType::bit_array(512))),
 588  
 589              sym::_ecdsa_verify_digest          => Self::ECDSAVerify(ECDSAVerifyVariant::Digest),
 590              sym::_ecdsa_verify_digest_eth      => Self::ECDSAVerify(ECDSAVerifyVariant::DigestEth),
 591              sym::_ecdsa_verify_keccak256       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256),
 592              sym::_ecdsa_verify_keccak256_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Raw),
 593              sym::_ecdsa_verify_keccak256_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Eth),
 594              sym::_ecdsa_verify_keccak384       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384),
 595              sym::_ecdsa_verify_keccak384_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Raw),
 596              sym::_ecdsa_verify_keccak384_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Eth),
 597              sym::_ecdsa_verify_keccak512       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512),
 598              sym::_ecdsa_verify_keccak512_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Raw),
 599              sym::_ecdsa_verify_keccak512_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Eth),
 600              sym::_ecdsa_verify_sha3_256        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256),
 601              sym::_ecdsa_verify_sha3_256_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Raw),
 602              sym::_ecdsa_verify_sha3_256_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Eth),
 603              sym::_ecdsa_verify_sha3_384        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384),
 604              sym::_ecdsa_verify_sha3_384_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Raw),
 605              sym::_ecdsa_verify_sha3_384_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Eth),
 606              sym::_ecdsa_verify_sha3_512        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512),
 607              sym::_ecdsa_verify_sha3_512_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Raw),
 608              sym::_ecdsa_verify_sha3_512_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Eth),
 609  
 610              sym::_mapping_get => Self::MappingGet,
 611              sym::_mapping_set => Self::MappingSet,
 612              sym::_mapping_get_or_use => Self::MappingGetOrUse,
 613              sym::_mapping_remove => Self::MappingRemove,
 614              sym::_mapping_contains => Self::MappingContains,
 615  
 616              sym::_optional_unwrap => Self::OptionalUnwrap,
 617              sym::_optional_unwrap_or => Self::OptionalUnwrapOr,
 618  
 619              sym::_vector_get => Self::VectorGet,
 620              sym::_vector_set => Self::VectorSet,
 621              sym::_vector_push => Self::VectorPush,
 622              sym::_vector_len => Self::VectorLen,
 623              sym::_vector_clear => Self::VectorClear,
 624              sym::_vector_pop => Self::VectorPop,
 625              sym::_vector_swap_remove => Self::VectorSwapRemove,
 626  
 627              sym::_group_to_x_coordinate => Self::GroupToXCoordinate,
 628              sym::_group_to_y_coordinate => Self::GroupToYCoordinate,
 629  
 630              sym::_program_checksum => Self::ProgramChecksum,
 631              sym::_program_edition => Self::ProgramEdition,
 632              sym::_program_owner => Self::ProgramOwner,
 633  
 634              sym::_signature_verify => Self::SignatureVerify,
 635              sym::_future_await => Self::FutureAwait,
 636  
 637              sym::_serialize_to_bits => Self::Serialize(SerializeVariant::ToBits),
 638              sym::_serialize_to_bits_raw => Self::Serialize(SerializeVariant::ToBitsRaw),
 639  
 640              sym::_cheat_code_print_mapping => Self::CheatCodePrintMapping,
 641              sym::_cheat_code_set_block_height => Self::CheatCodeSetBlockHeight,
 642              sym::_cheat_code_set_block_timestamp => Self::CheatCodeSetBlockTimestamp,
 643              sym::_cheat_code_set_signer => Self::CheatCodeSetSigner,
 644  
 645              _ => return None,
 646          })
 647      }
 648  
 649      /// Returns a `Intrinsic` from the given module and method symbols.
 650      #[rustfmt::skip]
 651      pub fn convert_path_symbols(module: Symbol, function: Symbol) -> Option<Symbol> {
 652          Some(match (module, function) {
 653              (sym::Deserialize, sym::from_bits) => sym::_deserialize_from_bits,
 654              (sym::Deserialize, sym::from_bits_raw) => sym::_deserialize_from_bits_raw,
 655  
 656              (sym::ChaCha, sym::rand_address) => sym::_chacha_rand_address,
 657              (sym::ChaCha, sym::rand_bool)    => sym::_chacha_rand_bool,
 658              (sym::ChaCha, sym::rand_field)   => sym::_chacha_rand_field,
 659              (sym::ChaCha, sym::rand_group)   => sym::_chacha_rand_group,
 660              (sym::ChaCha, sym::rand_i8)      => sym::_chacha_rand_i8,
 661              (sym::ChaCha, sym::rand_i16)     => sym::_chacha_rand_i16,
 662              (sym::ChaCha, sym::rand_i32)     => sym::_chacha_rand_i32,
 663              (sym::ChaCha, sym::rand_i64)     => sym::_chacha_rand_i64,
 664              (sym::ChaCha, sym::rand_i128)    => sym::_chacha_rand_i128,
 665              (sym::ChaCha, sym::rand_u8)      => sym::_chacha_rand_u8,
 666              (sym::ChaCha, sym::rand_u16)     => sym::_chacha_rand_u16,
 667              (sym::ChaCha, sym::rand_u32)     => sym::_chacha_rand_u32,
 668              (sym::ChaCha, sym::rand_u64)     => sym::_chacha_rand_u64,
 669              (sym::ChaCha, sym::rand_u128)    => sym::_chacha_rand_u128,
 670              (sym::ChaCha, sym::rand_scalar)  => sym::_chacha_rand_scalar,
 671  
 672              (sym::BHP256, sym::commit_to_address)   => sym::_bhp256_commit_to_address,
 673              (sym::BHP256, sym::commit_to_field)     => sym::_bhp256_commit_to_field,
 674              (sym::BHP256, sym::commit_to_group)     => sym::_bhp256_commit_to_group,
 675              (sym::BHP512, sym::commit_to_address)   => sym::_bhp512_commit_to_address,
 676              (sym::BHP512, sym::commit_to_field)     => sym::_bhp512_commit_to_field,
 677              (sym::BHP512, sym::commit_to_group)     => sym::_bhp512_commit_to_group,
 678              (sym::BHP768, sym::commit_to_address)   => sym::_bhp768_commit_to_address,
 679              (sym::BHP768, sym::commit_to_field)     => sym::_bhp768_commit_to_field,
 680              (sym::BHP768, sym::commit_to_group)     => sym::_bhp768_commit_to_group,
 681              (sym::BHP1024, sym::commit_to_address)   => sym::_bhp1024_commit_to_address,
 682              (sym::BHP1024, sym::commit_to_field)     => sym::_bhp1024_commit_to_field,
 683              (sym::BHP1024, sym::commit_to_group)     => sym::_bhp1024_commit_to_group,
 684              (sym::Pedersen64, sym::commit_to_address)   => sym::_pedersen64_commit_to_address,
 685              (sym::Pedersen64, sym::commit_to_field)     => sym::_pedersen64_commit_to_field,
 686              (sym::Pedersen64, sym::commit_to_group)     => sym::_pedersen64_commit_to_group,
 687              (sym::Pedersen128, sym::commit_to_address)   => sym::_pedersen128_commit_to_address,
 688              (sym::Pedersen128, sym::commit_to_field)     => sym::_pedersen128_commit_to_field,
 689              (sym::Pedersen128, sym::commit_to_group)     => sym::_pedersen128_commit_to_group,
 690  
 691              (sym::BHP256, sym::hash_to_address)     => sym::_bhp256_hash_to_address,
 692              (sym::BHP256, sym::hash_to_field)       => sym::_bhp256_hash_to_field,
 693              (sym::BHP256, sym::hash_to_group)       => sym::_bhp256_hash_to_group,
 694              (sym::BHP256, sym::hash_to_i8)          => sym::_bhp256_hash_to_i8,
 695              (sym::BHP256, sym::hash_to_i16)         => sym::_bhp256_hash_to_i16,
 696              (sym::BHP256, sym::hash_to_i32)         => sym::_bhp256_hash_to_i32,
 697              (sym::BHP256, sym::hash_to_i64)         => sym::_bhp256_hash_to_i64,
 698              (sym::BHP256, sym::hash_to_i128)        => sym::_bhp256_hash_to_i128,
 699              (sym::BHP256, sym::hash_to_u8)          => sym::_bhp256_hash_to_u8,
 700              (sym::BHP256, sym::hash_to_u16)         => sym::_bhp256_hash_to_u16,
 701              (sym::BHP256, sym::hash_to_u32)         => sym::_bhp256_hash_to_u32,
 702              (sym::BHP256, sym::hash_to_u64)         => sym::_bhp256_hash_to_u64,
 703              (sym::BHP256, sym::hash_to_u128)        => sym::_bhp256_hash_to_u128,
 704              (sym::BHP256, sym::hash_to_scalar)      => sym::_bhp256_hash_to_scalar,
 705              (sym::BHP256, sym::hash_to_address_raw) => sym::_bhp256_hash_to_address_raw,
 706              (sym::BHP256, sym::hash_to_field_raw)   => sym::_bhp256_hash_to_field_raw,
 707              (sym::BHP256, sym::hash_to_group_raw)   => sym::_bhp256_hash_to_group_raw,
 708              (sym::BHP256, sym::hash_to_i8_raw)      => sym::_bhp256_hash_to_i8_raw,
 709              (sym::BHP256, sym::hash_to_i16_raw)     => sym::_bhp256_hash_to_i16_raw,
 710              (sym::BHP256, sym::hash_to_i32_raw)     => sym::_bhp256_hash_to_i32_raw,
 711              (sym::BHP256, sym::hash_to_i64_raw)     => sym::_bhp256_hash_to_i64_raw,
 712              (sym::BHP256, sym::hash_to_i128_raw)    => sym::_bhp256_hash_to_i128_raw,
 713              (sym::BHP256, sym::hash_to_u8_raw)      => sym::_bhp256_hash_to_u8_raw,
 714              (sym::BHP256, sym::hash_to_u16_raw)     => sym::_bhp256_hash_to_u16_raw,
 715              (sym::BHP256, sym::hash_to_u32_raw)     => sym::_bhp256_hash_to_u32_raw,
 716              (sym::BHP256, sym::hash_to_u64_raw)     => sym::_bhp256_hash_to_u64_raw,
 717              (sym::BHP256, sym::hash_to_u128_raw)    => sym::_bhp256_hash_to_u128_raw,
 718              (sym::BHP256, sym::hash_to_scalar_raw)  => sym::_bhp256_hash_to_scalar_raw,
 719  
 720              (sym::BHP512, sym::hash_to_address)     => sym::_bhp512_hash_to_address,
 721              (sym::BHP512, sym::hash_to_field)       => sym::_bhp512_hash_to_field,
 722              (sym::BHP512, sym::hash_to_group)       => sym::_bhp512_hash_to_group,
 723              (sym::BHP512, sym::hash_to_i8)          => sym::_bhp512_hash_to_i8,
 724              (sym::BHP512, sym::hash_to_i16)         => sym::_bhp512_hash_to_i16,
 725              (sym::BHP512, sym::hash_to_i32)         => sym::_bhp512_hash_to_i32,
 726              (sym::BHP512, sym::hash_to_i64)         => sym::_bhp512_hash_to_i64,
 727              (sym::BHP512, sym::hash_to_i128)        => sym::_bhp512_hash_to_i128,
 728              (sym::BHP512, sym::hash_to_u8)          => sym::_bhp512_hash_to_u8,
 729              (sym::BHP512, sym::hash_to_u16)         => sym::_bhp512_hash_to_u16,
 730              (sym::BHP512, sym::hash_to_u32)         => sym::_bhp512_hash_to_u32,
 731              (sym::BHP512, sym::hash_to_u64)         => sym::_bhp512_hash_to_u64,
 732              (sym::BHP512, sym::hash_to_u128)        => sym::_bhp512_hash_to_u128,
 733              (sym::BHP512, sym::hash_to_scalar)      => sym::_bhp512_hash_to_scalar,
 734              (sym::BHP512, sym::hash_to_address_raw) => sym::_bhp512_hash_to_address_raw,
 735              (sym::BHP512, sym::hash_to_field_raw)   => sym::_bhp512_hash_to_field_raw,
 736              (sym::BHP512, sym::hash_to_group_raw)   => sym::_bhp512_hash_to_group_raw,
 737              (sym::BHP512, sym::hash_to_i8_raw)      => sym::_bhp512_hash_to_i8_raw,
 738              (sym::BHP512, sym::hash_to_i16_raw)     => sym::_bhp512_hash_to_i16_raw,
 739              (sym::BHP512, sym::hash_to_i32_raw)     => sym::_bhp512_hash_to_i32_raw,
 740              (sym::BHP512, sym::hash_to_i64_raw)     => sym::_bhp512_hash_to_i64_raw,
 741              (sym::BHP512, sym::hash_to_i128_raw)    => sym::_bhp512_hash_to_i128_raw,
 742              (sym::BHP512, sym::hash_to_u8_raw)      => sym::_bhp512_hash_to_u8_raw,
 743              (sym::BHP512, sym::hash_to_u16_raw)     => sym::_bhp512_hash_to_u16_raw,
 744              (sym::BHP512, sym::hash_to_u32_raw)     => sym::_bhp512_hash_to_u32_raw,
 745              (sym::BHP512, sym::hash_to_u64_raw)     => sym::_bhp512_hash_to_u64_raw,
 746              (sym::BHP512, sym::hash_to_u128_raw)    => sym::_bhp512_hash_to_u128_raw,
 747              (sym::BHP512, sym::hash_to_scalar_raw)  => sym::_bhp512_hash_to_scalar_raw,
 748  
 749              (sym::BHP768, sym::hash_to_address)     => sym::_bhp768_hash_to_address,
 750              (sym::BHP768, sym::hash_to_field)       => sym::_bhp768_hash_to_field,
 751              (sym::BHP768, sym::hash_to_group)       => sym::_bhp768_hash_to_group,
 752              (sym::BHP768, sym::hash_to_i8)          => sym::_bhp768_hash_to_i8,
 753              (sym::BHP768, sym::hash_to_i16)         => sym::_bhp768_hash_to_i16,
 754              (sym::BHP768, sym::hash_to_i32)         => sym::_bhp768_hash_to_i32,
 755              (sym::BHP768, sym::hash_to_i64)         => sym::_bhp768_hash_to_i64,
 756              (sym::BHP768, sym::hash_to_i128)        => sym::_bhp768_hash_to_i128,
 757              (sym::BHP768, sym::hash_to_u8)          => sym::_bhp768_hash_to_u8,
 758              (sym::BHP768, sym::hash_to_u16)         => sym::_bhp768_hash_to_u16,
 759              (sym::BHP768, sym::hash_to_u32)         => sym::_bhp768_hash_to_u32,
 760              (sym::BHP768, sym::hash_to_u64)         => sym::_bhp768_hash_to_u64,
 761              (sym::BHP768, sym::hash_to_u128)        => sym::_bhp768_hash_to_u128,
 762              (sym::BHP768, sym::hash_to_scalar)      => sym::_bhp768_hash_to_scalar,
 763              (sym::BHP768, sym::hash_to_address_raw) => sym::_bhp768_hash_to_address_raw,
 764              (sym::BHP768, sym::hash_to_field_raw)   => sym::_bhp768_hash_to_field_raw,
 765              (sym::BHP768, sym::hash_to_group_raw)   => sym::_bhp768_hash_to_group_raw,
 766              (sym::BHP768, sym::hash_to_i8_raw)      => sym::_bhp768_hash_to_i8_raw,
 767              (sym::BHP768, sym::hash_to_i16_raw)     => sym::_bhp768_hash_to_i16_raw,
 768              (sym::BHP768, sym::hash_to_i32_raw)     => sym::_bhp768_hash_to_i32_raw,
 769              (sym::BHP768, sym::hash_to_i64_raw)     => sym::_bhp768_hash_to_i64_raw,
 770              (sym::BHP768, sym::hash_to_i128_raw)    => sym::_bhp768_hash_to_i128_raw,
 771              (sym::BHP768, sym::hash_to_u8_raw)      => sym::_bhp768_hash_to_u8_raw,
 772              (sym::BHP768, sym::hash_to_u16_raw)     => sym::_bhp768_hash_to_u16_raw,
 773              (sym::BHP768, sym::hash_to_u32_raw)     => sym::_bhp768_hash_to_u32_raw,
 774              (sym::BHP768, sym::hash_to_u64_raw)     => sym::_bhp768_hash_to_u64_raw,
 775              (sym::BHP768, sym::hash_to_u128_raw)    => sym::_bhp768_hash_to_u128_raw,
 776              (sym::BHP768, sym::hash_to_scalar_raw)  => sym::_bhp768_hash_to_scalar_raw,
 777  
 778              (sym::BHP1024, sym::hash_to_address)     => sym::_bhp1024_hash_to_address,
 779              (sym::BHP1024, sym::hash_to_field)       => sym::_bhp1024_hash_to_field,
 780              (sym::BHP1024, sym::hash_to_group)       => sym::_bhp1024_hash_to_group,
 781              (sym::BHP1024, sym::hash_to_i8)          => sym::_bhp1024_hash_to_i8,
 782              (sym::BHP1024, sym::hash_to_i16)         => sym::_bhp1024_hash_to_i16,
 783              (sym::BHP1024, sym::hash_to_i32)         => sym::_bhp1024_hash_to_i32,
 784              (sym::BHP1024, sym::hash_to_i64)         => sym::_bhp1024_hash_to_i64,
 785              (sym::BHP1024, sym::hash_to_i128)        => sym::_bhp1024_hash_to_i128,
 786              (sym::BHP1024, sym::hash_to_u8)          => sym::_bhp1024_hash_to_u8,
 787              (sym::BHP1024, sym::hash_to_u16)         => sym::_bhp1024_hash_to_u16,
 788              (sym::BHP1024, sym::hash_to_u32)         => sym::_bhp1024_hash_to_u32,
 789              (sym::BHP1024, sym::hash_to_u64)         => sym::_bhp1024_hash_to_u64,
 790              (sym::BHP1024, sym::hash_to_u128)        => sym::_bhp1024_hash_to_u128,
 791              (sym::BHP1024, sym::hash_to_scalar)      => sym::_bhp1024_hash_to_scalar,
 792              (sym::BHP1024, sym::hash_to_address_raw) => sym::_bhp1024_hash_to_address_raw,
 793              (sym::BHP1024, sym::hash_to_field_raw)   => sym::_bhp1024_hash_to_field_raw,
 794              (sym::BHP1024, sym::hash_to_group_raw)   => sym::_bhp1024_hash_to_group_raw,
 795              (sym::BHP1024, sym::hash_to_i8_raw)      => sym::_bhp1024_hash_to_i8_raw,
 796              (sym::BHP1024, sym::hash_to_i16_raw)     => sym::_bhp1024_hash_to_i16_raw,
 797              (sym::BHP1024, sym::hash_to_i32_raw)     => sym::_bhp1024_hash_to_i32_raw,
 798              (sym::BHP1024, sym::hash_to_i64_raw)     => sym::_bhp1024_hash_to_i64_raw,
 799              (sym::BHP1024, sym::hash_to_i128_raw)    => sym::_bhp1024_hash_to_i128_raw,
 800              (sym::BHP1024, sym::hash_to_u8_raw)      => sym::_bhp1024_hash_to_u8_raw,
 801              (sym::BHP1024, sym::hash_to_u16_raw)     => sym::_bhp1024_hash_to_u16_raw,
 802              (sym::BHP1024, sym::hash_to_u32_raw)     => sym::_bhp1024_hash_to_u32_raw,
 803              (sym::BHP1024, sym::hash_to_u64_raw)     => sym::_bhp1024_hash_to_u64_raw,
 804              (sym::BHP1024, sym::hash_to_u128_raw)    => sym::_bhp1024_hash_to_u128_raw,
 805              (sym::BHP1024, sym::hash_to_scalar_raw)  => sym::_bhp1024_hash_to_scalar_raw,
 806  
 807              (sym::Keccak256, sym::hash_to_address)     => sym::_keccak256_hash_to_address,
 808              (sym::Keccak256, sym::hash_to_field)       => sym::_keccak256_hash_to_field,
 809              (sym::Keccak256, sym::hash_to_group)       => sym::_keccak256_hash_to_group,
 810              (sym::Keccak256, sym::hash_to_i8)          => sym::_keccak256_hash_to_i8,
 811              (sym::Keccak256, sym::hash_to_i16)         => sym::_keccak256_hash_to_i16,
 812              (sym::Keccak256, sym::hash_to_i32)         => sym::_keccak256_hash_to_i32,
 813              (sym::Keccak256, sym::hash_to_i64)         => sym::_keccak256_hash_to_i64,
 814              (sym::Keccak256, sym::hash_to_i128)        => sym::_keccak256_hash_to_i128,
 815              (sym::Keccak256, sym::hash_to_u8)          => sym::_keccak256_hash_to_u8,
 816              (sym::Keccak256, sym::hash_to_u16)         => sym::_keccak256_hash_to_u16,
 817              (sym::Keccak256, sym::hash_to_u32)         => sym::_keccak256_hash_to_u32,
 818              (sym::Keccak256, sym::hash_to_u64)         => sym::_keccak256_hash_to_u64,
 819              (sym::Keccak256, sym::hash_to_u128)        => sym::_keccak256_hash_to_u128,
 820              (sym::Keccak256, sym::hash_to_scalar)      => sym::_keccak256_hash_to_scalar,
 821              (sym::Keccak256, sym::hash_to_address_raw) => sym::_keccak256_hash_to_address_raw,
 822              (sym::Keccak256, sym::hash_to_field_raw)   => sym::_keccak256_hash_to_field_raw,
 823              (sym::Keccak256, sym::hash_to_group_raw)   => sym::_keccak256_hash_to_group_raw,
 824              (sym::Keccak256, sym::hash_to_i8_raw)      => sym::_keccak256_hash_to_i8_raw,
 825              (sym::Keccak256, sym::hash_to_i16_raw)     => sym::_keccak256_hash_to_i16_raw,
 826              (sym::Keccak256, sym::hash_to_i32_raw)     => sym::_keccak256_hash_to_i32_raw,
 827              (sym::Keccak256, sym::hash_to_i64_raw)     => sym::_keccak256_hash_to_i64_raw,
 828              (sym::Keccak256, sym::hash_to_i128_raw)    => sym::_keccak256_hash_to_i128_raw,
 829              (sym::Keccak256, sym::hash_to_u8_raw)      => sym::_keccak256_hash_to_u8_raw,
 830              (sym::Keccak256, sym::hash_to_u16_raw)     => sym::_keccak256_hash_to_u16_raw,
 831              (sym::Keccak256, sym::hash_to_u32_raw)     => sym::_keccak256_hash_to_u32_raw,
 832              (sym::Keccak256, sym::hash_to_u64_raw)     => sym::_keccak256_hash_to_u64_raw,
 833              (sym::Keccak256, sym::hash_to_u128_raw)    => sym::_keccak256_hash_to_u128_raw,
 834              (sym::Keccak256, sym::hash_to_scalar_raw)  => sym::_keccak256_hash_to_scalar_raw,
 835              (sym::Keccak256, sym::hash_to_bits)         => sym::_keccak256_hash_to_bits,
 836              (sym::Keccak256, sym::hash_to_bits_raw)     => sym::_keccak256_hash_to_bits_raw,
 837  
 838              (sym::Keccak384, sym::hash_to_address)     => sym::_keccak384_hash_to_address,
 839              (sym::Keccak384, sym::hash_to_field)       => sym::_keccak384_hash_to_field,
 840              (sym::Keccak384, sym::hash_to_group)       => sym::_keccak384_hash_to_group,
 841              (sym::Keccak384, sym::hash_to_i8)          => sym::_keccak384_hash_to_i8,
 842              (sym::Keccak384, sym::hash_to_i16)         => sym::_keccak384_hash_to_i16,
 843              (sym::Keccak384, sym::hash_to_i32)         => sym::_keccak384_hash_to_i32,
 844              (sym::Keccak384, sym::hash_to_i64)         => sym::_keccak384_hash_to_i64,
 845              (sym::Keccak384, sym::hash_to_i128)        => sym::_keccak384_hash_to_i128,
 846              (sym::Keccak384, sym::hash_to_u8)          => sym::_keccak384_hash_to_u8,
 847              (sym::Keccak384, sym::hash_to_u16)         => sym::_keccak384_hash_to_u16,
 848              (sym::Keccak384, sym::hash_to_u32)         => sym::_keccak384_hash_to_u32,
 849              (sym::Keccak384, sym::hash_to_u64)         => sym::_keccak384_hash_to_u64,
 850              (sym::Keccak384, sym::hash_to_u128)        => sym::_keccak384_hash_to_u128,
 851              (sym::Keccak384, sym::hash_to_scalar)      => sym::_keccak384_hash_to_scalar,
 852              (sym::Keccak384, sym::hash_to_address_raw) => sym::_keccak384_hash_to_address_raw,
 853              (sym::Keccak384, sym::hash_to_field_raw)   => sym::_keccak384_hash_to_field_raw,
 854              (sym::Keccak384, sym::hash_to_group_raw)   => sym::_keccak384_hash_to_group_raw,
 855              (sym::Keccak384, sym::hash_to_i8_raw)      => sym::_keccak384_hash_to_i8_raw,
 856              (sym::Keccak384, sym::hash_to_i16_raw)     => sym::_keccak384_hash_to_i16_raw,
 857              (sym::Keccak384, sym::hash_to_i32_raw)     => sym::_keccak384_hash_to_i32_raw,
 858              (sym::Keccak384, sym::hash_to_i64_raw)     => sym::_keccak384_hash_to_i64_raw,
 859              (sym::Keccak384, sym::hash_to_i128_raw)    => sym::_keccak384_hash_to_i128_raw,
 860              (sym::Keccak384, sym::hash_to_u8_raw)      => sym::_keccak384_hash_to_u8_raw,
 861              (sym::Keccak384, sym::hash_to_u16_raw)     => sym::_keccak384_hash_to_u16_raw,
 862              (sym::Keccak384, sym::hash_to_u32_raw)     => sym::_keccak384_hash_to_u32_raw,
 863              (sym::Keccak384, sym::hash_to_u64_raw)     => sym::_keccak384_hash_to_u64_raw,
 864              (sym::Keccak384, sym::hash_to_u128_raw)    => sym::_keccak384_hash_to_u128_raw,
 865              (sym::Keccak384, sym::hash_to_scalar_raw)  => sym::_keccak384_hash_to_scalar_raw,
 866              (sym::Keccak384, sym::hash_to_bits)         => sym::_keccak384_hash_to_bits,
 867              (sym::Keccak384, sym::hash_to_bits_raw)     => sym::_keccak384_hash_to_bits_raw,
 868  
 869              (sym::Keccak512, sym::hash_to_address)     => sym::_keccak512_hash_to_address,
 870              (sym::Keccak512, sym::hash_to_field)       => sym::_keccak512_hash_to_field,
 871              (sym::Keccak512, sym::hash_to_group)       => sym::_keccak512_hash_to_group,
 872              (sym::Keccak512, sym::hash_to_i8)          => sym::_keccak512_hash_to_i8,
 873              (sym::Keccak512, sym::hash_to_i16)         => sym::_keccak512_hash_to_i16,
 874              (sym::Keccak512, sym::hash_to_i32)         => sym::_keccak512_hash_to_i32,
 875              (sym::Keccak512, sym::hash_to_i64)         => sym::_keccak512_hash_to_i64,
 876              (sym::Keccak512, sym::hash_to_i128)        => sym::_keccak512_hash_to_i128,
 877              (sym::Keccak512, sym::hash_to_u8)          => sym::_keccak512_hash_to_u8,
 878              (sym::Keccak512, sym::hash_to_u16)         => sym::_keccak512_hash_to_u16,
 879              (sym::Keccak512, sym::hash_to_u32)         => sym::_keccak512_hash_to_u32,
 880              (sym::Keccak512, sym::hash_to_u64)         => sym::_keccak512_hash_to_u64,
 881              (sym::Keccak512, sym::hash_to_u128)        => sym::_keccak512_hash_to_u128,
 882              (sym::Keccak512, sym::hash_to_scalar)      => sym::_keccak512_hash_to_scalar,
 883              (sym::Keccak512, sym::hash_to_address_raw) => sym::_keccak512_hash_to_address_raw,
 884              (sym::Keccak512, sym::hash_to_field_raw)   => sym::_keccak512_hash_to_field_raw,
 885              (sym::Keccak512, sym::hash_to_group_raw)   => sym::_keccak512_hash_to_group_raw,
 886              (sym::Keccak512, sym::hash_to_i8_raw)      => sym::_keccak512_hash_to_i8_raw,
 887              (sym::Keccak512, sym::hash_to_i16_raw)     => sym::_keccak512_hash_to_i16_raw,
 888              (sym::Keccak512, sym::hash_to_i32_raw)     => sym::_keccak512_hash_to_i32_raw,
 889              (sym::Keccak512, sym::hash_to_i64_raw)     => sym::_keccak512_hash_to_i64_raw,
 890              (sym::Keccak512, sym::hash_to_i128_raw)    => sym::_keccak512_hash_to_i128_raw,
 891              (sym::Keccak512, sym::hash_to_u8_raw)      => sym::_keccak512_hash_to_u8_raw,
 892              (sym::Keccak512, sym::hash_to_u16_raw)     => sym::_keccak512_hash_to_u16_raw,
 893              (sym::Keccak512, sym::hash_to_u32_raw)     => sym::_keccak512_hash_to_u32_raw,
 894              (sym::Keccak512, sym::hash_to_u64_raw)     => sym::_keccak512_hash_to_u64_raw,
 895              (sym::Keccak512, sym::hash_to_u128_raw)    => sym::_keccak512_hash_to_u128_raw,
 896              (sym::Keccak512, sym::hash_to_scalar_raw)  => sym::_keccak512_hash_to_scalar_raw,
 897              (sym::Keccak512, sym::hash_to_bits)         => sym::_keccak512_hash_to_bits,
 898              (sym::Keccak512, sym::hash_to_bits_raw)     => sym::_keccak512_hash_to_bits_raw,
 899  
 900              (sym::Pedersen64, sym::hash_to_address)     => sym::_pedersen64_hash_to_address,
 901              (sym::Pedersen64, sym::hash_to_field)       => sym::_pedersen64_hash_to_field,
 902              (sym::Pedersen64, sym::hash_to_group)       => sym::_pedersen64_hash_to_group,
 903              (sym::Pedersen64, sym::hash_to_i8)          => sym::_pedersen64_hash_to_i8,
 904              (sym::Pedersen64, sym::hash_to_i16)         => sym::_pedersen64_hash_to_i16,
 905              (sym::Pedersen64, sym::hash_to_i32)         => sym::_pedersen64_hash_to_i32,
 906              (sym::Pedersen64, sym::hash_to_i64)         => sym::_pedersen64_hash_to_i64,
 907              (sym::Pedersen64, sym::hash_to_i128)        => sym::_pedersen64_hash_to_i128,
 908              (sym::Pedersen64, sym::hash_to_u8)          => sym::_pedersen64_hash_to_u8,
 909              (sym::Pedersen64, sym::hash_to_u16)         => sym::_pedersen64_hash_to_u16,
 910              (sym::Pedersen64, sym::hash_to_u32)         => sym::_pedersen64_hash_to_u32,
 911              (sym::Pedersen64, sym::hash_to_u64)         => sym::_pedersen64_hash_to_u64,
 912              (sym::Pedersen64, sym::hash_to_u128)        => sym::_pedersen64_hash_to_u128,
 913              (sym::Pedersen64, sym::hash_to_scalar)      => sym::_pedersen64_hash_to_scalar,
 914              (sym::Pedersen64, sym::hash_to_address_raw) => sym::_pedersen64_hash_to_address_raw,
 915              (sym::Pedersen64, sym::hash_to_field_raw)   => sym::_pedersen64_hash_to_field_raw,
 916              (sym::Pedersen64, sym::hash_to_group_raw)   => sym::_pedersen64_hash_to_group_raw,
 917              (sym::Pedersen64, sym::hash_to_i8_raw)      => sym::_pedersen64_hash_to_i8_raw,
 918              (sym::Pedersen64, sym::hash_to_i16_raw)     => sym::_pedersen64_hash_to_i16_raw,
 919              (sym::Pedersen64, sym::hash_to_i32_raw)     => sym::_pedersen64_hash_to_i32_raw,
 920              (sym::Pedersen64, sym::hash_to_i64_raw)     => sym::_pedersen64_hash_to_i64_raw,
 921              (sym::Pedersen64, sym::hash_to_i128_raw)    => sym::_pedersen64_hash_to_i128_raw,
 922              (sym::Pedersen64, sym::hash_to_u8_raw)      => sym::_pedersen64_hash_to_u8_raw,
 923              (sym::Pedersen64, sym::hash_to_u16_raw)     => sym::_pedersen64_hash_to_u16_raw,
 924              (sym::Pedersen64, sym::hash_to_u32_raw)     => sym::_pedersen64_hash_to_u32_raw,
 925              (sym::Pedersen64, sym::hash_to_u64_raw)     => sym::_pedersen64_hash_to_u64_raw,
 926              (sym::Pedersen64, sym::hash_to_u128_raw)    => sym::_pedersen64_hash_to_u128_raw,
 927              (sym::Pedersen64, sym::hash_to_scalar_raw)  => sym::_pedersen64_hash_to_scalar_raw,
 928  
 929              (sym::Pedersen128, sym::hash_to_address)     => sym::_pedersen128_hash_to_address,
 930              (sym::Pedersen128, sym::hash_to_field)       => sym::_pedersen128_hash_to_field,
 931              (sym::Pedersen128, sym::hash_to_group)       => sym::_pedersen128_hash_to_group,
 932              (sym::Pedersen128, sym::hash_to_i8)          => sym::_pedersen128_hash_to_i8,
 933              (sym::Pedersen128, sym::hash_to_i16)         => sym::_pedersen128_hash_to_i16,
 934              (sym::Pedersen128, sym::hash_to_i32)         => sym::_pedersen128_hash_to_i32,
 935              (sym::Pedersen128, sym::hash_to_i64)         => sym::_pedersen128_hash_to_i64,
 936              (sym::Pedersen128, sym::hash_to_i128)        => sym::_pedersen128_hash_to_i128,
 937              (sym::Pedersen128, sym::hash_to_u8)          => sym::_pedersen128_hash_to_u8,
 938              (sym::Pedersen128, sym::hash_to_u16)         => sym::_pedersen128_hash_to_u16,
 939              (sym::Pedersen128, sym::hash_to_u32)         => sym::_pedersen128_hash_to_u32,
 940              (sym::Pedersen128, sym::hash_to_u64)         => sym::_pedersen128_hash_to_u64,
 941              (sym::Pedersen128, sym::hash_to_u128)        => sym::_pedersen128_hash_to_u128,
 942              (sym::Pedersen128, sym::hash_to_scalar)      => sym::_pedersen128_hash_to_scalar,
 943              (sym::Pedersen128, sym::hash_to_address_raw) => sym::_pedersen128_hash_to_address_raw,
 944              (sym::Pedersen128, sym::hash_to_field_raw)   => sym::_pedersen128_hash_to_field_raw,
 945              (sym::Pedersen128, sym::hash_to_group_raw)   => sym::_pedersen128_hash_to_group_raw,
 946              (sym::Pedersen128, sym::hash_to_i8_raw)      => sym::_pedersen128_hash_to_i8_raw,
 947              (sym::Pedersen128, sym::hash_to_i16_raw)     => sym::_pedersen128_hash_to_i16_raw,
 948              (sym::Pedersen128, sym::hash_to_i32_raw)     => sym::_pedersen128_hash_to_i32_raw,
 949              (sym::Pedersen128, sym::hash_to_i64_raw)     => sym::_pedersen128_hash_to_i64_raw,
 950              (sym::Pedersen128, sym::hash_to_i128_raw)    => sym::_pedersen128_hash_to_i128_raw,
 951              (sym::Pedersen128, sym::hash_to_u8_raw)      => sym::_pedersen128_hash_to_u8_raw,
 952              (sym::Pedersen128, sym::hash_to_u16_raw)     => sym::_pedersen128_hash_to_u16_raw,
 953              (sym::Pedersen128, sym::hash_to_u32_raw)     => sym::_pedersen128_hash_to_u32_raw,
 954              (sym::Pedersen128, sym::hash_to_u64_raw)     => sym::_pedersen128_hash_to_u64_raw,
 955              (sym::Pedersen128, sym::hash_to_u128_raw)    => sym::_pedersen128_hash_to_u128_raw,
 956              (sym::Pedersen128, sym::hash_to_scalar_raw)  => sym::_pedersen128_hash_to_scalar_raw,
 957  
 958              (sym::Poseidon2, sym::hash_to_address)     => sym::_poseidon2_hash_to_address,
 959              (sym::Poseidon2, sym::hash_to_field)       => sym::_poseidon2_hash_to_field,
 960              (sym::Poseidon2, sym::hash_to_group)       => sym::_poseidon2_hash_to_group,
 961              (sym::Poseidon2, sym::hash_to_i8)          => sym::_poseidon2_hash_to_i8,
 962              (sym::Poseidon2, sym::hash_to_i16)         => sym::_poseidon2_hash_to_i16,
 963              (sym::Poseidon2, sym::hash_to_i32)         => sym::_poseidon2_hash_to_i32,
 964              (sym::Poseidon2, sym::hash_to_i64)         => sym::_poseidon2_hash_to_i64,
 965              (sym::Poseidon2, sym::hash_to_i128)        => sym::_poseidon2_hash_to_i128,
 966              (sym::Poseidon2, sym::hash_to_u8)          => sym::_poseidon2_hash_to_u8,
 967              (sym::Poseidon2, sym::hash_to_u16)         => sym::_poseidon2_hash_to_u16,
 968              (sym::Poseidon2, sym::hash_to_u32)         => sym::_poseidon2_hash_to_u32,
 969              (sym::Poseidon2, sym::hash_to_u64)         => sym::_poseidon2_hash_to_u64,
 970              (sym::Poseidon2, sym::hash_to_u128)        => sym::_poseidon2_hash_to_u128,
 971              (sym::Poseidon2, sym::hash_to_scalar)      => sym::_poseidon2_hash_to_scalar,
 972              (sym::Poseidon2, sym::hash_to_address_raw) => sym::_poseidon2_hash_to_address_raw,
 973              (sym::Poseidon2, sym::hash_to_field_raw)   => sym::_poseidon2_hash_to_field_raw,
 974              (sym::Poseidon2, sym::hash_to_group_raw)   => sym::_poseidon2_hash_to_group_raw,
 975              (sym::Poseidon2, sym::hash_to_i8_raw)      => sym::_poseidon2_hash_to_i8_raw,
 976              (sym::Poseidon2, sym::hash_to_i16_raw)     => sym::_poseidon2_hash_to_i16_raw,
 977              (sym::Poseidon2, sym::hash_to_i32_raw)     => sym::_poseidon2_hash_to_i32_raw,
 978              (sym::Poseidon2, sym::hash_to_i64_raw)     => sym::_poseidon2_hash_to_i64_raw,
 979              (sym::Poseidon2, sym::hash_to_i128_raw)    => sym::_poseidon2_hash_to_i128_raw,
 980              (sym::Poseidon2, sym::hash_to_u8_raw)      => sym::_poseidon2_hash_to_u8_raw,
 981              (sym::Poseidon2, sym::hash_to_u16_raw)     => sym::_poseidon2_hash_to_u16_raw,
 982              (sym::Poseidon2, sym::hash_to_u32_raw)     => sym::_poseidon2_hash_to_u32_raw,
 983              (sym::Poseidon2, sym::hash_to_u64_raw)     => sym::_poseidon2_hash_to_u64_raw,
 984              (sym::Poseidon2, sym::hash_to_u128_raw)    => sym::_poseidon2_hash_to_u128_raw,
 985              (sym::Poseidon2, sym::hash_to_scalar_raw)  => sym::_poseidon2_hash_to_scalar_raw,
 986  
 987              (sym::Poseidon4, sym::hash_to_address)     => sym::_poseidon4_hash_to_address,
 988              (sym::Poseidon4, sym::hash_to_field)       => sym::_poseidon4_hash_to_field,
 989              (sym::Poseidon4, sym::hash_to_group)       => sym::_poseidon4_hash_to_group,
 990              (sym::Poseidon4, sym::hash_to_i8)          => sym::_poseidon4_hash_to_i8,
 991              (sym::Poseidon4, sym::hash_to_i16)         => sym::_poseidon4_hash_to_i16,
 992              (sym::Poseidon4, sym::hash_to_i32)         => sym::_poseidon4_hash_to_i32,
 993              (sym::Poseidon4, sym::hash_to_i64)         => sym::_poseidon4_hash_to_i64,
 994              (sym::Poseidon4, sym::hash_to_i128)        => sym::_poseidon4_hash_to_i128,
 995              (sym::Poseidon4, sym::hash_to_u8)          => sym::_poseidon4_hash_to_u8,
 996              (sym::Poseidon4, sym::hash_to_u16)         => sym::_poseidon4_hash_to_u16,
 997              (sym::Poseidon4, sym::hash_to_u32)         => sym::_poseidon4_hash_to_u32,
 998              (sym::Poseidon4, sym::hash_to_u64)         => sym::_poseidon4_hash_to_u64,
 999              (sym::Poseidon4, sym::hash_to_u128)        => sym::_poseidon4_hash_to_u128,
1000              (sym::Poseidon4, sym::hash_to_scalar)      => sym::_poseidon4_hash_to_scalar,
1001              (sym::Poseidon4, sym::hash_to_address_raw) => sym::_poseidon4_hash_to_address_raw,
1002              (sym::Poseidon4, sym::hash_to_field_raw)   => sym::_poseidon4_hash_to_field_raw,
1003              (sym::Poseidon4, sym::hash_to_group_raw)   => sym::_poseidon4_hash_to_group_raw,
1004              (sym::Poseidon4, sym::hash_to_i8_raw)      => sym::_poseidon4_hash_to_i8_raw,
1005              (sym::Poseidon4, sym::hash_to_i16_raw)     => sym::_poseidon4_hash_to_i16_raw,
1006              (sym::Poseidon4, sym::hash_to_i32_raw)     => sym::_poseidon4_hash_to_i32_raw,
1007              (sym::Poseidon4, sym::hash_to_i64_raw)     => sym::_poseidon4_hash_to_i64_raw,
1008              (sym::Poseidon4, sym::hash_to_i128_raw)    => sym::_poseidon4_hash_to_i128_raw,
1009              (sym::Poseidon4, sym::hash_to_u8_raw)      => sym::_poseidon4_hash_to_u8_raw,
1010              (sym::Poseidon4, sym::hash_to_u16_raw)     => sym::_poseidon4_hash_to_u16_raw,
1011              (sym::Poseidon4, sym::hash_to_u32_raw)     => sym::_poseidon4_hash_to_u32_raw,
1012              (sym::Poseidon4, sym::hash_to_u64_raw)     => sym::_poseidon4_hash_to_u64_raw,
1013              (sym::Poseidon4, sym::hash_to_u128_raw)    => sym::_poseidon4_hash_to_u128_raw,
1014              (sym::Poseidon4, sym::hash_to_scalar_raw)  => sym::_poseidon4_hash_to_scalar_raw,
1015  
1016              (sym::Poseidon8, sym::hash_to_address)     => sym::_poseidon8_hash_to_address,
1017              (sym::Poseidon8, sym::hash_to_field)       => sym::_poseidon8_hash_to_field,
1018              (sym::Poseidon8, sym::hash_to_group)       => sym::_poseidon8_hash_to_group,
1019              (sym::Poseidon8, sym::hash_to_i8)          => sym::_poseidon8_hash_to_i8,
1020              (sym::Poseidon8, sym::hash_to_i16)         => sym::_poseidon8_hash_to_i16,
1021              (sym::Poseidon8, sym::hash_to_i32)         => sym::_poseidon8_hash_to_i32,
1022              (sym::Poseidon8, sym::hash_to_i64)         => sym::_poseidon8_hash_to_i64,
1023              (sym::Poseidon8, sym::hash_to_i128)        => sym::_poseidon8_hash_to_i128,
1024              (sym::Poseidon8, sym::hash_to_u8)          => sym::_poseidon8_hash_to_u8,
1025              (sym::Poseidon8, sym::hash_to_u16)         => sym::_poseidon8_hash_to_u16,
1026              (sym::Poseidon8, sym::hash_to_u32)         => sym::_poseidon8_hash_to_u32,
1027              (sym::Poseidon8, sym::hash_to_u64)         => sym::_poseidon8_hash_to_u64,
1028              (sym::Poseidon8, sym::hash_to_u128)        => sym::_poseidon8_hash_to_u128,
1029              (sym::Poseidon8, sym::hash_to_scalar)      => sym::_poseidon8_hash_to_scalar,
1030              (sym::Poseidon8, sym::hash_to_address_raw) => sym::_poseidon8_hash_to_address_raw,
1031              (sym::Poseidon8, sym::hash_to_field_raw)   => sym::_poseidon8_hash_to_field_raw,
1032              (sym::Poseidon8, sym::hash_to_group_raw)   => sym::_poseidon8_hash_to_group_raw,
1033              (sym::Poseidon8, sym::hash_to_i8_raw)      => sym::_poseidon8_hash_to_i8_raw,
1034              (sym::Poseidon8, sym::hash_to_i16_raw)     => sym::_poseidon8_hash_to_i16_raw,
1035              (sym::Poseidon8, sym::hash_to_i32_raw)     => sym::_poseidon8_hash_to_i32_raw,
1036              (sym::Poseidon8, sym::hash_to_i64_raw)     => sym::_poseidon8_hash_to_i64_raw,
1037              (sym::Poseidon8, sym::hash_to_i128_raw)    => sym::_poseidon8_hash_to_i128_raw,
1038              (sym::Poseidon8, sym::hash_to_u8_raw)      => sym::_poseidon8_hash_to_u8_raw,
1039              (sym::Poseidon8, sym::hash_to_u16_raw)     => sym::_poseidon8_hash_to_u16_raw,
1040              (sym::Poseidon8, sym::hash_to_u32_raw)     => sym::_poseidon8_hash_to_u32_raw,
1041              (sym::Poseidon8, sym::hash_to_u64_raw)     => sym::_poseidon8_hash_to_u64_raw,
1042              (sym::Poseidon8, sym::hash_to_u128_raw)    => sym::_poseidon8_hash_to_u128_raw,
1043              (sym::Poseidon8, sym::hash_to_scalar_raw)  => sym::_poseidon8_hash_to_scalar_raw,
1044  
1045              (sym::SHA3_256, sym::hash_to_address)     => sym::_sha3_256_hash_to_address,
1046              (sym::SHA3_256, sym::hash_to_field)       => sym::_sha3_256_hash_to_field,
1047              (sym::SHA3_256, sym::hash_to_group)       => sym::_sha3_256_hash_to_group,
1048              (sym::SHA3_256, sym::hash_to_i8)          => sym::_sha3_256_hash_to_i8,
1049              (sym::SHA3_256, sym::hash_to_i16)         => sym::_sha3_256_hash_to_i16,
1050              (sym::SHA3_256, sym::hash_to_i32)         => sym::_sha3_256_hash_to_i32,
1051              (sym::SHA3_256, sym::hash_to_i64)         => sym::_sha3_256_hash_to_i64,
1052              (sym::SHA3_256, sym::hash_to_i128)        => sym::_sha3_256_hash_to_i128,
1053              (sym::SHA3_256, sym::hash_to_u8)          => sym::_sha3_256_hash_to_u8,
1054              (sym::SHA3_256, sym::hash_to_u16)         => sym::_sha3_256_hash_to_u16,
1055              (sym::SHA3_256, sym::hash_to_u32)         => sym::_sha3_256_hash_to_u32,
1056              (sym::SHA3_256, sym::hash_to_u64)         => sym::_sha3_256_hash_to_u64,
1057              (sym::SHA3_256, sym::hash_to_u128)        => sym::_sha3_256_hash_to_u128,
1058              (sym::SHA3_256, sym::hash_to_scalar)      => sym::_sha3_256_hash_to_scalar,
1059              (sym::SHA3_256, sym::hash_to_address_raw) => sym::_sha3_256_hash_to_address_raw,
1060              (sym::SHA3_256, sym::hash_to_field_raw)   => sym::_sha3_256_hash_to_field_raw,
1061              (sym::SHA3_256, sym::hash_to_group_raw)   => sym::_sha3_256_hash_to_group_raw,
1062              (sym::SHA3_256, sym::hash_to_i8_raw)      => sym::_sha3_256_hash_to_i8_raw,
1063              (sym::SHA3_256, sym::hash_to_i16_raw)     => sym::_sha3_256_hash_to_i16_raw,
1064              (sym::SHA3_256, sym::hash_to_i32_raw)     => sym::_sha3_256_hash_to_i32_raw,
1065              (sym::SHA3_256, sym::hash_to_i64_raw)     => sym::_sha3_256_hash_to_i64_raw,
1066              (sym::SHA3_256, sym::hash_to_i128_raw)    => sym::_sha3_256_hash_to_i128_raw,
1067              (sym::SHA3_256, sym::hash_to_u8_raw)      => sym::_sha3_256_hash_to_u8_raw,
1068              (sym::SHA3_256, sym::hash_to_u16_raw)     => sym::_sha3_256_hash_to_u16_raw,
1069              (sym::SHA3_256, sym::hash_to_u32_raw)     => sym::_sha3_256_hash_to_u32_raw,
1070              (sym::SHA3_256, sym::hash_to_u64_raw)     => sym::_sha3_256_hash_to_u64_raw,
1071              (sym::SHA3_256, sym::hash_to_u128_raw)    => sym::_sha3_256_hash_to_u128_raw,
1072              (sym::SHA3_256, sym::hash_to_scalar_raw)  => sym::_sha3_256_hash_to_scalar_raw,
1073              (sym::SHA3_256, sym::hash_to_bits)         => sym::_sha3_256_hash_to_bits,
1074              (sym::SHA3_256, sym::hash_to_bits_raw)     => sym::_sha3_256_hash_to_bits_raw,
1075  
1076              (sym::SHA3_384, sym::hash_to_address)     => sym::_sha3_384_hash_to_address,
1077              (sym::SHA3_384, sym::hash_to_field)       => sym::_sha3_384_hash_to_field,
1078              (sym::SHA3_384, sym::hash_to_group)       => sym::_sha3_384_hash_to_group,
1079              (sym::SHA3_384, sym::hash_to_i8)          => sym::_sha3_384_hash_to_i8,
1080              (sym::SHA3_384, sym::hash_to_i16)         => sym::_sha3_384_hash_to_i16,
1081              (sym::SHA3_384, sym::hash_to_i32)         => sym::_sha3_384_hash_to_i32,
1082              (sym::SHA3_384, sym::hash_to_i64)         => sym::_sha3_384_hash_to_i64,
1083              (sym::SHA3_384, sym::hash_to_i128)        => sym::_sha3_384_hash_to_i128,
1084              (sym::SHA3_384, sym::hash_to_u8)          => sym::_sha3_384_hash_to_u8,
1085              (sym::SHA3_384, sym::hash_to_u16)         => sym::_sha3_384_hash_to_u16,
1086              (sym::SHA3_384, sym::hash_to_u32)         => sym::_sha3_384_hash_to_u32,
1087              (sym::SHA3_384, sym::hash_to_u64)         => sym::_sha3_384_hash_to_u64,
1088              (sym::SHA3_384, sym::hash_to_u128)        => sym::_sha3_384_hash_to_u128,
1089              (sym::SHA3_384, sym::hash_to_scalar)      => sym::_sha3_384_hash_to_scalar,
1090              (sym::SHA3_384, sym::hash_to_address_raw) => sym::_sha3_384_hash_to_address_raw,
1091              (sym::SHA3_384, sym::hash_to_field_raw)   => sym::_sha3_384_hash_to_field_raw,
1092              (sym::SHA3_384, sym::hash_to_group_raw)   => sym::_sha3_384_hash_to_group_raw,
1093              (sym::SHA3_384, sym::hash_to_i8_raw)      => sym::_sha3_384_hash_to_i8_raw,
1094              (sym::SHA3_384, sym::hash_to_i16_raw)     => sym::_sha3_384_hash_to_i16_raw,
1095              (sym::SHA3_384, sym::hash_to_i32_raw)     => sym::_sha3_384_hash_to_i32_raw,
1096              (sym::SHA3_384, sym::hash_to_i64_raw)     => sym::_sha3_384_hash_to_i64_raw,
1097              (sym::SHA3_384, sym::hash_to_i128_raw)    => sym::_sha3_384_hash_to_i128_raw,
1098              (sym::SHA3_384, sym::hash_to_u8_raw)      => sym::_sha3_384_hash_to_u8_raw,
1099              (sym::SHA3_384, sym::hash_to_u16_raw)     => sym::_sha3_384_hash_to_u16_raw,
1100              (sym::SHA3_384, sym::hash_to_u32_raw)     => sym::_sha3_384_hash_to_u32_raw,
1101              (sym::SHA3_384, sym::hash_to_u64_raw)     => sym::_sha3_384_hash_to_u64_raw,
1102              (sym::SHA3_384, sym::hash_to_u128_raw)    => sym::_sha3_384_hash_to_u128_raw,
1103              (sym::SHA3_384, sym::hash_to_scalar_raw)  => sym::_sha3_384_hash_to_scalar_raw,
1104              (sym::SHA3_384, sym::hash_to_bits)         => sym::_sha3_384_hash_to_bits,
1105              (sym::SHA3_384, sym::hash_to_bits_raw)     => sym::_sha3_384_hash_to_bits_raw,
1106  
1107              (sym::SHA3_512, sym::hash_to_address)     => sym::_sha3_512_hash_to_address,
1108              (sym::SHA3_512, sym::hash_to_field)       => sym::_sha3_512_hash_to_field,
1109              (sym::SHA3_512, sym::hash_to_group)       => sym::_sha3_512_hash_to_group,
1110              (sym::SHA3_512, sym::hash_to_i8)          => sym::_sha3_512_hash_to_i8,
1111              (sym::SHA3_512, sym::hash_to_i16)         => sym::_sha3_512_hash_to_i16,
1112              (sym::SHA3_512, sym::hash_to_i32)         => sym::_sha3_512_hash_to_i32,
1113              (sym::SHA3_512, sym::hash_to_i64)         => sym::_sha3_512_hash_to_i64,
1114              (sym::SHA3_512, sym::hash_to_i128)        => sym::_sha3_512_hash_to_i128,
1115              (sym::SHA3_512, sym::hash_to_u8)          => sym::_sha3_512_hash_to_u8,
1116              (sym::SHA3_512, sym::hash_to_u16)         => sym::_sha3_512_hash_to_u16,
1117              (sym::SHA3_512, sym::hash_to_u32)         => sym::_sha3_512_hash_to_u32,
1118              (sym::SHA3_512, sym::hash_to_u64)         => sym::_sha3_512_hash_to_u64,
1119              (sym::SHA3_512, sym::hash_to_u128)        => sym::_sha3_512_hash_to_u128,
1120              (sym::SHA3_512, sym::hash_to_scalar)      => sym::_sha3_512_hash_to_scalar,
1121              (sym::SHA3_512, sym::hash_to_address_raw) => sym::_sha3_512_hash_to_address_raw,
1122              (sym::SHA3_512, sym::hash_to_field_raw)   => sym::_sha3_512_hash_to_field_raw,
1123              (sym::SHA3_512, sym::hash_to_group_raw)   => sym::_sha3_512_hash_to_group_raw,
1124              (sym::SHA3_512, sym::hash_to_i8_raw)      => sym::_sha3_512_hash_to_i8_raw,
1125              (sym::SHA3_512, sym::hash_to_i16_raw)     => sym::_sha3_512_hash_to_i16_raw,
1126              (sym::SHA3_512, sym::hash_to_i32_raw)     => sym::_sha3_512_hash_to_i32_raw,
1127              (sym::SHA3_512, sym::hash_to_i64_raw)     => sym::_sha3_512_hash_to_i64_raw,
1128              (sym::SHA3_512, sym::hash_to_i128_raw)    => sym::_sha3_512_hash_to_i128_raw,
1129              (sym::SHA3_512, sym::hash_to_u8_raw)      => sym::_sha3_512_hash_to_u8_raw,
1130              (sym::SHA3_512, sym::hash_to_u16_raw)     => sym::_sha3_512_hash_to_u16_raw,
1131              (sym::SHA3_512, sym::hash_to_u32_raw)     => sym::_sha3_512_hash_to_u32_raw,
1132              (sym::SHA3_512, sym::hash_to_u64_raw)     => sym::_sha3_512_hash_to_u64_raw,
1133              (sym::SHA3_512, sym::hash_to_u128_raw)    => sym::_sha3_512_hash_to_u128_raw,
1134              (sym::SHA3_512, sym::hash_to_scalar_raw)  => sym::_sha3_512_hash_to_scalar_raw,
1135              (sym::SHA3_512, sym::hash_to_bits)         => sym::_sha3_512_hash_to_bits,
1136              (sym::SHA3_512, sym::hash_to_bits_raw)     => sym::_sha3_512_hash_to_bits_raw,
1137  
1138              (sym::ECDSA, sym::verify_digest)          => sym::_ecdsa_verify_digest,
1139              (sym::ECDSA, sym::verify_digest_eth)      => sym::_ecdsa_verify_digest_eth,
1140              (sym::ECDSA, sym::verify_keccak256)       => sym::_ecdsa_verify_keccak256,
1141              (sym::ECDSA, sym::verify_keccak256_raw)   => sym::_ecdsa_verify_keccak256_raw,
1142              (sym::ECDSA, sym::verify_keccak256_eth)   => sym::_ecdsa_verify_keccak256_eth,
1143              (sym::ECDSA, sym::verify_keccak384)       => sym::_ecdsa_verify_keccak384,
1144              (sym::ECDSA, sym::verify_keccak384_raw)   => sym::_ecdsa_verify_keccak384_raw,
1145              (sym::ECDSA, sym::verify_keccak384_eth)   => sym::_ecdsa_verify_keccak384_eth,
1146              (sym::ECDSA, sym::verify_keccak512)       => sym::_ecdsa_verify_keccak512,
1147              (sym::ECDSA, sym::verify_keccak512_raw)   => sym::_ecdsa_verify_keccak512_raw,
1148              (sym::ECDSA, sym::verify_keccak512_eth)   => sym::_ecdsa_verify_keccak512_eth,
1149              (sym::ECDSA, sym::verify_sha3_256)        => sym::_ecdsa_verify_sha3_256,
1150              (sym::ECDSA, sym::verify_sha3_256_raw)    => sym::_ecdsa_verify_sha3_256_raw,
1151              (sym::ECDSA, sym::verify_sha3_256_eth)    => sym::_ecdsa_verify_sha3_256_eth,
1152              (sym::ECDSA, sym::verify_sha3_384)        => sym::_ecdsa_verify_sha3_384,
1153              (sym::ECDSA, sym::verify_sha3_384_raw)    => sym::_ecdsa_verify_sha3_384_raw,
1154              (sym::ECDSA, sym::verify_sha3_384_eth)    => sym::_ecdsa_verify_sha3_384_eth,
1155              (sym::ECDSA, sym::verify_sha3_512)        => sym::_ecdsa_verify_sha3_512,
1156              (sym::ECDSA, sym::verify_sha3_512_raw)    => sym::_ecdsa_verify_sha3_512_raw,
1157              (sym::ECDSA, sym::verify_sha3_512_eth)    => sym::_ecdsa_verify_sha3_512_eth,
1158  
1159  
1160              (sym::Mapping, sym::get_or_use) => sym::_mapping_get_or_use,
1161              (sym::Mapping, sym::remove) => sym::_mapping_remove,
1162              (sym::Mapping, sym::contains) => sym::_mapping_contains,
1163              (sym::Mapping, sym::get) => sym::_mapping_get,
1164              (sym::Mapping, sym::set) => sym::_mapping_set,
1165  
1166              (sym::Optional, sym::unwrap) => sym::_optional_unwrap,
1167              (sym::Optional, sym::unwrap_or) => sym::_optional_unwrap_or,
1168  
1169              (sym::Vector, sym::push) => sym::_vector_push,
1170              (sym::Vector, sym::len) => sym::_vector_len,
1171              (sym::Vector, sym::clear) => sym::_vector_clear,
1172              (sym::Vector, sym::pop) => sym::_vector_pop,
1173              (sym::Vector, sym::swap_remove) => sym::_vector_swap_remove,
1174              (sym::Vector, sym::get) => sym::_mapping_get,
1175              (sym::Vector, sym::set) => sym::_mapping_set,
1176  
1177              (sym::group, sym::to_x_coordinate) => sym::_group_to_x_coordinate,
1178              (sym::group, sym::to_y_coordinate) => sym::_group_to_y_coordinate,
1179  
1180              (sym::ProgramCore, sym::checksum) => sym::_program_checksum,
1181              (sym::ProgramCore, sym::edition) => sym::_program_edition,
1182              (sym::ProgramCore, sym::program_owner) => sym::_program_owner,
1183  
1184              (sym::signature, sym::verify) => sym::_signature_verify,
1185              (sym::Future, sym::Await) => sym::_future_await,
1186  
1187              (sym::Serialize, sym::to_bits) => sym::_serialize_to_bits,
1188              (sym::Serialize, sym::to_bits_raw) => sym::_serialize_to_bits_raw,
1189  
1190              (sym::CheatCode, sym::print_mapping) => sym::_cheat_code_print_mapping,
1191              (sym::CheatCode, sym::set_block_height) => sym::_cheat_code_set_block_height,
1192              (sym::CheatCode, sym::set_block_timestamp) => sym::_cheat_code_set_block_timestamp,
1193              (sym::CheatCode, sym::set_signer) => sym::_cheat_code_set_signer,
1194              _ => return None,
1195          })
1196      }
1197  
1198      /// Returns the number of arguments required by the instruction.
1199      pub fn num_args(&self) -> usize {
1200          match self {
1201              Self::ChaChaRand(_) => 0,
1202              Self::GroupGen => 0,
1203              Self::SelfAddress => 0,
1204              Self::SelfCaller => 0,
1205              Self::SelfChecksum => 0,
1206              Self::SelfEdition => 0,
1207              Self::SelfId => 0,
1208              Self::SelfProgramOwner => 0,
1209              Self::SelfSigner => 0,
1210              Self::BlockHeight => 0,
1211              Self::BlockTimestamp => 0,
1212              Self::NetworkId => 0,
1213  
1214              Self::Commit(_, _) => 2,
1215              Self::Hash(_, _) => 1,
1216              Self::ECDSAVerify(_) => 3,
1217  
1218              Self::MappingGet => 2,
1219              Self::MappingSet => 3,
1220              Self::MappingGetOrUse => 3,
1221              Self::MappingRemove => 2,
1222              Self::MappingContains => 2,
1223  
1224              Self::OptionalUnwrap => 1,
1225              Self::OptionalUnwrapOr => 2,
1226  
1227              Self::VectorGet => 2,
1228              Self::VectorSet => 3,
1229              Self::VectorPush => 2,
1230              Self::VectorLen => 1,
1231              Self::VectorClear => 1,
1232              Self::VectorPop => 1,
1233              Self::VectorSwapRemove => 2,
1234  
1235              Self::GroupToXCoordinate => 1,
1236              Self::GroupToYCoordinate => 1,
1237  
1238              Self::SignatureVerify => 3,
1239              Self::FutureAwait => 1,
1240  
1241              Self::ProgramChecksum => 1,
1242              Self::ProgramEdition => 1,
1243              Self::ProgramOwner => 1,
1244  
1245              Self::Serialize(_) => 1,
1246              Self::Deserialize(_, _) => 1,
1247  
1248              Self::CheatCodePrintMapping => 1,
1249              Self::CheatCodeSetBlockHeight => 1,
1250              Self::CheatCodeSetBlockTimestamp => 1,
1251              Self::CheatCodeSetSigner => 1,
1252          }
1253      }
1254  
1255      /// Returns whether or not this function is finalize command.
1256      pub fn is_finalize_command(&self) -> bool {
1257          match self {
1258              Intrinsic::FutureAwait
1259              | Intrinsic::ChaChaRand(_)
1260              | Intrinsic::ECDSAVerify(_)
1261              | Intrinsic::MappingGet
1262              | Intrinsic::MappingSet
1263              | Intrinsic::MappingGetOrUse
1264              | Intrinsic::VectorGet
1265              | Intrinsic::VectorSet
1266              | Intrinsic::MappingRemove
1267              | Intrinsic::MappingContains
1268              | Intrinsic::ProgramChecksum
1269              | Intrinsic::ProgramEdition
1270              | Intrinsic::ProgramOwner
1271              | Intrinsic::VectorPush
1272              | Intrinsic::VectorLen
1273              | Intrinsic::VectorClear
1274              | Intrinsic::VectorPop
1275              | Intrinsic::VectorSwapRemove => true,
1276              Intrinsic::Commit(_, _)
1277              | Intrinsic::Hash(_, _)
1278              | Intrinsic::OptionalUnwrap
1279              | Intrinsic::OptionalUnwrapOr
1280              | Intrinsic::GroupToXCoordinate
1281              | Intrinsic::GroupToYCoordinate
1282              | Intrinsic::GroupGen
1283              | Intrinsic::SelfAddress
1284              | Intrinsic::SelfCaller
1285              | Intrinsic::SelfChecksum
1286              | Intrinsic::SelfEdition
1287              | Intrinsic::SelfId
1288              | Intrinsic::SelfProgramOwner
1289              | Intrinsic::SelfSigner
1290              | Intrinsic::BlockHeight
1291              | Intrinsic::BlockTimestamp
1292              | Intrinsic::NetworkId
1293              | Intrinsic::SignatureVerify
1294              | Intrinsic::Serialize(_)
1295              | Intrinsic::Deserialize(_, _)
1296              | Intrinsic::CheatCodePrintMapping
1297              | Intrinsic::CheatCodeSetBlockHeight
1298              | Intrinsic::CheatCodeSetBlockTimestamp
1299              | Intrinsic::CheatCodeSetSigner => false,
1300          }
1301      }
1302  
1303      /// Returns whether or not this function has side effects
1304      pub fn is_pure(&self) -> bool {
1305          match self {
1306              Intrinsic::FutureAwait
1307              | Intrinsic::VectorSet
1308              | Intrinsic::VectorPush
1309              | Intrinsic::VectorClear
1310              | Intrinsic::CheatCodePrintMapping
1311              | Intrinsic::CheatCodeSetBlockHeight
1312              | Intrinsic::CheatCodeSetBlockTimestamp
1313              | Intrinsic::CheatCodeSetSigner
1314              | Intrinsic::VectorPop
1315              // Pedersen64 and Pedersen128 operations can fail for large inputs.
1316              | Intrinsic::Hash(
1317                  HashVariant::HashPED64
1318                  | HashVariant::HashPED64Raw
1319                  | HashVariant::HashPED128
1320                  | HashVariant::HashPED128Raw,
1321                  _,
1322              )
1323              // Mapping operations have side effects
1324              | Intrinsic::MappingRemove
1325              | Intrinsic::MappingGet
1326              | Intrinsic::MappingSet
1327              | Intrinsic::MappingGetOrUse
1328              | Intrinsic::MappingContains
1329              | Intrinsic::VectorSwapRemove => false,
1330  
1331              Intrinsic::ChaChaRand(_)
1332              | Intrinsic::ECDSAVerify(_)
1333              | Intrinsic::ProgramChecksum
1334              | Intrinsic::ProgramEdition
1335              | Intrinsic::ProgramOwner
1336              | Intrinsic::VectorLen
1337              | Intrinsic::VectorGet
1338              | Intrinsic::Commit(_, _)
1339              | Intrinsic::Hash(_, _)
1340              | Intrinsic::OptionalUnwrap
1341              | Intrinsic::OptionalUnwrapOr
1342              | Intrinsic::GroupToXCoordinate
1343              | Intrinsic::GroupToYCoordinate
1344              | Intrinsic::GroupGen
1345              | Intrinsic::SelfAddress
1346              | Intrinsic::SelfCaller
1347              | Intrinsic::SelfChecksum
1348              | Intrinsic::SelfEdition
1349              | Intrinsic::SelfId
1350              | Intrinsic::SelfProgramOwner
1351              | Intrinsic::SelfSigner
1352              | Intrinsic::BlockHeight
1353              | Intrinsic::BlockTimestamp
1354              | Intrinsic::NetworkId
1355              | Intrinsic::SignatureVerify
1356              | Intrinsic::Serialize(_)
1357              | Intrinsic::Deserialize(_, _) => true,
1358          }
1359      }
1360  }